diff --git a/resources/js/composables/useDestroy.ts b/resources/js/composables/useDestroy.ts new file mode 100644 index 0000000..494d0e8 --- /dev/null +++ b/resources/js/composables/useDestroy.ts @@ -0,0 +1,46 @@ +import { router } from '@inertiajs/vue3'; +import { ref } from 'vue'; +import { toast } from 'vue-sonner'; + +interface UseDestroyOptions { + url: string; + preserveScroll?: boolean; + errorMessage?: string; + onSuccess?: () => void; + onError?: (errors: Record) => string | void; +} + +export function useDestroy({ url, preserveScroll = true, errorMessage, onSuccess, onError }: UseDestroyOptions) { + const open = ref(false); + const processing = ref(false); + + function destroy() { + processing.value = true; + + router.delete(url, { + preserveScroll, + onSuccess: () => { + open.value = false; + onSuccess?.(); + }, + onError: (errors) => { + if (onError) { + const result = onError(errors); + if (typeof result === 'string') { + toast.error(result); + return; + } + } + + if (errorMessage) { + toast.error(errorMessage); + } + }, + onFinish: () => { + processing.value = false; + }, + }); + } + + return { open, processing, destroy }; +} diff --git a/resources/js/pages/admin/finance/cash/table/data-table-actions.vue b/resources/js/pages/admin/finance/cash/table/data-table-actions.vue index 55981e5..63615ed 100644 --- a/resources/js/pages/admin/finance/cash/table/data-table-actions.vue +++ b/resources/js/pages/admin/finance/cash/table/data-table-actions.vue @@ -1,12 +1,11 @@