From 23a7de5061390fd0c65b6d1ba76d9007a8b51a92 Mon Sep 17 00:00:00 2001 From: Jack Reed <phillipjreed@gmail.com> Date: Wed, 22 Apr 2020 14:37:46 -0600 Subject: [PATCH] Use infoResponse id instead of the object So that we have better guarantees about the shape of the object passed in. Fixes issues where the layers were not rendering correctly --- __tests__/integration/mirador/layers.html | 2 +- __tests__/src/components/OpenSeadragonViewer.test.js | 7 ++++--- src/components/OpenSeadragonViewer.js | 7 ++++--- src/lib/CanvasWorld.js | 7 +++---- 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/__tests__/integration/mirador/layers.html b/__tests__/integration/mirador/layers.html index 9dd915160..9be3209d0 100644 --- a/__tests__/integration/mirador/layers.html +++ b/__tests__/integration/mirador/layers.html @@ -14,7 +14,7 @@ var miradorInstance = Mirador.viewer({ id: 'mirador', windows: [{ - manifestId: 'https://prtd.app/hamilton/manifest.json', + manifestId: 'https://dvp.prtd.app/hamilton/manifest.json', }], window: { defaultSideBarPanel: 'layers', diff --git a/__tests__/src/components/OpenSeadragonViewer.test.js b/__tests__/src/components/OpenSeadragonViewer.test.js index 5ea1e47d0..f0c303113 100644 --- a/__tests__/src/components/OpenSeadragonViewer.test.js +++ b/__tests__/src/components/OpenSeadragonViewer.test.js @@ -185,6 +185,7 @@ describe('OpenSeadragonViewer', () => { const setOpacity = jest.fn(); const setItemIndex = jest.fn(); const canvasWorld = { + contentResource: i => i, layerIndexOfImageResource: i => 1 - i, layerOpacityOfImageResource: i => 0.5, }; @@ -192,7 +193,7 @@ describe('OpenSeadragonViewer', () => { wrapper.instance().loaded = true; wrapper.instance().viewer = { world: { - getItemAt: i => ({ setOpacity, source: i }), + getItemAt: i => ({ setOpacity, source: { id: i } }), getItemCount: () => 2, setItemIndex, }, @@ -205,9 +206,9 @@ describe('OpenSeadragonViewer', () => { expect(setOpacity.mock.calls[1]).toEqual([0.5]); expect(setItemIndex).toHaveBeenCalledTimes(2); - expect(setItemIndex.mock.calls[0][0].source).toEqual(0); + expect(setItemIndex.mock.calls[0][0].source.id).toEqual(0); expect(setItemIndex.mock.calls[0][1]).toEqual(1); - expect(setItemIndex.mock.calls[1][0].source).toEqual(1); + expect(setItemIndex.mock.calls[1][0].source.id).toEqual(1); expect(setItemIndex.mock.calls[1][1]).toEqual(0); }); }); diff --git a/src/components/OpenSeadragonViewer.js b/src/components/OpenSeadragonViewer.js index 6d9b652d3..157d04886 100644 --- a/src/components/OpenSeadragonViewer.js +++ b/src/components/OpenSeadragonViewer.js @@ -245,7 +245,7 @@ export class OpenSeadragonViewer extends Component { } const tileSource = infoResponse.json; - const contentResource = canvasWorld.contentResource(infoResponse); + const contentResource = canvasWorld.contentResource(infoResponse.id); if (!contentResource) return; @@ -273,9 +273,10 @@ export class OpenSeadragonViewer extends Component { } items.forEach((item, i) => { - const newIndex = canvasWorld.layerIndexOfImageResource(item.source); + const contentResource = canvasWorld.contentResource(item.source['@id'] || item.source.id); + const newIndex = canvasWorld.layerIndexOfImageResource(contentResource); if (i !== newIndex) world.setItemIndex(item, newIndex); - item.setOpacity(canvasWorld.layerOpacityOfImageResource(item.source)); + item.setOpacity(canvasWorld.layerOpacityOfImageResource(contentResource)); }); } diff --git a/src/lib/CanvasWorld.js b/src/lib/CanvasWorld.js index e74ab23dc..ab44caade 100644 --- a/src/lib/CanvasWorld.js +++ b/src/lib/CanvasWorld.js @@ -57,17 +57,16 @@ export default class CanvasWorld { } /** Get the IIIF content resource for an image */ - contentResource(infoResponse) { - const imageId = infoResponse.id; + contentResource(infoResponseId) { const manifestoCanvas = this.canvases.find(c => c.imageServiceIds.some(id => ( normalizeUrl(id, { stripAuthentication: false }) - === normalizeUrl(imageId, { stripAuthentication: false })))); + === normalizeUrl(infoResponseId, { stripAuthentication: false })))); if (!manifestoCanvas) return undefined; return manifestoCanvas.imageResources .find(r => ( normalizeUrl(r.getServices()[0].id, { stripAuthentication: false }) - === normalizeUrl(imageId, { stripAuthentication: false }))); + === normalizeUrl(infoResponseId, { stripAuthentication: false }))); } /** @private */ -- GitLab