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 038094829dc..e4e3ae080e3 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 b220d49b037..57bfe39ca70 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 2647fef6c39..19c6b1dde3a 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())