import { Switch, Chip, ChipDelete } from "@mui/joy"; import { Button, Input } from "@usememos/mui"; import { isEqual, uniq } from "lodash-es"; import { CheckIcon } from "lucide-react"; import { useState } from "react"; import { toast } from "react-hot-toast"; import { workspaceSettingNamePrefix } from "@/store/v1"; import { workspaceStore } from "@/store/v2"; import { WorkspaceMemoRelatedSetting } from "@/types/proto/api/v1/workspace_setting_service"; import { WorkspaceSettingKey } from "@/types/proto/store/workspace_setting"; import { useTranslate } from "@/utils/i18n"; const MemoRelatedSettings = () => { const t = useTranslate(); const originalSetting = WorkspaceMemoRelatedSetting.fromPartial( workspaceStore.getWorkspaceSettingByKey(WorkspaceSettingKey.MEMO_RELATED)?.memoRelatedSetting || {}, ); const [memoRelatedSetting, setMemoRelatedSetting] = useState(originalSetting); const [editingReaction, setEditingReaction] = useState(""); const updatePartialSetting = (partial: Partial) => { const newWorkspaceMemoRelatedSetting = WorkspaceMemoRelatedSetting.fromPartial({ ...memoRelatedSetting, ...partial, }); setMemoRelatedSetting(newWorkspaceMemoRelatedSetting); }; const upsertReaction = () => { if (!editingReaction) { return; } updatePartialSetting({ reactions: uniq([...memoRelatedSetting.reactions, editingReaction.trim()]) }); setEditingReaction(""); }; const updateSetting = async () => { if (memoRelatedSetting.reactions.length === 0) { toast.error("Reactions must not be empty."); return; } try { await workspaceStore.upsertWorkspaceSetting({ name: `${workspaceSettingNamePrefix}${WorkspaceSettingKey.MEMO_RELATED}`, memoRelatedSetting, }); } catch (error: any) { toast.error(error.details); console.error(error); return; } toast.success(t("message.update-succeed")); }; return (

{t("setting.memo-related-settings.title")}

{t("setting.system-section.disable-public-memos")} updatePartialSetting({ disallowPublicVisibility: event.target.checked })} />
{t("setting.system-section.display-with-updated-time")} updatePartialSetting({ displayWithUpdateTime: event.target.checked })} />
{t("setting.system-section.enable-auto-compact")} updatePartialSetting({ enableAutoCompact: event.target.checked })} />
{t("setting.memo-related-settings.enable-link-preview")} updatePartialSetting({ enableLinkPreview: event.target.checked })} />
{t("setting.memo-related-settings.enable-memo-comments")} updatePartialSetting({ enableComment: event.target.checked })} />
{t("setting.memo-related-settings.enable-memo-location")} updatePartialSetting({ enableLocation: event.target.checked })} />
{t("setting.system-section.enable-double-click-to-edit")} updatePartialSetting({ enableDoubleClickEdit: event.target.checked })} />
{t("setting.system-section.disable-markdown-shortcuts-in-editor")} updatePartialSetting({ disableMarkdownShortcuts: event.target.checked })} />
{t("setting.memo-related-settings.content-lenght-limit")} updatePartialSetting({ contentLengthLimit: Number(event.target.value) })} />
{t("setting.memo-related-settings.reactions")}
{memoRelatedSetting.reactions.map((reactionType) => { return ( updatePartialSetting({ reactions: memoRelatedSetting.reactions.filter((r) => r !== reactionType) })} /> } > {reactionType} ); })} setEditingReaction(event.target.value.trim())} endDecorator={ upsertReaction()} /> } />
); }; export default MemoRelatedSettings;