From ba04c82ebcd66bdfd4763e8f05986c3aa229b312 Mon Sep 17 00:00:00 2001 From: Chris Beer <chris@cbeer.info> Date: Thu, 14 Dec 2023 12:47:42 -0800 Subject: [PATCH] Get rid of a function as an input to a selector --- src/state/selectors/layers.js | 21 +++++++++++++++------ src/state/selectors/viewer.js | 4 +--- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/state/selectors/layers.js b/src/state/selectors/layers.js index 6a1ebd489..f2850e83c 100644 --- a/src/state/selectors/layers.js +++ b/src/state/selectors/layers.js @@ -23,6 +23,16 @@ export const getCanvasLayers = createSelector( }, ); +const EMPTY_ARRAY = Object.freeze([]); + +export const getLayersForWindow = createSelector( + [ + state => miradorSlice(state).layers, + (state, { windowId }) => windowId, + ], + (layers, windowId) => (layers ? (layers[windowId] || EMPTY_ARRAY) : EMPTY_ARRAY), +); + /** * Get the layer state for a particular canvas. * @param {object} state @@ -31,11 +41,10 @@ export const getCanvasLayers = createSelector( */ export const getLayers = createSelector( [ - state => miradorSlice(state).layers || {}, - (state, { windowId }) => windowId, + getLayersForWindow, (state, { canvasId }) => canvasId, ], - (layers, windowId, canvasId) => (layers[windowId] || {})[canvasId], + (layers, canvasId) => layers[canvasId], ); /** @@ -80,11 +89,11 @@ export const getSortedLayers = createSelector( export const getLayersForVisibleCanvases = createSelector( [ getVisibleCanvasIds, - (state, { windowId }) => (canvasId => getLayers(state, { canvasId, windowId })), + getLayersForWindow, ], - (canvasIds, getLayersForCanvas) => ( + (canvasIds, layers) => ( canvasIds.reduce((acc, canvasId) => { - acc[canvasId] = getLayersForCanvas(canvasId); + acc[canvasId] = layers[canvasId]; return acc; }, {}) ), diff --git a/src/state/selectors/viewer.js b/src/state/selectors/viewer.js index 860da3a28..2c5735720 100644 --- a/src/state/selectors/viewer.js +++ b/src/state/selectors/viewer.js @@ -12,8 +12,6 @@ import { getSequenceViewingDirection } from './sequences'; * @return {object} */ export const getCurrentCanvasWorld = createSelector( - getVisibleCanvases, - getLayersForVisibleCanvases, - getSequenceViewingDirection, + [getVisibleCanvases, getLayersForVisibleCanvases, getSequenceViewingDirection], (canvases, layers, viewingDirection) => new CanvasWorld(canvases, layers, viewingDirection), ); -- GitLab