Files
HoruxDespachosNuevo/apps/web/lib/hooks/use-client-invitations.ts
Horux Dev 69bf7417a8 feat(invitations): reenviar invitaciones pendientes desde admin
Backend:
- client-invitations.service.ts: funcion resendInvitation() que
  genera nuevo token, actualiza expiresAt y reenvia el email.
- Controller + routes: POST /invitations/client/:id/resend

Frontend:
- API client + hook useResendInvitation con invalidacion de cache.
- Pagina /admin/invitar-cliente: boton 'Reenviar' por cada
  invitacion pendiente en la tabla.

Refs: docs/CAMBIOS-2026-05-09.md
2026-05-13 23:19:07 +00:00

42 lines
1.2 KiB
TypeScript

import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
import * as api from '@/lib/api/client-invitations';
export function useCreateInvitation() {
const qc = useQueryClient();
return useMutation({
mutationFn: api.createInvitation,
onSuccess: () => qc.invalidateQueries({ queryKey: ['client-invitations'] }),
});
}
export function useValidateInvitationToken(token: string) {
return useQuery({
queryKey: ['invitation-token', token],
queryFn: () => api.validateInvitationToken(token),
enabled: !!token,
retry: false,
});
}
export function useRegisterFromInvitation() {
return useMutation({
mutationFn: ({ token, data }: { token: string; data: Parameters<typeof api.registerFromInvitation>[1] }) =>
api.registerFromInvitation(token, data),
});
}
export function useResendInvitation() {
const qc = useQueryClient();
return useMutation({
mutationFn: api.resendInvitation,
onSuccess: () => qc.invalidateQueries({ queryKey: ['client-invitations'] }),
});
}
export function useClientInvitations() {
return useQuery({
queryKey: ['client-invitations'],
queryFn: api.getClientInvitations,
});
}