summaryrefslogtreecommitdiffhomepage
path: root/packages/ui/src/hooks
diff options
context:
space:
mode:
authorDax <[email protected]>2025-11-21 20:41:27 -0500
committerGitHub <[email protected]>2025-11-21 20:41:27 -0500
commit49408c00e964093c654ee270d545c0e29857e61f (patch)
tree600b2a94cd082c0af221fd84fd5346cfe8f9ace4 /packages/ui/src/hooks
parent76192fbcedff945b5d529a5d733deb2488ee9c8a (diff)
downloadopencode-49408c00e964093c654ee270d545c0e29857e61f.tar.gz
opencode-49408c00e964093c654ee270d545c0e29857e61f.zip
enterprise (#4617)
Co-authored-by: GitHub Action <[email protected]> Co-authored-by: Adam <[email protected]>
Diffstat (limited to 'packages/ui/src/hooks')
-rw-r--r--packages/ui/src/hooks/create-seen.ts20
-rw-r--r--packages/ui/src/hooks/index.ts1
2 files changed, 21 insertions, 0 deletions
diff --git a/packages/ui/src/hooks/create-seen.ts b/packages/ui/src/hooks/create-seen.ts
new file mode 100644
index 000000000..c25726e75
--- /dev/null
+++ b/packages/ui/src/hooks/create-seen.ts
@@ -0,0 +1,20 @@
+import { createSignal, onCleanup, onMount } from "solid-js"
+import { isServer } from "solid-js/web"
+
+export function createSeen(key: string, delay = 1000) {
+ // 1. Initialize state based on storage (default to true on server to avoid flash)
+ const storageKey = `app:seen:${key}`
+ const [hasSeen] = createSignal(!isServer && sessionStorage.getItem(storageKey) === "true")
+
+ onMount(() => {
+ // 2. If we haven't seen it, mark it as seen for NEXT time
+ if (!hasSeen()) {
+ const timer = setTimeout(() => {
+ sessionStorage.setItem(storageKey, "true")
+ }, delay)
+ onCleanup(() => clearTimeout(timer))
+ }
+ })
+
+ return hasSeen
+}
diff --git a/packages/ui/src/hooks/index.ts b/packages/ui/src/hooks/index.ts
index 7eef78091..98b339cfa 100644
--- a/packages/ui/src/hooks/index.ts
+++ b/packages/ui/src/hooks/index.ts
@@ -1 +1,2 @@
export * from "./use-filtered-list"
+export * from "./create-seen"