tercul-frontend/client/src/hooks/use-translation-api.ts
Damir Mukimov 4a23f496fa
Major frontend development updates
- Enhanced annotation system with improved inline editing
- Updated author components with new card and header designs
- Improved reading view with enhanced line numbering and controls
- Added new blog management features and tag management
- Updated UI components with improved accessibility and styling
- Enhanced search functionality with better filtering
- Added new dashboard features and activity feeds
- Improved translation selector and work comparison tools
- Updated GraphQL integration and API hooks
- Enhanced responsive design and mobile experience
2025-11-27 03:44:09 +01:00

112 lines
3.1 KiB
TypeScript

import type { CreateTranslation, UpdateTranslation } from "@shared/schema";
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
import type { TranslationSearchParams } from "@/api/translation-api-client";
import { translationApiClient } from "@/api/translation-api-client";
// Query hooks
export function useTranslation(translationId: string) {
return useQuery({
queryKey: ["translation", translationId],
queryFn: () => translationApiClient.getTranslation(translationId),
enabled: !!translationId,
});
}
export function useTranslations(params?: TranslationSearchParams) {
return useQuery({
queryKey: ["translations", params],
queryFn: () => translationApiClient.getTranslations(params),
});
}
export function useWorkTranslations(
workId: string,
params?: { language?: string },
) {
return useQuery({
queryKey: ["work-translations", workId, params],
queryFn: () => translationApiClient.getWorkTranslations(workId, params),
enabled: !!workId,
});
}
export function useTranslatorTranslations(translatorId: string) {
return useQuery({
queryKey: ["translator-translations", translatorId],
queryFn: () => translationApiClient.getTranslatorTranslations(translatorId),
enabled: !!translatorId,
});
}
// Mutation hooks
export function useCreateTranslation() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: (data: CreateTranslation) =>
translationApiClient.createTranslation(data),
onSuccess: (_, variables) => {
queryClient.invalidateQueries({ queryKey: ["translations"] });
if (variables.workId) {
queryClient.invalidateQueries({
queryKey: ["work-translations", variables.workId],
});
}
},
});
}
export function useCreateWorkTranslation() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: ({
workId,
data,
}: {
workId: string;
data: Omit<CreateTranslation, "workId">;
}) => translationApiClient.createWorkTranslation(workId, data),
onSuccess: (_, variables) => {
queryClient.invalidateQueries({
queryKey: ["work-translations", variables.workId],
});
queryClient.invalidateQueries({ queryKey: ["translations"] });
},
});
}
export function useUpdateTranslation() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: ({
translationId,
data,
}: {
translationId: string;
data: UpdateTranslation;
}) => translationApiClient.updateTranslation(translationId, data),
onSuccess: (_, variables) => {
queryClient.invalidateQueries({
queryKey: ["translation", variables.translationId],
});
queryClient.invalidateQueries({ queryKey: ["translations"] });
queryClient.invalidateQueries({ queryKey: ["work-translations"] });
},
});
}
export function useDeleteTranslation() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: (translationId: string) =>
translationApiClient.deleteTranslation(translationId),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ["translations"] });
queryClient.invalidateQueries({ queryKey: ["work-translations"] });
},
});
}