import { DoneIcon, TrashIcon } from "outline-icons"; import * as React from "react"; import { toast } from "sonner"; import stores from "~/stores"; import Comment from "~/models/Comment"; import CommentDeleteDialog from "~/components/CommentDeleteDialog"; import history from "~/utils/history"; import { createAction } from ".."; import { DocumentSection } from "../sections"; export const deleteCommentFactory = ({ comment, onDelete, }: { comment: Comment; onDelete: () => void; }) => createAction({ name: ({ t }) => `${t("Delete")}…`, analyticsName: "Delete comment", section: DocumentSection, icon: , keywords: "trash", dangerous: true, visible: () => stores.policies.abilities(comment.id).delete, perform: ({ t, event }) => { event?.preventDefault(); event?.stopPropagation(); stores.dialogs.openModal({ title: t("Delete comment"), content: , }); }, }); export const resolveCommentFactory = ({ comment, onResolve, }: { comment: Comment; onResolve: () => void; }) => createAction({ name: ({ t }) => t("Mark as resolved"), analyticsName: "Resolve thread", section: DocumentSection, icon: , visible: () => stores.policies.abilities(comment.id).resolve, perform: async ({ t }) => { await comment.resolve(); history.replace({ ...history.location, state: null, }); onResolve(); toast.success(t("Thread resolved")); }, }); export const unresolveCommentFactory = ({ comment, onUnresolve, }: { comment: Comment; onUnresolve: () => void; }) => createAction({ name: ({ t }) => t("Mark as unresolved"), analyticsName: "Unresolve thread", section: DocumentSection, icon: , visible: () => stores.policies.abilities(comment.id).unresolve, perform: async () => { await comment.unresolve(); history.replace({ ...history.location, state: null, }); onUnresolve(); }, });