import { Button, Divider, Input, Switch, Textarea } from "@mui/joy"; import { useState } from "react"; import { toast } from "react-hot-toast"; import { Link } from "react-router-dom"; import { workspaceSettingServiceClient } from "@/grpcweb"; import { WorkspaceSettingPrefix, useWorkspaceSettingStore } from "@/store/v1"; import { WorkspaceGeneralSetting, WorkspaceMemoRelatedSetting } from "@/types/proto/api/v1/workspace_setting_service"; import { WorkspaceSettingKey } from "@/types/proto/store/workspace_setting"; import { useTranslate } from "@/utils/i18n"; import { showCommonDialog } from "../Dialog/CommonDialog"; import Icon from "../Icon"; import showUpdateCustomizedProfileDialog from "../UpdateCustomizedProfileDialog"; const WorkspaceSection = () => { const t = useTranslate(); const workspaceSettingStore = useWorkspaceSettingStore(); const [workspaceGeneralSetting, setWorkspaceGeneralSetting] = useState( WorkspaceGeneralSetting.fromPartial( workspaceSettingStore.getWorkspaceSettingByKey(WorkspaceSettingKey.WORKSPACE_SETTING_GENERAL)?.generalSetting || {}, ), ); const [workspaceMemoRelatedSetting, setWorkspaceMemoRelatedSetting] = useState( WorkspaceMemoRelatedSetting.fromPartial( workspaceSettingStore.getWorkspaceSettingByKey(WorkspaceSettingKey.WORKSPACE_SETTING_MEMO_RELATED)?.memoRelatedSetting || {}, ), ); const handleAllowSignUpChanged = async (value: boolean) => { const setting = { ...workspaceGeneralSetting, disallowSignup: !value }; await workspaceSettingServiceClient.setWorkspaceSetting({ setting: { name: `${WorkspaceSettingPrefix}${WorkspaceSettingKey.WORKSPACE_SETTING_GENERAL}`, generalSetting: setting, }, }); setWorkspaceGeneralSetting(setting); }; const handleDisablePasswordLoginChanged = async (value: boolean) => { const updateSetting = async () => { const setting = { ...workspaceGeneralSetting, disallowPasswordLogin: value }; await workspaceSettingServiceClient.setWorkspaceSetting({ setting: { name: `${WorkspaceSettingPrefix}${WorkspaceSettingKey.WORKSPACE_SETTING_GENERAL}`, generalSetting: setting, }, }); setWorkspaceGeneralSetting(setting); }; if (value) { showCommonDialog({ title: "Confirm", content: "Are you sure to disable password login?", style: "danger", dialogName: "disable-password-login-dialog", onConfirm: async () => { await updateSetting(); }, }); } else { await updateSetting(); } }; const handleUpdateCustomizedProfileButtonClick = () => { showUpdateCustomizedProfileDialog(); }; const handleInstanceUrlChanged = (value: string) => { setWorkspaceGeneralSetting({ ...workspaceGeneralSetting, instanceUrl: value }); }; const handleSaveInstanceUrl = async () => { try { await workspaceSettingServiceClient.setWorkspaceSetting({ setting: { name: `${WorkspaceSettingPrefix}${WorkspaceSettingKey.WORKSPACE_SETTING_GENERAL}`, generalSetting: workspaceGeneralSetting, }, }); } catch (error: any) { console.error(error); toast.error(error.response.data.message); return; } toast.success("Instance URL updated"); }; const handleAdditionalStyleChanged = (value: string) => { setWorkspaceGeneralSetting({ ...workspaceGeneralSetting, additionalStyle: value }); }; const handleSaveAdditionalStyle = async () => { try { await workspaceSettingServiceClient.setWorkspaceSetting({ setting: { name: `${WorkspaceSettingPrefix}${WorkspaceSettingKey.WORKSPACE_SETTING_GENERAL}`, generalSetting: workspaceGeneralSetting, }, }); } catch (error: any) { toast.error(error.response.data.message); console.error(error); return; } toast.success(t("message.update-succeed")); }; const handleAdditionalScriptChanged = (value: string) => { setWorkspaceGeneralSetting({ ...workspaceGeneralSetting, additionalScript: value }); }; const handleSaveAdditionalScript = async () => { try { await workspaceSettingServiceClient.setWorkspaceSetting({ setting: { name: `${WorkspaceSettingPrefix}${WorkspaceSettingKey.WORKSPACE_SETTING_GENERAL}`, generalSetting: workspaceGeneralSetting, }, }); } catch (error: any) { toast.error(error.response.data.message); console.error(error); return; } toast.success(t("message.update-succeed")); }; const handleDisablePublicMemosChanged = async (value: boolean) => { const update: WorkspaceMemoRelatedSetting = { ...workspaceMemoRelatedSetting, disallowPublicVisible: value }; setWorkspaceMemoRelatedSetting(update); await workspaceSettingStore.setWorkspaceSetting({ name: `${WorkspaceSettingPrefix}${WorkspaceSettingKey.WORKSPACE_SETTING_MEMO_RELATED}`, memoRelatedSetting: update, }); }; const handleMemoDisplayWithUpdatedTs = async (value: boolean) => { const update: WorkspaceMemoRelatedSetting = { ...workspaceMemoRelatedSetting, displayWithUpdateTime: value }; setWorkspaceMemoRelatedSetting(update); await workspaceSettingStore.setWorkspaceSetting({ name: `${WorkspaceSettingPrefix}${WorkspaceSettingKey.WORKSPACE_SETTING_MEMO_RELATED}`, memoRelatedSetting: update, }); }; const handleMemoContentLengthLimitChanges = async (value: number) => { if (value < 8 * 1024) { toast.error("Content length limit should be greater than 8KB"); return; } const update: WorkspaceMemoRelatedSetting = { ...workspaceMemoRelatedSetting, contentLengthLimit: value }; setWorkspaceMemoRelatedSetting(update); await workspaceSettingStore.setWorkspaceSetting({ name: `${WorkspaceSettingPrefix}${WorkspaceSettingKey.WORKSPACE_SETTING_MEMO_RELATED}`, memoRelatedSetting: update, }); }; return (

{t("common.basic")}

{t("setting.system-section.server-name")}:{" "} {workspaceGeneralSetting.customProfile?.title || "Memos"}

General

{t("setting.system-section.allow-user-signup")} handleAllowSignUpChanged(event.target.checked)} />
{t("setting.system-section.disable-password-login")} handleDisablePasswordLoginChanged(event.target.checked)} />
Instance URL
handleInstanceUrlChanged(event.target.value)} />
{t("common.learn-more")}
{t("setting.system-section.additional-style")}