dbf-mirador 4.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +203 -0
- package/README.md +133 -0
- package/dist/CommentSharp-B0J_-jEq.js +325 -0
- package/dist/CommentSharp-B0J_-jEq.js.map +1 -0
- package/dist/FailedImageContext-aQXnWSHN.js +318 -0
- package/dist/FailedImageContext-aQXnWSHN.js.map +1 -0
- package/dist/PluginHook-CFw_6P5c.js +54 -0
- package/dist/PluginHook-CFw_6P5c.js.map +1 -0
- package/dist/WindowCanvasNavigationControls-CUX723BQ.js +242 -0
- package/dist/WindowCanvasNavigationControls-CUX723BQ.js.map +1 -0
- package/dist/action-types-DjIbTE-A.js +74 -0
- package/dist/action-types-DjIbTE-A.js.map +1 -0
- package/dist/canvas-C8oHvXFN.js +41 -0
- package/dist/canvas-C8oHvXFN.js.map +1 -0
- package/dist/canvases-gRqhr-IH.js +3154 -0
- package/dist/canvases-gRqhr-IH.js.map +1 -0
- package/dist/createSvgIcon-Cwt8YPfm.js +2 -0
- package/dist/getters-COus7Mvg.js +2066 -0
- package/dist/getters-COus7Mvg.js.map +1 -0
- package/dist/index.module-CbBRf_R8.js +403 -0
- package/dist/index.module-CbBRf_R8.js.map +1 -0
- package/dist/mirador.es.js +39600 -0
- package/dist/mirador.es.js.map +1 -0
- package/dist/mirador.min.js +334 -0
- package/dist/mirador.min.js.map +1 -0
- package/dist/react-error-boundary.esm-B_pT-oCS.js +67 -0
- package/dist/react-error-boundary.esm-B_pT-oCS.js.map +1 -0
- package/dist/visuallyHidden-DmYvwNdU.js +98 -0
- package/dist/visuallyHidden-DmYvwNdU.js.map +1 -0
- package/dist/window-zelwU7wz.js +138 -0
- package/dist/window-zelwU7wz.js.map +1 -0
- package/package.json +138 -0
- package/src/components/AccessTokenSender.jsx +34 -0
- package/src/components/AnnotationSettings.jsx +31 -0
- package/src/components/AnnotationsOverlay.jsx +328 -0
- package/src/components/App.jsx +34 -0
- package/src/components/AppProviders.jsx +129 -0
- package/src/components/AttributionPanel.jsx +78 -0
- package/src/components/AudioViewer.jsx +39 -0
- package/src/components/BackgroundPluginArea.jsx +9 -0
- package/src/components/Branding.jsx +33 -0
- package/src/components/CanvasAnnotations.jsx +125 -0
- package/src/components/CanvasInfo.jsx +46 -0
- package/src/components/CanvasLayers.jsx +367 -0
- package/src/components/ChangeThemeDialog.jsx +65 -0
- package/src/components/CollapsibleSection.jsx +53 -0
- package/src/components/CollectionDialog.jsx +236 -0
- package/src/components/CollectionInfo.jsx +48 -0
- package/src/components/CompanionArea.jsx +140 -0
- package/src/components/CompanionWindow.jsx +228 -0
- package/src/components/CompanionWindowFactory.jsx +38 -0
- package/src/components/CompanionWindowSection.jsx +11 -0
- package/src/components/CustomPanel.jsx +22 -0
- package/src/components/ErrorContent.jsx +65 -0
- package/src/components/ErrorDialog.jsx +47 -0
- package/src/components/FullScreenButton.jsx +47 -0
- package/src/components/GalleryView.jsx +36 -0
- package/src/components/GalleryViewThumbnail.jsx +160 -0
- package/src/components/IIIFAuthentication.jsx +144 -0
- package/src/components/IIIFDropTarget.jsx +168 -0
- package/src/components/IIIFIFrameCommunication.jsx +45 -0
- package/src/components/IIIFResourceLabel.jsx +26 -0
- package/src/components/IIIFThumbnail.jsx +214 -0
- package/src/components/ImageFailureMessage.jsx +42 -0
- package/src/components/LabelValueMetadata.jsx +46 -0
- package/src/components/LanguageSettings.jsx +46 -0
- package/src/components/LayersPanel.jsx +24 -0
- package/src/components/LocalePicker.jsx +56 -0
- package/src/components/ManifestForm.jsx +79 -0
- package/src/components/ManifestInfo.jsx +67 -0
- package/src/components/ManifestListItem.jsx +209 -0
- package/src/components/ManifestListItemError.jsx +53 -0
- package/src/components/ManifestRelatedLinks.jsx +154 -0
- package/src/components/MinimalWindow.jsx +104 -0
- package/src/components/MiradorMenuButton.jsx +71 -0
- package/src/components/MosaicRenderPreview.jsx +16 -0
- package/src/components/NestedMenu.jsx +42 -0
- package/src/components/NewBrowserWindow.jsx +34 -0
- package/src/components/OpenSeadragonComponent.jsx +258 -0
- package/src/components/OpenSeadragonTileSource.jsx +105 -0
- package/src/components/OpenSeadragonViewer.jsx +161 -0
- package/src/components/PluginHook.jsx +27 -0
- package/src/components/PrimaryWindow.jsx +115 -0
- package/src/components/SanitizedHtml.jsx +37 -0
- package/src/components/ScrollIndicatedDialogContent.jsx +60 -0
- package/src/components/ScrollTo.jsx +61 -0
- package/src/components/SearchHit.jsx +220 -0
- package/src/components/SearchPanel.jsx +80 -0
- package/src/components/SearchPanelControls.jsx +174 -0
- package/src/components/SearchPanelNavigation.jsx +84 -0
- package/src/components/SearchResults.jsx +138 -0
- package/src/components/SelectCollection.jsx +44 -0
- package/src/components/SidebarIndexItem.jsx +11 -0
- package/src/components/SidebarIndexList.jsx +73 -0
- package/src/components/SidebarIndexTableOfContents.jsx +170 -0
- package/src/components/SidebarIndexThumbnail.jsx +22 -0
- package/src/components/TextViewer.jsx +37 -0
- package/src/components/ThumbnailCanvasGrouping.jsx +122 -0
- package/src/components/ThumbnailNavigation.jsx +231 -0
- package/src/components/VideoViewer.jsx +35 -0
- package/src/components/ViewerInfo.jsx +55 -0
- package/src/components/ViewerNavigation.jsx +72 -0
- package/src/components/Window.jsx +150 -0
- package/src/components/WindowAuthenticationBar.jsx +176 -0
- package/src/components/WindowCanvasNavigationControls.jsx +91 -0
- package/src/components/WindowList.jsx +71 -0
- package/src/components/WindowListButton.jsx +57 -0
- package/src/components/WindowSideBar.jsx +48 -0
- package/src/components/WindowSideBarAnnotationsPanel.jsx +51 -0
- package/src/components/WindowSideBarButtons.jsx +151 -0
- package/src/components/WindowSideBarCanvasPanel.jsx +165 -0
- package/src/components/WindowSideBarCollectionPanel.jsx +179 -0
- package/src/components/WindowSideBarInfoPanel.jsx +67 -0
- package/src/components/WindowThumbnailSettings.jsx +130 -0
- package/src/components/WindowTopBar.jsx +125 -0
- package/src/components/WindowTopBarPluginArea.jsx +8 -0
- package/src/components/WindowTopBarPluginMenu.jsx +78 -0
- package/src/components/WindowTopBarTitle.jsx +73 -0
- package/src/components/WindowTopMenu.jsx +81 -0
- package/src/components/WindowTopMenuButton.jsx +49 -0
- package/src/components/WindowViewSettings.jsx +95 -0
- package/src/components/WindowViewer.jsx +26 -0
- package/src/components/Workspace.jsx +124 -0
- package/src/components/WorkspaceAdd.jsx +221 -0
- package/src/components/WorkspaceAddButton.jsx +73 -0
- package/src/components/WorkspaceArea.jsx +66 -0
- package/src/components/WorkspaceControlPanel.jsx +85 -0
- package/src/components/WorkspaceControlPanelButtons.jsx +20 -0
- package/src/components/WorkspaceDialog.jsx +11 -0
- package/src/components/WorkspaceElastic.jsx +88 -0
- package/src/components/WorkspaceElasticWindow.jsx +79 -0
- package/src/components/WorkspaceExport.jsx +99 -0
- package/src/components/WorkspaceImport.jsx +89 -0
- package/src/components/WorkspaceMenu.jsx +126 -0
- package/src/components/WorkspaceMenuButton.jsx +42 -0
- package/src/components/WorkspaceMosaic.jsx +149 -0
- package/src/components/WorkspaceOptionsButton.jsx +35 -0
- package/src/components/WorkspaceOptionsMenu.jsx +112 -0
- package/src/components/WorkspaceSelectionDialog.jsx +165 -0
- package/src/components/ZoomControls.jsx +57 -0
- package/src/components/icons/BookViewIcon.jsx +14 -0
- package/src/components/icons/CanvasIndexIcon.jsx +14 -0
- package/src/components/icons/GalleryViewIcon.jsx +17 -0
- package/src/components/icons/MiradorIcon.jsx +14 -0
- package/src/components/icons/RestoreZoomIcon.jsx +15 -0
- package/src/components/icons/ThumbnailNavigationBottomIcon.jsx +15 -0
- package/src/components/icons/ThumbnailNavigationRightIcon.jsx +16 -0
- package/src/components/icons/WindowMaxIcon.jsx +15 -0
- package/src/components/icons/WindowMinIcon.jsx +15 -0
- package/src/components/icons/WindowOptionsIcon.jsx +16 -0
- package/src/components/icons/WorkspaceTypeElasticIcon.jsx +157 -0
- package/src/components/icons/WorkspaceTypeMosaicIcon.jsx +162 -0
- package/src/components/icons/index.js +27 -0
- package/src/components/index.js +108 -0
- package/src/config/css-ns.js +10 -0
- package/src/config/index.js +2 -0
- package/src/config/settings.js +607 -0
- package/src/containers/AnnotationSettings.js +27 -0
- package/src/containers/AnnotationsOverlay.js +51 -0
- package/src/containers/AppProviders.js +20 -0
- package/src/containers/AttributionPanel.js +20 -0
- package/src/containers/AudioViewer.js +16 -0
- package/src/containers/BackgroundPluginArea.js +4 -0
- package/src/containers/Branding.js +4 -0
- package/src/containers/CanvasAnnotations.js +32 -0
- package/src/containers/CanvasInfo.js +20 -0
- package/src/containers/CanvasLayers.js +25 -0
- package/src/containers/ChangeThemeDialog.js +29 -0
- package/src/containers/CollapsibleSection.js +3 -0
- package/src/containers/CollectionDialog.js +48 -0
- package/src/containers/CollectionInfo.js +29 -0
- package/src/containers/CompanionArea.js +22 -0
- package/src/containers/CompanionWindow.js +40 -0
- package/src/containers/CompanionWindowFactory.js +23 -0
- package/src/containers/CustomPanel.js +13 -0
- package/src/containers/ErrorContent.js +20 -0
- package/src/containers/ErrorDialog.js +28 -0
- package/src/containers/FullScreenButton.js +22 -0
- package/src/containers/GalleryView.js +23 -0
- package/src/containers/GalleryViewThumbnail.js +51 -0
- package/src/containers/IIIFAuthentication.js +86 -0
- package/src/containers/IIIFThumbnail.js +17 -0
- package/src/containers/LabelValueMetadata.js +14 -0
- package/src/containers/LanguageSettings.js +26 -0
- package/src/containers/LayersPanel.js +16 -0
- package/src/containers/LocalePicker.js +3 -0
- package/src/containers/ManifestForm.js +16 -0
- package/src/containers/ManifestInfo.js +29 -0
- package/src/containers/ManifestListItem.js +52 -0
- package/src/containers/ManifestListItemError.js +15 -0
- package/src/containers/ManifestRelatedLinks.js +28 -0
- package/src/containers/MinimalWindow.js +25 -0
- package/src/containers/MiradorMenuButton.js +7 -0
- package/src/containers/MosaicRenderPreview.js +14 -0
- package/src/containers/OpenSeadragonViewer.js +59 -0
- package/src/containers/PrimaryWindow.js +27 -0
- package/src/containers/SanitizedHtml.js +3 -0
- package/src/containers/ScrollIndicatedDialogContent.js +3 -0
- package/src/containers/SearchHit.js +71 -0
- package/src/containers/SearchPanel.js +23 -0
- package/src/containers/SearchPanelControls.js +36 -0
- package/src/containers/SearchPanelNavigation.js +39 -0
- package/src/containers/SearchResults.js +38 -0
- package/src/containers/SelectCollection.js +24 -0
- package/src/containers/SidebarIndexItem.js +8 -0
- package/src/containers/SidebarIndexList.js +28 -0
- package/src/containers/SidebarIndexTableOfContents.js +31 -0
- package/src/containers/SidebarIndexThumbnail.js +18 -0
- package/src/containers/TextViewer.js +19 -0
- package/src/containers/ThumbnailCanvasGrouping.js +29 -0
- package/src/containers/ThumbnailNavigation.js +48 -0
- package/src/containers/VideoViewer.js +16 -0
- package/src/containers/ViewerInfo.js +30 -0
- package/src/containers/ViewerNavigation.js +31 -0
- package/src/containers/Window.js +45 -0
- package/src/containers/WindowAuthenticationBar.js +7 -0
- package/src/containers/WindowCanvasNavigationControls.js +15 -0
- package/src/containers/WindowList.js +30 -0
- package/src/containers/WindowListButton.js +15 -0
- package/src/containers/WindowSideBar.js +20 -0
- package/src/containers/WindowSideBarAnnotationsPanel.js +23 -0
- package/src/containers/WindowSideBarButtons.js +75 -0
- package/src/containers/WindowSideBarCanvasPanel.js +50 -0
- package/src/containers/WindowSideBarCollectionPanel.js +48 -0
- package/src/containers/WindowSideBarInfoPanel.js +35 -0
- package/src/containers/WindowThumbnailSettings.js +31 -0
- package/src/containers/WindowTopBar.js +39 -0
- package/src/containers/WindowTopBarPluginArea.js +8 -0
- package/src/containers/WindowTopBarPluginMenu.js +7 -0
- package/src/containers/WindowTopBarTitle.js +17 -0
- package/src/containers/WindowTopMenu.js +28 -0
- package/src/containers/WindowTopMenuButton.js +7 -0
- package/src/containers/WindowViewSettings.js +30 -0
- package/src/containers/WindowViewer.js +10 -0
- package/src/containers/Workspace.js +36 -0
- package/src/containers/WorkspaceAdd.js +27 -0
- package/src/containers/WorkspaceAddButton.js +30 -0
- package/src/containers/WorkspaceArea.js +21 -0
- package/src/containers/WorkspaceControlPanel.js +10 -0
- package/src/containers/WorkspaceControlPanelButtons.js +7 -0
- package/src/containers/WorkspaceElastic.js +41 -0
- package/src/containers/WorkspaceElasticWindow.js +36 -0
- package/src/containers/WorkspaceExport.js +18 -0
- package/src/containers/WorkspaceImport.js +19 -0
- package/src/containers/WorkspaceMenu.js +30 -0
- package/src/containers/WorkspaceMenuButton.js +10 -0
- package/src/containers/WorkspaceMosaic.js +32 -0
- package/src/containers/WorkspaceOptionsButton.js +7 -0
- package/src/containers/WorkspaceOptionsMenu.js +3 -0
- package/src/containers/WorkspaceSelectionDialog.js +26 -0
- package/src/containers/ZoomControls.js +26 -0
- package/src/containers/index.js +94 -0
- package/src/contexts/FailedImageContext.js +8 -0
- package/src/contexts/FailedImageProvider.jsx +34 -0
- package/src/contexts/FullScreenContext.js +5 -0
- package/src/contexts/LocaleContext.js +5 -0
- package/src/contexts/OpenSeadragonViewerContext.js +5 -0
- package/src/contexts/WorkspaceContext.js +5 -0
- package/src/contexts/index.js +4 -0
- package/src/extend/PluginContext.js +5 -0
- package/src/extend/PluginProvider.jsx +22 -0
- package/src/extend/index.js +9 -0
- package/src/extend/pluginMapping.js +44 -0
- package/src/extend/pluginPreprocessing.js +45 -0
- package/src/extend/pluginValidation.js +58 -0
- package/src/extend/usePlugins.js +13 -0
- package/src/extend/withPlugins.jsx +46 -0
- package/src/hooks/index.js +4 -0
- package/src/hooks/useCanvasWorldService.js +10 -0
- package/src/hooks/useThumbnailService.js +8 -0
- package/src/i18n.js +71 -0
- package/src/index.js +18 -0
- package/src/init.js +20 -0
- package/src/lib/AnnotationFactory.js +23 -0
- package/src/lib/AnnotationItem.js +123 -0
- package/src/lib/AnnotationList.js +31 -0
- package/src/lib/AnnotationPage.js +41 -0
- package/src/lib/AnnotationResource.js +122 -0
- package/src/lib/CanvasAnnotationDisplay.js +148 -0
- package/src/lib/CanvasGroupings.js +55 -0
- package/src/lib/CanvasWorld.js +214 -0
- package/src/lib/CompanionWindowRegistry.js +23 -0
- package/src/lib/FullScreenHandle.jsx +76 -0
- package/src/lib/MiradorCanvas.js +211 -0
- package/src/lib/MiradorManifest.js +44 -0
- package/src/lib/MiradorViewer.jsx +53 -0
- package/src/lib/MosaicLayout.js +77 -0
- package/src/lib/OpenSeadragonCanvasOverlay.js +114 -0
- package/src/lib/ThumbnailFactory.js +310 -0
- package/src/lib/TruncatedHit.js +34 -0
- package/src/lib/asArray.js +11 -0
- package/src/lib/htmlRules.js +28 -0
- package/src/lib/iiif.js +12 -0
- package/src/lib/index.js +23 -0
- package/src/lib/readImageMetadata.js +21 -0
- package/src/lib/svgShapesToPath.js +49 -0
- package/src/locales/README.md +60 -0
- package/src/locales/ar/translation.json +141 -0
- package/src/locales/bg/translation.json +164 -0
- package/src/locales/de/translation.json +169 -0
- package/src/locales/en/translation.json +170 -0
- package/src/locales/et/translation.json +164 -0
- package/src/locales/fa/translation.json +164 -0
- package/src/locales/fr/translation.json +158 -0
- package/src/locales/hr/translation.json +164 -0
- package/src/locales/hu/translation.json +166 -0
- package/src/locales/it/translation.json +162 -0
- package/src/locales/ja/translation.json +156 -0
- package/src/locales/kr/translation.json +162 -0
- package/src/locales/lt/translation.json +153 -0
- package/src/locales/nbNo/translation.json +162 -0
- package/src/locales/nl/translation.json +139 -0
- package/src/locales/pl/translation.json +162 -0
- package/src/locales/ptBr/translation.json +133 -0
- package/src/locales/sr/translation.json +155 -0
- package/src/locales/sv/translation.json +157 -0
- package/src/locales/ta/translation.json +167 -0
- package/src/locales/vi/translation.json +156 -0
- package/src/locales/zhCn/translation.json +163 -0
- package/src/locales/zhTw/translation.json +163 -0
- package/src/plugins/OSDReferences.js +15 -0
- package/src/plugins/index.js +1 -0
- package/src/state/actions/action-types.js +76 -0
- package/src/state/actions/annotation.js +123 -0
- package/src/state/actions/auth.js +109 -0
- package/src/state/actions/canvas.js +65 -0
- package/src/state/actions/catalog.js +22 -0
- package/src/state/actions/companionWindow.js +107 -0
- package/src/state/actions/config.js +49 -0
- package/src/state/actions/elasticLayout.js +10 -0
- package/src/state/actions/errors.js +22 -0
- package/src/state/actions/index.js +19 -0
- package/src/state/actions/infoResponse.js +90 -0
- package/src/state/actions/layers.js +14 -0
- package/src/state/actions/manifest.js +65 -0
- package/src/state/actions/search.js +97 -0
- package/src/state/actions/window.js +209 -0
- package/src/state/actions/workspace.js +84 -0
- package/src/state/createPluggableStore.js +24 -0
- package/src/state/createStore.js +33 -0
- package/src/state/index.js +21 -0
- package/src/state/reducers/accessTokens.js +59 -0
- package/src/state/reducers/annotations.js +48 -0
- package/src/state/reducers/auth.js +43 -0
- package/src/state/reducers/catalog.js +30 -0
- package/src/state/reducers/companionWindows.js +49 -0
- package/src/state/reducers/config.js +39 -0
- package/src/state/reducers/elasticLayout.js +29 -0
- package/src/state/reducers/errors.js +51 -0
- package/src/state/reducers/index.js +15 -0
- package/src/state/reducers/infoResponses.js +61 -0
- package/src/state/reducers/layers.js +23 -0
- package/src/state/reducers/manifests.js +52 -0
- package/src/state/reducers/rootReducer.js +44 -0
- package/src/state/reducers/search.js +145 -0
- package/src/state/reducers/utils.js +45 -0
- package/src/state/reducers/viewers.js +42 -0
- package/src/state/reducers/windows.js +185 -0
- package/src/state/reducers/workspace.js +111 -0
- package/src/state/sagas/annotations.js +48 -0
- package/src/state/sagas/app.js +56 -0
- package/src/state/sagas/auth.js +151 -0
- package/src/state/sagas/iiif.js +233 -0
- package/src/state/sagas/index.js +30 -0
- package/src/state/sagas/windows.js +293 -0
- package/src/state/selectors/annotations.js +138 -0
- package/src/state/selectors/auth.js +100 -0
- package/src/state/selectors/canvases.js +260 -0
- package/src/state/selectors/companionWindows.js +182 -0
- package/src/state/selectors/config.js +100 -0
- package/src/state/selectors/getters.js +90 -0
- package/src/state/selectors/index.js +17 -0
- package/src/state/selectors/layers.js +79 -0
- package/src/state/selectors/manifests.js +433 -0
- package/src/state/selectors/ranges.js +147 -0
- package/src/state/selectors/searches.js +249 -0
- package/src/state/selectors/sequences.js +134 -0
- package/src/state/selectors/thumbnails.js +28 -0
- package/src/state/selectors/utils.js +18 -0
- package/src/state/selectors/viewer.js +19 -0
- package/src/state/selectors/windows.js +98 -0
- package/src/state/selectors/workspace.js +52 -0
- package/src/state/selectors/wrappers.js +15 -0
- package/src/styles/react-mosaic-component.js +288 -0
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { createSelector } from 'reselect';
|
|
2
|
+
import { Utils } from 'manifesto.js';
|
|
3
|
+
import { miradorSlice, EMPTY_ARRAY, EMPTY_OBJECT } from './utils';
|
|
4
|
+
import { getConfig } from './config';
|
|
5
|
+
import { getVisibleCanvases, selectInfoResponses } from './canvases';
|
|
6
|
+
import { getMiradorCanvasWrapper } from './wrappers';
|
|
7
|
+
import { getIiifResourceImageService } from '../../lib/iiif';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Returns the authentification profile from the configuration
|
|
11
|
+
* @param {object} state
|
|
12
|
+
* @returns {Array}
|
|
13
|
+
*/
|
|
14
|
+
export const getAuthProfiles = createSelector([getConfig], ({ auth: { serviceProfiles = [] } = {} }) => serviceProfiles);
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Returns access tokens from the state
|
|
18
|
+
* @param {object} state
|
|
19
|
+
* @returns {object}
|
|
20
|
+
*/
|
|
21
|
+
export const getAccessTokens = (state) => miradorSlice(state).accessTokens || EMPTY_OBJECT;
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Return the authentification data from the state
|
|
25
|
+
* @param {object} state
|
|
26
|
+
* @returns {object}
|
|
27
|
+
*/
|
|
28
|
+
export const getAuth = (state) => miradorSlice(state).auth || EMPTY_OBJECT;
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Returns current authentification services based on state and windowId
|
|
32
|
+
* @param {object} state
|
|
33
|
+
* @param {string} windowId
|
|
34
|
+
* @returns {Array}
|
|
35
|
+
*/
|
|
36
|
+
export const selectCurrentAuthServices = createSelector(
|
|
37
|
+
[
|
|
38
|
+
getVisibleCanvases,
|
|
39
|
+
selectInfoResponses,
|
|
40
|
+
getAuthProfiles,
|
|
41
|
+
getAuth,
|
|
42
|
+
getMiradorCanvasWrapper,
|
|
43
|
+
(state, { iiifResources }) => iiifResources,
|
|
44
|
+
],
|
|
45
|
+
// eslint-disable-next-line max-params
|
|
46
|
+
(canvases, infoResponses = {}, serviceProfiles, auth, getMiradorCanvas, iiifResources) => {
|
|
47
|
+
let currentAuthResources = iiifResources;
|
|
48
|
+
|
|
49
|
+
if (!currentAuthResources && canvases) {
|
|
50
|
+
currentAuthResources = canvases.flatMap((c) => {
|
|
51
|
+
const miradorCanvas = getMiradorCanvas(c);
|
|
52
|
+
const images = miradorCanvas.iiifImageResources;
|
|
53
|
+
|
|
54
|
+
return images.map((i) => {
|
|
55
|
+
const iiifImageService = getIiifResourceImageService(i);
|
|
56
|
+
|
|
57
|
+
const infoResponse = infoResponses[iiifImageService.id];
|
|
58
|
+
if (infoResponse && infoResponse.json) {
|
|
59
|
+
return { ...infoResponse.json, options: {} };
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
return iiifImageService;
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
if (!currentAuthResources) return EMPTY_ARRAY;
|
|
68
|
+
if (currentAuthResources.length === 0) return EMPTY_ARRAY;
|
|
69
|
+
|
|
70
|
+
const currentAuthServices = currentAuthResources.map((resource) => {
|
|
71
|
+
let lastAttemptedService;
|
|
72
|
+
const services = Utils.getServices(resource);
|
|
73
|
+
|
|
74
|
+
for (const authProfile of serviceProfiles) {
|
|
75
|
+
const profiledAuthServices = services.filter((p) => authProfile.profile === p.getProfile());
|
|
76
|
+
|
|
77
|
+
for (const service of profiledAuthServices) {
|
|
78
|
+
lastAttemptedService = service;
|
|
79
|
+
|
|
80
|
+
if (!auth[service.id] || auth[service.id].isFetching || auth[service.id].ok) {
|
|
81
|
+
return service;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
return lastAttemptedService;
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
return Object.values(
|
|
90
|
+
currentAuthServices.reduce((h, service) => {
|
|
91
|
+
if (service && !h[service.id]) {
|
|
92
|
+
// eslint-disable-next-line no-param-reassign
|
|
93
|
+
h[service.id] = service;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
return h;
|
|
97
|
+
}, {}),
|
|
98
|
+
);
|
|
99
|
+
},
|
|
100
|
+
);
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
import { createSelector } from 'reselect';
|
|
2
|
+
import CanvasGroupings from '../../lib/CanvasGroupings';
|
|
3
|
+
import { getIiifResourceImageService } from '../../lib/iiif';
|
|
4
|
+
import { getMiradorCanvasWrapper } from './wrappers';
|
|
5
|
+
import { miradorSlice, EMPTY_ARRAY } from './utils';
|
|
6
|
+
import { getWindow } from './getters';
|
|
7
|
+
import { getSequence } from './sequences';
|
|
8
|
+
import { getWindowViewType } from './windows';
|
|
9
|
+
import { getManifestLocale, getDestructuredMetadata } from './manifests';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Returns the info response.
|
|
13
|
+
* @param {object} state
|
|
14
|
+
* @returns {object}
|
|
15
|
+
*/
|
|
16
|
+
export const selectInfoResponses = (state) => miradorSlice(state).infoResponses;
|
|
17
|
+
|
|
18
|
+
export const getCanvases = createSelector([getSequence], (sequence) => (sequence && sequence.getCanvases()) || EMPTY_ARRAY);
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Return the canvas selected by an id
|
|
22
|
+
* @param {object} state
|
|
23
|
+
* @param {object} props
|
|
24
|
+
* @param {string} props.canvasId
|
|
25
|
+
* @returns {object}
|
|
26
|
+
*/
|
|
27
|
+
export const getCanvas = createSelector([getSequence, (state, { canvasId }) => canvasId], (sequence, canvasId) => {
|
|
28
|
+
if (!sequence || !canvasId) return undefined;
|
|
29
|
+
|
|
30
|
+
return sequence.getCanvasById(canvasId);
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Returns the current canvas.
|
|
35
|
+
* @param {object} state
|
|
36
|
+
* @param {object} props
|
|
37
|
+
* @param {string} props.windowId
|
|
38
|
+
* @returns {object|undefined}
|
|
39
|
+
*/
|
|
40
|
+
export const getCurrentCanvas = createSelector([getSequence, getWindow], (sequence, window) => {
|
|
41
|
+
if (!sequence || !window) return undefined;
|
|
42
|
+
|
|
43
|
+
if (!window.canvasId) return sequence.getCanvasByIndex(0);
|
|
44
|
+
|
|
45
|
+
return sequence.getCanvasById(window.canvasId);
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Returns the visible canvas ids.
|
|
50
|
+
* @param {object} state
|
|
51
|
+
* @param {object} props
|
|
52
|
+
* @param {string} props.windowId
|
|
53
|
+
* @returns {Array}
|
|
54
|
+
*/
|
|
55
|
+
export const getVisibleCanvasIds = createSelector(
|
|
56
|
+
[getWindow],
|
|
57
|
+
(window) => (window && (window.visibleCanvases || (window.canvasId && [window.canvasId]))) || EMPTY_ARRAY,
|
|
58
|
+
);
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Returns the visible canvses.
|
|
62
|
+
* @param {object} state
|
|
63
|
+
* @param {object} props
|
|
64
|
+
* @param {string} props.windowId
|
|
65
|
+
* @returns {Array}
|
|
66
|
+
*/
|
|
67
|
+
export const getVisibleCanvases = createSelector([getVisibleCanvasIds, getCanvases], (canvasIds, canvases) =>
|
|
68
|
+
(canvases || []).filter((c) => canvasIds.includes(c.id)),
|
|
69
|
+
);
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Return the current canvases grouped by how they'll appear in the viewer.
|
|
73
|
+
* For book view returns groups of 2, for single returns 1.
|
|
74
|
+
* @param {object} state
|
|
75
|
+
* @param {object} props
|
|
76
|
+
* @param {string} props.manifestId
|
|
77
|
+
* @param {string} props.windowId
|
|
78
|
+
* @returns {Array}
|
|
79
|
+
*/
|
|
80
|
+
export const getCanvasGroupings = createSelector(
|
|
81
|
+
[getCanvases, getWindowViewType],
|
|
82
|
+
(canvases, view) => canvases && new CanvasGroupings(canvases, view).groupings(),
|
|
83
|
+
);
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Return the current canvases selected in a window.
|
|
87
|
+
* For book view returns 2, for single returns 1.
|
|
88
|
+
* @param {object} state
|
|
89
|
+
* @param {object} props
|
|
90
|
+
* @param {string} props.manifestId
|
|
91
|
+
* @param {string} props.windowId
|
|
92
|
+
* @param {string} props.canvasId
|
|
93
|
+
* @returns {Array}
|
|
94
|
+
*/
|
|
95
|
+
export const getCanvasGrouping = createSelector(
|
|
96
|
+
[getCanvasGroupings, (state, { canvasId }) => canvasId],
|
|
97
|
+
(groupings, canvasId) => (groupings && groupings.find((group) => group.some((c) => c.id === canvasId))) || EMPTY_ARRAY,
|
|
98
|
+
);
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Return the next canvas(es) for a window.
|
|
102
|
+
* For book view returns 2, for single returns 1.
|
|
103
|
+
* @param {object} state
|
|
104
|
+
* @param {object} props
|
|
105
|
+
* @param {string} props.manifestId
|
|
106
|
+
* @param {string} props.windowId
|
|
107
|
+
* @returns {Array}
|
|
108
|
+
*/
|
|
109
|
+
export const getNextCanvasGrouping = createSelector([getCanvasGroupings, getCurrentCanvas], (groupings, canvas, view) => {
|
|
110
|
+
if (!groupings || !canvas) return undefined;
|
|
111
|
+
const currentGroupIndex = groupings.findIndex((group) => group.some((c) => c.id === canvas.id));
|
|
112
|
+
|
|
113
|
+
if (currentGroupIndex < 0 || currentGroupIndex + 1 >= groupings.length) return undefined;
|
|
114
|
+
const newGroup = groupings[currentGroupIndex + 1];
|
|
115
|
+
|
|
116
|
+
return newGroup;
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Return the previous canvas(es) for a window.
|
|
121
|
+
* For book view returns 2, for single returns 1.
|
|
122
|
+
* @param {object} state
|
|
123
|
+
* @param {object} props
|
|
124
|
+
* @param {string} props.manifestId
|
|
125
|
+
* @param {string} props.windowId
|
|
126
|
+
* @returns {Array}
|
|
127
|
+
*/
|
|
128
|
+
export const getPreviousCanvasGrouping = createSelector([getCanvasGroupings, getCurrentCanvas], (groupings, canvas, view) => {
|
|
129
|
+
if (!groupings || !canvas) return undefined;
|
|
130
|
+
|
|
131
|
+
const currentGroupIndex = groupings.findIndex((group) => group.some((c) => c.id === canvas.id));
|
|
132
|
+
|
|
133
|
+
if (currentGroupIndex < 1) return undefined;
|
|
134
|
+
const newGroup = groupings[currentGroupIndex - 1];
|
|
135
|
+
|
|
136
|
+
return newGroup;
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Return canvas label, or alternatively return the given index + 1 to be displayed.
|
|
141
|
+
* @param {object} state
|
|
142
|
+
* @param {object} props
|
|
143
|
+
* @param {string} props.canvasId
|
|
144
|
+
* @param {string} props.manifestId
|
|
145
|
+
* @returns {string|number}
|
|
146
|
+
*/
|
|
147
|
+
export const getCanvasLabel = createSelector(
|
|
148
|
+
[getCanvas, getManifestLocale],
|
|
149
|
+
(canvas, locale) => canvas && (canvas.getLabel().length > 0 ? canvas.getLabel().getValue(locale) : String(canvas.index + 1)),
|
|
150
|
+
);
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Return canvas metadata in a label / value structure
|
|
154
|
+
* @param {object} state
|
|
155
|
+
* @param {object} props
|
|
156
|
+
* @param {string} props.canvasId
|
|
157
|
+
* @param {string} props.windowId
|
|
158
|
+
* @returns {Array[Object]}
|
|
159
|
+
*/
|
|
160
|
+
export const getCanvasMetadata = createSelector(
|
|
161
|
+
[getCanvas, getManifestLocale],
|
|
162
|
+
(canvas, locale) => canvas && getDestructuredMetadata(canvas, locale),
|
|
163
|
+
);
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Return canvas description.
|
|
167
|
+
* @param {object} canvas
|
|
168
|
+
* @param {string} companionWindowId
|
|
169
|
+
*/
|
|
170
|
+
export const getCanvasDescription = createSelector([getCanvas], (canvas) => canvas && canvas.getProperty('description'));
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* Return visible non tiled canvas resources.
|
|
174
|
+
* @param {object}
|
|
175
|
+
* @param {string} windowId
|
|
176
|
+
* @returns {Array}
|
|
177
|
+
*/
|
|
178
|
+
export const getVisibleCanvasNonTiledResources = createSelector(
|
|
179
|
+
[getVisibleCanvases, getMiradorCanvasWrapper],
|
|
180
|
+
(canvases, getMiradorCanvas) =>
|
|
181
|
+
canvases
|
|
182
|
+
.flatMap((canvas) => getMiradorCanvas(canvas).imageResources)
|
|
183
|
+
.filter((resource) => !getIiifResourceImageService(resource)),
|
|
184
|
+
);
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* Returns visible canvas text resources.
|
|
188
|
+
* @param {object} state
|
|
189
|
+
* @param {string} windowId
|
|
190
|
+
* @return {Array}
|
|
191
|
+
*/
|
|
192
|
+
export const getVisibleCanvasTextResources = createSelector(
|
|
193
|
+
[getVisibleCanvases, getMiradorCanvasWrapper],
|
|
194
|
+
(canvases, getMiradorCanvas) => canvases.flatMap((canvas) => getMiradorCanvas(canvas).textResources),
|
|
195
|
+
);
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* Returns visible canvas video resources.
|
|
199
|
+
* @param {object} state
|
|
200
|
+
* @param {string} windowId
|
|
201
|
+
* @return {Array}
|
|
202
|
+
*/
|
|
203
|
+
export const getVisibleCanvasVideoResources = createSelector(
|
|
204
|
+
[getVisibleCanvases, getMiradorCanvasWrapper],
|
|
205
|
+
(canvases, getMiradorCanvas) => canvases.flatMap((canvas) => getMiradorCanvas(canvas).videoResources),
|
|
206
|
+
);
|
|
207
|
+
|
|
208
|
+
/**
|
|
209
|
+
* Returns visible canvas captions.
|
|
210
|
+
* @param {object} state
|
|
211
|
+
* @param {string} windowId
|
|
212
|
+
* @return {Array}
|
|
213
|
+
*/
|
|
214
|
+
export const getVisibleCanvasCaptions = createSelector(
|
|
215
|
+
[getVisibleCanvases, getMiradorCanvasWrapper],
|
|
216
|
+
(canvases, getMiradorCanvas) =>
|
|
217
|
+
canvases.flatMap((canvas) => {
|
|
218
|
+
const miradorCanvas = getMiradorCanvas(canvas);
|
|
219
|
+
// prefer v3, fallback to v2, which can also be an empty array if no captions exist.
|
|
220
|
+
if (miradorCanvas.v3VttContent.length) return miradorCanvas.v3VttContent;
|
|
221
|
+
return miradorCanvas.v2VttContent;
|
|
222
|
+
}),
|
|
223
|
+
);
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* Returns visible canvas audio resources.
|
|
227
|
+
* @param {object} state
|
|
228
|
+
* @param {string} windowId
|
|
229
|
+
* @return {Array}
|
|
230
|
+
*/
|
|
231
|
+
export const getVisibleCanvasAudioResources = createSelector(
|
|
232
|
+
[getVisibleCanvases, getMiradorCanvasWrapper],
|
|
233
|
+
(canvases, getMiradorCanvas) => canvases.flatMap((canvas) => getMiradorCanvas(canvas).audioResources),
|
|
234
|
+
);
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* Returns info response.
|
|
238
|
+
* @param {object} state
|
|
239
|
+
* @param {object} props
|
|
240
|
+
* @param {string} props.windowId
|
|
241
|
+
* @param {string} props.canvasId
|
|
242
|
+
* @param {string} props.infoId
|
|
243
|
+
* @returns {object|undefined}
|
|
244
|
+
*/
|
|
245
|
+
export const selectInfoResponse = createSelector(
|
|
246
|
+
[(state, { infoId }) => infoId, getCanvas, getMiradorCanvasWrapper, selectInfoResponses],
|
|
247
|
+
(infoId, canvas, getMiradorCanvas, infoResponses) => {
|
|
248
|
+
let iiifServiceId = infoId;
|
|
249
|
+
|
|
250
|
+
if (!infoId) {
|
|
251
|
+
if (!canvas) return undefined;
|
|
252
|
+
const image = getMiradorCanvas(canvas).iiifImageResources[0];
|
|
253
|
+
iiifServiceId = image && getIiifResourceImageService(image)?.id;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
return (
|
|
257
|
+
iiifServiceId && infoResponses[iiifServiceId] && !infoResponses[iiifServiceId].isFetching && infoResponses[iiifServiceId]
|
|
258
|
+
);
|
|
259
|
+
},
|
|
260
|
+
);
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import { createSelector } from 'reselect';
|
|
2
|
+
import groupBy from 'lodash/groupBy';
|
|
3
|
+
import { miradorSlice, EMPTY_ARRAY, EMPTY_OBJECT } from './utils';
|
|
4
|
+
import { getWindow, getWindows } from './getters';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Returns companion windows.
|
|
8
|
+
* @param {object} state
|
|
9
|
+
* @returns {object}
|
|
10
|
+
*/
|
|
11
|
+
export function getCompanionWindows(state) {
|
|
12
|
+
return miradorSlice(state).companionWindows || EMPTY_OBJECT;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Returns the companion window.
|
|
17
|
+
* @param {object} state
|
|
18
|
+
* @param {object} props
|
|
19
|
+
* @param {string} props.companionWindowId
|
|
20
|
+
* @returns {object|undefined}
|
|
21
|
+
*/
|
|
22
|
+
export const getCompanionWindow = createSelector(
|
|
23
|
+
[getCompanionWindows, (state, { companionWindowId }) => companionWindowId],
|
|
24
|
+
(companionWindows, companionWindowId) => companionWindowId && companionWindows[companionWindowId],
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Returns the companion window locale.
|
|
29
|
+
* @param {object} state
|
|
30
|
+
* @param {object} props
|
|
31
|
+
* @param {string} props.companionWindowId
|
|
32
|
+
* @returns {string|undefined}
|
|
33
|
+
*/
|
|
34
|
+
export const getCompanionWindowLocale = createSelector(
|
|
35
|
+
[getCompanionWindow],
|
|
36
|
+
(companionWindow) => companionWindow && companionWindow.locale,
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Return position of thumbnail navigation in a certain window.
|
|
41
|
+
* @param {object} state
|
|
42
|
+
* @param {object} props
|
|
43
|
+
* @param {string} props.windowId
|
|
44
|
+
* @returns {string|undefined}
|
|
45
|
+
*/
|
|
46
|
+
export const getThumbnailNavigationPosition = createSelector(
|
|
47
|
+
[getWindow, getCompanionWindows],
|
|
48
|
+
(window, companionWindows) =>
|
|
49
|
+
window && companionWindows[window.thumbnailNavigationId] && companionWindows[window.thumbnailNavigationId].position,
|
|
50
|
+
);
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Return companion window ids from a window.
|
|
54
|
+
* @param {string} windowId
|
|
55
|
+
* @returns {Array}
|
|
56
|
+
*/
|
|
57
|
+
const getCompanionWindowIndexByWindowAndPosition = createSelector(
|
|
58
|
+
[getWindows, getCompanionWindows],
|
|
59
|
+
(windows, companionWindows) =>
|
|
60
|
+
(Object.keys(windows) || []).reduce(
|
|
61
|
+
(obj, id) => ({
|
|
62
|
+
...obj,
|
|
63
|
+
[id]: groupBy(
|
|
64
|
+
windows[id].companionWindowIds || EMPTY_ARRAY,
|
|
65
|
+
(cwid) => companionWindows[cwid] && companionWindows[cwid].position,
|
|
66
|
+
),
|
|
67
|
+
}),
|
|
68
|
+
{},
|
|
69
|
+
),
|
|
70
|
+
);
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Return companion window ids from a window.
|
|
74
|
+
* @param {string} windowId
|
|
75
|
+
* @returns {Array}
|
|
76
|
+
*/
|
|
77
|
+
const getCompanionWindowsByWindowAndPosition = createSelector([getWindows, getCompanionWindows], (windows, companionWindows) =>
|
|
78
|
+
(Object.keys(windows) || []).reduce(
|
|
79
|
+
(obj, id) => ({
|
|
80
|
+
...obj,
|
|
81
|
+
[id]: groupBy(
|
|
82
|
+
(windows[id].companionWindowIds || EMPTY_ARRAY).map((cwid) => companionWindows[cwid]),
|
|
83
|
+
(cw) => cw.position,
|
|
84
|
+
),
|
|
85
|
+
}),
|
|
86
|
+
{},
|
|
87
|
+
),
|
|
88
|
+
);
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Return companion windows of a window.
|
|
92
|
+
* @param {object} state
|
|
93
|
+
* @param {string} windowId
|
|
94
|
+
* @returns {Array}
|
|
95
|
+
*/
|
|
96
|
+
const getCompanionWindowsOfWindow = createSelector(
|
|
97
|
+
[(state, { windowId }) => windowId, getCompanionWindowsByWindowAndPosition],
|
|
98
|
+
(windowId, companionWindows) => companionWindows[windowId] || EMPTY_OBJECT,
|
|
99
|
+
);
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Return companion windows ids of a window.
|
|
103
|
+
* @param {object} state
|
|
104
|
+
* @param {string} windowId
|
|
105
|
+
* @returns {Array}
|
|
106
|
+
*/
|
|
107
|
+
const getCompanionWindowIdsOfWindow = createSelector(
|
|
108
|
+
[(state, { windowId }) => windowId, getCompanionWindowIndexByWindowAndPosition],
|
|
109
|
+
(windowId, companionWindowIds) => companionWindowIds[windowId] || EMPTY_OBJECT,
|
|
110
|
+
);
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Return the companion window string from state in a given windowId and position.
|
|
114
|
+
* @param {object} state
|
|
115
|
+
* @param {string} windowId
|
|
116
|
+
* @param {string} position
|
|
117
|
+
* @returns {string}
|
|
118
|
+
*/
|
|
119
|
+
export const getCompanionWindowsForPosition = createSelector(
|
|
120
|
+
[getCompanionWindowsOfWindow, (state, { position }) => position],
|
|
121
|
+
(companionWindows, position) => companionWindows[position] || EMPTY_ARRAY,
|
|
122
|
+
);
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Return the companion window string from state in a given windowId and content type.
|
|
126
|
+
* @param {object} state
|
|
127
|
+
* @param {string} windowId
|
|
128
|
+
* @param {string} position
|
|
129
|
+
* @returns {string}
|
|
130
|
+
*/
|
|
131
|
+
export const getCompanionWindowsForContent = createSelector(
|
|
132
|
+
[getCompanionWindowsOfWindow, (state, { content }) => content],
|
|
133
|
+
(companionWindows, content) => [].concat(...Object.values(companionWindows)).filter((w) => w.content === content),
|
|
134
|
+
);
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Returns companion window ids for position.
|
|
138
|
+
* @param {object} state
|
|
139
|
+
* @param {object} props
|
|
140
|
+
* @param {string} props.windowId
|
|
141
|
+
* @param {string} props.position
|
|
142
|
+
* @returns {Array}
|
|
143
|
+
*/
|
|
144
|
+
export const getCompanionWindowIdsForPosition = createSelector(
|
|
145
|
+
[getCompanionWindowIdsOfWindow, (state, { position }) => position],
|
|
146
|
+
(companionWindowIds, position) => companionWindowIds[position] || EMPTY_ARRAY,
|
|
147
|
+
);
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Returns the visibility of the companion area.
|
|
151
|
+
* @param {object} state
|
|
152
|
+
* @param {string} position
|
|
153
|
+
* @returns {boolean}
|
|
154
|
+
*/
|
|
155
|
+
export const getCompanionAreaVisibility = createSelector([(state, { position }) => position, getWindow], (position, window) => {
|
|
156
|
+
if (!window) return false;
|
|
157
|
+
const { companionAreaOpen, sideBarOpen } = window;
|
|
158
|
+
if (position !== 'left') return true;
|
|
159
|
+
return !!(companionAreaOpen && sideBarOpen);
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Returns the dimensions.
|
|
164
|
+
* @param {object} state
|
|
165
|
+
* @param {string} companionWindowId
|
|
166
|
+
* @returns {object} containing height and width
|
|
167
|
+
*/
|
|
168
|
+
export const selectCompanionWindowDimensions = createSelector([getCompanionWindowsOfWindow], (companionWindows) => {
|
|
169
|
+
let width = 0;
|
|
170
|
+
let height = 0;
|
|
171
|
+
[].concat(...Object.values(companionWindows)).forEach((cw) => {
|
|
172
|
+
if (cw.position.match(/right/)) {
|
|
173
|
+
width += 235;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
if (cw.position.match(/bottom/)) {
|
|
177
|
+
height += 201;
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
return { height, width };
|
|
182
|
+
});
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { createSelector } from 'reselect';
|
|
2
|
+
import deepmerge from 'deepmerge';
|
|
3
|
+
import { miradorSlice, EMPTY_ARRAY, EMPTY_OBJECT } from './utils';
|
|
4
|
+
import { getWorkspace } from './getters';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Returns the config from the redux state.
|
|
8
|
+
* @param {object} state
|
|
9
|
+
* @returns {object} containing config
|
|
10
|
+
*/
|
|
11
|
+
export function getConfig(state) {
|
|
12
|
+
const slice = miradorSlice(state || {});
|
|
13
|
+
return slice.config || EMPTY_OBJECT;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Extract an exportable version of state using the configuration from the config.
|
|
18
|
+
* @param {object} state
|
|
19
|
+
* @returns {object} containing exportable state
|
|
20
|
+
*/
|
|
21
|
+
export function getExportableState(state) {
|
|
22
|
+
const exportConfig = getConfig(state).export;
|
|
23
|
+
|
|
24
|
+
return Object.entries(exportConfig).reduce((acc, [stem, value]) => {
|
|
25
|
+
if (value === true) {
|
|
26
|
+
// eslint-disable-next-line no-param-reassign
|
|
27
|
+
acc[stem] = state[stem];
|
|
28
|
+
} else if (value.filter) {
|
|
29
|
+
// eslint-disable-next-line no-param-reassign
|
|
30
|
+
acc[stem] = Object.entries(state[stem])
|
|
31
|
+
.filter(value.filter)
|
|
32
|
+
.reduce((stemAcc, [k, v]) => {
|
|
33
|
+
// eslint-disable-next-line no-param-reassign
|
|
34
|
+
stemAcc[k] = v;
|
|
35
|
+
return stemAcc;
|
|
36
|
+
}, {});
|
|
37
|
+
}
|
|
38
|
+
return acc;
|
|
39
|
+
}, {});
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Return languages from config (in state) and indicate which is currently set.
|
|
44
|
+
* @param {object} state
|
|
45
|
+
* @returns {Array} [ {locale: 'de', label: 'Deutsch', current: true}, ... ]
|
|
46
|
+
*/
|
|
47
|
+
export const getLanguagesFromConfigWithCurrent = createSelector([getConfig], ({ availableLanguages, language }) =>
|
|
48
|
+
Object.keys(availableLanguages).map((key) => ({
|
|
49
|
+
current: key === language,
|
|
50
|
+
label: availableLanguages[key],
|
|
51
|
+
locale: key,
|
|
52
|
+
})),
|
|
53
|
+
);
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Returns if showZoomControls is set in the config.
|
|
57
|
+
* @param {object} state
|
|
58
|
+
* @returns {boolean}
|
|
59
|
+
*/
|
|
60
|
+
export const getShowZoomControlsConfig = createSelector([getWorkspace, getConfig], (workspace, config) =>
|
|
61
|
+
workspace.showZoomControls === undefined ? config.workspace.showZoomControls : workspace.showZoomControls,
|
|
62
|
+
);
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Returns the theme from the config.
|
|
66
|
+
* @param {object} state
|
|
67
|
+
* @returns {object} {palette: {...}, typography: {...}, overrides: {...}, ...}
|
|
68
|
+
*/
|
|
69
|
+
export const getTheme = createSelector([getConfig], ({ theme, themes, selectedTheme }) =>
|
|
70
|
+
deepmerge(theme, themes[selectedTheme] || {}),
|
|
71
|
+
);
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Returns the theme ids from the config.
|
|
75
|
+
* @param {object} state
|
|
76
|
+
* @returns {Array} ['dark', 'light']
|
|
77
|
+
*/
|
|
78
|
+
export const getThemeIds = createSelector([getConfig], ({ themes }) => Object.keys(themes));
|
|
79
|
+
|
|
80
|
+
/* @deprecated */
|
|
81
|
+
export const getContainerId = createSelector([getConfig], ({ id }) => id);
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Returns the theme direction from the config.
|
|
85
|
+
* @param {object} state
|
|
86
|
+
* @returns {string}
|
|
87
|
+
*/
|
|
88
|
+
export const getThemeDirection = createSelector([getConfig], ({ theme }) => theme.direction || 'ltr');
|
|
89
|
+
/**
|
|
90
|
+
* Returns the requests configurations from the config.
|
|
91
|
+
* @param {object} state
|
|
92
|
+
* @returns {object} {preprocessor: [...], postprocessor: [...]}
|
|
93
|
+
*/
|
|
94
|
+
export const getRequestsConfig = createSelector([getConfig], ({ requests }) => requests || EMPTY_OBJECT);
|
|
95
|
+
/**
|
|
96
|
+
* Returns the thumbnails configurations from the config.
|
|
97
|
+
* @param {object} state
|
|
98
|
+
* @returns {object} {preprocessor: [...], postprocessor: [...]}
|
|
99
|
+
*/
|
|
100
|
+
export const getThumbnailsConfig = createSelector([getConfig], ({ thumbnails }) => thumbnails || EMPTY_OBJECT);
|