From 50de72f207a4774c981ef075c8b4353ef652fcb7 Mon Sep 17 00:00:00 2001 From: bh0fer Date: Sat, 7 Feb 2026 22:20:02 +0100 Subject: [PATCH 01/14] feature: add read check --- .../page-read-check/PageReadCheck/index.tsx | 51 +++++++++++ .../PageReadCheck/styles.module.scss | 0 packages/tdev/page-read-check/README.mdx | 9 ++ packages/tdev/page-read-check/index.ts | 14 +++ .../tdev/page-read-check/model/ModelMeta.ts | 24 ++++++ packages/tdev/page-read-check/model/index.ts | 86 +++++++++++++++++++ packages/tdev/page-read-check/package.json | 17 ++++ packages/tdev/page-read-check/register.ts | 8 ++ packages/tdev/page-read-check/tsconfig.json | 3 + src/models/iDocument.ts | 2 +- src/stores/ViewStores/index.ts | 6 ++ src/theme/Root.tsx | 18 +++- tdev-website/siteConfig.ts | 3 +- 13 files changed, 238 insertions(+), 3 deletions(-) create mode 100644 packages/tdev/page-read-check/PageReadCheck/index.tsx create mode 100644 packages/tdev/page-read-check/PageReadCheck/styles.module.scss create mode 100644 packages/tdev/page-read-check/README.mdx create mode 100644 packages/tdev/page-read-check/index.ts create mode 100644 packages/tdev/page-read-check/model/ModelMeta.ts create mode 100644 packages/tdev/page-read-check/model/index.ts create mode 100644 packages/tdev/page-read-check/package.json create mode 100644 packages/tdev/page-read-check/register.ts create mode 100644 packages/tdev/page-read-check/tsconfig.json diff --git a/packages/tdev/page-read-check/PageReadCheck/index.tsx b/packages/tdev/page-read-check/PageReadCheck/index.tsx new file mode 100644 index 000000000..b847b9d34 --- /dev/null +++ b/packages/tdev/page-read-check/PageReadCheck/index.tsx @@ -0,0 +1,51 @@ +import React from 'react'; +import clsx from 'clsx'; +import styles from './styles.module.scss'; +import { observer } from 'mobx-react-lite'; +import { useStore } from '@tdev-hooks/useStore'; +import { MetaInit, ModelMeta } from '../model/ModelMeta'; +import { useFirstMainDocument } from '@tdev-hooks/useFirstMainDocument'; +import Button from '@tdev-components/shared/Button'; +import { mdiClock, mdiClockDigital } from '@mdi/js'; +import { SIZE_S } from '@tdev-components/shared/iconSizes'; + +interface Props extends MetaInit { + id: string; + hideTime?: boolean; +} + +const PageReadCheck = observer((props: Props) => { + const [meta] = React.useState(new ModelMeta(props)); + const viewStore = useStore('viewStore'); + const doc = useFirstMainDocument(props.id, meta); + React.useEffect(() => { + if (!viewStore.isPageVisible) { + return; + } + const id = setInterval(() => { + doc?.incrementReadTime(1); + }, 1000); + return () => { + clearInterval(id); + }; + }, [doc, viewStore.isPageVisible]); + if (!doc) { + return null; + } + + return ( +