Select Git revision
windows.js 6.19 KiB
import update from 'lodash/fp/update';
import omit from 'lodash/omit';
import ActionTypes from '../actions/action-types';
/**
* windowsReducer
*/
export const windowsReducer = (state = {}, action) => {
switch (action.type) {
case ActionTypes.ADD_WINDOW:
return { ...state, [action.window.id]: action.window };
case ActionTypes.MAXIMIZE_WINDOW:
return {
...state,
[action.windowId]: {
...state[action.windowId],
maximized: true,
},
};
case ActionTypes.MINIMIZE_WINDOW:
return {
...state,
[action.windowId]: {
...state[action.windowId],
maximized: false,
},
};
case ActionTypes.UPDATE_WINDOW:
return update([action.id], orig => ({ ...(orig || {}), ...action.payload }), state);
case ActionTypes.REMOVE_WINDOW:
return omit(state, [action.windowId]);
case ActionTypes.TOGGLE_WINDOW_SIDE_BAR:
return {
...state,
[action.windowId]: {
...state[action.windowId],
sideBarOpen: !state[action.windowId].sideBarOpen,
},
};
case ActionTypes.SET_WINDOW_VIEW_TYPE:
return {
...state,
[action.windowId]: {
...state[action.windowId],
view: action.viewType,
},
};
case ActionTypes.UPDATE_WINDOW_POSITION:
return {
...state,
[action.payload.windowId]: {
...state[action.payload.windowId],
x: action.payload.position.x,
y: action.payload.position.y,
},
};
case ActionTypes.SET_WINDOW_SIZE:
return {
...state,
[action.payload.windowId]: {
...state[action.payload.windowId],
height: action.payload.size.height,
width: action.payload.size.width,
x: action.payload.size.x,
y: action.payload.size.y,
},
};
case ActionTypes.SET_CANVAS:
if (!state[action.windowId]) return state;
return update([action.windowId], orig => (
{
...(orig || {}),
canvasId: action.canvasId,
visibleCanvases: action.visibleCanvases || [],
}), state);
case ActionTypes.ADD_COMPANION_WINDOW:
return {
...state,
[action.windowId]: {
...state[action.windowId],
companionWindowIds: state[action.windowId].companionWindowIds.concat([action.id]),
...(action.payload.position === 'left'
? { companionAreaOpen: true, sideBarPanel: action.payload.content }
: {}),
},
};
case ActionTypes.UPDATE_COMPANION_WINDOW:
if (action.payload.position !== 'left') return state;
return {
...state,
[action.windowId]: {
...state[action.windowId],
companionAreaOpen: true,
},
};
case ActionTypes.REMOVE_COMPANION_WINDOW:
return {
...state,
[action.windowId]: {
...state[action.windowId],
companionWindowIds: state[action.windowId]
.companionWindowIds.filter(id => id !== action.id),
},
};
case ActionTypes.SELECT_ANNOTATION:
return {
...state,
[action.windowId]: {
...state[action.windowId],
selectedAnnotationId: action.annotationId,
},
};
case ActionTypes.DESELECT_ANNOTATION: {
return {
...state,
[action.windowId]: {
...state[action.windowId],
selectedAnnotationId: undefined,
},
};
}
case ActionTypes.HOVER_ANNOTATION:
return {
...state,
[action.windowId]: {
...state[action.windowId],
hoveredAnnotationIds: action.annotationIds,
},
};
case ActionTypes.TOGGLE_ANNOTATION_DISPLAY:
return {
...state,
[action.windowId]: {
...state[action.windowId],
highlightAllAnnotations: !state[action.windowId].highlightAllAnnotations,
},
};
case ActionTypes.TOGGLE_ANNOTATION_AUTOSCROLL:
return {
...state,
[action.windowId]: {
...state[action.windowId],
autoScrollAnnotationList: !state[action.windowId].autoScrollAnnotationList,
},
};
case ActionTypes.IMPORT_MIRADOR_STATE:
return action.state.windows || [];
case ActionTypes.REQUEST_SEARCH:
return {
...state,
[action.windowId]: {
...state[action.windowId],
suggestedSearches: undefined,
},
};
case ActionTypes.SHOW_COLLECTION_DIALOG:
return {
...state,
[action.windowId]: {
...state[action.windowId],
collectionDialogOn: true,
collectionManifestId: action.manifestId,
collectionPath: action.collectionPath,
},
};
case ActionTypes.HIDE_COLLECTION_DIALOG:
return {
...state,
[action.windowId]: {
...state[action.windowId],
collectionDialogOn: false,
},
};
case ActionTypes.SET_CURRENT_TIME:
return {
...state,
[action.windowId]: {
...state[action.windowId],
currentTime: action.currentTime,
},
};
case ActionTypes.SET_SEEK_TO_TIME:
return {
...state,
[action.windowId]: {
...state[action.windowId],
seekToTime: action.seekToTime,
},
};
case ActionTypes.SET_VIDEO_PAUSED:
return {
...state,
[action.windowId]: {
...state[action.windowId],
paused: !!action.paused,
},
};
case ActionTypes.SET_VIDEO_MUTED:
return {
...state,
[action.windowId]: {
...state[action.windowId],
muted: !!action.muted,
},
};
case ActionTypes.SET_VIDEO_TEXTTRACK_DISABLED:
return {
...state,
[action.windowId]: {
...state[action.windowId],
textTrackDisabled: !!action.textTrackDisabled,
},
};
case ActionTypes.SET_VIDEO_HAS_TEXTTRACK:
return {
...state,
[action.windowId]: {
...state[action.windowId],
hasTextTrack: !!action.hasTextTrack,
},
};
default:
return state;
}
};