import * as actions from 'mirador/dist/es/src/state/actions'; import { getCompanionWindow } from 'mirador/dist/es/src/state/selectors/companionWindows'; import { getWindowCurrentTime, getWindowPausedStatus } from 'mirador/dist/es/src/state/selectors/window'; import { getVisibleCanvases } from 'mirador/dist/es/src/state/selectors/canvases'; import AnnotationCreation from '../AnnotationCreation'; /** */ const mapDispatchToProps = (dispatch, { id, windowId }) => ({ closeCompanionWindow: () => dispatch( actions.removeCompanionWindow(windowId, id), ), receiveAnnotation: (targetId, annoId, annotation) => dispatch( actions.receiveAnnotation(targetId, annoId, annotation), ), setCurrentTime: (...args) => dispatch(actions.setWindowCurrentTime(windowId, ...args)), setSeekTo: (...args) => dispatch(actions.setWindowSeekTo(windowId, ...args)), }); /** */ function mapStateToProps(state, { id: companionWindowId, windowId }) { const currentTime = getWindowCurrentTime(state, { windowId }); const cw = getCompanionWindow(state, { companionWindowId, windowId }); const { annotationid } = cw; const canvases = getVisibleCanvases(state, { windowId }); let annotation = null; canvases.forEach((canvas) => { const annotationsOnCanvas = state.annotations[canvas.id]; Object.values(annotationsOnCanvas || {}).forEach((value, i) => { if (value.json && value.json.items) { const maybeAnnot = value.json.items.find((anno) => anno.id === annotationid); if (maybeAnnot !== undefined) annotation = maybeAnnot; } }); }); return { annotation, canvases, config: state.config, currentTime, paused: getWindowPausedStatus(state, { windowId }), }; } export default { companionWindowKey: 'annotationCreation', component: AnnotationCreation, mapDispatchToProps, mapStateToProps, };