summaryrefslogtreecommitdiff
path: root/node_modules/@jet-app/app-store/tmp/src/controllers/search/search-results-controller.js
diff options
context:
space:
mode:
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.js152
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