Skip to content
Snippets Groups Projects
Select Git revision
  • d80412f4f50cb358880891134e8d386c0f29e852
  • mui5-annotation-on-video-stable default
  • get_setter_canvasSizeInformations
  • fix-error-div-into-p
  • annotation-on-video-v2
  • detached
  • annotation-on-video-r17
  • mui5
  • mui5-react-18
  • jacob-test
  • annotation-on-video protected
  • master
  • test-antoinev1
  • 20-fetch-thumbnail-on-annotation
  • add-research-field
  • Save
  • add-plugin
  • 14-wip-no-seek-to
  • 14-bug-on-video-time-control
  • 9_wip_videotests
  • _upgrade_material_ui
  • latest-tetras-16
  • v3.3.0
  • v3.2.0
  • v3.1.1
  • v3.1.0
  • v3.0.0
  • v3.0.0-rc.7
  • v3.0.0-rc.6
  • v3.0.0-rc.5
  • v3.0.0-rc.4
  • v3.0.0-rc.3
  • v3.0.0-rc.2
  • v3.0.0-rc.1
  • v3.0.0-beta.10
  • v3.0.0-beta.9
  • v3.0.0-beta.8
  • v3.0.0-beta.7
  • v3.0.0-beta.6
  • v3.0.0-beta.5
  • v3.0.0-beta.3
41 results

Window.js

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;
        }, {})
      ),
    );