UNPKG

mirador

Version:

An open-source, web-based 'multi-up' viewer that supports zoom-pan-rotate functionality, ability to display/compare simple images, and images with annotations.

50 lines (42 loc) 1.51 kB
import omit from 'lodash/omit'; import set from 'lodash/fp/set'; import update from 'lodash/fp/update'; import ActionTypes from '../actions/action-types'; /** */ export function companionWindowsReducer(state = {}, action) { switch (action.type) { case ActionTypes.ADD_COMPANION_WINDOW: return set([action.id], action.payload, state); case ActionTypes.ADD_WINDOW: return { ...state, ...(action.companionWindows || []).reduce((newState, cw) => { // eslint-disable-next-line no-param-reassign newState[cw.id] = { ...state[cw.id], ...cw, windowId: action.id, }; return newState; }, {}), }; case ActionTypes.REMOVE_WINDOW: return Object.keys(state).reduce((object, key) => { if (state[key].windowId !== action.windowId) { // eslint-disable-next-line no-param-reassign object[key] = state[key]; } return object; }, {}); case ActionTypes.UPDATE_COMPANION_WINDOW: return update([action.id], (orig) => ({ ...(orig || {}), ...action.payload }), state); case ActionTypes.REMOVE_COMPANION_WINDOW: return omit(state, action.id); case ActionTypes.IMPORT_MIRADOR_STATE: return action.state.companionWindows || []; case ActionTypes.TOGGLE_TOC_NODE: return update([action.id, 'tocNodes'], (orig) => ({ ...(orig || {}), ...action.payload }), state); default: return state; } }