import { observer } from "mobx-react-lite"; import { memo } from "react"; import ReactMarkdown from "react-markdown"; import rehypeKatex from "rehype-katex"; import rehypeRaw from "rehype-raw"; import remarkBreaks from "remark-breaks"; import remarkGfm from "remark-gfm"; import remarkMath from "remark-math"; import useCurrentUser from "@/hooks/useCurrentUser"; import { cn } from "@/lib/utils"; import { memoStore } from "@/store"; import { useTranslate } from "@/utils/i18n"; import { remarkPreserveType } from "@/utils/remark-plugins/remark-preserve-type"; import { remarkTag } from "@/utils/remark-plugins/remark-tag"; import { isSuperUser } from "@/utils/user"; import { CodeBlock } from "./CodeBlock"; import { createConditionalComponent, isTagNode, isTaskListItemNode } from "./ConditionalComponent"; import { useCompactLabel, useCompactMode } from "./hooks"; import { MemoContentContext } from "./MemoContentContext"; import { Tag } from "./Tag"; import { TaskListItem } from "./TaskListItem"; import type { MemoContentProps } from "./types"; import "katex/dist/katex.min.css"; const MemoContent = observer((props: MemoContentProps) => { const { className, contentClassName, content, memoName, onClick, onDoubleClick } = props; const t = useTranslate(); const currentUser = useCurrentUser(); const { containerRef: memoContentContainerRef, mode: showCompactMode, toggle: toggleCompactMode, } = useCompactMode(Boolean(props.compact)); const memo = memoName ? memoStore.getMemoByName(memoName) : null; const allowEdit = !props.readonly && memo && (currentUser?.name === memo.creator || isSuperUser(currentUser)); // Context for custom components const contextValue = { memoName, readonly: !allowEdit, disableFilter: props.disableFilter, parentPage: props.parentPage, containerRef: memoContentContainerRef, }; const compactLabel = useCompactLabel(showCompactMode, t as (key: string) => string); return (
( {children} ), }} > {content}
{showCompactMode === "ALL" && (
)} {showCompactMode !== undefined && (
)}
); }); export default memo(MemoContent);