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:
2025-08-15 20:29:02 +01:00
parent 5fdfe3e790
commit ef211ebe0a
27 changed files with 3457 additions and 353 deletions

95
src/hooks/useUsers.ts Normal file
View 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');
},
});
}