Skip to content
Snippets Groups Projects
Select Git revision
  • a864d2dd43b188c27ddec3ff270eded7d3ae003d
  • main default
  • 35-cgu
  • 34-peertube-support
  • 27-add-autoplay-to-iframe
  • 33-bug-on-youtube-embed-urls
  • RC-Rekall-v1.1-fix_lpo
  • tuleap-140-go-back-to-my-capsules-page-when-i-m-on-capsule-preview-page
  • RC-Rekall-v1.2-fix10
  • RC-Rekall-v1.2-fix9
  • RC-Rekall-v1.2-fix8
  • RC-Rekall-v1.2-fix7
  • RC-Rekall-v1.2-fix6
  • RC-Rekall-v1.2-fix5
  • RC-Rekall-v1.2-fix4
  • RC-Rekall-v1.2-fix3
  • RC-Rekall-v1.2-fix2
  • RC-Rekall-v1.2-fix1
  • RC-Rekall-v1.1-fix-3
  • RC-Rekall-v1.1-fix-2
  • RC-Rekall-v1.1-fix-1
  • RC-Rekall-v1.1-delivered
  • preprod20220209-1535
23 results

symfony.lock

Blame
  • 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;
          }
    
          // sort a layer with index data above layers without
          if (layerConfig[a.id] && layerConfig[a.id].index !== undefined) return -1;
          if (layerConfig[b.id] && layerConfig[b.id].index !== undefined) return 1;
    
          return 0;
        });
    
        return sorted;
      },
    );
    
    /**
     * Get all the layer configuration for visible canvases.
     * @param {object} state
     * @param {object} props
     * @param {string} props.windowId
     * @returns {object}
     */
    export const getLayersForVisibleCanvases = createSelector(
      [
        getVisibleCanvasIds,
        getLayersForWindow,
      ],
      (canvasIds, layers) => (
        canvasIds.reduce((acc, canvasId) => {
          acc[canvasId] = layers[canvasId];
          return acc;
        }, {})
      ),
    );