mirror of
https://github.com/docmost/docmost.git
synced 2025-11-13 15:12:39 +10:00
* feat: support i18n * feat: wip support i18n * feat: complete space translation * feat: complete page translation * feat: update space translation * feat: update workspace translation * feat: update group translation * feat: update workspace translation * feat: update page translation * feat: update user translation * chore: update pnpm-lock * feat: add query translation * refactor: merge to single file * chore: remove necessary code * feat: save language to BE * fix: only load current language * feat: save language to locale column * fix: cleanups * add language menu to preferences page * new translations * translate editor * Translate editor placeholders * translate space selection component --------- Co-authored-by: Philip Okugbe <phil@docmost.com> Co-authored-by: Philip Okugbe <16838612+Philipinho@users.noreply.github.com>
142 lines
3.8 KiB
TypeScript
142 lines
3.8 KiB
TypeScript
import {
|
|
useMutation,
|
|
useQuery,
|
|
useQueryClient,
|
|
UseQueryResult,
|
|
} from "@tanstack/react-query";
|
|
import {
|
|
createComment,
|
|
deleteComment,
|
|
getPageComments,
|
|
resolveComment,
|
|
updateComment,
|
|
} from "@/features/comment/services/comment-service";
|
|
import {
|
|
ICommentParams,
|
|
IComment,
|
|
IResolveComment,
|
|
} from "@/features/comment/types/comment.types";
|
|
import { notifications } from "@mantine/notifications";
|
|
import { IPagination } from "@/lib/types.ts";
|
|
import { useTranslation } from "react-i18next";
|
|
|
|
export const RQ_KEY = (pageId: string) => ["comments", pageId];
|
|
|
|
export function useCommentsQuery(
|
|
params: ICommentParams,
|
|
): UseQueryResult<IPagination<IComment>, Error> {
|
|
return useQuery({
|
|
queryKey: RQ_KEY(params.pageId),
|
|
queryFn: () => getPageComments(params),
|
|
enabled: !!params.pageId,
|
|
});
|
|
}
|
|
|
|
export function useCreateCommentMutation() {
|
|
const queryClient = useQueryClient();
|
|
const { t } = useTranslation();
|
|
|
|
return useMutation<IComment, Error, Partial<IComment>>({
|
|
mutationFn: (data) => createComment(data),
|
|
onSuccess: (data) => {
|
|
//const newComment = data;
|
|
// let comments = queryClient.getQueryData(RQ_KEY(data.pageId));
|
|
// if (comments) {
|
|
//comments = prevComments => [...prevComments, newComment];
|
|
//queryClient.setQueryData(RQ_KEY(data.pageId), comments);
|
|
//}
|
|
|
|
queryClient.refetchQueries({ queryKey: RQ_KEY(data.pageId) });
|
|
notifications.show({ message: t("Comment created successfully") });
|
|
},
|
|
onError: (error) => {
|
|
notifications.show({
|
|
message: t("Error creating comment"),
|
|
color: "red",
|
|
});
|
|
},
|
|
});
|
|
}
|
|
|
|
export function useUpdateCommentMutation() {
|
|
const { t } = useTranslation();
|
|
|
|
return useMutation<IComment, Error, Partial<IComment>>({
|
|
mutationFn: (data) => updateComment(data),
|
|
onSuccess: (data) => {
|
|
notifications.show({ message: t("Comment updated successfully") });
|
|
},
|
|
onError: (error) => {
|
|
notifications.show({
|
|
message: t("Failed to update comment"),
|
|
color: "red",
|
|
});
|
|
},
|
|
});
|
|
}
|
|
|
|
export function useDeleteCommentMutation(pageId?: string) {
|
|
const queryClient = useQueryClient();
|
|
const { t } = useTranslation();
|
|
|
|
return useMutation({
|
|
mutationFn: (commentId: string) => deleteComment(commentId),
|
|
onSuccess: (data, variables) => {
|
|
const comments = queryClient.getQueryData(
|
|
RQ_KEY(pageId),
|
|
) as IPagination<IComment>;
|
|
|
|
if (comments && comments.items) {
|
|
const commentId = variables;
|
|
const newComments = comments.items.filter(
|
|
(comment) => comment.id !== commentId,
|
|
);
|
|
queryClient.setQueryData(RQ_KEY(pageId), {
|
|
...comments,
|
|
items: newComments,
|
|
});
|
|
}
|
|
|
|
notifications.show({ message: t("Comment deleted successfully") });
|
|
},
|
|
onError: (error) => {
|
|
notifications.show({
|
|
message: t("Failed to delete comment"),
|
|
color: "red",
|
|
});
|
|
},
|
|
});
|
|
}
|
|
|
|
export function useResolveCommentMutation() {
|
|
const queryClient = useQueryClient();
|
|
const { t } = useTranslation();
|
|
|
|
return useMutation({
|
|
mutationFn: (data: IResolveComment) => resolveComment(data),
|
|
onSuccess: (data: IComment, variables) => {
|
|
const currentComments = queryClient.getQueryData(
|
|
RQ_KEY(data.pageId),
|
|
) as IComment[];
|
|
|
|
/*
|
|
if (currentComments) {
|
|
const updatedComments = currentComments.map((comment) =>
|
|
comment.id === variables.commentId
|
|
? { ...comment, ...data }
|
|
: comment,
|
|
);
|
|
queryClient.setQueryData(RQ_KEY(data.pageId), updatedComments);
|
|
}*/
|
|
|
|
notifications.show({ message: t("Comment resolved successfully") });
|
|
},
|
|
onError: (error) => {
|
|
notifications.show({
|
|
message: t("Failed to resolve comment"),
|
|
color: "red",
|
|
});
|
|
},
|
|
});
|
|
}
|