actual countdown

This commit is contained in:
Henry Jameson 2025-12-15 22:56:04 +02:00
commit db7e4a3434
5 changed files with 21 additions and 9 deletions

View file

@ -170,7 +170,7 @@ const SettingsModal = {
},
computed: {
...mapState(useInterfaceStore, {
temporaryChangesTimeoutId: store => store.temporaryChangesTimeoutId,
temporaryChangesCountdown: store => store.temporaryChangesCountdown,
currentSaveStateNotice: store => store.settings.currentSaveStateNotice,
modalActivated: store => store.settingsModalState !== 'hidden',
modalMode: store => store.settingsModalMode,

View file

@ -158,14 +158,14 @@
</div>
<teleport to="#modal">
<ConfirmModal
v-if="temporaryChangesTimeoutId"
v-if="temporaryChangesCountdown > 0"
:title="$t('settings.confirm_new_setting')"
:cancel-text="$t('settings.revert')"
:confirm-text="$t('settings.confirm')"
@cancelled="temporaryChangesRevert"
@accepted="temporaryChangesConfirm"
>
{{ $t('settings.confirm_new_question') }}
{{ $t('settings.confirm_new_question_countdown', temporaryChangesCountdown) }}
</ConfirmModal>
</teleport>
</Modal>

View file

@ -411,6 +411,7 @@
"appearance": "Appearance",
"confirm_new_setting": "Confirm new setting?",
"confirm_new_question": "Does this look ok? Setting will be reverted in 10 seconds.",
"confirm_new_question_countdown": "Does this look ok? Setting will be reverted in 1 second. | Does this look ok? Setting will be reverted in {count} seconds.",
"revert": "Revert",
"confirm": "Confirm",
"text_size": "Text and interface size",

View file

@ -116,7 +116,6 @@ const config = {
}
useInterfaceStore().setTemporaryChanges({
timeoutId: setTimeout(revert, 10000),
confirm,
revert
})

View file

@ -18,9 +18,10 @@ export const useInterfaceStore = defineStore('interface', {
paletteDataUsed: null,
themeNameUsed: null,
themeDataUsed: null,
temporaryChangesTimeoutId: null, // used for temporary options that revert after a timeout
temporaryChangesTimeoutId: null,
temporaryChangesCountdown: -1, // used for temporary options that revert after a timeout
temporaryChangesConfirm: () => {}, // used for applying temporary options
temporaryChangesRevert: () => {}, // used for reverting temporary options
temporaryChangesRevert: () => {}, // used for reverting temporary options
settingsModalState: 'hidden',
settingsModalLoadedUser: false,
settingsModalLoadedAdmin: false,
@ -44,14 +45,25 @@ export const useInterfaceStore = defineStore('interface', {
lastTimeline: null
}),
actions: {
setTemporaryChanges ({ timeoutId, confirm, revert }) {
this.temporaryChangesTimeoutId = timeoutId
setTemporaryChanges ({ confirm, revert }) {
this.temporaryChangesCountdown = 10
this.temporaryChangesConfirm = confirm
this.temporaryChangesRevert = revert
const countdownFunc = () => {
if (this.temporaryChangesCountdown === 1) {
this.temporaryChangesRevert()
this.clearTemporaryChanges()
} else {
this.temporaryChangesCountdown--
this.temporaryChangesTimeoutId = setTimeout(countdownFunc, 1000)
}
}
this.temporaryChangesTimeoutId = setTimeout(countdownFunc, 1000)
},
clearTemporaryChanges () {
clearTimeout(this.temporaryChangesTimeoutId)
this.temporaryChangesTimeoutId ?? clearTimeout(this.temporaryChangesTimeoutId)
this.temporaryChangesTimeoutId = null
this.temporaryChangesCountdown = -1
this.temporaryChangesConfirm = () => {}
this.temporaryChangesRevert = () => {}
},