Files
outline/app/scenes/Document/components/MarkAsViewed.ts
2022-11-01 18:42:59 -07:00

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;