import { ref } from 'vue' // Handlers import { type ToastFn, handleAsyncAction } from '~/handlers/_handler' // Services import { postSourceDevice, patchSourceDevice, removeSourceDevice } from '~/services/device.service' const recId = ref(0) const recAction = ref('') const recItem = ref(null) const isReadonly = ref(false) const isProcessing = ref(false) const isFormEntryDialogOpen = ref(false) const isRecordConfirmationOpen = ref(false) function onResetState() { recId.value = 0 recAction.value = '' recItem.value = null } export async function handleActionSave( values: any, refresh: () => void, reset: () => void, toast: ToastFn ) { isProcessing.value = true; await handleAsyncAction<[any], any>({ action: postSourceDevice, args: [values], toast, successMessage: 'Data berhasil disimpan', errorMessage: 'Gagal menyimpan data', onSuccess: () => { isFormEntryDialogOpen.value = false; if (refresh) refresh(); }, onFinally: (isSuccess: boolean) => { if (isSuccess) setTimeout(reset, 500); isProcessing.value = false; }, }); } export async function handleActionEdit( id: number | string, values: any, refresh: () => void, reset: () => void, toast: ToastFn ) { isProcessing.value = true; await handleAsyncAction<[number | string, any], any>({ action: patchSourceDevice, args: [id, values], toast, successMessage: 'Data berhasil diubah', errorMessage: 'Gagal mengubah data', onSuccess: () => { isFormEntryDialogOpen.value = false; if (refresh) refresh(); }, onFinally: (isSuccess: boolean) => { if (isSuccess) setTimeout(reset, 500); isProcessing.value = false; }, }); } export async function handleActionRemove( id: number | string, refresh: () => void, toast: ToastFn ) { isProcessing.value = true; await handleAsyncAction<[number | string], any>({ action: removeSourceDevice, args: [id], toast, successMessage: 'Data berhasil dihapus', errorMessage: 'Gagal menghapus data', onSuccess: () => { if (refresh) refresh(); }, onFinally: () => { onResetState(); isProcessing.value = false; }, }); } export function handleCancelForm(reset: () => void) { isFormEntryDialogOpen.value = false setTimeout(() => { reset() }, 500) } export { recId, recAction, recItem, isReadonly, isProcessing, isFormEntryDialogOpen, isRecordConfirmationOpen }