Skip to content

Commit 17a4625

Browse files
authored
Initialize new openseadragon instance once. (#208)
1 parent 36309e3 commit 17a4625

File tree

1 file changed

+14
-8
lines changed

1 file changed

+14
-8
lines changed

src/components/Image/OSD/OSD.tsx

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import {
44
Wrapper,
55
} from "src/components/Image/Image.styled";
66
import OpenSeadragon, { Options } from "openseadragon";
7-
import React, { useEffect, useState } from "react";
7+
import React, { useEffect, useRef, useState } from "react";
88

99
import Controls from "src/components/Image/Controls/Controls";
1010
import { OpenSeadragonImageTypes } from "src/types/open-seadragon";
@@ -30,8 +30,14 @@ const OSD: React.FC<OSDProps> = ({
3030
const [osdUri, setOsdUri] = useState<string>();
3131
const [openSeadragon, setOpenSeadragon] = useState<OpenSeadragon.Viewer>();
3232

33+
const initializeOSD = useRef(false);
34+
3335
useEffect(() => {
34-
if (!openSeadragon) setOpenSeadragon(OpenSeadragon(config));
36+
if (!initializeOSD.current) {
37+
initializeOSD.current = true;
38+
39+
if (!openSeadragon) setOpenSeadragon(OpenSeadragon(config));
40+
}
3541

3642
return () => openSeadragon?.destroy();
3743
}, []);
@@ -43,7 +49,7 @@ const OSD: React.FC<OSDProps> = ({
4349

4450
useEffect(() => {
4551
if (openSeadragon && uri !== osdUri) {
46-
openSeadragon.forceRedraw();
52+
openSeadragon?.forceRedraw();
4753
setOsdUri(uri);
4854
}
4955
}, [openSeadragon, osdUri, uri]);
@@ -52,7 +58,7 @@ const OSD: React.FC<OSDProps> = ({
5258
if (osdUri && openSeadragon) {
5359
switch (imageType) {
5460
case "simpleImage":
55-
openSeadragon.addSimpleImage({
61+
openSeadragon?.addSimpleImage({
5662
url: osdUri,
5763
});
5864
break;
@@ -62,23 +68,23 @@ const OSD: React.FC<OSDProps> = ({
6268
if (!tileSource)
6369
throw new Error(`No tile source found for ${osdUri}`);
6470

65-
openSeadragon.addTiledImage({
66-
tileSource: tileSource,
71+
openSeadragon?.addTiledImage({
72+
tileSource,
6773
});
6874
} catch (e) {
6975
console.error(e);
7076
}
7177
});
7278
break;
7379
default:
74-
openSeadragon.close();
80+
openSeadragon?.close();
7581
console.warn(
7682
`Unable to render ${osdUri} in OpenSeadragon as type: "${imageType}"`,
7783
);
7884
break;
7985
}
8086
}
81-
}, [imageType, osdUri, openSeadragon]);
87+
}, [imageType, osdUri]);
8288

8389
return (
8490
<Wrapper

0 commit comments

Comments
 (0)