Files
EventHubFrontAdmin/src/hooks/useUsers.ts
T

47 lines
1.6 KiB
TypeScript

import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
import { usersApi } from '../api/usersApi';
import { UserListParams } from '../types/api';
import { message } from 'antd';
import { normalizeData } from '../utils/normalize';
export const useUsers = (params: UserListParams) => {
return useQuery({
queryKey: ['users', params],
queryFn: async () => {
const res = await usersApi.getUsers(params);
return { data: normalizeData(res.data), total: res.total };
},
});
};
export const useUser = (id: string) => {
return useQuery({
queryKey: ['users', id],
queryFn: () => usersApi.getUser(id),
enabled: !!id && id !== '-',
});
};
export const useUpdateUser = () => {
const queryClient = useQueryClient();
return useMutation({
mutationFn: ({ id, data }: { id: string; data: Partial<User> }) => usersApi.updateUser(id, data),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['users'] });
message.success('Пользователь обновлен');
},
onError: () => message.error('Ошибка обновления'),
});
};
export const useDeleteUser = () => {
const queryClient = useQueryClient();
return useMutation({
mutationFn: (id: string) => usersApi.deleteUser(id),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['users'] });
message.success('Пользователь удален');
},
onError: () => message.error('Ошибка удаления'),
});
};