dstpabuaran.com/resources/js/components/confirm-dialog.tsx
Yoga Pangestu e93fd181ee feat: implement category management with CRUD functionality and integrate sluggable for SEO-friendly URLs
- Added CategoryController for handling category operations.
- Created CategoryRequest for validation of category data.
- Introduced CategoryService for business logic related to categories.
- Implemented sluggable functionality in the Category model for automatic slug generation.
- Developed UI components for category management, including a data table and dialogs for creating and editing categories.
- Updated routes to include resourceful routes for categories.
2026-07-29 01:11:53 +07:00

60 lines
1.6 KiB
TypeScript

import { Button } from '@/components/ui/button';
import {
Dialog,
DialogContent,
DialogDescription,
DialogFooter,
DialogHeader,
DialogTitle,
} from '@/components/ui/dialog';
type ConfirmDialogProps = {
open: boolean;
onOpenChange: (open: boolean) => void;
title: string;
description: string;
confirmLabel?: string;
cancelLabel?: string;
variant?: 'default' | 'destructive';
onConfirm: () => void;
loading?: boolean;
};
export function ConfirmDialog({
open,
onOpenChange,
title,
description,
confirmLabel = 'Konfirmasi',
cancelLabel = 'Batal',
variant = 'destructive',
onConfirm,
loading = false,
}: ConfirmDialogProps) {
return (
<Dialog open={open} onOpenChange={onOpenChange}>
<DialogContent>
<DialogHeader>
<DialogTitle>{title}</DialogTitle>
<DialogDescription>{description}</DialogDescription>
</DialogHeader>
<DialogFooter>
<Button
variant="outline"
onClick={() => onOpenChange(false)}
>
{cancelLabel}
</Button>
<Button
variant={variant}
onClick={onConfirm}
disabled={loading}
>
{confirmLabel}
</Button>
</DialogFooter>
</DialogContent>
</Dialog>
);
}