40 lines · 1.1 KB · TypeScript
RawDownload
import { useCallback, useMemo } from "react";import * as Schema from "effect/Schema"; import { useLocalStorage } from "./hooks/useLocalStorage"; const PROVIDER_UPDATE_DISMISSALS_STORAGE_KEY = "t3code:provider-update-dismissals:v1"; const ProviderUpdateDismissalsSchema = Schema.Struct({  keys: Schema.Array(Schema.String),}); export function useDismissedProviderUpdateNotificationKeys() {  const [dismissals, setDismissals] = useLocalStorage(    PROVIDER_UPDATE_DISMISSALS_STORAGE_KEY,    { keys: [] },    ProviderUpdateDismissalsSchema,  );  const dismissedKeys = dismissals.keys;   const dismissedKeySet = useMemo(() => new Set(dismissedKeys), [dismissedKeys]);   const dismissNotificationKey = useCallback(    (key: string) => {      const trimmedKey = key.trim();      if (trimmedKey.length === 0 || dismissedKeySet.has(trimmedKey)) {        return;      }       setDismissals({        keys: [...dismissedKeys, trimmedKey],      });    },    [dismissedKeySet, dismissedKeys, setDismissals],  );   return {    dismissedNotificationKeys: dismissedKeySet,    dismissNotificationKey,  };}