Update package dependencies, enhance README for clarity, and implement new features in the admin panel and script detail pages. Added support for collections, improved script submission previews, and refactored comment handling in the script detail view.
This commit is contained in:
95
src/hooks/useUsers.ts
Normal file
95
src/hooks/useUsers.ts
Normal file
@ -0,0 +1,95 @@
|
||||
import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
|
||||
import * as usersApi from '@/lib/api/users';
|
||||
import { showSuccess, showError } from '@/utils/toast';
|
||||
|
||||
// Query keys
|
||||
export const userKeys = {
|
||||
all: ['users'] as const,
|
||||
lists: () => [...userKeys.all, 'list'] as const,
|
||||
details: () => [...userKeys.all, 'detail'] as const,
|
||||
detail: (id: string) => [...userKeys.details(), id] as const,
|
||||
search: (query: string) => [...userKeys.all, 'search', query] as const,
|
||||
};
|
||||
|
||||
// Get user by ID
|
||||
export function useUser(id: string) {
|
||||
return useQuery({
|
||||
queryKey: userKeys.detail(id),
|
||||
queryFn: () => usersApi.getUserById(id),
|
||||
enabled: !!id,
|
||||
staleTime: 5 * 60 * 1000,
|
||||
});
|
||||
}
|
||||
|
||||
// Get all users (admin only)
|
||||
export function useUsers(limit?: number, offset?: number) {
|
||||
return useQuery({
|
||||
queryKey: [...userKeys.lists(), limit, offset],
|
||||
queryFn: () => usersApi.getAllUsers(limit, offset),
|
||||
staleTime: 5 * 60 * 1000,
|
||||
});
|
||||
}
|
||||
|
||||
// Search users
|
||||
export function useSearchUsers(query: string, limit?: number) {
|
||||
return useQuery({
|
||||
queryKey: userKeys.search(query),
|
||||
queryFn: () => usersApi.searchUsers(query, limit),
|
||||
enabled: !!query && query.length >= 2,
|
||||
staleTime: 2 * 60 * 1000, // 2 minutes for search results
|
||||
});
|
||||
}
|
||||
|
||||
// Create user mutation
|
||||
export function useCreateUser() {
|
||||
const queryClient = useQueryClient();
|
||||
|
||||
return useMutation({
|
||||
mutationFn: usersApi.createUser,
|
||||
onSuccess: () => {
|
||||
queryClient.invalidateQueries({ queryKey: userKeys.lists() });
|
||||
showSuccess('User created successfully!');
|
||||
},
|
||||
onError: (error: any) => {
|
||||
showError(error.message || 'Failed to create user');
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
// Update user mutation
|
||||
export function useUpdateUser() {
|
||||
const queryClient = useQueryClient();
|
||||
|
||||
return useMutation({
|
||||
mutationFn: ({ id, data }: { id: string; data: usersApi.UpdateUserData }) =>
|
||||
usersApi.updateUser(id, data),
|
||||
onSuccess: (data) => {
|
||||
queryClient.invalidateQueries({ queryKey: userKeys.detail(data.id) });
|
||||
queryClient.invalidateQueries({ queryKey: userKeys.lists() });
|
||||
showSuccess('User updated successfully!');
|
||||
},
|
||||
onError: (error: any) => {
|
||||
showError(error.message || 'Failed to update user');
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
// Update user permissions mutation (admin only)
|
||||
export function useUpdateUserPermissions() {
|
||||
const queryClient = useQueryClient();
|
||||
|
||||
return useMutation({
|
||||
mutationFn: ({ id, permissions }: {
|
||||
id: string;
|
||||
permissions: { isAdmin?: boolean; isModerator?: boolean }
|
||||
}) => usersApi.updateUserPermissions(id, permissions),
|
||||
onSuccess: (data) => {
|
||||
queryClient.invalidateQueries({ queryKey: userKeys.detail(data.id) });
|
||||
queryClient.invalidateQueries({ queryKey: userKeys.lists() });
|
||||
showSuccess('User permissions updated successfully!');
|
||||
},
|
||||
onError: (error: any) => {
|
||||
showError(error.message || 'Failed to update user permissions');
|
||||
},
|
||||
});
|
||||
}
|
Reference in New Issue
Block a user