Appearance
useConfirmDialog
useConfirmDialog mounts a confirmation dialog component on demand and returns an openConfirmDialog function that resolves to true or false.
Requirements
- Call
useConfirmDialoginside asetup()function. - The dialog component must expose an
open()method viadefineExpose. open()must return aPromise<boolean>.- The component receives an
optionsprop that matchesConfirmDialogOptions.
Example
vue
<template>
<button @click.prevent="click">
<slot />
</button>
</template>
<script setup lang="ts">
import { useConfirmDialog, type ConfirmDialogOptions } from '@blueprint-ts/core/vue'
import ConfirmDialog from '@/ConfirmDialog.vue'
const props = defineProps<{
confirmation?: ConfirmDialogOptions
}>()
const { openConfirmDialog } = useConfirmDialog(ConfirmDialog)
async function click() {
if (props.confirmation) {
const confirmed = await openConfirmDialog(props.confirmation)
if (confirmed) {
const request = new Request()
request.send()
}
}
}
</script>ConfirmDialogOptions
The options object must implement the following contract:
ts
import { ConfirmDialogSeverity } from '@blueprint-ts/core/vue'
export interface ConfirmDialogOptions {
getMessage(): string
getSeverity(): ConfirmDialogSeverity
getTitle(): string
getOkText(): string
getCancelText(): string
}The available severities are:
ts
export enum ConfirmDialogSeverity {
INFO = 'info',
WARNING = 'warning',
DANGER = 'danger'
}Dialog Component Contract
The dialog component must expose open() using defineExpose:
vue
<script setup lang="ts">
import { type ConfirmDialogOptions } from '@blueprint-ts/core/vue'
const props = defineProps<{ options: ConfirmDialogOptions }>()
async function open(): Promise<boolean> {
// open dialog and resolve with true or false
return true
}
defineExpose({ open })
</script>Mount Target
useConfirmDialog accepts an optional second parameter to control where the dialog is mounted:
ts
const { openConfirmDialog } = useConfirmDialog(ConfirmDialog, '#dialog-root')