diff options
| author | rxliuli <rxliuli@gmail.com> | 2025-11-04 05:03:50 +0800 |
|---|---|---|
| committer | rxliuli <rxliuli@gmail.com> | 2025-11-04 05:03:50 +0800 |
| commit | bce557cc2dc767628bed6aac87301a1be7c5431b (patch) | |
| tree | b51a051228d01fe3306cd7626d4a96768aadb944 /node_modules/@jet-app/app-store/tmp/src/controllers/search/search-results-controller.js | |
init commit
Diffstat (limited to 'node_modules/@jet-app/app-store/tmp/src/controllers/search/search-results-controller.js')
| -rw-r--r-- | node_modules/@jet-app/app-store/tmp/src/controllers/search/search-results-controller.js | 152 |
1 files changed, 152 insertions, 0 deletions
diff --git a/node_modules/@jet-app/app-store/tmp/src/controllers/search/search-results-controller.js b/node_modules/@jet-app/app-store/tmp/src/controllers/search/search-results-controller.js new file mode 100644 index 0000000..d263c24 --- /dev/null +++ b/node_modules/@jet-app/app-store/tmp/src/controllers/search/search-results-controller.js @@ -0,0 +1,152 @@ +import { isNothing } from "@jet/environment"; +import * as models from "../../api/models"; +import { FetchTimingMetricsBuilder } from "@jet/environment/metrics/fetch-timing-metrics-builder"; +import { injectSEOData } from "../../api/models/web-renderable-page"; +import { AbstractPageBuilder } from "../../common/builders/abstract-page-builder"; +import * as search from "../../common/search/search"; +import { makeCanonicalSearchResultsPageUrl, searchResultsPageRoutes } from "../../common/search/search-page-url"; +import * as searchResultsFetching from "../../common/search/search-results-fetching"; +import { injectWebNavigation } from "../../common/web-navigation/inject-web-navigation"; +import { replacePlatformSelectorDestinationWithSearchResults } from "../../common/web-navigation/search-results-platform-selection"; +import { withActiveIntent } from "../../foundation/dependencies/active-intent"; +import { validateNeedsVisionRestriction } from "../../foundation/media/util"; +/** Handles `SearchResultsIntent` to fetch the search results. This is for shelves v1. */ +export class SearchResultsIntentController { + constructor() { + this.$intentKind = "SearchResultsIntent"; + } + async perform(intent, objectGraph) { + return await fetchSearchResults(objectGraph, intent.requestDescriptor); + } +} +/** Handles `SearchResultsMoreIntent` to fetch more of the search results. This is for shelves v1. */ +export class SearchResultsMoreIntentController { + constructor() { + this.$intentKind = "SearchResultsMoreIntent"; + } + async perform(intent, objectGraph) { + return await fetchMoreSearchResults(objectGraph, intent.pageToken); + } +} +/** Handles `SegmentedSearchResultsPageIntent` to fetch the segmented search results. */ +export class SegmentedSearchResultsPageIntentController { + constructor() { + this.$intentKind = "SegmentedSearchResultsPageIntent"; + } + async perform(intent, objectGraph) { + return await fetchSegmentedSearchResults(objectGraph, intent.requestDescriptor); + } +} +/** Handles `SearchResultsPageIntent` to fetch the search results. This is for shelves 2.0. */ +export class SearchResultsPageIntentController { + constructor() { + this.$intentKind = "SearchResultsPageIntent"; + this.routes = searchResultsPageRoutes; + } + async perform(intent, objectGraphWithoutActiveIntnet) { + if (objectGraphWithoutActiveIntnet.client.isWeb && !intent.platform) { + // Search on the "web" client requires a platform; if we don't have one from the `Intent`, we should + // assume we want `iphone` results + intent.platform = "iphone"; + } + return await withActiveIntent(objectGraphWithoutActiveIntnet, intent, async (objectGraph) => { + var _a; + validateNeedsVisionRestriction(objectGraph); + const searchResultsPage = await fetchSearchResultsPage(objectGraph, intent); + if (isNothing(searchResultsPage.canonicalURL)) { + searchResultsPage.canonicalURL = makeCanonicalSearchResultsPageUrl(objectGraph, intent); + } + if (objectGraph.client.isWeb) { + const webNavigation = injectWebNavigation(objectGraph, searchResultsPage, intent.platform); + webNavigation.searchAction.destination.term = intent.term; + replacePlatformSelectorDestinationWithSearchResults(objectGraph, webNavigation, intent); + injectSEOData(searchResultsPage, (_a = objectGraph.seo) === null || _a === void 0 ? void 0 : _a.getSEODataForSearchResultsPage(objectGraph, searchResultsPage, null)); + } + return searchResultsPage; + }); + } + actionFor(intent, objectGraph) { + const flowAction = new models.FlowAction("search"); + flowAction.destination = intent; + flowAction.pageUrl = makeCanonicalSearchResultsPageUrl(objectGraph, intent); + return flowAction; + } +} +/** Handles `SearchResultsPageMoreIntent` to fetch more of the search results. This is for shelves 2.0. */ +export class SearchResultsPageMoreIntentController { + constructor() { + this.$intentKind = "SearchResultsPageMoreIntent"; + } + async perform(intent, objectGraph) { + return await fetchMoreSearchResultsPage(objectGraph, intent.pageToken); + } +} +/** Fetches search results for shelves v1. */ +async function fetchSearchResults(objectGraph, requestDescriptor) { + const fetchTimingMetricsBuilder = new FetchTimingMetricsBuilder(); + const modifiedObjectGraph = objectGraph.addingFetchTimingMetricsBuilder(fetchTimingMetricsBuilder); + const combinedSearchData = await searchResultsFetching.fetchSequentialSearchResultsData(modifiedObjectGraph, requestDescriptor); + if (combinedSearchData === null) { + return search.emptyResults(modifiedObjectGraph, requestDescriptor.facets); + } + return await search.searchResultsFromResponse(modifiedObjectGraph, combinedSearchData); +} +/** Fetches search results for segmented search results on visionOS */ +async function fetchSegmentedSearchResults(objectGraph, requestDescriptor) { + const combinedSearchData = await searchResultsFetching.fetchSegmentedSearchResults(objectGraph, requestDescriptor); + if (combinedSearchData === null) { + return search.emptySegmentedResultsPage(objectGraph); + } + return await search.segmentedSearchResultsPageFromResponse(objectGraph, combinedSearchData); +} +/** Fetches more search results for shelves v1. */ +async function fetchMoreSearchResults(objectGraph, token) { + return await search.paginatedSearchResultsWithToken(objectGraph, token); +} +/** Fetches search results for shelves 2.0. */ +async function fetchSearchResultsPage(objectGraph, requestDescriptor) { + const fetchTimingMetricsBuilder = new FetchTimingMetricsBuilder(); + const modifiedObjectGraph = objectGraph.addingFetchTimingMetricsBuilder(fetchTimingMetricsBuilder); + const combinedSearchData = await searchResultsFetching.fetchSequentialSearchResultsData(modifiedObjectGraph, requestDescriptor); + if (combinedSearchData === null) { + return search.emptyResultsPage(objectGraph, requestDescriptor.facets); + } + return await search.searchResultsPageFromResponse(modifiedObjectGraph, combinedSearchData); +} +/** Fetches more search results for shelves 2.0. */ +async function fetchMoreSearchResultsPage(objectGraph, token) { + return await search.paginatedSearchResultsPageWithToken(objectGraph, token); +} +export class SearchResultsBuilder extends AbstractPageBuilder { + constructor(objectGraph, runtime) { + super("SearchResultsBuilder"); + runtime.exportingService("SearchData", { + /** Fetches search results for shelves v1. */ + async fetchResults(options) { + return await fetchSearchResults(objectGraph, options); + }, + /** Fetches more search results for shelves v1. */ + async fetchMoreResults(options) { + return await fetchMoreSearchResults(objectGraph, options.pageToken); + }, + /** Fetches search results for shelves 2.0. */ + async fetchSearchResultsPage(options) { + return await fetchSearchResultsPage(objectGraph, options); + }, + /** Fetches more search results for shelves 2.0. */ + async fetchMoreOfSearchResultsPage(options) { + return await fetchMoreSearchResultsPage(objectGraph, options.pageToken); + }, + }); + } + async handlePage(objectGraph, url, parameters, matchedRuleIdentifier, referrerData, isIncomingURL) { + throw new Error("No page routes specified"); + } + pageRoute(objectGraph) { + return []; + } + pageType() { + return "unknown"; + } +} +//# sourceMappingURL=search-results-controller.js.map
\ No newline at end of file |
