init
This commit is contained in:
71
frontend/src/hooks/useIdeas.ts
Normal file
71
frontend/src/hooks/useIdeas.ts
Normal file
@ -0,0 +1,71 @@
|
||||
import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
|
||||
import { ideasApi, type QueryIdeasParams } from '../services/ideas';
|
||||
import type { CreateIdeaDto, UpdateIdeaDto } from '../types/idea';
|
||||
import { useIdeasStore } from '../store/ideas';
|
||||
|
||||
const QUERY_KEY = 'ideas';
|
||||
|
||||
export function useIdeasQuery() {
|
||||
const { filters, sorting, pagination } = useIdeasStore();
|
||||
|
||||
const params: QueryIdeasParams = {
|
||||
...filters,
|
||||
...sorting,
|
||||
...pagination,
|
||||
};
|
||||
|
||||
return useQuery({
|
||||
queryKey: [QUERY_KEY, params],
|
||||
queryFn: () => ideasApi.getAll(params),
|
||||
});
|
||||
}
|
||||
|
||||
export function useIdeaQuery(id: string) {
|
||||
return useQuery({
|
||||
queryKey: [QUERY_KEY, id],
|
||||
queryFn: () => ideasApi.getOne(id),
|
||||
enabled: !!id,
|
||||
});
|
||||
}
|
||||
|
||||
export function useModulesQuery() {
|
||||
return useQuery({
|
||||
queryKey: [QUERY_KEY, 'modules'],
|
||||
queryFn: () => ideasApi.getModules(),
|
||||
staleTime: 60000, // Cache for 1 minute
|
||||
});
|
||||
}
|
||||
|
||||
export function useCreateIdea() {
|
||||
const queryClient = useQueryClient();
|
||||
|
||||
return useMutation({
|
||||
mutationFn: (dto: CreateIdeaDto) => ideasApi.create(dto),
|
||||
onSuccess: () => {
|
||||
queryClient.invalidateQueries({ queryKey: [QUERY_KEY] });
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
export function useUpdateIdea() {
|
||||
const queryClient = useQueryClient();
|
||||
|
||||
return useMutation({
|
||||
mutationFn: ({ id, dto }: { id: string; dto: UpdateIdeaDto }) =>
|
||||
ideasApi.update(id, dto),
|
||||
onSuccess: () => {
|
||||
queryClient.invalidateQueries({ queryKey: [QUERY_KEY] });
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
export function useDeleteIdea() {
|
||||
const queryClient = useQueryClient();
|
||||
|
||||
return useMutation({
|
||||
mutationFn: (id: string) => ideasApi.delete(id),
|
||||
onSuccess: () => {
|
||||
queryClient.invalidateQueries({ queryKey: [QUERY_KEY] });
|
||||
},
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user