Skip to content
Snippets Groups Projects
Select Git revision
  • a38f0a1d29b050f8bee08575936cbf0e74208956
  • 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

composer.lock

Blame
  • companionWindows.js 5.09 KiB
    import { createSelector } from 'reselect';
    import groupBy from 'lodash/groupBy';
    import { miradorSlice } from './utils';
    import { getWindow, getWindows } from './getters';
    
    /**
     * Returns companion windows.
     * @param {object} state
     * @returns {object}
     */
    export function getCompanionWindows(state) {
      return miradorSlice(state).companionWindows || {};
    }
    
    /**
     * Returns the companion window.
     * @param {object} state
     * @param {object} props
     * @param {string} props.companionWindowId
     * @returns {object|undefined}
     */
    export const getCompanionWindow = createSelector(
      [
        getCompanionWindows,
        (state, { companionWindowId }) => companionWindowId,
      ],
      (companionWindows, companionWindowId) => companionWindowId && companionWindows[companionWindowId],
    );
    
    /**
     * Return position of thumbnail navigation in a certain window.
     * @param {object} state
     * @param {object} props
     * @param {string} props.windowId
     * @returns {string|undefined}
     */
    export const getThumbnailNavigationPosition = createSelector(
      [
        getWindow,
        getCompanionWindows,
      ],
      (window, companionWindows) => window
        && companionWindows[window.thumbnailNavigationId]
        && companionWindows[window.thumbnailNavigationId].position,
    );
    
    /**
     * Return companion window ids from a window.
     * @param {string} windowId
     * @returns {Array}
     */
    const getCompanionWindowIndexByWindowAndPosition = createSelector(
      [getWindows, getCompanionWindows],
      (windows, companionWindows) => (
        (Object.keys(windows) || []).reduce((obj, id) => (
          {
            ...obj,
            [id]: groupBy(
              windows[id].companionWindowIds,
              cwid => companionWindows[cwid] && companionWindows[cwid].position,
            ),
          }), {})
      ),
    );
    
    /**
     * Return companion window ids from a window.
     * @param {string} windowId
     * @returns {Array}
     */
    const getCompanionWindowsByWindowAndPosition = createSelector(
      [getWindows, getCompanionWindows],
      (windows, companionWindows) => (
        (Object.keys(windows) || []).reduce((obj, id) => ({
          ...obj,
          [id]: groupBy(
            windows[id].companionWindowIds.map(cwid => companionWindows[cwid]),
            cw => cw.position,
          ),
        }), {})
      ),
    );
    
    /**
     * Return companion windows of a window.
     * @param {object} state
     * @param {string} windowId
     * @returns {Array}
     */
    const getCompanionWindowsOfWindow = createSelector(
      [(state, { windowId }) => windowId, getCompanionWindowsByWindowAndPosition],
      (windowId, companionWindows) => companionWindows[windowId] || {},
    );
    
    /**
     * Return companion windows ids of a window.
     * @param {object} state
     * @param {string} windowId
     * @returns {Array}
     */
    const getCompanionWindowIdsOfWindow = createSelector(
      [(state, { windowId }) => windowId, getCompanionWindowIndexByWindowAndPosition],
      (windowId, companionWindowIds) => companionWindowIds[windowId] || {},
    );
    
    /**
     * Return the companion window string from state in a given windowId and position.
     * @param {object} state
     * @param {string} windowId
     * @param {string} position
     * @returns {string}
     */
    export const getCompanionWindowsForPosition = createSelector(
      [
        getCompanionWindowsOfWindow,
        (state, { position }) => (position),
      ],
      (companionWindows, position) => companionWindows[position] || EMPTY_ARRAY,
    );
    
    /**
     * Return the companion window string from state in a given windowId and content type.
     * @param {object} state
     * @param {string} windowId
     * @param {string} position
     * @returns {string}
     */
    export const getCompanionWindowsForContent = createSelector(
      [
        getCompanionWindowsOfWindow,
        (state, { content }) => (content),
      ],
      (companionWindows, content) => (
        [].concat(...Object.values(companionWindows)).filter(w => w.content === content)
      ),
    );
    
    const EMPTY_ARRAY = [];
    
    /**
     * Returns companion window ids for position.
     * @param {object} state
     * @param {object} props
     * @param {string} props.windowId
     * @param {string} props.position
     * @returns {Array}
     */
    export const getCompanionWindowIdsForPosition = createSelector(
      [
        getCompanionWindowIdsOfWindow,
        (state, { position }) => (position),
      ],
      (companionWindowIds, position) => companionWindowIds[position] || EMPTY_ARRAY,
    );
    
    /**
     * Returns the visibility of the companion area.
     * @param {object} state
     * @param {string} position
     * @returns {boolean}
     */
    export const getCompanionAreaVisibility = createSelector(
      [
        (state, { position }) => position,
        getWindow,
      ],
      (position, window) => {
        if (!window) return false;
        const { companionAreaOpen, sideBarOpen } = window;
        if (position !== 'left') return true;
        return !!(companionAreaOpen && sideBarOpen);
      },
    );
    
    /**
     * Returns the dimensions.
     * @param {object} state
     * @param {string} companionWindowId
     * @returns {object} containing height and width
     */
    export const selectCompanionWindowDimensions = createSelector(
      [getCompanionWindowsOfWindow],
      (companionWindows) => {
        let width = 0;
        let height = 0;
        [].concat(...Object.values(companionWindows)).forEach((cw) => {
          if (cw.position.match(/right/)) {
            width += 235;
          }
    
          if (cw.position.match(/bottom/)) {
            height += 201;
          }
        });
    
        return { height, width };
      },
    );