awa-ui 0.5.2

Web UI and JSON API for the Awa job queue
Documentation
/**
 * Reusable confirmation dialog using IntentUI Modal.
 * For destructive actions like draining a queue.
 */

import {
  Modal,
  ModalContent,
  ModalHeader,
  ModalBody,
  ModalFooter,
  ModalClose,
} from "@/components/ui/modal";
import { Button } from "@/components/ui/button";

interface ConfirmDialogProps {
  isOpen: boolean;
  onOpenChange: (open: boolean) => void;
  title: string;
  description: string;
  confirmLabel?: string;
  confirmIntent?: "primary" | "danger";
  onConfirm: () => void;
  isPending?: boolean;
}

export function ConfirmDialog({
  isOpen,
  onOpenChange,
  title,
  description,
  confirmLabel = "Confirm",
  confirmIntent = "danger",
  onConfirm,
  isPending,
}: ConfirmDialogProps) {
  return (
    <Modal isOpen={isOpen} onOpenChange={onOpenChange}>
      <ModalContent role="alertdialog" size="sm" closeButton={false}>
        <ModalHeader title={title} description={description} />
        <ModalBody>
          <p className="text-sm text-muted-fg">This action cannot be undone.</p>
        </ModalBody>
        <ModalFooter>
          <ModalClose intent="outline">Cancel</ModalClose>
          <Button
            intent={confirmIntent}
            onPress={() => {
              onConfirm();
              onOpenChange(false);
            }}
            isDisabled={isPending}
          >
            {confirmLabel}
          </Button>
        </ModalFooter>
      </ModalContent>
    </Modal>
  );
}