authorgravatar for julius0216@outlook.comJulius Marminge <julius0216@outlook.com> 2026-02-15 16:23:11-08:00
committergravatar for jmarminge@gmail.comJulius Marminge <jmarminge@gmail.com> 2026-02-15 16:27:25-08:00
logb7fb0b8fed3c523cee60ebd90da8aa4ba5862767
tree36dcc1cae5ffefa549e113fba8bc68a82535ef4e
parent5656f294d05eaa6e1fcbe82b9749bf1af61793dc

Memoize ChatView selection handlers with useCallback

- Wrap model, effort, and env mode handlers in `useCallback` - Stabilize callback identities while preserving composer focus behavior

1 files changed, 26 insertions(+), 17 deletions(-)

apps/web/src/components/ChatView.tsx+26-17
...@@ -897,23 +897,32 @@ export default function ChatView() {...@@ -897,23 +897,32 @@ export default function ChatView() {
897 }897 }
898 };898 };
899899
900 const onModelSelect = (model: ModelSlug) => {900 const onModelSelect = useCallback(
901 if (!activeThread) return;901 (model: ModelSlug) => {
902 dispatch({902 if (!activeThread) return;
903 type: "SET_THREAD_MODEL",903 dispatch({
904 threadId: activeThread.id,904 type: "SET_THREAD_MODEL",
905 model: resolveModelSlug(model),905 threadId: activeThread.id,
906 });906 model: resolveModelSlug(model),
907 scheduleComposerFocus();907 });
908 };908 scheduleComposerFocus();
909 const onEffortSelect = (effort: ReasoningEffort) => {909 },
910 setSelectedEffort(effort);910 [activeThread, dispatch, scheduleComposerFocus],
911 scheduleComposerFocus();911 );
912 };912 const onEffortSelect = useCallback(
913 const onEnvModeChange = (mode: "local" | "worktree") => {913 (effort: ReasoningEffort) => {
914 setEnvMode(mode);914 setSelectedEffort(effort);
915 scheduleComposerFocus();915 scheduleComposerFocus();
916 };916 },
917 [scheduleComposerFocus],
918 );
919 const onEnvModeChange = useCallback(
920 (mode: "local" | "worktree") => {
921 setEnvMode(mode);
922 scheduleComposerFocus();
923 },
924 [scheduleComposerFocus],
925 );
917926
918 const onKeyDown = (e: KeyboardEvent<HTMLTextAreaElement>) => {927 const onKeyDown = (e: KeyboardEvent<HTMLTextAreaElement>) => {
919 if (e.key === "Enter" && !e.shiftKey) {928 if (e.key === "Enter" && !e.shiftKey) {