Files
coba-tampilan/composable/index.ts
2025-07-21 10:14:27 +07:00

89 lines
2.6 KiB
TypeScript

import { toast } from 'vue3-toastify';
interface useRoleInterface {
datas: {
dialog: Ref<boolean>
dialogDelete: Ref<boolean>
getData: Ref<any>
},
method: {
formTitle: (index: number) => string
typeForm: (index: number) => string
deleteItem: (data: any, index: number) => any
deleteConfirm: (data: any, index: number) => any
toastAlert: (msg: string, type: any) => void
openDeleteDialog: (value: boolean) => any
openFormDialog: (value: boolean) => any
findRole: (list: any, item: string) => any
paginated: (data: any) => void
}
}
const useRole = (): useRoleInterface => {
const dialog: Ref<boolean> = ref(false);
const dialogDelete: Ref<boolean> = ref(false);
const getData: Ref<any> = ref([]);
const page: Ref<number> = ref(0);
const limit: Ref<number> = ref(5);
const formTitle = (index: number): string => {
return index === -1 ? "New Item" : "Edit Item";
}
const typeForm = (index: number): string => {
return index === -1 ? "create" : "edit";
}
const deleteItem = (data: any, index: number): any => {
return data.splice(index, 1)
}
const deleteConfirm = (data: any, index: number): void => {
deleteItem(data, index);
openDeleteDialog(false);
toastAlert("Berhasil hapus data!", "success");
}
const toastAlert = (msg: string, type: any): void => {
toast(msg, {
type: type,
dangerouslyHTMLString: true,
autoClose: 2000,
})
}
const openDeleteDialog = (value: boolean): any => {
dialogDelete.value = value;
}
const openFormDialog = (value: boolean): any => {
dialog.value = value;
}
const findRole = (list: any, item: string): any => {
return list.find((data: any) => data.value === item);
}
const paginated = (data:any) => {
let skip = page.value * limit.value;
const roles = data.filter((i,index:number)=>index >= skip && index < skip + limit.value);
// const roles = await $fetch(`/api/roles/get?skip=${skip}`);
if (roles && roles.length > 0) {
getData.value.push(...roles);
page.value++;
}
}
return {
datas: {
dialog,
dialogDelete,
getData
},
method: {
formTitle,
typeForm,
deleteItem,
deleteConfirm,
toastAlert,
openDeleteDialog,
openFormDialog,
findRole,
paginated
}
}
}
export default useRole