117 lines
3.3 KiB
TypeScript
117 lines
3.3 KiB
TypeScript
import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
|
|
import { apiClient } from '@/lib/api';
|
|
import type {
|
|
Checklist,
|
|
ChecklistItem,
|
|
CreateChecklistDto,
|
|
UpdateChecklistDto,
|
|
CreateChecklistItemDto,
|
|
UpdateChecklistItemDto,
|
|
} from '@life-platform/shared';
|
|
|
|
export function useChecklists(filters?: { domainId?: string; status?: string }) {
|
|
return useQuery({
|
|
queryKey: ['checklists', filters],
|
|
queryFn: () =>
|
|
apiClient
|
|
.get<Checklist[]>('/checklists', { params: filters })
|
|
.then((r) => r.data),
|
|
});
|
|
}
|
|
|
|
export function useChecklist(id: string) {
|
|
return useQuery({
|
|
queryKey: ['checklists', id],
|
|
queryFn: () => apiClient.get<Checklist>(`/checklists/${id}`).then((r) => r.data),
|
|
enabled: !!id,
|
|
});
|
|
}
|
|
|
|
export function useCreateChecklist() {
|
|
const qc = useQueryClient();
|
|
return useMutation({
|
|
mutationFn: (data: CreateChecklistDto) =>
|
|
apiClient.post<Checklist>('/checklists', data).then((r) => r.data),
|
|
onSuccess: () => {
|
|
qc.invalidateQueries({ queryKey: ['checklists'] });
|
|
},
|
|
});
|
|
}
|
|
|
|
export function useUpdateChecklist() {
|
|
const qc = useQueryClient();
|
|
return useMutation({
|
|
mutationFn: ({ id, data }: { id: string; data: UpdateChecklistDto }) =>
|
|
apiClient.patch<Checklist>(`/checklists/${id}`, data).then((r) => r.data),
|
|
onSuccess: () => {
|
|
qc.invalidateQueries({ queryKey: ['checklists'] });
|
|
},
|
|
});
|
|
}
|
|
|
|
export function useDeleteChecklist() {
|
|
const qc = useQueryClient();
|
|
return useMutation({
|
|
mutationFn: (id: string) =>
|
|
apiClient.delete(`/checklists/${id}`).then(() => undefined),
|
|
onSuccess: () => {
|
|
qc.invalidateQueries({ queryKey: ['checklists'] });
|
|
},
|
|
});
|
|
}
|
|
|
|
export function useAddChecklistItem() {
|
|
const qc = useQueryClient();
|
|
return useMutation({
|
|
mutationFn: ({ checklistId, data }: { checklistId: string; data: CreateChecklistItemDto }) =>
|
|
apiClient.post<ChecklistItem>(`/checklists/${checklistId}/items`, data).then((r) => r.data),
|
|
onSuccess: () => {
|
|
qc.invalidateQueries({ queryKey: ['checklists'] });
|
|
},
|
|
});
|
|
}
|
|
|
|
export function useUpdateChecklistItem() {
|
|
const qc = useQueryClient();
|
|
return useMutation({
|
|
mutationFn: ({
|
|
checklistId,
|
|
itemId,
|
|
data,
|
|
}: {
|
|
checklistId: string;
|
|
itemId: string;
|
|
data: UpdateChecklistItemDto;
|
|
}) =>
|
|
apiClient
|
|
.patch<ChecklistItem>(`/checklists/${checklistId}/items/${itemId}`, data)
|
|
.then((r) => r.data),
|
|
onSuccess: () => {
|
|
qc.invalidateQueries({ queryKey: ['checklists'] });
|
|
},
|
|
});
|
|
}
|
|
|
|
export function useDeleteChecklistItem() {
|
|
const qc = useQueryClient();
|
|
return useMutation({
|
|
mutationFn: ({ checklistId, itemId }: { checklistId: string; itemId: string }) =>
|
|
apiClient.delete(`/checklists/${checklistId}/items/${itemId}`).then(() => undefined),
|
|
onSuccess: () => {
|
|
qc.invalidateQueries({ queryKey: ['checklists'] });
|
|
},
|
|
});
|
|
}
|
|
|
|
export function useToggleChecklistItem() {
|
|
const qc = useQueryClient();
|
|
return useMutation({
|
|
mutationFn: ({ checklistId, itemId }: { checklistId: string; itemId: string }) =>
|
|
apiClient
|
|
.post<ChecklistItem>(`/checklists/${checklistId}/items/${itemId}/toggle`)
|
|
.then((r) => r.data),
|
|
onSuccess: () => {
|
|
qc.invalidateQueries({ queryKey: ['checklists'] });
|
|
},
|
|
});
|
|
}
|