CityTracker/client/src/hooks/useUsers.ts
Claudio Schaad 3debb1ce1e Add CityTracker v1: map-based city tracker with multi-user support
React/Vite frontend and Express/SQLite backend for tracking visited and
planned cities on a map, with per-city notes, photos, links, and
participant-based sharing between family members. Includes session auth
with admin-managed user accounts, an OSM/Nominatim geocoding proxy, and a
single-image Docker deployment.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-20 20:29:25 +02:00

41 lines
1.3 KiB
TypeScript

import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
import type { CreateUserInput, UpdateUserInput, ResetPasswordInput } from '@citytracker/shared';
import * as usersApi from '../api/users';
const USERS_KEY = ['users'];
export function useUsers() {
return useQuery({ queryKey: USERS_KEY, queryFn: usersApi.listUsers });
}
export function useCreateUser() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: (input: CreateUserInput) => usersApi.createUser(input),
onSuccess: () => queryClient.invalidateQueries({ queryKey: USERS_KEY }),
});
}
export function useUpdateUser() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: ({ id, input }: { id: number; input: UpdateUserInput }) =>
usersApi.updateUser(id, input),
onSuccess: () => queryClient.invalidateQueries({ queryKey: USERS_KEY }),
});
}
export function useResetPassword() {
return useMutation({
mutationFn: ({ id, input }: { id: number; input: ResetPasswordInput }) =>
usersApi.resetPassword(id, input),
});
}
export function useDeleteUser() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: (id: number) => usersApi.deleteUser(id),
onSuccess: () => queryClient.invalidateQueries({ queryKey: USERS_KEY }),
});
}