From 510dc51d7a31a1d0f3dc41cbb68a344d73b5816b Mon Sep 17 00:00:00 2001 From: DS Boyce <260543580+ds-boyce@users.noreply.github.com> Date: Wed, 8 Jul 2026 10:14:39 -0700 Subject: [PATCH] Update advanced search UI (#11088) --- eslint-suppressions.json | 3 - src/components/forms/TextField.tsx | 2 +- src/screens/Search/Shell.tsx | 62 ++++++++++++------- .../ClearableDateField.tsx | 2 +- .../FollowingDropdown.tsx | 5 +- .../__tests__/utils.test.ts | 10 +-- .../components/AdvancedSearchDialog/index.tsx | 60 +++++++----------- .../components/AdvancedSearchDialog/utils.ts | 6 +- 8 files changed, 75 insertions(+), 75 deletions(-) diff --git a/eslint-suppressions.json b/eslint-suppressions.json index 2e323dd73e..8c695aabf7 100644 --- a/eslint-suppressions.json +++ b/eslint-suppressions.json @@ -671,9 +671,6 @@ } }, "src/components/forms/TextField.tsx": { - "@typescript-eslint/no-unsafe-member-access": { - "count": 3 - }, "react-hooks/refs": { "count": 1 } diff --git a/src/components/forms/TextField.tsx b/src/components/forms/TextField.tsx index df5e1d54dc..daa85c23ef 100644 --- a/src/components/forms/TextField.tsx +++ b/src/components/forms/TextField.tsx @@ -207,7 +207,7 @@ export function createInput(Component: typeof TextInput) { const refs = mergeRefs([ctx.inputRef, inputRef!].filter(Boolean)) - const flattened = StyleSheet.flatten([ + const flattened = StyleSheet.flatten([ a.relative, a.z_20, a.flex_1, diff --git a/src/screens/Search/Shell.tsx b/src/screens/Search/Shell.tsx index 20a71b5daf..749819d589 100644 --- a/src/screens/Search/Shell.tsx +++ b/src/screens/Search/Shell.tsx @@ -540,6 +540,24 @@ export function SearchScreenShell({ value={filters.lang ?? ''} onChange={onChangeLang} /> + ) : showFilters && advancedSearchV2Enabled ? ( + + 1} + q={searchText} + filters={filters} + onSubmit={onSubmitAdvanced} + /> + + ) : ( )} @@ -558,19 +576,19 @@ export function SearchScreenShell({ /> )} - + {showAutocomplete && ( )} @@ -591,6 +609,25 @@ export function SearchScreenShell({ /> + {showFilters && !showHeader && advancedSearchV2Enabled ? ( + + 1} + q={searchText} + filters={filters} + onSubmit={onSubmitAdvanced} + /> + + + ) : null} {showFilters && !showHeader && !advancedSearchV2Enabled && ( @@ -601,25 +638,6 @@ export function SearchScreenShell({ /> )} - - {showFilters && advancedSearchV2Enabled ? ( - - - - - ) : null} diff --git a/src/screens/Search/components/AdvancedSearchDialog/ClearableDateField.tsx b/src/screens/Search/components/AdvancedSearchDialog/ClearableDateField.tsx index 6d6d4bcdc5..b4d07497e2 100644 --- a/src/screens/Search/components/AdvancedSearchDialog/ClearableDateField.tsx +++ b/src/screens/Search/components/AdvancedSearchDialog/ClearableDateField.tsx @@ -41,7 +41,7 @@ export function ClearableDateField({ */ value={active ? value : ''} placeholder={l({ - message: 'Any time', + message: 'Any date', comment: 'Placeholder text for a date picker', })} accessibilityHint={accessibilityHint} diff --git a/src/screens/Search/components/AdvancedSearchDialog/FollowingDropdown.tsx b/src/screens/Search/components/AdvancedSearchDialog/FollowingDropdown.tsx index 7d3e56a524..26957d95a0 100644 --- a/src/screens/Search/components/AdvancedSearchDialog/FollowingDropdown.tsx +++ b/src/screens/Search/components/AdvancedSearchDialog/FollowingDropdown.tsx @@ -19,11 +19,10 @@ export function FollowingDropdown({ const {t: l} = useLingui() const options: {value: FollowingFilter; label: string}[] = [ - {value: 'everyone', label: l`Everyone`}, + {value: 'anyone', label: l`Anyone`}, {value: 'following', label: l`People you follow`}, ] - const currentLabel = - options.find(o => o.value === value)?.label ?? l`Everyone` + const currentLabel = options.find(o => o.value === value)?.label ?? l`Anyone` return ( diff --git a/src/screens/Search/components/AdvancedSearchDialog/__tests__/utils.test.ts b/src/screens/Search/components/AdvancedSearchDialog/__tests__/utils.test.ts index 26b9212ca3..b30d04fb90 100644 --- a/src/screens/Search/components/AdvancedSearchDialog/__tests__/utils.test.ts +++ b/src/screens/Search/components/AdvancedSearchDialog/__tests__/utils.test.ts @@ -14,7 +14,7 @@ const emptySerializeState = { language: '', replies: 'all' as const, media: 'all' as const, - following: 'everyone' as const, + following: 'anyone' as const, dateSince: '', dateSinceActive: false, dateUntil: '', @@ -145,10 +145,10 @@ describe(`AdvancedSearchDialog serialize/parse`, () => { expect(out.filters.following).toBe('true') }) - it(`leaves the following param unset for everyone`, () => { + it(`leaves the following param unset for anyone`, () => { const out = serializeAdvancedSearch({ ...emptySerializeState, - following: 'everyone', + following: 'anyone', }) expect(out.filters.following).toBeUndefined() }) @@ -157,7 +157,7 @@ describe(`AdvancedSearchDialog serialize/parse`, () => { expect(parseAdvancedSearch('', {following: 'true'}).following).toBe( 'following', ) - expect(parseAdvancedSearch('', {}).following).toBe('everyone') + expect(parseAdvancedSearch('', {}).following).toBe('anyone') }) it(`strips redundant markers from filter values on serialize`, () => { @@ -177,7 +177,7 @@ describe(`AdvancedSearchDialog serialize/parse`, () => { language: '', replies: 'all', media: 'all', - following: 'everyone', + following: 'anyone', dateSince: '', dateSinceActive: false, dateUntil: '', diff --git a/src/screens/Search/components/AdvancedSearchDialog/index.tsx b/src/screens/Search/components/AdvancedSearchDialog/index.tsx index 4bb1fb52cc..3276ee402c 100644 --- a/src/screens/Search/components/AdvancedSearchDialog/index.tsx +++ b/src/screens/Search/components/AdvancedSearchDialog/index.tsx @@ -38,17 +38,18 @@ import { const MAX_FILTERS = 20 export function AdvancedSearchDialog({ + disabled, q, filters, onSubmit, }: { + disabled: boolean q: string filters: SearchFilters onSubmit: (q: string, filters: SearchFilters) => void }) { const ax = useAnalytics() const {t: l} = useLingui() - const t = useTheme() const control = Dialog.useDialogControl() const filtersActive = hasActiveFilters(filters) const stateKey = useMemo( @@ -61,9 +62,10 @@ export function AdvancedSearchDialog({ <> - {filtersActive && ( - - )} @@ -244,12 +230,12 @@ function DialogInner({ return ( - Advanced search + Filters }> @@ -272,22 +258,6 @@ function DialogInner({ - - - This exact phrase - - - - None of these words @@ -304,6 +274,22 @@ function DialogInner({ onSubmitEditing={handlePressSearch} /> + + + + This exact phrase + + + diff --git a/src/screens/Search/components/AdvancedSearchDialog/utils.ts b/src/screens/Search/components/AdvancedSearchDialog/utils.ts index 95977338c1..25d21f9972 100644 --- a/src/screens/Search/components/AdvancedSearchDialog/utils.ts +++ b/src/screens/Search/components/AdvancedSearchDialog/utils.ts @@ -15,9 +15,9 @@ export type MediaFilter = 'all' | 'media' | 'video' /** * Whether to limit results to authors the user follows. Serializes into the - * `following` sibling param ('following' -> following:true, everyone -> unset). + * `following` sibling param ('following' -> following:true, anyone -> unset). */ -export type FollowingFilter = 'everyone' | 'following' +export type FollowingFilter = 'anyone' | 'following' export type FilterField = 'authors' | 'mentions' | 'domains' | 'urls' | 'tags' @@ -260,7 +260,7 @@ export function parseAdvancedSearch( language: lang, replies, media, - following: filters.following === 'true' ? 'following' : 'everyone', + following: filters.following === 'true' ? 'following' : 'anyone', since: since && isValidDate(since) ? since : '', until: until && isValidDate(until) ? until : '', filters: filterRows,