From ac37738148eb42e678d2cb689a5b3ce530530404 Mon Sep 17 00:00:00 2001 From: Steven Date: Mon, 5 Jan 2026 21:46:35 +0800 Subject: [PATCH] fix: default visibility setting --- server/router/api/v1/user_service.go | 2 +- web/src/components/MemoEditor/hooks/useMemoInit.ts | 8 +++++++- web/src/components/MemoEditor/index.tsx | 10 +++++++++- web/src/components/Settings/PreferencesSection.tsx | 9 ++++++--- 4 files changed, 23 insertions(+), 6 deletions(-) diff --git a/server/router/api/v1/user_service.go b/server/router/api/v1/user_service.go index 04751b251..6260a9547 100644 --- a/server/router/api/v1/user_service.go +++ b/server/router/api/v1/user_service.go @@ -421,7 +421,7 @@ func (s *APIV1Service) UpdateUserSetting(ctx context.Context, request *v1pb.Upda incomingGeneral := request.Setting.GetGeneralSetting() for _, field := range request.UpdateMask.Paths { switch field { - case "memoVisibility": + case "memo_visibility": updatedGeneral.MemoVisibility = incomingGeneral.MemoVisibility case "theme": updatedGeneral.Theme = incomingGeneral.Theme diff --git a/web/src/components/MemoEditor/hooks/useMemoInit.ts b/web/src/components/MemoEditor/hooks/useMemoInit.ts index d49a48729..7586c0e62 100644 --- a/web/src/components/MemoEditor/hooks/useMemoInit.ts +++ b/web/src/components/MemoEditor/hooks/useMemoInit.ts @@ -1,4 +1,5 @@ import { useEffect, useRef } from "react"; +import type { Visibility } from "@/types/proto/api/v1/memo_service_pb"; import type { EditorRefActions } from "../Editor"; import { cacheService, memoService } from "../services"; import { useEditorContext } from "../state"; @@ -9,6 +10,7 @@ export const useMemoInit = ( cacheKey: string | undefined, username: string, autoFocus?: boolean, + defaultVisibility?: Visibility, ) => { const { actions, dispatch } = useEditorContext(); const initializedRef = useRef(false); @@ -37,6 +39,10 @@ export const useMemoInit = ( if (cachedContent) { dispatch(actions.updateContent(cachedContent)); } + // Apply default visibility for new memos + if (defaultVisibility !== undefined) { + dispatch(actions.setMetadata({ visibility: defaultVisibility })); + } } } catch (error) { console.error("Failed to initialize editor:", error); @@ -52,5 +58,5 @@ export const useMemoInit = ( }; init(); - }, [memoName, cacheKey, username, autoFocus, actions, dispatch, editorRef]); + }, [memoName, cacheKey, username, autoFocus, defaultVisibility, actions, dispatch, editorRef]); }; diff --git a/web/src/components/MemoEditor/index.tsx b/web/src/components/MemoEditor/index.tsx index 2d0b0169c..9d6bfcd20 100644 --- a/web/src/components/MemoEditor/index.tsx +++ b/web/src/components/MemoEditor/index.tsx @@ -1,12 +1,14 @@ import { useQueryClient } from "@tanstack/react-query"; import { useRef } from "react"; import { toast } from "react-hot-toast"; +import { useAuth } from "@/contexts/AuthContext"; import useCurrentUser from "@/hooks/useCurrentUser"; import { memoKeys } from "@/hooks/useMemoQueries"; import { userKeys } from "@/hooks/useUserQueries"; import { handleError } from "@/lib/error"; import { cn } from "@/lib/utils"; import { useTranslate } from "@/utils/i18n"; +import { convertVisibilityFromString } from "@/utils/memo"; import { EditorContent, EditorMetadata, EditorToolbar, FocusModeExitButton, FocusModeOverlay } from "./components"; import { FOCUS_MODE_STYLES } from "./constants"; import type { EditorRefActions } from "./Editor"; @@ -49,8 +51,14 @@ const MemoEditorImpl: React.FC = ({ const currentUser = useCurrentUser(); const editorRef = useRef(null); const { state, actions, dispatch } = useEditorContext(); + const { userGeneralSetting } = useAuth(); - useMemoInit(editorRef, memoName, cacheKey, currentUser?.name ?? "", autoFocus); + // Get default visibility from user settings + const defaultVisibility = userGeneralSetting?.memoVisibility + ? convertVisibilityFromString(userGeneralSetting.memoVisibility) + : undefined; + + useMemoInit(editorRef, memoName, cacheKey, currentUser?.name ?? "", autoFocus, defaultVisibility); // Auto-save content to localStorage useAutoSave(state.content, currentUser?.name ?? "", cacheKey); diff --git a/web/src/components/Settings/PreferencesSection.tsx b/web/src/components/Settings/PreferencesSection.tsx index 219605f99..126cda062 100644 --- a/web/src/components/Settings/PreferencesSection.tsx +++ b/web/src/components/Settings/PreferencesSection.tsx @@ -34,9 +34,9 @@ const PreferencesSection = () => { ); }; - const handleDefaultMemoVisibilityChanged = async (value: string) => { + const handleDefaultMemoVisibilityChanged = (value: string) => { updateUserGeneralSetting( - { generalSetting: { memoVisibility: value }, updateMask: ["memoVisibility"] }, + { generalSetting: { memoVisibility: value }, updateMask: ["memo_visibility"] }, { onSuccess: () => { refetchSettings(); @@ -82,7 +82,10 @@ const PreferencesSection = () => { -