Backend: - Add getAllUsuarios() to get users from all tenants - Add updateUsuarioGlobal() to edit users and change their tenant - Add deleteUsuarioGlobal() for global user deletion - Add global admin check based on tenant RFC - Add new API routes: /usuarios/global/* Frontend: - Add UserListItem.tenantId and tenantName fields - Add /admin/usuarios page with full user management - Support filtering by tenant and search - Inline editing for name, role, and tenant assignment - Group users by company for better organization - Add "Admin Usuarios" menu item for admin navigation Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
69 lines
1.9 KiB
TypeScript
69 lines
1.9 KiB
TypeScript
import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
|
|
import * as usuariosApi from '../api/usuarios';
|
|
import type { UserInvite, UserUpdate } from '@horux/shared';
|
|
|
|
export function useUsuarios() {
|
|
return useQuery({
|
|
queryKey: ['usuarios'],
|
|
queryFn: usuariosApi.getUsuarios,
|
|
});
|
|
}
|
|
|
|
export function useInviteUsuario() {
|
|
const queryClient = useQueryClient();
|
|
return useMutation({
|
|
mutationFn: (data: UserInvite) => usuariosApi.inviteUsuario(data),
|
|
onSuccess: () => {
|
|
queryClient.invalidateQueries({ queryKey: ['usuarios'] });
|
|
},
|
|
});
|
|
}
|
|
|
|
export function useUpdateUsuario() {
|
|
const queryClient = useQueryClient();
|
|
return useMutation({
|
|
mutationFn: ({ id, data }: { id: string; data: UserUpdate }) => usuariosApi.updateUsuario(id, data),
|
|
onSuccess: () => {
|
|
queryClient.invalidateQueries({ queryKey: ['usuarios'] });
|
|
},
|
|
});
|
|
}
|
|
|
|
export function useDeleteUsuario() {
|
|
const queryClient = useQueryClient();
|
|
return useMutation({
|
|
mutationFn: (id: string) => usuariosApi.deleteUsuario(id),
|
|
onSuccess: () => {
|
|
queryClient.invalidateQueries({ queryKey: ['usuarios'] });
|
|
},
|
|
});
|
|
}
|
|
|
|
// Hooks globales (admin global)
|
|
export function useAllUsuarios() {
|
|
return useQuery({
|
|
queryKey: ['usuarios', 'global'],
|
|
queryFn: usuariosApi.getAllUsuarios,
|
|
});
|
|
}
|
|
|
|
export function useUpdateUsuarioGlobal() {
|
|
const queryClient = useQueryClient();
|
|
return useMutation({
|
|
mutationFn: ({ id, data }: { id: string; data: UserUpdate }) => usuariosApi.updateUsuarioGlobal(id, data),
|
|
onSuccess: () => {
|
|
queryClient.invalidateQueries({ queryKey: ['usuarios'] });
|
|
},
|
|
});
|
|
}
|
|
|
|
export function useDeleteUsuarioGlobal() {
|
|
const queryClient = useQueryClient();
|
|
return useMutation({
|
|
mutationFn: (id: string) => usuariosApi.deleteUsuarioGlobal(id),
|
|
onSuccess: () => {
|
|
queryClient.invalidateQueries({ queryKey: ['usuarios'] });
|
|
},
|
|
});
|
|
}
|