Skip to content

Commit

Permalink
Merge pull request #43590 from nextcloud/backport/stable28/41670
Browse files Browse the repository at this point in the history
[stable28] fix(papercut): rerendered submenu actions for time sensitive actions
  • Loading branch information
Pytal committed Feb 15, 2024
2 parents 54d5930 + f4d3af9 commit c1bb1f3
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 14 deletions.
48 changes: 37 additions & 11 deletions apps/files_reminders/src/actions/setReminderSuggestionActions.ts
Expand Up @@ -36,31 +36,40 @@ interface ReminderOption {
label: string
ariaLabel: string
dateString?: string
verboseDateString?: string
action?: () => Promise<void>
}

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: ''
}

/**
Expand All @@ -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: () => '<svg></svg>',

enabled: () => true,
enabled: () => Boolean(getDateTime(option.dateTimePreset)),
parent: SET_REMINDER_MENU_ID,

async exec(node: Node) {
Expand All @@ -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 })
Expand All @@ -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[]

0 comments on commit c1bb1f3

Please sign in to comment.