Migrate all search to v2 and remove v1 (#11125)

This commit is contained in:
DS Boyce
2026-07-09 15:08:20 -07:00
committed by GitHub
parent 65e10f13f7
commit 3499d3646e
14 changed files with 114 additions and 475 deletions
+16 -67
View File
@@ -10,7 +10,6 @@ import {cleanError} from '#/lib/strings/errors'
import {augmentSearchQuery} from '#/lib/strings/helpers'
import {useActorSearch} from '#/state/queries/actor-search'
import {usePopularFeedsSearch} from '#/state/queries/feed'
import {useSearchPostsQuery} from '#/state/queries/search-posts'
import {useSearchPostsV2Query} from '#/state/queries/search-posts-v2'
import {useSession} from '#/state/session'
import {useLoggedOutViewControls} from '#/state/shell/logged-out'
@@ -36,7 +35,6 @@ import type * as bsky from '#/types/bsky'
let SearchResults = ({
query,
queryWithParams,
filters,
hasFilters,
activeTab,
@@ -44,7 +42,6 @@ let SearchResults = ({
headerHeight,
}: {
query: string
queryWithParams: string
filters: SearchFilters
hasFilters: boolean
activeTab: number
@@ -75,7 +72,6 @@ let SearchResults = ({
<SearchScreenPostResults
hasFilters={hasFilters}
query={query}
queryWithParams={queryWithParams}
filters={filters}
sort="top"
active={activePage === 0}
@@ -88,7 +84,6 @@ let SearchResults = ({
<SearchScreenPostResults
hasFilters={hasFilters}
query={query}
queryWithParams={queryWithParams}
filters={filters}
sort="latest"
active={activePage === 1}
@@ -111,15 +106,7 @@ let SearchResults = ({
title: string
component: React.ReactNode
}[]
}, [
l,
query,
queryWithParams,
filters,
hasFilters,
hasPostFilters,
activePage,
])
}, [l, query, filters, hasFilters, hasPostFilters, activePage])
// There may be fewer tabs after changing the search options.
const selectedPage = activePage > sections.length - 1 ? 0 : activePage
@@ -204,14 +191,9 @@ function NoResultsText({
hasFilters?: boolean
query: string
}) {
const ax = useAnalytics()
const t = useTheme()
const {t: l} = useLingui()
const searchV2Enabled = ax.features.enabled(ax.features.SearchV2Enable)
const advancedSearchV2Enabled =
searchV2Enabled && ax.features.enabled(ax.features.AdvancedSearchV2Enable)
return (
<>
<Text style={[a.text_lg, t.atoms.text_contrast_high]}>
@@ -257,35 +239,19 @@ function NoResultsText({
a.leading_snug,
t.atoms.text_contrast_high,
]}>
{advancedSearchV2Enabled ? (
<Trans context="english-only-resource">
Learn more about{' '}
<InlineLinkText
label={l({
message: 'Read about how to use advanced search filters',
context: 'english-only-resource',
})}
to={urls.website.blog.searchTipsAndTricks}
style={[a.text_md, a.leading_snug]}>
how to use advanced search
</InlineLinkText>
.
</Trans>
) : (
<Trans context="english-only-resource">
Learn more about{' '}
<InlineLinkText
label={l({
message: 'Read about how to use search filters',
context: 'english-only-resource',
})}
to={urls.website.blog.searchTipsAndTricks}
style={[a.text_md, a.leading_snug]}>
how to use search filters
</InlineLinkText>
.
</Trans>
)}
<Trans context="english-only-resource">
Learn more about{' '}
<InlineLinkText
label={l({
message: 'Read about how to use advanced search filters',
context: 'english-only-resource',
})}
to={urls.website.blog.searchTipsAndTricks}
style={[a.text_md, a.leading_snug]}>
how to use advanced search
</InlineLinkText>
.
</Trans>
</Text>
</>
)
@@ -305,14 +271,12 @@ type SearchResultSlice =
let SearchScreenPostResults = ({
hasFilters = false,
query,
queryWithParams,
filters,
sort,
active,
}: {
hasFilters: boolean
query: string
queryWithParams: string
filters?: SearchFilters
sort?: 'top' | 'latest'
active: boolean
@@ -323,30 +287,15 @@ let SearchScreenPostResults = ({
const [isPTR, setIsPTR] = useState(false)
const trackPostView = usePostViewTracking('SearchResults')
const searchV2Enabled = ax.features.enabled(ax.features.SearchV2Enable)
const augmentedV2Query = useMemo(() => {
return augmentSearchQuery(query || '')
}, [query])
const augmentedV1Query = useMemo(() => {
return augmentSearchQuery(queryWithParams || '')
}, [queryWithParams])
/*
* Both hooks are called to keep hook order stable; `enabled` ensures only the
* gated one actually fetches. V2 sends structured `filters` as separate
* params, V1 keeps the existing single-`q` behavior.
*/
const v1 = useSearchPostsQuery({
query: augmentedV1Query,
sort,
enabled: active && !searchV2Enabled,
})
const v2 = useSearchPostsV2Query({
query: augmentedV2Query,
filters,
sort,
enabled: active && searchV2Enabled,
enabled: active,
})
const {
isFetched,
@@ -357,7 +306,7 @@ let SearchScreenPostResults = ({
fetchNextPage,
isFetchingNextPage,
hasNextPage,
} = searchV2Enabled ? v2 : v1
} = v2
const t = useTheme()
const onPullToRefresh = useCallback(async () => {