mirror of
https://github.com/docmost/docmost.git
synced 2026-05-07 22:53:08 +08:00
ca9558b246
* feat: resolve comment (EE) * Add resolve to comment mark in editor (EE) * comment ui permissions * sticky comment state tabs (EE) * cleanup * feat: add space_id to comments and allow space admins to delete any comment - Add space_id column to comments table with data migration from pages - Add last_edited_by_id, resolved_by_id, and updated_at columns to comments - Update comment deletion permissions to allow space admins to delete any comment - Backfill space_id on old comments * fix foreign keys
68 lines
1.6 KiB
TypeScript
68 lines
1.6 KiB
TypeScript
import { ActionIcon, Tooltip } from "@mantine/core";
|
|
import { IconCircleCheck, IconCircleCheckFilled } from "@tabler/icons-react";
|
|
import { useResolveCommentMutation } from "@/ee/comment/queries/comment-query";
|
|
import { useTranslation } from "react-i18next";
|
|
import { Editor } from "@tiptap/react";
|
|
|
|
interface ResolveCommentProps {
|
|
editor: Editor;
|
|
commentId: string;
|
|
pageId: string;
|
|
resolvedAt?: Date;
|
|
}
|
|
|
|
function ResolveComment({
|
|
editor,
|
|
commentId,
|
|
pageId,
|
|
resolvedAt,
|
|
}: ResolveCommentProps) {
|
|
const { t } = useTranslation();
|
|
const resolveCommentMutation = useResolveCommentMutation();
|
|
|
|
const isResolved = resolvedAt != null;
|
|
const iconColor = isResolved ? "green" : "gray";
|
|
|
|
const handleResolveToggle = async () => {
|
|
try {
|
|
await resolveCommentMutation.mutateAsync({
|
|
commentId,
|
|
pageId,
|
|
resolved: !isResolved,
|
|
});
|
|
|
|
if (editor) {
|
|
editor.commands.setCommentResolved(commentId, !isResolved);
|
|
}
|
|
|
|
//
|
|
} catch (error) {
|
|
console.error("Failed to toggle resolved state:", error);
|
|
}
|
|
};
|
|
|
|
return (
|
|
<Tooltip
|
|
label={isResolved ? t("Re-Open comment") : t("Resolve comment")}
|
|
position="top"
|
|
>
|
|
<ActionIcon
|
|
onClick={handleResolveToggle}
|
|
variant="subtle"
|
|
color={isResolved ? "green" : "gray"}
|
|
size="sm"
|
|
loading={resolveCommentMutation.isPending}
|
|
disabled={resolveCommentMutation.isPending}
|
|
>
|
|
{isResolved ? (
|
|
<IconCircleCheckFilled size={18} />
|
|
) : (
|
|
<IconCircleCheck size={18} />
|
|
)}
|
|
</ActionIcon>
|
|
</Tooltip>
|
|
);
|
|
}
|
|
|
|
export default ResolveComment;
|