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