From 807d42da2564ac0035aaac9eb68327d5a22ae6b0 Mon Sep 17 00:00:00 2001
From: Jack Reed <phillipjreed@gmail.com>
Date: Fri, 20 Dec 2019 07:48:24 -0700
Subject: [PATCH] Make OpenSeaDragon configurable from the settings fixes #1330

---
 src/components/OpenSeadragonViewer.js | 11 ++++-------
 src/config/settings.js                |  7 +++++++
 src/containers/OpenSeadragonViewer.js |  1 +
 3 files changed, 12 insertions(+), 7 deletions(-)

diff --git a/src/components/OpenSeadragonViewer.js b/src/components/OpenSeadragonViewer.js
index fd6e66cab..487f5ca0f 100644
--- a/src/components/OpenSeadragonViewer.js
+++ b/src/components/OpenSeadragonViewer.js
@@ -56,19 +56,14 @@ export class OpenSeadragonViewer extends Component {
    * React lifecycle event
    */
   componentDidMount() {
-    const { viewer } = this.props;
+    const { osdConfig, viewer } = this.props;
     if (!this.ref.current) {
       return;
     }
 
     this.viewer = new OpenSeadragon({
-      alwaysBlend: false,
-      blendTime: 0.1,
       id: this.ref.current.id,
-      preserveImageSizeOnResize: true,
-      preserveViewport: true,
-      showNavigationControl: false,
-
+      ...osdConfig,
     });
 
     this.osdCanvasOverlay = new OpenSeadragonCanvasOverlay(this.viewer);
@@ -327,6 +322,7 @@ OpenSeadragonViewer.defaultProps = {
   children: null,
   highlightedAnnotations: [],
   label: null,
+  osdConfig: {},
   palette: {},
   searchAnnotations: [],
   selectedAnnotations: [],
@@ -341,6 +337,7 @@ OpenSeadragonViewer.propTypes = {
   classes: PropTypes.objectOf(PropTypes.string).isRequired,
   highlightedAnnotations: PropTypes.arrayOf(PropTypes.object),
   label: PropTypes.string,
+  osdConfig: PropTypes.object, // eslint-disable-line react/forbid-prop-types
   palette: PropTypes.object, // eslint-disable-line react/forbid-prop-types
   searchAnnotations: PropTypes.arrayOf(PropTypes.object),
   selectedAnnotations: PropTypes.arrayOf(PropTypes.object),
diff --git a/src/config/settings.js b/src/config/settings.js
index 900a661a6..3fff7bd08 100644
--- a/src/config/settings.js
+++ b/src/config/settings.js
@@ -268,5 +268,12 @@ export default {
   galleryView: {
     height: 120, // height of gallery view thumbnails
     width: null, // width of gallery view thumbnails (or null, to auto-calculate an aspect-ratio appropriate size)
+  },
+  osdConfig: { // Default config used for OpenSeadragon
+    alwaysBlend: false,
+    blendTime: 0.1,
+    preserveImageSizeOnResize: true,
+    preserveViewport: true,
+    showNavigationControl: false,
   }
 };
diff --git a/src/containers/OpenSeadragonViewer.js b/src/containers/OpenSeadragonViewer.js
index 17af4641e..196d195ff 100644
--- a/src/containers/OpenSeadragonViewer.js
+++ b/src/containers/OpenSeadragonViewer.js
@@ -34,6 +34,7 @@ const mapStateToProps = (state, { companionWindowId, windowId }) => ({
     canvasId: (getCurrentCanvas(state, { windowId }) || {}).id,
     windowId,
   }),
+  osdConfig: state.config.osdConfig,
   palette: getTheme(state).palette,
   searchAnnotations: getSearchAnnotationsForWindow(
     state,
-- 
GitLab