RSS Git Download  Clone
Raw Blame History 2kB 60 lines
<script setup lang="ts">
import { computed } from 'vue'
import { useDisplay } from 'vuetify'
import { useCommonStore } from '../stores/common.store'
import { useI18nStore } from '../stores/i18n.store'
import P3xrDialog from './P3xrDialog.vue'

const commonStore = useCommonStore()
const i18n = useI18nStore()
const { width } = useDisplay()
const isWide = computed(() => width.value >= 600)

const isAlert = computed(() => commonStore.confirmOptions?.disableCancel === true)
const okLabel = computed(() => isAlert.value ? i18n.strings?.intention?.ok : i18n.strings?.intention?.sure)
const cancelLabel = computed(() => i18n.strings?.intention?.cancel)

function handleOk() {
    commonStore.resolveConfirm?.(true)
}

function handleCancel() {
    commonStore.resolveConfirm?.(false)
}
</script>

<template>
    <P3xrDialog
        v-if="commonStore.confirmOpen && commonStore.confirmOptions"
        :open="true"
        :title="commonStore.confirmOptions.title || ''"
        width="600px"
        @close="handleCancel"
    >
        <div v-html="commonStore.confirmOptions.message" />

        <template #actions>
            <v-btn
                v-if="!isAlert"
                variant="flat"
                color="warning"
                :aria-label="cancelLabel"
                @click="handleCancel"
            >
                <v-icon :class="{ 'mr-1': isWide }">mdi-close-circle</v-icon>
                <span v-if="isWide">{{ cancelLabel }}</span>
                <v-tooltip v-if="!isWide" activator="parent" location="top">{{ cancelLabel }}</v-tooltip>
            </v-btn>

            <v-btn
                variant="flat"
                color="primary"
                @click="handleOk"
            >
                <v-icon class="mr-1">mdi-check</v-icon>
                <span>{{ okLabel }}</span>
            </v-btn>
        </template>
    </P3xrDialog>
</template>