From ed9747d333e93e2684e7f89e3ac46bb5fd57055e Mon Sep 17 00:00:00 2001 From: Hana B Date: Tue, 31 Mar 2026 16:01:18 -0400 Subject: [PATCH] fix: update guide panel immediately after language switch --- .../general-setting/appearance/index.tsx | 4 +- .../general-setting/appearance/links.tsx | 17 +- .../dialogs/setting/general-setting/index.tsx | 168 +++++++++--------- .../setting/workspace-setting/index.tsx | 107 ++++++----- 4 files changed, 139 insertions(+), 157 deletions(-) diff --git a/packages/frontend/core/src/desktop/dialogs/setting/general-setting/appearance/index.tsx b/packages/frontend/core/src/desktop/dialogs/setting/general-setting/appearance/index.tsx index c7016e01c967c..fa1889d926eeb 100644 --- a/packages/frontend/core/src/desktop/dialogs/setting/general-setting/appearance/index.tsx +++ b/packages/frontend/core/src/desktop/dialogs/setting/general-setting/appearance/index.tsx @@ -11,7 +11,7 @@ import { FeatureFlagService } from '@affine/core/modules/feature-flag'; import { useI18n } from '@affine/i18n'; import { useLiveData, useService } from '@toeverything/infra'; import { useTheme } from 'next-themes'; -import { useCallback, useMemo } from 'react'; +import { useCallback } from 'react'; import { useAppSettingHelper } from '../../../../../components/hooks/affine/use-app-setting-helper'; import { OpenInAppLinksMenu } from './links'; @@ -41,7 +41,7 @@ export const ThemeSettings = () => { const t = useI18n(); const { setTheme, theme } = useTheme(); - const radioItems = useMemo(() => getThemeOptions(t), [t]); + const radioItems: RadioItem[] = getThemeOptions(t); return ( { const openInAppService = useService(OpenInAppService); const currentOpenInAppMode = useLiveData(openInAppService.openLinkMode$); - const options = useMemo( - () => - Object.values(OpenLinkMode).map(mode => ({ - label: - t.t(`com.affine.setting.appearance.open-in-app.${mode}`) || - `com.affine.setting.appearance.open-in-app.${mode}`, - value: mode, - })), - [t] - ); + const options = Object.values(OpenLinkMode).map(mode => ({ + label: + t.t(`com.affine.setting.appearance.open-in-app.${mode}`) || + `com.affine.setting.appearance.open-in-app.${mode}`, + value: mode, + })); return ( { const meetingSettings = useLiveData(meetingSettingsService.settings$); - return useMemo(() => { - const settings: GeneralSettingList = [ - { - key: 'appearance', - title: t['com.affine.settings.appearance'](), - icon: , - testId: 'appearance-panel-trigger', - }, - { - key: 'shortcuts', - title: t['com.affine.keyboardShortcuts.title'](), - icon: , - testId: 'shortcuts-panel-trigger', - }, - ]; - if (loggedIn) { - settings.push({ - key: 'notifications', - title: t['com.affine.setting.notifications'](), - icon: , - testId: 'notifications-panel-trigger', - }); - } - if (enableEditorSettings) { - // add editor settings to second position - settings.splice(1, 0, { - key: 'editor', - title: t['com.affine.settings.editorSettings'](), - icon: , - testId: 'editor-panel-trigger', - }); - } + const settings: GeneralSettingList = [ + { + key: 'appearance', + title: t['com.affine.settings.appearance'](), + icon: , + testId: 'appearance-panel-trigger', + }, + { + key: 'shortcuts', + title: t['com.affine.keyboardShortcuts.title'](), + icon: , + testId: 'shortcuts-panel-trigger', + }, + ]; + if (loggedIn) { + settings.push({ + key: 'notifications', + title: t['com.affine.setting.notifications'](), + icon: , + testId: 'notifications-panel-trigger', + }); + } + if (enableEditorSettings) { + // add editor settings to second position + settings.splice(1, 0, { + key: 'editor', + title: t['com.affine.settings.editorSettings'](), + icon: , + testId: 'editor-panel-trigger', + }); + } - if ( - (environment.isMacOs || environment.isWindows) && - BUILD_CONFIG.isElectron - ) { - settings.push({ - key: 'meetings', - title: t['com.affine.settings.meetings'](), - icon: , - testId: 'meetings-panel-trigger', - beta: !meetingSettings?.enabled, - }); - } + if ( + (environment.isMacOs || environment.isWindows) && + BUILD_CONFIG.isElectron + ) { + settings.push({ + key: 'meetings', + title: t['com.affine.settings.meetings'](), + icon: , + testId: 'meetings-panel-trigger', + beta: !meetingSettings?.enabled, + }); + } - if (hasPaymentFeature) { + if (hasPaymentFeature) { + settings.splice(4, 0, { + key: 'plans', + title: t['com.affine.payment.title'](), + icon: , + testId: 'plans-panel-trigger', + }); + if (loggedIn) { settings.splice(4, 0, { - key: 'plans', - title: t['com.affine.payment.title'](), - icon: , - testId: 'plans-panel-trigger', + key: 'billing', + title: t['com.affine.payment.billing-setting.title'](), + icon: , + testId: 'billing-panel-trigger', }); - if (loggedIn) { - settings.splice(4, 0, { - key: 'billing', - title: t['com.affine.payment.billing-setting.title'](), - icon: , - testId: 'billing-panel-trigger', - }); - } } + } - if (BUILD_CONFIG.isElectron) { - settings.push({ - key: 'backup', - title: t['com.affine.settings.workspace.backup'](), - icon: , - testId: 'backup-panel-trigger', - }); - } + if (BUILD_CONFIG.isElectron) { + settings.push({ + key: 'backup', + title: t['com.affine.settings.workspace.backup'](), + icon: , + testId: 'backup-panel-trigger', + }); + } - settings.push( - { - key: 'experimental-features', - title: t['com.affine.settings.workspace.experimental-features'](), - icon: , - testId: 'experimental-features-trigger', - }, - { - key: 'about', - title: t['com.affine.aboutAFFiNE.title'](), - icon: , - testId: 'about-panel-trigger', - } - ); - return settings; - }, [ - t, - loggedIn, - enableEditorSettings, - meetingSettings?.enabled, - hasPaymentFeature, - ]); + settings.push( + { + key: 'experimental-features', + title: t['com.affine.settings.workspace.experimental-features'](), + icon: , + testId: 'experimental-features-trigger', + }, + { + key: 'about', + title: t['com.affine.aboutAFFiNE.title'](), + icon: , + testId: 'about-panel-trigger', + } + ); + return settings; }; interface GeneralSettingProps { diff --git a/packages/frontend/core/src/desktop/dialogs/setting/workspace-setting/index.tsx b/packages/frontend/core/src/desktop/dialogs/setting/workspace-setting/index.tsx index 75856d7085538..479d06f688680 100644 --- a/packages/frontend/core/src/desktop/dialogs/setting/workspace-setting/index.tsx +++ b/packages/frontend/core/src/desktop/dialogs/setting/workspace-setting/index.tsx @@ -15,7 +15,6 @@ import { SettingsIcon, } from '@blocksuite/icons/rc'; import { useLiveData, useService } from '@toeverything/infra'; -import { useMemo } from 'react'; import type { SettingSidebarItem, SettingState } from '../types'; import { WorkspaceSettingBilling } from './billing'; @@ -78,61 +77,57 @@ export const useWorkspaceSettingList = (): SettingSidebarItem[] => { const showBilling = !isSelfhosted && information?.isTeam && information?.isOwner; const showLicense = information?.isOwner && isSelfhosted; - const items = useMemo(() => { - return [ - { - key: 'workspace:preference', - title: t['com.affine.settings.workspace.preferences'](), - icon: , - testId: 'workspace-setting:preference', - }, - { - key: 'workspace:properties', - title: t['com.affine.settings.workspace.properties'](), - icon: , - testId: 'workspace-setting:properties', - }, - { - key: 'workspace:members', - title: t['Members'](), - icon: , - testId: 'workspace-setting:members', - }, - { - key: 'workspace:integrations', - title: t['com.affine.integration.integrations'](), - icon: , - testId: 'workspace-setting:integrations', - }, - { - key: 'workspace:storage', - title: t['Storage'](), - icon: , - testId: 'workspace-setting:storage', - }, - { - key: 'workspace:embedding', - title: - t[ - 'com.affine.settings.workspace.indexer-embedding.embedding.title' - ](), - icon: , - testId: 'workspace-setting:embedding', - }, - showBilling && { - key: 'workspace:billing' as SettingTab, - title: t['com.affine.settings.workspace.billing'](), - icon: , - testId: 'workspace-setting:billing', - }, - showLicense && { - key: 'workspace:license' as SettingTab, - title: t['com.affine.settings.workspace.license'](), - icon: , - testId: 'workspace-setting:license', - }, - ].filter((item): item is SettingSidebarItem => !!item); - }, [showBilling, showLicense, t]); + const items: SettingSidebarItem[] = [ + { + key: 'workspace:preference', + title: t['com.affine.settings.workspace.preferences'](), + icon: , + testId: 'workspace-setting:preference', + }, + { + key: 'workspace:properties', + title: t['com.affine.settings.workspace.properties'](), + icon: , + testId: 'workspace-setting:properties', + }, + { + key: 'workspace:members', + title: t['Members'](), + icon: , + testId: 'workspace-setting:members', + }, + { + key: 'workspace:integrations', + title: t['com.affine.integration.integrations'](), + icon: , + testId: 'workspace-setting:integrations', + }, + { + key: 'workspace:storage', + title: t['Storage'](), + icon: , + testId: 'workspace-setting:storage', + }, + { + key: 'workspace:embedding', + title: + t['com.affine.settings.workspace.indexer-embedding.embedding.title'](), + icon: , + testId: 'workspace-setting:embedding', + }, + showBilling && { + key: 'workspace:billing' as SettingTab, + title: t['com.affine.settings.workspace.billing'](), + icon: , + testId: 'workspace-setting:billing', + }, + showLicense && { + key: 'workspace:license' as SettingTab, + title: t['com.affine.settings.workspace.license'](), + icon: , + testId: 'workspace-setting:license', + }, + ].filter((item): item is SettingSidebarItem => !!item); return items; };