diff --git a/__tests__/src/components/OpenSeadragonViewer.test.js b/__tests__/src/components/OpenSeadragonViewer.test.js index 0ba56a7f9c282098bf42198274b9201c68021fbf..8d42ce59c0547d54456ed7b833a9cbc0500c85cb 100644 --- a/__tests__/src/components/OpenSeadragonViewer.test.js +++ b/__tests__/src/components/OpenSeadragonViewer.test.js @@ -38,6 +38,7 @@ describe('OpenSeadragonViewer', () => { }, }]} nonTiledImages={[{ + getProperty: () => {}, id: 'http://foo', }]} windowId="base" @@ -119,7 +120,14 @@ describe('OpenSeadragonViewer', () => { wrapper.instance().viewer = { close: () => {}, }; - wrapper.setProps({ nonTiledImages: [1, 2, 3, 4] }); + wrapper.setProps({ + nonTiledImages: [ + { getProperty: () => 'Image' }, + { getProperty: () => 'Image' }, + { getProperty: () => 'Image' }, + { getProperty: () => 'Image' }, + ], + }); const mockAddNonTiledImage = jest.fn(); wrapper.instance().addNonTiledImage = mockAddNonTiledImage; wrapper.instance().addAllImageSources(); @@ -138,6 +146,28 @@ describe('OpenSeadragonViewer', () => { }); }); + describe('addNonTiledImage', () => { + it('calls addSimpleImage asynchronously on the OSD viewer', () => { + const viewer = {}; + viewer.addSimpleImage = ({ success }) => { success('event'); }; + wrapper.instance().setState({ viewer }); + + return wrapper.instance() + .addNonTiledImage({ getProperty: () => 'Image' }) + .then((event) => { + expect(event).toBe('event'); + }); + }); + + it('calls addSimpleImage asynchronously on the OSD viewer', () => ( + wrapper.instance() + .addNonTiledImage({ getProperty: () => 'Video' }) + .then((event) => { + expect(event).toBe(undefined); + }) + )); + }); + describe('refreshTileProperties', () => { it('updates the index and opacity of the OSD tiles from the canvas world', () => { const setOpacity = jest.fn(); diff --git a/src/components/OpenSeadragonViewer.js b/src/components/OpenSeadragonViewer.js index efdef502a6a3555177934b313f18727ae508b563..f1fcd154b5ac517a6b3133f8c98ee43baff3eba0 100644 --- a/src/components/OpenSeadragonViewer.js +++ b/src/components/OpenSeadragonViewer.js @@ -153,10 +153,17 @@ export class OpenSeadragonViewer extends Component { addNonTiledImage(contentResource) { const { canvasWorld } = this.props; const { viewer } = this.state; + + const type = contentResource.getProperty('type'); + const format = contentResource.getProperty('format') || ''; + + if (!(type === 'Image' || type === 'dctypes:Image' || format.startsWith('image/'))) return Promise.resolve(); + return new Promise((resolve, reject) => { if (!viewer) { - return; + reject(); } + viewer.addSimpleImage({ error: event => reject(event), fitBounds: new OpenSeadragon.Rect( @@ -177,7 +184,7 @@ export class OpenSeadragonViewer extends Component { const { viewer } = this.state; return new Promise((resolve, reject) => { if (!viewer) { - return; + reject(); } const tileSource = infoResponse.json; diff --git a/src/lib/CanvasWorld.js b/src/lib/CanvasWorld.js index 8c311f6502b7008ed9fd17997b0869a1c91d5e81..cb1e0078ce34bb39f03cc0ab81e229eb957cbda4 100644 --- a/src/lib/CanvasWorld.js +++ b/src/lib/CanvasWorld.js @@ -89,6 +89,8 @@ export default class CanvasWorld { c.imageResources.find(r => r.id === contentResource.id) )); const canvas = this.canvases[miradorCanvasIndex]; + if (!canvas) return []; + const [x, y, w, h] = this.canvasToWorldCoordinates(canvas.id); const fragmentOffset = canvas.onFragment(contentResource.id);