Skip to content

Commit

Permalink
Fixed image service loading issue
Browse files Browse the repository at this point in the history
  • Loading branch information
stephenwf committed Oct 2, 2024
1 parent bde1d07 commit 0ef44e9
Showing 1 changed file with 24 additions and 9 deletions.
33 changes: 24 additions & 9 deletions src/hooks/useLoadImageService.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
import { ImageService } from '@iiif/presentation-3';
import { canonicalServiceUrl } from '@iiif/parser/image-3';
import type { ImageService } from '@iiif/presentation-3';
import mitt from 'mitt';
import { useCallback, useEffect, useRef, useState } from 'react';
import { useImageServiceLoader } from '../context/ImageServiceLoaderContext';

Expand All @@ -7,10 +9,30 @@ export type ImageServiceLoaderType = (
{ height, width }: { height: number; width: number }
) => ImageService | undefined;

const loadedEmitter = mitt<{
loaded: { imageServiceId: string };
}>();

export function useLoadImageService() {
const loader = useImageServiceLoader();
const [imageServiceStatus, setImageServiceStatus] = useState<Record<string, string>>({});
const didUnmount = useRef(false);

useEffect(() => {
const handler = (e: { imageServiceId: string }) => {
setImageServiceStatus((r) => {
return {
...r,
[e.imageServiceId]: 'done',
};
});
};
loadedEmitter.on('loaded', handler);
return () => {
loadedEmitter.off('loaded', handler);
};
}, []);

useEffect(() => {
return () => {
didUnmount.current = true;
Expand Down Expand Up @@ -46,14 +68,7 @@ export function useLoadImageService() {
height: imageService.height || height,
})
.then(() => {
if (!didUnmount.current) {
setImageServiceStatus((r) => {
return {
...r,
[imageServiceId]: 'done',
};
});
}
loadedEmitter.emit('loaded', { imageServiceId });
});
}
}
Expand Down

0 comments on commit 0ef44e9

Please sign in to comment.