adds statistics

This commit is contained in:
2026-02-16 19:15:23 +01:00
parent 2311cd8265
commit 9206453394
12 changed files with 613 additions and 58 deletions

View File

@@ -1,19 +1,24 @@
import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
import { timeEntriesApi } from '@/api/timeEntries';
import type { CreateTimeEntryInput, UpdateTimeEntryInput, TimeEntryFilters } from '@/types';
import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query";
import { timeEntriesApi } from "@/api/timeEntries";
import type {
CreateTimeEntryInput,
UpdateTimeEntryInput,
TimeEntryFilters,
StatisticsFilters,
} from "@/types";
export function useTimeEntries(filters?: TimeEntryFilters) {
const queryClient = useQueryClient();
const { data, isLoading, error } = useQuery({
queryKey: ['timeEntries', filters],
queryKey: ["timeEntries", filters],
queryFn: () => timeEntriesApi.getAll(filters),
});
const createTimeEntry = useMutation({
mutationFn: (input: CreateTimeEntryInput) => timeEntriesApi.create(input),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['timeEntries'] });
queryClient.invalidateQueries({ queryKey: ["timeEntries"] });
},
});
@@ -21,14 +26,14 @@ export function useTimeEntries(filters?: TimeEntryFilters) {
mutationFn: ({ id, input }: { id: string; input: UpdateTimeEntryInput }) =>
timeEntriesApi.update(id, input),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['timeEntries'] });
queryClient.invalidateQueries({ queryKey: ["timeEntries"] });
},
});
const deleteTimeEntry = useMutation({
mutationFn: (id: string) => timeEntriesApi.delete(id),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['timeEntries'] });
queryClient.invalidateQueries({ queryKey: ["timeEntries"] });
},
});
@@ -40,4 +45,17 @@ export function useTimeEntries(filters?: TimeEntryFilters) {
updateTimeEntry,
deleteTimeEntry,
};
}
}
export function useStatistics(filters?: StatisticsFilters) {
const { data, isLoading, error } = useQuery({
queryKey: ["statistics", filters],
queryFn: () => timeEntriesApi.getStatistics(filters),
});
return {
data,
isLoading,
error,
};
}