fix(task): require explicit confirmation before saving reminders

Prevent reminders from being saved to the API until the user clicks
Confirm, matching the behavior of the due/start/end date pickers.

- Remove @update:modelValue handler on DatepickerInline so date/time
  changes only update local state
- Change Confirm button condition from showFormSwitch to activeForm so
  it renders even when defaultRelativeTo is null
- Add confirmAndClose function that handles both absolute and relative
  reminder forms
- Remove debounce (useDebounceFn) since saves are now user-initiated

Refs #2208
This commit is contained in:
kolaente 2026-02-09 15:10:42 +01:00
parent 56eb5d3740
commit b65773eb8f
1 changed files with 11 additions and 7 deletions

View File

@ -52,14 +52,13 @@
<DatepickerInline
v-else-if="activeForm === 'absolute'"
v-model="reminderDate"
@update:modelValue="setReminderDateAndClose(close)"
/>
<XButton
v-if="showFormSwitch !== null"
v-if="activeForm !== null"
class="reminder__close-button"
:shadow="false"
@click="updateDataAndMaybeCloseNow(close)"
@click="confirmAndClose(close)"
>
{{ $t('misc.confirm') }}
</XButton>
@ -86,7 +85,6 @@ import Popup from '@/components/misc/Popup.vue'
import TaskReminderModel from '@/models/taskReminder'
import Card from '@/components/misc/Card.vue'
import SimpleButton from '@/components/input/SimpleButton.vue'
import {useDebounceFn} from '@vueuse/core'
const props = withDefaults(defineProps<{
modelValue?: ITaskReminder,
@ -170,7 +168,7 @@ function setReminderDateAndClose(close: () => void) {
: new Date(reminderDate.value)
reminder.value.relativeTo = null
reminder.value.relativePeriod = 0
updateDataAndMaybeClose(close)
updateDataAndMaybeCloseNow(close)
}
@ -180,8 +178,6 @@ function setReminderFromPreset(preset: ITaskReminder, close: () => void) {
close()
}
const updateDataAndMaybeClose = useDebounceFn(updateDataAndMaybeCloseNow, 500)
function updateDataAndMaybeCloseNow(close: () => void) {
updateData()
if (props.clearAfterUpdate) {
@ -189,6 +185,14 @@ function updateDataAndMaybeCloseNow(close: () => void) {
}
}
function confirmAndClose(close: () => void) {
if (activeForm.value === 'absolute') {
setReminderDateAndClose(close)
} else {
updateDataAndMaybeCloseNow(close)
}
}
function formatReminder(reminder: ITaskReminder) {
const period = secondsToPeriod(reminder.relativePeriod)