This commit is contained in:
2025-12-29 16:58:56 +03:00
commit 524f3ebf23
62 changed files with 30925 additions and 0 deletions

View 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] });
},
});
}