summaryrefslogtreecommitdiff
path: root/node_modules/@jet-app/app-store/tmp/src/common/search/shelves
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/@jet-app/app-store/tmp/src/common/search/shelves')
-rw-r--r--node_modules/@jet-app/app-store/tmp/src/common/search/shelves/search-history-shelf.js148
1 files changed, 148 insertions, 0 deletions
diff --git a/node_modules/@jet-app/app-store/tmp/src/common/search/shelves/search-history-shelf.js b/node_modules/@jet-app/app-store/tmp/src/common/search/shelves/search-history-shelf.js
new file mode 100644
index 0000000..c24e8c3
--- /dev/null
+++ b/node_modules/@jet-app/app-store/tmp/src/common/search/shelves/search-history-shelf.js
@@ -0,0 +1,148 @@
+import { isNothing } from "@jet/environment/types/optional";
+import * as models from "../../../api/models";
+import * as serverData from "../../../foundation/json-parsing/server-data";
+import { Parameters, Path, Protocol } from "../../../foundation/network/url-constants";
+import * as metricsHelpersClicks from "../../metrics/helpers/clicks";
+import * as metricsHelpersImpressions from "../../metrics/helpers/impressions";
+import * as metricsHelpersLocation from "../../metrics/helpers/location";
+import * as searchLandingShelfController from "../landing/search-landing-shelf-controller";
+/**
+ * The `SearchHistoryShelfToken` type is responsible for plumbing through all
+ * the data needed to render an incomplete shelf (a shelf that requires a
+ * lookup) on the focus page.
+ */
+export class SearchHistoryShelfToken {
+ constructor(title, maxItems, shelfDisplayStyle, itemDisplayStyle) {
+ this.title = title;
+ this.maxItems = maxItems;
+ this.shelfDisplayStyle = shelfDisplayStyle;
+ this.itemDisplayStyle = itemDisplayStyle;
+ }
+}
+function encodedShelfToken(token) {
+ return encodeURIComponent(JSON.stringify(token));
+}
+export function decodeShelfToken(json) {
+ if (isNothing(json)) {
+ return undefined;
+ }
+ return JSON.parse(decodeURIComponent(json));
+}
+export function createShelfWithContext(objectGraph, pageContext, shelfAttributes) {
+ const token = new SearchHistoryShelfToken(shelfAttributes.title, shelfAttributes.displayCount, shelfAttributes.displayStyle, shelfAttributes.searchLandingItemDisplayStyle);
+ return createShelfWithToken(objectGraph, token, pageContext.metricsPageInformation, pageContext.metricsLocationTracker, pageContext.searchHistory);
+}
+function createShelfItems(objectGraph, metricsPageInformation, metricsLocationTracker, itemDisplayStyle, searchHistory) {
+ if (serverData.isNullOrEmpty(searchHistory)) {
+ return [];
+ }
+ const items = [];
+ for (const [historyIndex, historyItem] of searchHistory.entries()) {
+ const item = createShelfItem(objectGraph, historyItem, historyIndex, metricsPageInformation, metricsLocationTracker, itemDisplayStyle);
+ if (serverData.isNullOrEmpty(item)) {
+ continue;
+ }
+ items.push(item);
+ metricsHelpersLocation.nextPosition(metricsLocationTracker);
+ }
+ return items;
+}
+function createShelfURL(token) {
+ return `${Protocol.internal}:/${Path.searchLandingPage}/${Path.shelf}/?${Parameters.isOnDeviceSearchHistoryShelf}=true&${Parameters.token}=${encodedShelfToken(token)}`;
+}
+export function createShelfWithToken(objectGraph, token, metricsPageInformation, metricsLocationTracker, searchHistory) {
+ // Create Items
+ const items = createShelfItems(objectGraph, metricsPageInformation, metricsLocationTracker, token.itemDisplayStyle, searchHistory);
+ // Clear History Action
+ const clearHistoryAction = new models.ClearSearchHistoryAction();
+ clearHistoryAction.title = objectGraph.loc.string("Action.ClearSearches");
+ metricsHelpersClicks.addClickEventToClearSearchHistoryAction(objectGraph, clearHistoryAction);
+ // Clear History Sheet Action
+ const clearHistorySheetAction = new models.SheetAction([clearHistoryAction]);
+ clearHistorySheetAction.title = objectGraph.loc.string("Sheet.ClearSearches.Title");
+ clearHistorySheetAction.message = objectGraph.loc.string("Sheet.ClearSearches.Message");
+ clearHistorySheetAction.destructiveActionIndex = 0;
+ clearHistorySheetAction.isCancelable = true;
+ // Clear History Compound Action
+ const clearHistoryShelfAction = new models.CompoundAction([clearHistorySheetAction]);
+ clearHistoryShelfAction.title = objectGraph.loc.string("Action.Clear");
+ // Shelf
+ const contentType = shelfContentTypeForDisplayStyle(token.shelfDisplayStyle);
+ const shelf = new models.Shelf(contentType);
+ shelf.id = "onDeviceSearchHistory";
+ shelf.presentationHints = { isWidthConstrained: true };
+ // Header
+ shelf.header = {
+ title: token.title,
+ accessoryAction: clearHistoryShelfAction,
+ };
+ // Grid
+ if (shelf.contentType === "scrollablePill") {
+ shelf.isHorizontal = true;
+ shelf.rowsPerColumn = token.shelfDisplayStyle.layoutSize;
+ }
+ shelf.contentsMetadata = {
+ type: "searchFocusTwoColumnList",
+ numberOfColumns: items.length > 1 ? token.shelfDisplayStyle.layoutSize : 1,
+ };
+ // Content
+ shelf.items = items;
+ shelf.isHidden = serverData.isNullOrEmpty(items);
+ shelf.refreshUrl = createShelfURL(token);
+ return shelf;
+}
+function shelfContentTypeForDisplayStyle(displayStyle) {
+ if (displayStyle.layout === "word_cloud" /* models.GenericSearchPageShelfDisplayStyleLayout.WordCloud */) {
+ return "scrollablePill";
+ }
+ if (displayStyle.layoutSize === 2) {
+ // MAINTAINER'S NOTE: Automatically renders as single column in AX text sizes.
+ return "twoColumnList";
+ }
+ return "singleColumnList";
+}
+function createItemTitle(objectGraph, searchTerm, searchEntity) {
+ if (isNothing(searchEntity)) {
+ return searchTerm;
+ }
+ let formatLocKey;
+ if (searchEntity === "developer") {
+ formatLocKey = "Search.ResultsTitle.InDevelopers";
+ }
+ else if (searchEntity === "story") {
+ formatLocKey = "Search.ResultsTitle.InStories";
+ }
+ else if (searchEntity === "watch") {
+ formatLocKey = "Search.ResultsTitle.InWatch";
+ }
+ else if (searchEntity === "arcade") {
+ formatLocKey = "Search.ResultsTitle.InArcade";
+ }
+ if (isNothing(formatLocKey)) {
+ return searchTerm;
+ }
+ return objectGraph.loc.string(formatLocKey).replace("@@search_term@@", searchTerm);
+}
+function createShelfItem(objectGraph, historyItem, itemIndex, metricsPageInformation, metricsLocationTracker, displayStyle) {
+ const searchTerm = historyItem.term;
+ const searchEntity = historyItem.entity;
+ const searchAction = searchLandingShelfController.createFocusPageSearchAction(objectGraph, createItemTitle(objectGraph, searchTerm, searchEntity), searchTerm, searchEntity, metricsLocationTracker, "recents", undefined, /// MAINTAINER'S NOTE: In the future, we could keep track of the original search source and attribute this recent search to that.
+ metricsPageInformation, displayStyle);
+ if (isNothing(searchAction)) {
+ return null;
+ }
+ searchAction.id = historyItem.id;
+ metricsHelpersImpressions.addImpressionFields(objectGraph, searchAction, {
+ targetType: "link",
+ pageInformation: metricsPageInformation,
+ locationTracker: metricsLocationTracker,
+ kind: "link",
+ softwareType: null,
+ title: historyItem.term,
+ hintsEntity: historyItem.entity,
+ id: `${itemIndex}`,
+ idType: "sequential",
+ });
+ return searchAction;
+}
+//# sourceMappingURL=search-history-shelf.js.map \ No newline at end of file