44 Wrapper ,
55} from "src/components/Image/Image.styled" ;
66import OpenSeadragon , { Options } from "openseadragon" ;
7- import React , { useEffect , useState } from "react" ;
7+ import React , { useEffect , useRef , useState } from "react" ;
88
99import Controls from "src/components/Image/Controls/Controls" ;
1010import { 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