From a6c27457e50a1a20d68754ababa9c16720830f7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Gorej?= Date: Fri, 16 Jun 2023 13:37:10 +0200 Subject: [PATCH] feat(spec): add new specJS selector (#8936) This selector always returns the same JavaScript object unless it really changes. Before this change it customary to call specJson().toJS() which always resulted in transformation operation and new JavaScript object. Refs #8606 --- src/core/plugins/err/error-transformers/hook.js | 2 +- src/core/plugins/spec/actions.js | 2 +- src/core/plugins/spec/selectors.js | 5 +++++ 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/core/plugins/err/error-transformers/hook.js b/src/core/plugins/err/error-transformers/hook.js index 03809482..e4e3ae08 100644 --- a/src/core/plugins/err/error-transformers/hook.js +++ b/src/core/plugins/err/error-transformers/hook.js @@ -9,7 +9,7 @@ const errorTransformers = [ export default function transformErrors (errors) { // Dev note: unimplemented artifact where - // jsSpec: system.specSelectors.specJson().toJS() + // jsSpec: system.specSelectors.specJS() // regardless, to be compliant with redux@4, instead of calling the store method here, // jsSpec should be pass down as an argument, let inputs = { diff --git a/src/core/plugins/spec/actions.js b/src/core/plugins/spec/actions.js index b220d49b..57bfe39c 100644 --- a/src/core/plugins/spec/actions.js +++ b/src/core/plugins/spec/actions.js @@ -238,7 +238,7 @@ const debResolveSubtrees = debounce(async () => { } }, Promise.resolve({ resultMap: (specSelectors.specResolvedSubtree([]) || Map()).toJS(), - specWithCurrentSubtrees: specSelectors.specJson().toJS() + specWithCurrentSubtrees: specSelectors.specJS() })) delete requestBatch.system diff --git a/src/core/plugins/spec/selectors.js b/src/core/plugins/spec/selectors.js index 2647fef6..19c6b1dd 100644 --- a/src/core/plugins/spec/selectors.js +++ b/src/core/plugins/spec/selectors.js @@ -38,6 +38,11 @@ export const specJson = createSelector( spec => spec.get("json", Map()) ) +export const specJS = createSelector( + specJson, + (spec) => spec.toJS() +) + export const specResolved = createSelector( state, spec => spec.get("resolved", Map())