From a03c26dd5ab53a7883f686f3d27d3bae1f7014b2 Mon Sep 17 00:00:00 2001 From: Untone Date: Tue, 7 May 2024 11:15:20 +0300 Subject: [PATCH] seen-fix --- package.json | 2 +- src/components/Nav/HeaderAuth.tsx | 7 ++- .../_shared/Popup/Popup.module.scss | 2 +- src/context/seen.tsx | 50 +++---------------- 4 files changed, 14 insertions(+), 47 deletions(-) diff --git a/package.json b/package.json index 76af1218..cdc77a02 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,7 @@ "@solid-primitives/memo": "1.2.4", "@solid-primitives/pagination": "0.2.10", "@solid-primitives/share": "2.0.4", - "@solid-primitives/storage": "1.3.9", + "@solid-primitives/storage": "^3.5.0", "@solid-primitives/upload": "0.0.110", "@solidjs/meta": "0.29.1", "@thisbeyond/solid-select": "0.14.0", diff --git a/src/components/Nav/HeaderAuth.tsx b/src/components/Nav/HeaderAuth.tsx index f779f4bd..d3e38709 100644 --- a/src/components/Nav/HeaderAuth.tsx +++ b/src/components/Nav/HeaderAuth.tsx @@ -234,7 +234,12 @@ export const HeaderAuth = (props: Props) => { } > -
+
diff --git a/src/components/_shared/Popup/Popup.module.scss b/src/components/_shared/Popup/Popup.module.scss index 5d27cd6e..7677a3aa 100644 --- a/src/components/_shared/Popup/Popup.module.scss +++ b/src/components/_shared/Popup/Popup.module.scss @@ -73,7 +73,7 @@ border: none; white-space: nowrap; - &:before { + &::before { content: ''; height: 100%; left: 0; diff --git a/src/context/seen.tsx b/src/context/seen.tsx index f26ef3e2..bd4a26cd 100644 --- a/src/context/seen.tsx +++ b/src/context/seen.tsx @@ -1,5 +1,5 @@ -import { openDB } from 'idb' -import { Accessor, JSX, createContext, createSignal, onMount, useContext } from 'solid-js' +import { makePersisted } from '@solid-primitives/storage' +import { Accessor, JSX, createContext, createSignal, useContext } from 'solid-js' type SeenContextType = { seen: Accessor<{ [slug: string]: number }> @@ -11,56 +11,18 @@ export function useSeen() { return useContext(SeenContext) } -const DB_NAME = 'discourseAppDB' -const DB_VERSION = 1 -const STORE_NAME = 'seen' -const setupIndexedDB = async () => { - return await openDB(DB_NAME, DB_VERSION, { - upgrade(db) { - if (!db.objectStoreNames.contains(STORE_NAME)) { - db.createObjectStore(STORE_NAME, { keyPath: 'slug' }) - } - }, - }) -} - -const getSeenFromIndexedDB = async (db) => { - const tx = db.transaction(STORE_NAME, 'readonly') - const store = tx.objectStore(STORE_NAME) - const seen = await store.getAll() - return seen.reduce((acc, { slug, date }) => { - acc[slug] = date - return acc - }, {}) -} - -const saveSeenToIndexedDB = async (db, seen) => { - const tx = db.transaction(STORE_NAME, 'readwrite') - const store = tx.objectStore(STORE_NAME) - for (const [slug, date] of Object.entries(seen)) { - await store.put({ slug, date }) - } - await tx.done -} - export const SeenProvider = (props: { children: JSX.Element }) => { - const [seen, setSeen] = createSignal<{ [slug: string]: number }>({}) - const [db, setDb] = createSignal() + const [seen, setSeen] = makePersisted(createSignal<{ [slug: string]: number }>({}), { + name: 'discoursio-seen', + }) + const addSeen = async (slug: string) => { setSeen((prev) => { const newSeen = { ...prev, [slug]: Date.now() } - saveSeenToIndexedDB(db(), newSeen) return newSeen }) } - onMount(async () => { - const ndb = await setupIndexedDB() - setDb(ndb) - const seenFromDB = await getSeenFromIndexedDB(ndb) - setSeen(seenFromDB) - }) - const value: SeenContextType = { seen, addSeen } return {props.children}