From 1780c6fb2a7dee58e973723eaee39c497ffe7c18 Mon Sep 17 00:00:00 2001 From: Dan Ditomaso Date: Fri, 21 Mar 2025 22:39:40 -0400 Subject: [PATCH] refactor: updated how expiry dates are handled. --- src/components/KeyBackupReminder.tsx | 1 - src/core/hooks/useKeyBackupReminder.tsx | 76 ++++++++++--------------- 2 files changed, 29 insertions(+), 48 deletions(-) diff --git a/src/components/KeyBackupReminder.tsx b/src/components/KeyBackupReminder.tsx index 777c28cc..80894cba 100644 --- a/src/components/KeyBackupReminder.tsx +++ b/src/components/KeyBackupReminder.tsx @@ -5,7 +5,6 @@ export const KeyBackupReminder = () => { const { setDialogOpen } = useDevice(); useBackupReminder({ - reminderInDays: 7, message: "We recommend backing up your key data regularly. Would you like to back up now?", onAccept: () => setDialogOpen("pkiBackup", true), diff --git a/src/core/hooks/useKeyBackupReminder.tsx b/src/core/hooks/useKeyBackupReminder.tsx index f1009095..1669c429 100644 --- a/src/core/hooks/useKeyBackupReminder.tsx +++ b/src/core/hooks/useKeyBackupReminder.tsx @@ -11,27 +11,27 @@ interface UseBackupReminderOptions { } interface ReminderState { - suppressed: boolean; - lastShown: string; + expires: string; } const TOAST_APPEAR_DELAY = 10_000; // 10 seconds const TOAST_DURATION = 30_000; // 30 seconds -const ON_ACCEPT_REMINDER_DAYS = 365; +const REMINDER_DAYS_ONE_WEEK = 7; +const REMINDER_DAYS_ONE_YEAR = 365; +const REMINDER_DAYS_FOREVER = 3650; const STORAGE_KEY = "key_backup_reminder"; -function isReminderExpired(lastShown: string): boolean { - const lastShownDate = new Date(lastShown); - const now = new Date(); - const daysSinceLastShown = (now.getTime() - lastShownDate.getTime()) / (1000 * 60 * 60 * 24); - return daysSinceLastShown >= 7; +function isReminderExpired(expires?: string): boolean { + if (!expires) return true; + const expiryDate = new Date(expires); + return isNaN(expiryDate.getTime()) || new Date() >= expiryDate; } export function useBackupReminder({ - reminderInDays = 7, enabled, message, onAccept = () => { }, + reminderInDays = REMINDER_DAYS_ONE_WEEK, }: UseBackupReminderOptions) { const { toast } = useToast(); const toastShownRef = useRef(false); @@ -40,24 +40,16 @@ export function useBackupReminder({ null ); - // Suppress reminder for 10 years if not specified - const suppressReminder = useCallback((days: number = 3563) => { + const setReminderExpiry = useCallback((days: number) => { const expiryDate = new Date(); expiryDate.setDate(expiryDate.getDate() + days); - - setReminderState({ - suppressed: true, - lastShown: new Date().toISOString(), - }); + setReminderState({ expires: expiryDate.toISOString() }); }, [setReminderState]); useEffect(() => { if (!enabled || toastShownRef.current) return; - const shouldShowReminder = - !reminderState?.suppressed || isReminderExpired(reminderState.lastShown); - - if (!shouldShowReminder) return; + if (!isReminderExpired(reminderState?.expires)) return; toastShownRef.current = true; @@ -69,14 +61,13 @@ export function useBackupReminder({ action: (
-
-
- -
+
), }); - return () => { - if (!toastShownRef.current) { - dismiss(); - } - }; + return () => dismiss(); }, [ enabled, message, onAccept, - reminderInDays, - suppressReminder, - toast, - reminderState, + ]); -} +}; \ No newline at end of file