import { Button, Input, Switch, Select, Option, Chip, ChipDelete } from "@mui/joy"; import { isEqual, uniq } from "lodash-es"; import { CheckIcon } from "lucide-react"; import { useState } from "react"; import { toast } from "react-hot-toast"; import { workspaceSettingNamePrefix, useWorkspaceSettingStore } from "@/store/v1"; import { Visibility } from "@/types/proto/api/v1/memo_service"; import { WorkspaceMemoRelatedSetting } from "@/types/proto/api/v1/workspace_setting_service"; import { WorkspaceSettingKey } from "@/types/proto/store/workspace_setting"; import { useTranslate } from "@/utils/i18n"; import { convertVisibilityFromString, convertVisibilityToString } from "@/utils/memo"; import VisibilityIcon from "../VisibilityIcon"; const MemoRelatedSettings = () => { const t = useTranslate(); const workspaceSettingStore = useWorkspaceSettingStore(); const originalSetting = WorkspaceMemoRelatedSetting.fromPartial( workspaceSettingStore.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 workspaceSettingStore.setWorkspaceSetting({ name: `${workspaceSettingNamePrefix}${WorkspaceSettingKey.MEMO_RELATED}`, memoRelatedSetting, }); } catch (error: any) { toast.error(error.details); console.error(error); return; } toast.success(t("message.update-succeed")); }; return (

Memo related settings

{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 })} />
Enable link preview updatePartialSetting({ enableLinkPreview: event.target.checked })} />
Enable memo comments updatePartialSetting({ enableComment: event.target.checked })} />
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 })} />
Content length limit(Byte) updatePartialSetting({ contentLengthLimit: Number(event.target.value) })} />
{t("setting.preference-section.default-memo-visibility")}
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;