Skip to content

Commit 2ca9d78

Browse files
VirginiaWu11claude
andcommitted
2117 rename orgNameFilter -> searchFilter to match "Search" UI label
Follow-up to #2856. hanapotski's review approved the PR but flagged that internal state/action names (orgNameFilter, ORG_NAME_FILTER_UPDATED) still referenced "org name" even though the field now searches multiple listing fields and the UI label was changed to "Search". Mechanical rename across state/reducer/hook/action-type/call-sites: orgNameFilter -> searchFilter, ORG_NAME_FILTER_UPDATED -> SEARCH_FILTER_UPDATED, useOrgNameFilter -> useSearchFilter. The shareable "?name=" URL query parameter key is unchanged, so existing shared/bookmarked search URLs keep working. Not addressed (per review, both explicitly non-blocking): - "expanded matching scope" observation describes intended behavior from #2117, not something to change. - performance note on rebuilding the per-stakeholder searchable string on each filter pass is consistent with how every other filter in useOrganizationBests.ts already works, and the reviewer called it negligible at current scale / worth monitoring, not urgent. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
1 parent 5c06bea commit 2ca9d78

7 files changed

Lines changed: 37 additions & 40 deletions

File tree

client/src/appReducer.tsx

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -145,10 +145,10 @@ function filterPanelReducer(state: boolean, action: AppAction): boolean {
145145
return state;
146146
}
147147
}
148-
function orgNameFilterReducer(state: string, action: AppAction): string {
148+
function searchFilterReducer(state: string, action: AppAction): string {
149149
switch (action.type) {
150-
case "ORG_NAME_FILTER_UPDATED":
151-
return action.orgNameFilter;
150+
case "SEARCH_FILTER_UPDATED":
151+
return action.searchFilter;
152152
default:
153153
return state;
154154
}
@@ -228,7 +228,7 @@ export function appReducer(state: AppState, action: AppAction): AppState {
228228
isWidget: widgetReducer(state.isWidget, action),
229229
stakeholders: stakeholdersReducer(state.stakeholders, action),
230230
filterPanel: filterPanelReducer(state.filterPanel, action),
231-
orgNameFilter: orgNameFilterReducer(state.orgNameFilter, action),
231+
searchFilter: searchFilterReducer(state.searchFilter, action),
232232
openTimeFilter: openTimeFilterReducer(state.openTimeFilter, action),
233233
foodTypeFilter: foodTypeFilterReducer(state.foodTypeFilter, action),
234234
listPanel: listPanelReducer(state.listPanel, action),
@@ -251,7 +251,7 @@ export function getInitialState(): AppState {
251251
neighborhood: null,
252252
isWidget: false,
253253
filterPanel: false,
254-
orgNameFilter: "",
254+
searchFilter: "",
255255
openTimeFilter: { radio: "Show All", day: "", time: "" },
256256
foodTypeFilter: [],
257257
listPanel: true,
@@ -350,9 +350,9 @@ export function useFilterPanel(): boolean {
350350
return filterPanel;
351351
}
352352

353-
export function useOrgNameFilter(): string {
354-
const { orgNameFilter } = useAppState();
355-
return orgNameFilter;
353+
export function useSearchFilter(): string {
354+
const { searchFilter } = useAppState();
355+
return searchFilter;
356356
}
357357

358358
export function useOpenTimeFilter(): OpenTimeFilter {

client/src/components/FoodSeeker/SearchResults/ResultsFilters/FilterPanel.tsx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ import PantryIconNoBorder from "icons/PantryIconNoBorder";
2929
import {
3030
useAppDispatch,
3131
useFilterPanel,
32-
useOrgNameFilter,
32+
useSearchFilter,
3333
useOpenTimeFilter,
3434
useFoodTypeFilter,
3535
} from "../../../../appReducer";
@@ -67,7 +67,7 @@ const FilterPanel: FC<FilterPanelProps> = ({ mealPantry, filterCount }) => {
6767
const dispatch = useAppDispatch() as Dispatch<{ type: string; [key: string]: unknown }>;
6868
const open = useFilterPanel();
6969
const openTime = useOpenTimeFilter();
70-
const orgNameFilter = useOrgNameFilter();
70+
const searchFilter = useSearchFilter();
7171
const foodTypeFilter = useFoodTypeFilter() as (keyof typeof foodTypeLabelObject)[];
7272

7373
const handleRadioChange = (event: ChangeEvent<HTMLInputElement>) => {
@@ -176,11 +176,11 @@ const FilterPanel: FC<FilterPanelProps> = ({ mealPantry, filterCount }) => {
176176
</Typography>
177177
<OutlinedInput
178178
placeholder="i.e. kosher, senior, First Baptist, 90015"
179-
value={orgNameFilter}
179+
value={searchFilter}
180180
onChange={(e) =>
181181
dispatch({
182-
type: "ORG_NAME_FILTER_UPDATED",
183-
orgNameFilter: e.target.value,
182+
type: "SEARCH_FILTER_UPDATED",
183+
searchFilter: e.target.value,
184184
})
185185
}
186186
endAdornment={
@@ -190,8 +190,8 @@ const FilterPanel: FC<FilterPanelProps> = ({ mealPantry, filterCount }) => {
190190
edge="end"
191191
onClick={() =>
192192
dispatch({
193-
type: "ORG_NAME_FILTER_UPDATED",
194-
orgNameFilter: "",
193+
type: "SEARCH_FILTER_UPDATED",
194+
searchFilter: "",
195195
})
196196
}
197197
>

client/src/components/FoodSeeker/SearchResults/ResultsMap/ResultsMap.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ import {
3030
useSearchCoordinates,
3131
useSelectedOrganization,
3232
useUserCoordinates,
33-
useOrgNameFilter,
33+
useSearchFilter,
3434
useOpenTimeFilter,
3535
} from "../../../../appReducer";
3636
import { useMapbox } from "../../../../hooks/useMapbox";
@@ -77,7 +77,7 @@ const ResultsMap = ({
7777
latitude: number;
7878
longitude: number;
7979
} | null;
80-
const orgNameFilter = useOrgNameFilter();
80+
const searchFilter = useSearchFilter();
8181
const openTimeFilter = useOpenTimeFilter();
8282
const navigate = useNavigate();
8383
const location = useLocation();
@@ -373,7 +373,7 @@ const ResultsMap = ({
373373

374374
useEffect(() => {
375375
updateUrlParams({
376-
name: orgNameFilter || null,
376+
name: searchFilter || null,
377377
pantry: isPantrySelected ? "1" : "0",
378378
meal: isMealSelected ? "1" : "0",
379379
openRadio:
@@ -383,7 +383,7 @@ const ResultsMap = ({
383383
openTime:
384384
openTimeFilter.radio === "Customized" ? openTimeFilter.time : null,
385385
});
386-
}, [orgNameFilter, isPantrySelected, isMealSelected, openTimeFilter]);
386+
}, [searchFilter, isPantrySelected, isMealSelected, openTimeFilter]);
387387

388388
useEffect(() => {
389389
const timeout = setTimeout(() => {

client/src/components/FoodSeeker/SearchResults/SearchResults.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ const SearchResults = () => {
5858
const initialZoom = parseFloat(params.get("zoom") || "") || 11;
5959
const longitudeOffset = 0.08 * Math.pow(2, 11 - initialZoom);
6060

61-
const orgNameFilter = params.get("name") || "";
61+
const searchFilter = params.get("name") || "";
6262
const radio = params.get("openRadio");
6363
const day = params.get("openDay") || "";
6464
const time = params.get("openTime") || "";
@@ -72,10 +72,10 @@ const SearchResults = () => {
7272
});
7373
}
7474

75-
if (orgNameFilter) {
75+
if (searchFilter) {
7676
dispatch({
77-
type: "ORG_NAME_FILTER_UPDATED",
78-
orgNameFilter,
77+
type: "SEARCH_FILTER_UPDATED",
78+
searchFilter,
7979
});
8080
}
8181

client/src/components/FoodSeeker/SearchResults/StakeholderPreview/StakeholderPreview.tsx

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ import StakeholderIcon from "images/stakeholderIcon";
3434
import * as analytics from "services/analytics";
3535
import {
3636
useAppDispatch,
37-
useOrgNameFilter,
37+
useSearchFilter,
3838
useSearchCoordinates,
3939
useUserCoordinates,
4040
} from "../../../../appReducer";
@@ -126,7 +126,7 @@ const StakeholderPreview = ({
126126
const userCoordinates = useUserCoordinates();
127127
const originCoordinates = searchCoordinates || userCoordinates;
128128
const { tenantTimeZone } = useSiteContext();
129-
const orgNameFilter = useOrgNameFilter();
129+
const searchFilter = useSearchFilter();
130130

131131
const handleSelectOrganization = (organization: SearchStakeholder) => {
132132
onSelect();
@@ -204,10 +204,7 @@ const StakeholderPreview = ({
204204
onClick={() => handleSelectOrganization(stakeholder)}
205205
className="notranslate"
206206
>
207-
<HighlightedText
208-
text={stakeholder.name}
209-
query={orgNameFilter}
210-
/>
207+
<HighlightedText text={stakeholder.name} query={searchFilter} />
211208
</InternalLink>
212209
</Typography>
213210
<Stack

client/src/hooks/useOrganizationBests.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {
77
useAppDispatch,
88
useFoodTypeFilter,
99
useOpenTimeFilter,
10-
useOrgNameFilter,
10+
useSearchFilter,
1111
useSearchCoordinates,
1212
} from "../appReducer";
1313
import * as analytics from "../services/analytics";
@@ -29,15 +29,15 @@ interface StakeholderFilters {
2929
categoryIds: number[];
3030
showActiveOnly?: boolean;
3131
openTimeFilter?: OpenTimeFilter;
32-
orgNameFilter?: string;
32+
searchFilter?: string;
3333
foodTypeFilter?: string[];
3434
}
3535

3636
interface SelectAllParams {
3737
categoryIds: number[];
3838
}
3939

40-
// Public-facing text fields searched by the "orgNameFilter" free-text search
40+
// Public-facing text fields searched by the "searchFilter" free-text search
4141
// (label reads "Search" in the UI). Deliberately excludes internal/admin-only
4242
// fields such as `adminNotes` -- only fields a food seeker can already see on
4343
// the listing/detail page belong here.
@@ -87,7 +87,7 @@ export default function useOrganizationBests() {
8787
});
8888
const searchCoordinates = useSearchCoordinates() as Coordinates | null;
8989
const openTimeFilter = useOpenTimeFilter() as OpenTimeFilter;
90-
const orgNameFilter = useOrgNameFilter() as string;
90+
const searchFilter = useSearchFilter() as string;
9191
const foodTypeFilter = useFoodTypeFilter() as string[];
9292
const { tenantTimeZone } = useSiteContext();
9393

@@ -152,9 +152,9 @@ export default function useOrganizationBests() {
152152
});
153153
});
154154
}
155-
if (filters.orgNameFilter) {
155+
if (filters.searchFilter) {
156156
const searchWords = filters
157-
.orgNameFilter!.toLowerCase()
157+
.searchFilter!.toLowerCase()
158158
.split(" ")
159159
.filter(Boolean);
160160
filteredStakeholders = filteredStakeholders.filter((stakeholder) => {
@@ -219,8 +219,8 @@ export default function useOrganizationBests() {
219219
filters.openTimeFilter = openTimeFilter;
220220
filters.showActiveOnly = true;
221221
}
222-
if (orgNameFilter) {
223-
filters.orgNameFilter = orgNameFilter;
222+
if (searchFilter) {
223+
filters.searchFilter = searchFilter;
224224
}
225225
if (foodTypeFilter.length) {
226226
filters.foodTypeFilter = foodTypeFilter;
@@ -253,7 +253,7 @@ export default function useOrganizationBests() {
253253
latitude,
254254
longitude,
255255
processStakeholders,
256-
orgNameFilter,
256+
searchFilter,
257257
foodTypeFilter,
258258
]
259259
);

client/src/types/appState.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ export interface AppState {
4343
neighborhood: AppNeighborhood | null;
4444
isWidget: boolean;
4545
filterPanel: boolean;
46-
orgNameFilter: string;
46+
searchFilter: string;
4747
openTimeFilter: OpenTimeFilter;
4848
foodTypeFilter: string[];
4949
listPanel: boolean;
@@ -69,7 +69,7 @@ export type AppAction =
6969
| { type: "RESET_HOVERED_ORGANIZATION" }
7070
| { type: "WIDGET"; isWidget: boolean }
7171
| { type: "FILTER_PANEL_TOGGLE"; filterPanel: boolean }
72-
| { type: "ORG_NAME_FILTER_UPDATED"; orgNameFilter: string }
72+
| { type: "SEARCH_FILTER_UPDATED"; searchFilter: string }
7373
| { type: "OPEN_TIME_FILTER_UPDATED"; openTimeFilter: OpenTimeFilter }
7474
| { type: "FOOD_TYPE_FILTER_UPDATED"; foodTypeFilter: string[] }
7575
| { type: "TOGGLE_LIST_PANEL"; listPanel?: boolean }

0 commit comments

Comments
 (0)