Skip to content

useConfirmDialog

A composable for driving BvDialog confirm/cancel flows. Returns a promise that resolves to true when the user confirms, false when cancelled. Often used with useNotification for success/error feedback.

Basic Usage

vue
<template>
  <BvButton @click="handleDelete">Delete</BvButton>

  <BvDialog v-model:open="isOpen" :caption="caption">
    <p>{{ description }}</p>
    <template #footer>
      <BvButton variant="tertiary" @click="handleCancel">Cancel</BvButton>
      <BvButton variant="primary" @click="handleConfirm">Confirm</BvButton>
    </template>
  </BvDialog>
</template>

<script setup>
import { BvButton, BvDialog } from "@baklavue/ui";
import { useConfirmDialog, useNotification } from "@baklavue/composables";

const { success } = useNotification();
const {
  confirm,
  isOpen,
  caption,
  description,
  handleConfirm,
  handleCancel,
} = useConfirmDialog();

const handleDelete = async () => {
  const ok = await confirm({
    caption: "Delete item?",
    description: "Are you sure? This action cannot be undone.",
  });
  if (ok) {
    // Perform delete
    success({ description: "Deleted successfully" });
  }
};
</script>

With Async Action

vue
<script setup>
import { useConfirmDialog, useNotification } from "@baklavue/composables";

const { success, error } = useNotification();
const { confirm, isOpen, caption, description, handleConfirm, handleCancel, isPending } =
  useConfirmDialog();

const handleDelete = async () => {
  const ok = await confirm({
    caption: "Delete item?",
    description: "This cannot be undone.",
  });
  if (ok) {
    try {
      await api.deleteItem(id);
      success({ description: "Deleted" });
    } catch (e) {
      error({ description: e.message });
    }
  }
};
</script>

API

Return Value

PropertyTypeDescription
confirm(options?) => Promise<boolean>Opens dialog, returns promise
isOpenRef<boolean>Dialog visibility
captionRef<string>Dialog title
descriptionRef<string>Dialog body text
isPendingRef<boolean>True while dialog is open
handleConfirm() => voidWire to Confirm button
handleCancel() => voidWire to Cancel button
close(result: boolean) => voidClose with result

Options

typescript
interface ConfirmDialogOptions {
  caption?: string;   // Dialog title
  description?: string; // Dialog body
}

TypeScript Support

typescript
import { useConfirmDialog, type ConfirmDialogOptions } from "@baklavue/composables";

const { confirm } = useConfirmDialog();
const ok = await confirm({ caption: "Confirm?", description: "Sure?" });