Files
readest/apps/readest-app/src/app/reader/hooks/useFoliateEvents.ts
T

42 lines
1.2 KiB
TypeScript

import { useEffect } from 'react';
import { FoliateView } from '@/app/reader/components/FoliateViewer';
import { useReaderStore } from '@/store/readerStore';
type FoliateEventHandler = {
onLoad?: (event: Event) => void;
onRelocate?: (event: Event) => void;
};
export const useFoliateEvents = (
view: FoliateView | null,
bookId: string,
handlers?: FoliateEventHandler,
) => {
const setProgress = useReaderStore((state) => state.setProgress);
const defaultLoadHandler = (event: Event) => {
console.log('load event:', event);
};
const defaultRelocateHandler = (event: Event) => {
const detail = (event as CustomEvent).detail;
// console.log('relocate:', detail);
setProgress(bookId, detail.fraction, detail.cfi, detail.location);
};
const onLoad = handlers?.onLoad || defaultLoadHandler;
const onRelocate = handlers?.onRelocate || defaultRelocateHandler;
useEffect(() => {
if (!view) return;
view.addEventListener('load', onLoad);
view.addEventListener('relocate', onRelocate);
return () => {
view.removeEventListener('load', onLoad);
view.removeEventListener('relocate', onRelocate);
};
}, [view, onLoad, onRelocate, handlers]);
};