32 lines
726 B
TypeScript
32 lines
726 B
TypeScript
import * as React from "react";
|
|
import Document from "~/models/Document";
|
|
|
|
const MARK_AS_VIEWED_AFTER = 3 * 1000;
|
|
type Props = {
|
|
document: Document;
|
|
children?: JSX.Element;
|
|
};
|
|
|
|
function MarkAsViewed(props: Props) {
|
|
const { document, children } = props;
|
|
const viewTimeout = React.useRef<ReturnType<typeof setTimeout> | null>(null);
|
|
|
|
React.useEffect(() => {
|
|
viewTimeout.current = setTimeout(async () => {
|
|
const view = await document.view();
|
|
|
|
if (view) {
|
|
document.updateLastViewed(view);
|
|
}
|
|
}, MARK_AS_VIEWED_AFTER);
|
|
|
|
return () => {
|
|
viewTimeout.current && clearTimeout(viewTimeout.current);
|
|
};
|
|
}, [document]);
|
|
|
|
return children || null;
|
|
}
|
|
|
|
export default MarkAsViewed;
|