diff --git a/src/state/selectors/layers.js b/src/state/selectors/layers.js index 6a1ebd48975ab3c77b8e6fa4b85eb184e627fc08..f2850e83c57ab237409b56382d1f07bc85c0bf21 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 860da3a28accc69021fafbb85ec9444ef1cc35a8..2c573572065966ed8f0ecf5be29646f6f549b93d 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), );