import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; import { apiClient, ApiResponse } from '../../../lib/api-client'; // import { toast } from 'react-hot-toast'; // Tipe untuk model User export interface User { id: string; name: string; email: string; role: string; created_at: string; updated_at: string; } // Fungsi untuk mendapatkan daftar pengguna export const getUsers = async (): Promise => { const response = await apiClient.get>('/users'); return response.data.data || []; }; // Hook untuk query daftar pengguna export const useUsers = () => { return useQuery({ queryKey: ['users'], queryFn: getUsers, }); }; // Fungsi untuk mendapatkan detail pengguna export const getUser = async (id: string): Promise => { const response = await apiClient.get>(`/users/${id}`); if (!response.data.data) { throw new Error('User not found'); } return response.data.data; }; // Hook untuk query detail pengguna export const useUser = (id: string) => { return useQuery({ queryKey: ['users', id], queryFn: () => getUser(id), enabled: !!id, }); }; // Interface untuk data pembuatan atau pembaruan pengguna export interface UserFormData { name: string; email: string; password?: string; role: string; } // Fungsi untuk membuat pengguna baru export const createUser = async (userData: UserFormData): Promise => { const response = await apiClient.post>('/users', userData); return response.data.data!; }; // Hook untuk mutasi pembuatan pengguna export const useCreateUser = () => { const queryClient = useQueryClient(); return useMutation({ mutationFn: createUser, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['users'] }); // toast.success('Pengguna berhasil dibuat'); }, // onError: (error: unknown) => { // const errors = extractApiErrors(error); // Object.values(errors).forEach((message) => { // // toast.error(message); // }); // }, }); }; // Fungsi untuk memperbarui pengguna export const updateUser = async ({ id, data }: { id: string; data: UserFormData }): Promise => { const response = await apiClient.put>(`/users/${id}`, data); return response.data.data!; }; // Hook untuk mutasi pembaruan pengguna export const useUpdateUser = () => { const queryClient = useQueryClient(); return useMutation({ mutationFn: updateUser, onSuccess: (data) => { queryClient.invalidateQueries({ queryKey: ['users'] }); queryClient.invalidateQueries({ queryKey: ['users', data.id] }); // toast.success('Pengguna berhasil diperbarui'); }, // onError: (error: unknown) => { // const errors = extractApiErrors(error); // Object.values(errors).forEach((message) => { // // toast.error(message); // }); // }, }); }; // Fungsi untuk menghapus pengguna export const deleteUser = async (id: string): Promise => { await apiClient.delete>(`/users/${id}`); }; // Hook untuk mutasi penghapusan pengguna export const useDeleteUser = () => { const queryClient = useQueryClient(); return useMutation({ mutationFn: deleteUser, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['users'] }); // toast.success('Pengguna berhasil dihapus'); }, // onError: (error: unknown) => { // const errors = extractApiErrors(error); // Object.values(errors).forEach((message) => { // // toast.error(message); // }); // }, }); };