From d8b1c6003bd8a32a527f455b1b587e51f26ae6b4 Mon Sep 17 00:00:00 2001 From: Frank Bessou <frank.bessou@logilab.fr> Date: Fri, 11 Feb 2022 14:41:13 +0100 Subject: [PATCH] Fix unmount not finding container when already detached from document Closes #3533. --- __tests__/src/lib/MiradorViewer.test.js | 7 +++++++ src/lib/MiradorViewer.js | 13 ++++++++----- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/__tests__/src/lib/MiradorViewer.test.js b/__tests__/src/lib/MiradorViewer.test.js index f3f2702b6..95e24df1a 100644 --- a/__tests__/src/lib/MiradorViewer.test.js +++ b/__tests__/src/lib/MiradorViewer.test.js @@ -7,12 +7,19 @@ jest.mock('react-dom'); jest.mock('isomorphic-unfetch', () => jest.fn(() => Promise.resolve({ json: () => ({}) }))); describe('MiradorViewer', () => { + let container; let instance; beforeAll(() => { + container = document.createElement('div'); + container.id = 'mirador'; + document.body.appendChild(container); ReactDOM.render = jest.fn(); ReactDOM.unmountComponentAtNode = jest.fn(); instance = new MiradorViewer({ id: 'mirador' }); }); + afterAll(() => { + document.body.removeChild(container); + }); describe('constructor', () => { it('returns viewer store', () => { expect(instance.store.dispatch).toBeDefined(); diff --git a/src/lib/MiradorViewer.js b/src/lib/MiradorViewer.js index c9238b84d..cd825870d 100644 --- a/src/lib/MiradorViewer.js +++ b/src/lib/MiradorViewer.js @@ -19,10 +19,13 @@ class MiradorViewer { this.store = viewerConfig.store || createPluggableStore(this.config, this.plugins); - config.id && ReactDOM.render( - this.render(), - document.getElementById(config.id), - ); + if (config.id) { + this.container = document.getElementById(config.id); + config.id && ReactDOM.render( + this.render(), + this.container, + ); + } } /** @@ -40,7 +43,7 @@ class MiradorViewer { * Cleanup method to unmount Mirador from the dom */ unmount() { - this.config.id && ReactDOM.unmountComponentAtNode(document.getElementById(this.config.id)); + this.container && ReactDOM.unmountComponentAtNode(this.container); } } -- GitLab