<script setup lang="ts"> import type { ConfirmDialogChoice, ConfirmDialogOptions } from '~/types' import DurationPicker from '~/components/modal/DurationPicker.vue' const props = defineProps<ConfirmDialogOptions>() const emit = defineEmits<{ (evt: 'choice', choice: ConfirmDialogChoice): void }>() const hasDuration = ref(false) const isValidDuration = ref(true) const duration = ref(60 * 60) // default to 1 hour const shouldMuteNotifications = ref(true) const isMute = computed(() => props.extraOptionType === 'mute') function handleChoice(choice: ConfirmDialogChoice['choice']) { const dialogChoice = { choice, ...isMute.value && { extraOptions: { mute: { duration: hasDuration.value ? duration.value : 0, notifications: shouldMuteNotifications.value, }, }, }, } emit('choice', dialogChoice) } </script> <template> <div flex="~ col" gap-6> <div font-bold text-lg> {{ title }} </div> <div v-if="description"> {{ description }} </div> <div v-if="isMute" flex-col flex gap-4> <CommonCheckbox v-model="hasDuration" :label="$t('confirm.mute_account.specify_duration')" prepend-checkbox checked-icon-color="text-primary" /> <DurationPicker v-if="hasDuration" v-model="duration" v-model:is-valid="isValidDuration" /> <CommonCheckbox v-model="shouldMuteNotifications" :label="$t('confirm.mute_account.notifications')" prepend-checkbox checked-icon-color="text-primary" /> </div> <div flex justify-end gap-2> <button btn-text @click="handleChoice('cancel')"> {{ cancel || $t('confirm.common.cancel') }} </button> <button btn-solid :disabled="!isValidDuration" @click="handleChoice('confirm')"> {{ confirm || $t('confirm.common.confirm') }} </button> </div> </div> </template>