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, }; }