first commit
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
import { router } from '@inertiajs/vue3';
|
||||
import { useConfirm } from '@/composables/useConfirm';
|
||||
import { useTranslations } from '@/composables/useVanguard';
|
||||
|
||||
interface ConfirmDeleteOptions {
|
||||
/** Endpoint to DELETE. */
|
||||
url: string;
|
||||
/** Dialog heading. Defaults to "Please Confirm". */
|
||||
title?: string;
|
||||
/** Dialog body copy. */
|
||||
message: string;
|
||||
/** Confirm button label. Defaults to "Yes, delete it!". */
|
||||
confirmLabel?: string;
|
||||
/** HTTP verb, for the handful of destructive actions that are not DELETE. */
|
||||
method?: 'delete' | 'put' | 'post';
|
||||
onSuccess?: () => void;
|
||||
}
|
||||
|
||||
/**
|
||||
* Confirm a destructive action, then send it through the Inertia router.
|
||||
*
|
||||
* Every delete in the application goes through here, so the confirmation copy
|
||||
* and the request shape stay consistent.
|
||||
*/
|
||||
export function useConfirmDelete() {
|
||||
const confirm = useConfirm();
|
||||
const { __ } = useTranslations();
|
||||
|
||||
function confirmDelete(options: ConfirmDeleteOptions) {
|
||||
confirm.require({
|
||||
header: options.title ?? __('Please Confirm'),
|
||||
message: options.message,
|
||||
cancelLabel: __('Cancel'),
|
||||
confirmLabel: options.confirmLabel ?? __('Yes, delete it!'),
|
||||
severity: 'danger',
|
||||
accept: () => {
|
||||
router[options.method ?? 'delete'](
|
||||
options.url,
|
||||
{},
|
||||
{ preserveScroll: true, onSuccess: options.onSuccess },
|
||||
);
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
return { confirmDelete };
|
||||
}
|
||||
Reference in New Issue
Block a user