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.

172 lines (166 loc) 7.51 kB
import { createSelector } from 'reselect'; import { PropertyValue } from 'manifesto.js'; import flatten from 'lodash/flatten'; import AnnotationList from '../../lib/AnnotationList'; import { getCanvas, getCanvases } from './canvases'; import { getWindow } from './getters'; import { getManifestLocale } from './manifests'; import { miradorSlice } from './utils'; /** Get searches from state */ var getSearches = function getSearches(state) { return miradorSlice(state).searches; }; export var getSearchForWindow = createSelector([function (state, _ref) { var windowId = _ref.windowId; return windowId; }, getSearches], function (windowId, searches) { if (!windowId || !searches) return {}; return searches[windowId]; }); var getSearchForCompanionWindow = createSelector([getSearchForWindow, function (state, _ref2) { var companionWindowId = _ref2.companionWindowId; return companionWindowId; }], function (results, companionWindowId) { if (!results || !companionWindowId) return undefined; return results[companionWindowId]; }); var getSearchResponsesForCompanionWindow = createSelector([getSearchForCompanionWindow], function (results) { if (!results) return []; return Object.values(results.data); }); export var getSearchQuery = createSelector([getSearchForCompanionWindow], function (results) { return results && results.query; }); export var getSearchIsFetching = createSelector([getSearchResponsesForCompanionWindow], function (results) { return results.some(function (result) { return result.isFetching; }); }); export var getSearchNumTotal = createSelector([getSearchForCompanionWindow], function (results) { var _resultWithWithin$jso, _resultWithWithin$jso2; if (!results || !results.data) return undefined; var resultWithWithin = Object.values(results.data).find(function (result) { return !result.isFetching && result.json && result.json.within; }); return resultWithWithin === null || resultWithWithin === void 0 ? void 0 : (_resultWithWithin$jso = resultWithWithin.json) === null || _resultWithWithin$jso === void 0 ? void 0 : (_resultWithWithin$jso2 = _resultWithWithin$jso.within) === null || _resultWithWithin$jso2 === void 0 ? void 0 : _resultWithWithin$jso2.total; }); export var getNextSearchId = createSelector([getSearchForCompanionWindow], function (results) { if (!results || !results.data) return undefined; var resultWithAnUnresolvedNext = Object.values(results.data).find(function (result) { return !result.isFetching && result.json && result.json.next && !results.data[result.json.next]; }); return resultWithAnUnresolvedNext && resultWithAnUnresolvedNext.json && resultWithAnUnresolvedNext.json.next; }); var getSearchHitsForCompanionWindow = createSelector([getSearchResponsesForCompanionWindow], function (results) { return flatten(results.map(function (result) { if (!result || !result.json || result.isFetching || !result.json.hits) return []; return result.json.hits; })); }); export var getSortedSearchHitsForCompanionWindow = createSelector([getSearchHitsForCompanionWindow, getCanvases, function (state, _ref3) { var companionWindowId = _ref3.companionWindowId, windowId = _ref3.windowId; return function (annotationUri) { return getResourceAnnotationForSearchHit(state, { annotationUri: annotationUri, companionWindowId: companionWindowId, windowId: windowId }); }; }], function (searchHits, canvases, annotationForSearchHit) { if (!canvases || canvases.length === 0) return []; if (!searchHits || searchHits.length === 0) return []; var canvasIds = canvases.map(function (canvas) { return canvas.id; }); return [].concat(searchHits).sort(function (a, b) { var hitA = annotationForSearchHit(a.annotations[0]); var hitB = annotationForSearchHit(b.annotations[0]); return canvasIds.indexOf(hitA.targetId) - canvasIds.indexOf(hitB.targetId); }); }); /** convert search results to an annotation */ var searchResultsToAnnotation = function searchResultsToAnnotation(results) { var annotations = results.map(function (result) { if (!result || !result.json || result.isFetching || !result.json.resources) return undefined; var anno = new AnnotationList(result.json); return { id: anno.id, resources: anno.resources }; }).filter(Boolean); return { id: (annotations.find(function (a) { return a.id; }) || {}).id, resources: flatten(annotations.map(function (a) { return a.resources; })) }; }; export var getSearchAnnotationsForCompanionWindow = createSelector([getSearchResponsesForCompanionWindow], function (results) { return results && searchResultsToAnnotation(results); }); /** */ export function sortSearchAnnotationsByCanvasOrder(searchAnnotations, canvases) { if (!searchAnnotations || !searchAnnotations.resources || searchAnnotations.length === 0) return []; if (!canvases || canvases.length === 0) return []; var canvasIds = canvases.map(function (canvas) { return canvas.id; }); return [].concat(searchAnnotations.resources).sort(function (annoA, annoB) { return canvasIds.indexOf(annoA.targetId) - canvasIds.indexOf(annoB.targetId); }); } export var getSortedSearchAnnotationsForCompanionWindow = createSelector([getSearchAnnotationsForCompanionWindow, getCanvases], function (searchAnnotations, canvases) { return sortSearchAnnotationsByCanvasOrder(searchAnnotations, canvases); }); export var getSearchAnnotationsForWindow = createSelector([getSearchForWindow], function (results) { if (!results) return []; var data = Object.values(results).map(function (r) { return Object.values(r.data); }); return data.map(function (d) { return searchResultsToAnnotation(d); }).filter(function (a) { return a.resources.length > 0; }); }); export var getSelectedContentSearchAnnotationIds = createSelector([getWindow, getSearchForCompanionWindow], function (window, search) { return search && search.selectedContentSearchAnnotationIds || []; }); export var getResourceAnnotationForSearchHit = createSelector([getSearchAnnotationsForCompanionWindow, function (state, _ref4) { var annotationUri = _ref4.annotationUri; return annotationUri; }], function (annotation, annotationUri) { return annotation.resources.find(function (r) { return r.id === annotationUri; }); }); export var getResourceAnnotationLabel = createSelector([getResourceAnnotationForSearchHit, getManifestLocale], function (resourceAnnotation, locale) { if (!(resourceAnnotation && resourceAnnotation.resource && resourceAnnotation.resource.label)) return []; return PropertyValue.parse(resourceAnnotation.resource.label, locale).getValues(); }); var getAnnotationById = createSelector([getSearchAnnotationsForWindow, function (state, _ref5) { var annotationId = _ref5.annotationId; return annotationId; }], function (annotations, annotationId) { var resourceAnnotations = flatten(annotations.map(function (a) { return a.resources; })); return resourceAnnotations.find(function (r) { return r.id === annotationId; }); }); export var getCanvasForAnnotation = createSelector([getAnnotationById, function (state, _ref6) { var windowId = _ref6.windowId; return function (canvasId) { return getCanvas(state, { canvasId: canvasId, windowId: windowId }); }; }], function (annotation, getCanvasById) { var canvasId = annotation && annotation.targetId; return canvasId && getCanvasById(canvasId); });