mirror of
https://github.com/docmost/docmost.git
synced 2025-11-13 08:02:37 +10:00
* 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
86 lines
2.4 KiB
TypeScript
86 lines
2.4 KiB
TypeScript
import { ActionIcon, Menu, Tooltip } from "@mantine/core";
|
|
import { IconDots, IconEdit, IconTrash, IconCircleCheck, IconCircleCheckFilled } from "@tabler/icons-react";
|
|
import { modals } from "@mantine/modals";
|
|
import { useTranslation } from "react-i18next";
|
|
import { useIsCloudEE } from "@/hooks/use-is-cloud-ee";
|
|
|
|
type CommentMenuProps = {
|
|
onEditComment: () => void;
|
|
onDeleteComment: () => void;
|
|
onResolveComment?: () => void;
|
|
canEdit?: boolean;
|
|
isResolved?: boolean;
|
|
isParentComment?: boolean;
|
|
};
|
|
|
|
function CommentMenu({
|
|
onEditComment,
|
|
onDeleteComment,
|
|
onResolveComment,
|
|
canEdit = true,
|
|
isResolved = false,
|
|
isParentComment = false
|
|
}: CommentMenuProps) {
|
|
const { t } = useTranslation();
|
|
const isCloudEE = useIsCloudEE();
|
|
|
|
//@ts-ignore
|
|
const openDeleteModal = () =>
|
|
modals.openConfirmModal({
|
|
title: t("Are you sure you want to delete this comment?"),
|
|
centered: true,
|
|
labels: { confirm: t("Delete"), cancel: t("Cancel") },
|
|
confirmProps: { color: "red" },
|
|
onConfirm: onDeleteComment,
|
|
});
|
|
|
|
return (
|
|
<Menu shadow="md" width={200}>
|
|
<Menu.Target>
|
|
<ActionIcon variant="default" style={{ border: "none" }}>
|
|
<IconDots size={20} stroke={2} />
|
|
</ActionIcon>
|
|
</Menu.Target>
|
|
|
|
<Menu.Dropdown>
|
|
{canEdit && (
|
|
<Menu.Item onClick={onEditComment} leftSection={<IconEdit size={14} />}>
|
|
{t("Edit comment")}
|
|
</Menu.Item>
|
|
)}
|
|
{isParentComment && (
|
|
isCloudEE ? (
|
|
<Menu.Item
|
|
onClick={onResolveComment}
|
|
leftSection={
|
|
isResolved ?
|
|
<IconCircleCheckFilled size={14} /> :
|
|
<IconCircleCheck size={14} />
|
|
}
|
|
>
|
|
{isResolved ? t("Re-open comment") : t("Resolve comment")}
|
|
</Menu.Item>
|
|
) : (
|
|
<Tooltip label={t("Available in enterprise edition")} position="left">
|
|
<Menu.Item
|
|
disabled
|
|
leftSection={<IconCircleCheck size={14} />}
|
|
>
|
|
{t("Resolve comment")}
|
|
</Menu.Item>
|
|
</Tooltip>
|
|
)
|
|
)}
|
|
<Menu.Item
|
|
leftSection={<IconTrash size={14} />}
|
|
onClick={openDeleteModal}
|
|
>
|
|
{t("Delete comment")}
|
|
</Menu.Item>
|
|
</Menu.Dropdown>
|
|
</Menu>
|
|
);
|
|
}
|
|
|
|
export default CommentMenu;
|