From 4f75e105a9ab0c498fb1748829396d695836be65 Mon Sep 17 00:00:00 2001 From: kaitranntt Date: Sun, 21 Dec 2025 04:09:13 -0500 Subject: [PATCH] fix(settings): memoize useSettingsActions to prevent infinite render loop - wrap return object in useMemo with all action callbacks as deps - prevents new object reference on every render - fixes Maximum update depth exceeded error on settings page --- ui/src/pages/settings/hooks/context-hooks.ts | 73 +++++++++++++------- 1 file changed, 49 insertions(+), 24 deletions(-) diff --git a/ui/src/pages/settings/hooks/context-hooks.ts b/ui/src/pages/settings/hooks/context-hooks.ts index eb7aea2f..254743d6 100644 --- a/ui/src/pages/settings/hooks/context-hooks.ts +++ b/ui/src/pages/settings/hooks/context-hooks.ts @@ -3,7 +3,7 @@ * Hooks for accessing and updating settings context state */ -import { useCallback, useContext } from 'react'; +import { useCallback, useContext, useMemo } from 'react'; import { SettingsContext } from '../settings-context'; import type { WebSearchConfig, @@ -131,27 +131,52 @@ export function useSettingsActions() { [dispatch] ); - return { - setWebSearchConfig, - setWebSearchStatus, - setWebSearchLoading, - setWebSearchStatusLoading, - setWebSearchSaving, - setWebSearchError, - setWebSearchSuccess, - setGlobalEnvConfig, - setGlobalEnvLoading, - setGlobalEnvSaving, - setGlobalEnvError, - setGlobalEnvSuccess, - setProxyConfig, - setProxyLoading, - setProxySaving, - setProxyError, - setProxySuccess, - setProxyTestResult, - setProxyTesting, - setRawConfig, - setRawConfigLoading, - }; + return useMemo( + () => ({ + setWebSearchConfig, + setWebSearchStatus, + setWebSearchLoading, + setWebSearchStatusLoading, + setWebSearchSaving, + setWebSearchError, + setWebSearchSuccess, + setGlobalEnvConfig, + setGlobalEnvLoading, + setGlobalEnvSaving, + setGlobalEnvError, + setGlobalEnvSuccess, + setProxyConfig, + setProxyLoading, + setProxySaving, + setProxyError, + setProxySuccess, + setProxyTestResult, + setProxyTesting, + setRawConfig, + setRawConfigLoading, + }), + [ + setWebSearchConfig, + setWebSearchStatus, + setWebSearchLoading, + setWebSearchStatusLoading, + setWebSearchSaving, + setWebSearchError, + setWebSearchSuccess, + setGlobalEnvConfig, + setGlobalEnvLoading, + setGlobalEnvSaving, + setGlobalEnvError, + setGlobalEnvSuccess, + setProxyConfig, + setProxyLoading, + setProxySaving, + setProxyError, + setProxySuccess, + setProxyTestResult, + setProxyTesting, + setRawConfig, + setRawConfigLoading, + ] + ); }