Skip to content

Commit d1c4b52

Browse files
refactor(mobile): stop writing the resolved project filter back from an effect (#26049)
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
1 parent bc1ea26 commit d1c4b52

2 files changed

Lines changed: 15 additions & 19 deletions

File tree

‎apps/mobile/src/features/home/HomeRouteScreen.tsx‎

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { NativePrimaryColumnContext } from "../../native/v5-workspace-context";
66
import * as Arr from "effect/Array";
77
import * as Order from "effect/Order";
88
import { useNavigation } from "@react-navigation/native";
9-
import { useCallback, useEffect, useMemo, useState } from "react";
9+
import { useCallback, useMemo, useState } from "react";
1010
import { Platform, useWindowDimensions } from "react-native";
1111

1212
import type { EnvironmentThreadShell } from "@t3tools/client-runtime/state/shell";
@@ -137,16 +137,16 @@ export function HomeRouteScreen() {
137137
setSelectedProjectKey,
138138
} = useHomeListOptions(availableEnvironmentIds);
139139
const selectedEnvironmentId = listOptions.selectedEnvironmentId;
140-
const projectScopeKey = listOptions.selectedProjectKey;
141-
const resolvedProjectKey = resolveScratchProjectScopeKey(projectScopeKey, projects, {
142-
sidebarProjectGroupingMode: listOptions.projectGroupingMode,
143-
sidebarProjectGroupingOverrides: {},
144-
});
145-
useEffect(() => {
146-
if (resolvedProjectKey !== projectScopeKey) {
147-
setSelectedProjectKey(resolvedProjectKey);
148-
}
149-
}, [projectScopeKey, resolvedProjectKey, setSelectedProjectKey]);
140+
// A legacy per-environment scratch key resolves here on every render; the stored
141+
// value is only rewritten when the user picks a filter.
142+
const resolvedProjectKey = resolveScratchProjectScopeKey(
143+
listOptions.selectedProjectKey,
144+
projects,
145+
{
146+
sidebarProjectGroupingMode: listOptions.projectGroupingMode,
147+
sidebarProjectGroupingOverrides: {},
148+
},
149+
);
150150
const projectFilterOptions = useMemo(
151151
() =>
152152
buildHomeProjectScopes({

‎apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx‎

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import { AnimatedLegendList } from "@legendapp/list/reanimated";
1515
import { THREAD_SIDEBAR_ROW_LAYOUT } from "./threadListAnimations";
1616
import type { MenuAction } from "@react-native-menu/menu";
1717
import { useAtomValue } from "@effect/atom-react";
18-
import { useEffect, useMemo, useRef, useState } from "react";
18+
import { useMemo, useRef, useState } from "react";
1919
import type { LayoutChangeEvent, TextInputInstance } from "react-native";
2020
import { Platform, StyleSheet, TextInput, View } from "react-native";
2121
import { GestureDetector, useNativeGesture } from "react-native-gesture-handler";
@@ -198,16 +198,12 @@ function ThreadNavigationSidebarPane(
198198
)
199199
? [options.selectedEnvironmentId]
200200
: [];
201-
const projectScopeKey = options.selectedProjectKey;
202-
const resolvedProjectKey = resolveScratchProjectScopeKey(projectScopeKey, projects, {
201+
// A legacy per-environment scratch key resolves here on every render; the stored
202+
// value is only rewritten when the user picks a filter.
203+
const resolvedProjectKey = resolveScratchProjectScopeKey(options.selectedProjectKey, projects, {
203204
sidebarProjectGroupingMode: options.projectGroupingMode,
204205
sidebarProjectGroupingOverrides: {},
205206
});
206-
useEffect(() => {
207-
if (resolvedProjectKey !== projectScopeKey) {
208-
setSelectedProjectKey(resolvedProjectKey);
209-
}
210-
}, [projectScopeKey, resolvedProjectKey, setSelectedProjectKey]);
211207
const projectScopes = useMemo(
212208
() =>
213209
buildHomeProjectScopes({

0 commit comments

Comments
 (0)