From c4f6803549b7b2f7c5844a43b8695203836b0b66 Mon Sep 17 00:00:00 2001 From: Eduardo Morales Date: Wed, 22 Nov 2023 17:10:25 -0600 Subject: fix(papercut): rerendered submenu actions for time sensitive actions Signed-off-by: Eduardo Morales --- .../src/actions/setReminderSuggestionActions.ts | 48 +++++++++++++++++----- 1 file changed, 37 insertions(+), 11 deletions(-) (limited to 'apps/files_reminders/src') diff --git a/apps/files_reminders/src/actions/setReminderSuggestionActions.ts b/apps/files_reminders/src/actions/setReminderSuggestionActions.ts index 069a840ff71..eda95205182 100644 --- a/apps/files_reminders/src/actions/setReminderSuggestionActions.ts +++ b/apps/files_reminders/src/actions/setReminderSuggestionActions.ts @@ -36,6 +36,7 @@ interface ReminderOption { label: string ariaLabel: string dateString?: string + verboseDateString?: string action?: () => Promise } @@ -43,24 +44,32 @@ const laterToday: ReminderOption = { dateTimePreset: DateTimePreset.LaterToday, label: t('files_reminders', 'Later today'), ariaLabel: t('files_reminders', 'Set reminder for later today'), + dateString: '', + verboseDateString: '' } const tomorrow: ReminderOption = { dateTimePreset: DateTimePreset.Tomorrow, label: t('files_reminders', 'Tomorrow'), ariaLabel: t('files_reminders', 'Set reminder for tomorrow'), + dateString: '', + verboseDateString: '' } const thisWeekend: ReminderOption = { dateTimePreset: DateTimePreset.ThisWeekend, label: t('files_reminders', 'This weekend'), ariaLabel: t('files_reminders', 'Set reminder for this weekend'), + dateString: '', + verboseDateString: '' } const nextWeek: ReminderOption = { dateTimePreset: DateTimePreset.NextWeek, label: t('files_reminders', 'Next week'), ariaLabel: t('files_reminders', 'Set reminder for next week'), + dateString: '', + verboseDateString: '' } /** @@ -69,21 +78,17 @@ const nextWeek: ReminderOption = { * @param option The option to generate the action for * @return The file action or null if the option should not be shown */ -const generateFileAction = (option): FileAction|null => { - const dateTime = getDateTime(option.dateTimePreset) - if (!dateTime) { - return null - } +const generateFileAction = (option: ReminderOption): FileAction|null => { return new FileAction({ id: `set-reminder-${option.dateTimePreset}`, - displayName: () => `${option.label} – ${getDateString(dateTime)}`, - title: () => `${option.ariaLabel} – ${getVerboseDateString(dateTime)}`, + displayName: () => `${option.label} – ${option.dateString}`, + title: () => `${option.ariaLabel} – ${option.verboseDateString}`, // Empty svg to hide the icon iconSvgInline: () => '', - enabled: () => true, + enabled: () => Boolean(getDateTime(option.dateTimePreset)), parent: SET_REMINDER_MENU_ID, async exec(node: Node) { @@ -96,7 +101,7 @@ const generateFileAction = (option): FileAction|null => { // Set the reminder try { - await setReminder(node.fileid, dateTime) + await setReminder(node.fileid, getDateTime(option.dateTimePreset)!) showSuccess(t('files_reminders', 'Reminder set for "{fileName}"', { fileName: node.basename })) } catch (error) { logger.error('Failed to set reminder', { error }) @@ -110,7 +115,28 @@ const generateFileAction = (option): FileAction|null => { }) } +[laterToday, tomorrow, thisWeekend, nextWeek].forEach((option) => { + // Generate the initial date string + const dateTime = getDateTime(option.dateTimePreset) + if (!dateTime) { + return + } + option.dateString = getDateString(dateTime) + option.verboseDateString = getVerboseDateString(dateTime) + + + // Update the date string every 30 minutes + setInterval(() => { + const dateTime = getDateTime(option.dateTimePreset) + if (!dateTime) { + return + } + + // update the submenu remind options strings + option.dateString = getDateString(dateTime) + option.verboseDateString = getVerboseDateString(dateTime) + }, 1000 * 30 * 60) +}) + // Generate the default preset actions export const actions = [laterToday, tomorrow, thisWeekend, nextWeek] - .map(generateFileAction) - .filter(Boolean) as FileAction[] + .map(generateFileAction) as FileAction[] -- cgit v1.2.3