Select Git revision
License.txt
This project is licensed under the GNU General Public License v3.0 or later.
Learn more
layers.js 2.48 KiB
import { createSelector } from 'reselect';
import MiradorCanvas from '../../lib/MiradorCanvas';
import { getCanvas, getVisibleCanvasIds } from './canvases';
import { miradorSlice } from './utils';
/**
* Get the image layers from a canvas.
* @param {object} state
* @param {object} props
* @param {string} props.canvasId
* @param {string} props.windowId
* @param {string} props.companionWindowId
* @returns {Array}
*/
export const getCanvasLayers = createSelector(
[
getCanvas,
],
(canvas) => {
if (!canvas) return [];
const miradorCanvas = new MiradorCanvas(canvas);
return miradorCanvas.imageResources;
},
);
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
* @param {string} windowId
* @returns {object}
*/
export const getLayers = createSelector(
[
getLayersForWindow,
(state, { canvasId }) => canvasId,
],
(layers, canvasId) => layers[canvasId],
);
/**
* Returns a list of canvas layers, sorted by the layer state configuration.
* @param {object} state
* @param {object} props
* @param {string} props.companionWindowId
* @returns {Array}
*/
export const getSortedLayers = createSelector(
[
getCanvasLayers,
getLayers,
],
(canvasLayers, layerConfig) => {
if (!layerConfig) return canvasLayers;
const sorted = canvasLayers.sort((a, b) => {
if (layerConfig[a.id] && layerConfig[a.id].index !== undefined
&& layerConfig[b.id] && layerConfig[b.id].index !== undefined) {
return layerConfig[a.id].index - layerConfig[b.id].index;
}