From 00e999409265a5f2523317a8f2dc53c33bbdb979 Mon Sep 17 00:00:00 2001 From: kev1n77 Date: Sat, 27 Jun 2026 09:47:31 +0800 Subject: [PATCH] fix(web-ui): skip unchanged i18n store updates to avoid freezing the session view --- .../infrastructure/i18n/store/i18nStore.ts | 40 ++++++++++++++----- 1 file changed, 30 insertions(+), 10 deletions(-) diff --git a/src/web-ui/src/infrastructure/i18n/store/i18nStore.ts b/src/web-ui/src/infrastructure/i18n/store/i18nStore.ts index df26b6a9f..575614689 100644 --- a/src/web-ui/src/infrastructure/i18n/store/i18nStore.ts +++ b/src/web-ui/src/infrastructure/i18n/store/i18nStore.ts @@ -26,31 +26,51 @@ export const useI18nStore = create()( // Actions setCurrentLanguage: (locale: LocaleId) => { - set({ currentLanguage: locale }); + set((state) => ( + state.currentLanguage === locale + ? state + : { currentLanguage: locale } + )); }, setFallbackLanguage: (locale: LocaleId) => { - set({ fallbackLanguage: locale }); + set((state) => ( + state.fallbackLanguage === locale + ? state + : { fallbackLanguage: locale } + )); }, addLoadedNamespace: (namespace: I18nNamespace) => { - set((state) => ({ - loadedNamespaces: state.loadedNamespaces.includes(namespace) - ? state.loadedNamespaces - : [...state.loadedNamespaces, namespace], - })); + set((state) => ( + state.loadedNamespaces.includes(namespace) + ? state + : { loadedNamespaces: [...state.loadedNamespaces, namespace] } + )); }, setInitialized: (initialized: boolean) => { - set({ isInitialized: initialized }); + set((state) => ( + state.isInitialized === initialized + ? state + : { isInitialized: initialized } + )); }, setChanging: (changing: boolean) => { - set({ isChanging: changing }); + set((state) => ( + state.isChanging === changing + ? state + : { isChanging: changing } + )); }, setAutoDetect: (autoDetect: boolean) => { - set({ autoDetect }); + set((state) => ( + state.autoDetect === autoDetect + ? state + : { autoDetect } + )); }, reset: () => {