Skip to content
Snippets Groups Projects
Select Git revision
  • c4ecffff224d7264449e3f9fa48d7678ef05b601
  • master default protected
2 results

License.txt

Blame
  • 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;
          }