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/common/search/metadata-ribbon | |
init commit
Diffstat (limited to 'node_modules/@jet-app/app-store/tmp/src/common/search/metadata-ribbon')
14 files changed, 461 insertions, 0 deletions
diff --git a/node_modules/@jet-app/app-store/tmp/src/common/search/metadata-ribbon/category-metadata-ribbon-item.js b/node_modules/@jet-app/app-store/tmp/src/common/search/metadata-ribbon/category-metadata-ribbon-item.js new file mode 100644 index 0000000..70c47c8 --- /dev/null +++ b/node_modules/@jet-app/app-store/tmp/src/common/search/metadata-ribbon/category-metadata-ribbon-item.js @@ -0,0 +1,38 @@ +import { isSome } from "@jet/environment"; +import { MetadataRibbonItem } from "../../../api/models"; +import { isNullOrEmpty } from "../../../foundation/json-parsing/server-data"; +import { categoryArtworkData } from "../../categories"; +import * as content from "../../content/content"; +import { categoryFromData } from "../../lockups/lockups"; +import * as metricsHelpersImpressions from "../../metrics/helpers/impressions"; +export function createMetadataRibbonItems(objectGraph, data, lockup, dedupeSet, metricsOptions) { + const artworkData = categoryArtworkData(objectGraph, data, true); + const hasArtwork = isSome(artworkData); + const labelText = categoryFromData(objectGraph, data); + if (isNullOrEmpty(labelText)) { + return null; + } + if (labelText != null) { + if (dedupeSet.has(labelText)) { + return null; + } + else { + dedupeSet.add(labelText); + } + } + const viewType = hasArtwork ? "imageWithLabel" : "textLabel"; + const categoryItem = new MetadataRibbonItem(viewType); + categoryItem.moduleType = "genreDisplayName"; + categoryItem.labelText = labelText; + if (hasArtwork) { + const artwork = content.artworkFromApiArtwork(objectGraph, artworkData, { + useCase: 20 /* content.ArtworkUseCase.CategoryIcon */, + }); + artwork.crop = "sr"; + categoryItem.artwork = artwork; + } + const impressionOptions = metricsHelpersImpressions.impressionOptionsForMetadataRibbonItem(metricsOptions, "genreDisplayName", categoryItem.labelText, "static"); + metricsHelpersImpressions.addImpressionFieldsToSearchMetadataRibbonItem(objectGraph, categoryItem, impressionOptions); + return [categoryItem]; +} +//# sourceMappingURL=category-metadata-ribbon-item.js.map
\ No newline at end of file diff --git a/node_modules/@jet-app/app-store/tmp/src/common/search/metadata-ribbon/chart-metadata-ribbon-item.js b/node_modules/@jet-app/app-store/tmp/src/common/search/metadata-ribbon/chart-metadata-ribbon-item.js new file mode 100644 index 0000000..26f815c --- /dev/null +++ b/node_modules/@jet-app/app-store/tmp/src/common/search/metadata-ribbon/chart-metadata-ribbon-item.js @@ -0,0 +1,75 @@ +import { isSome, isNothing } from "@jet/environment/types/optional"; +import { MetadataRibbonItem } from "../../../api/models"; +import * as serverData from "../../../foundation/json-parsing/server-data"; +import { contentAttributeAsDictionary } from "../../content/attributes"; +import { badgeChartKeyForClientIdentifier } from "../../content/content"; +import * as metricsHelpersImpressions from "../../metrics/helpers/impressions"; +export function createMetadataRibbonItems(objectGraph, data, lockup, dedupeSet, metricsOptions) { + var _a, _b; + const chartData = chartFromData(objectGraph, data); + if (serverData.isNullOrEmpty(chartData)) { + return null; + } + const position = serverData.asNumber(chartData, "position"); + /// Per product, if the app isn't charting in the top 50, we don't want to use the chart module + if (isNothing(position) || position > 50) { + return null; + } + const genreName = (_a = serverData.asString(chartData, "genreShortName")) !== null && _a !== void 0 ? _a : serverData.asString(chartData, "genreName"); + if (genreName != null) { + if (dedupeSet.has(genreName)) { + return null; + } + else { + dedupeSet.add(genreName); + } + } + let chartItem; + if (objectGraph.bag.isLLMSearchTagsEnabled) { + chartItem = new MetadataRibbonItem("highlightedText"); + } + else { + chartItem = new MetadataRibbonItem("borderedTextLabel"); + } + chartItem.moduleType = "chartPositions"; + // Only use an ad override locale if this is an ad. + const adsOverrideLanguage = isSome((_b = lockup.searchAdOpportunity) === null || _b === void 0 ? void 0 : _b.searchAd) || isSome(lockup.searchAd) + ? objectGraph.bag.adsOverrideLanguage + : null; + const useAdsLocale = isSome(adsOverrideLanguage); + const loc = useAdsLocale ? objectGraph.adsLoc : objectGraph.loc; + // MAINTAINER'S NOTE: This was previously guarded by the iOS only `search_tags` feature flag that has been enabled by default on iOS only. + if (objectGraph.client.isiOS) { + const chartPositionText = loc + .string("MetadataRibbon.ChartPosition") + .replace("@@chartPosition@@", objectGraph.loc.formattedCountForPreferredLocale(objectGraph, position, adsOverrideLanguage)); + if (objectGraph.bag.isLLMSearchTagsEnabled) { + chartItem.highlightedText = chartPositionText; + chartItem.labelText = loc + .string("MetadataRibbon.ChartPositionAndCategory.Tags") + .replace("@@chartPosition@@", objectGraph.loc.formattedCountForPreferredLocale(objectGraph, position, adsOverrideLanguage)) + .replace("@@category@@", genreName); + } + else { + chartItem.labelText = genreName; + chartItem.borderedText = chartPositionText; + } + } + chartItem.secondaryViewPlacement = "leading"; + const impressionOptions = metricsHelpersImpressions.impressionOptionsForMetadataRibbonItem(metricsOptions, "chartPosition", chartItem.labelText, "static"); + metricsHelpersImpressions.addImpressionFieldsToSearchMetadataRibbonItem(objectGraph, chartItem, impressionOptions); + return [chartItem]; +} +export function chartFromData(objectGraph, data) { + const chartPositionsByStore = contentAttributeAsDictionary(objectGraph, data, "chartPositions"); + if (serverData.isNullOrEmpty(chartPositionsByStore)) { + return null; + } + const storeChartKey = badgeChartKeyForClientIdentifier(objectGraph, objectGraph.host.clientIdentifier); + if (serverData.isNullOrEmpty(storeChartKey)) { + return null; + } + const chartData = serverData.asDictionary(chartPositionsByStore, storeChartKey); + return chartData; +} +//# sourceMappingURL=chart-metadata-ribbon-item.js.map
\ No newline at end of file diff --git a/node_modules/@jet-app/app-store/tmp/src/common/search/metadata-ribbon/developer-metadata-ribbon-item.js b/node_modules/@jet-app/app-store/tmp/src/common/search/metadata-ribbon/developer-metadata-ribbon-item.js new file mode 100644 index 0000000..3a451a2 --- /dev/null +++ b/node_modules/@jet-app/app-store/tmp/src/common/search/metadata-ribbon/developer-metadata-ribbon-item.js @@ -0,0 +1,37 @@ +import { isNothing, isSome } from "@jet/environment"; +import * as models from "../../../api/models"; +import { attributeAsString } from "../../../foundation/media/attributes"; +import * as contentArtwork from "../../content/artwork/artwork"; +import * as metricsHelpersImpressions from "../../metrics/helpers/impressions"; +export function createMetadataRibbonItems(objectGraph, data, lockup, dedupeSet, metricsOptions) { + var _a; + let developerName = lockup.developerName; + if (isNothing(developerName)) { + developerName = (_a = attributeAsString(data, "artistName")) !== null && _a !== void 0 ? _a : attributeAsString(data, "developerName"); + } + if (developerName != null) { + if (dedupeSet.has(developerName)) { + return null; + } + else { + dedupeSet.add(developerName); + } + } + if (isSome(developerName) && developerName.length > 0) { + const developerItem = new models.MetadataRibbonItem("imageWithLabel"); + developerItem.moduleType = "developerInfo"; + developerItem.labelText = developerName; + developerItem.artwork = contentArtwork.createArtworkForResource(objectGraph, "systemimage://person.crop.square"); + const characterCountThreshold = 6; + developerItem.maxCharacterCount = 16; + developerItem.truncationLegibilityCharacterCountThreshold = Math.min(characterCountThreshold, developerName.length); + developerItem.allowsTruncation = developerName.length >= characterCountThreshold; + const impressionOptions = metricsHelpersImpressions.impressionOptionsForMetadataRibbonItem(metricsOptions, "developerInfo", developerItem.labelText, "static"); + metricsHelpersImpressions.addImpressionFieldsToSearchMetadataRibbonItem(objectGraph, developerItem, impressionOptions); + return [developerItem]; + } + else { + return null; + } +} +//# sourceMappingURL=developer-metadata-ribbon-item.js.map
\ No newline at end of file diff --git a/node_modules/@jet-app/app-store/tmp/src/common/search/metadata-ribbon/divider-metadata-ribbon-item.js b/node_modules/@jet-app/app-store/tmp/src/common/search/metadata-ribbon/divider-metadata-ribbon-item.js new file mode 100644 index 0000000..91f5a5f --- /dev/null +++ b/node_modules/@jet-app/app-store/tmp/src/common/search/metadata-ribbon/divider-metadata-ribbon-item.js @@ -0,0 +1,8 @@ +import { MetadataRibbonItem } from "../../../api/models"; +export function createMetadataRibbonItems(objectGraph, data, lockup, dedupeSet, metricsOptions) { + const dividerItem = new MetadataRibbonItem("divider"); + dividerItem.moduleType = "divider"; + dividerItem.labelText = "|"; + return [dividerItem]; +} +//# sourceMappingURL=divider-metadata-ribbon-item.js.map
\ No newline at end of file diff --git a/node_modules/@jet-app/app-store/tmp/src/common/search/metadata-ribbon/editors-choice-metadata-ribbon-item.js b/node_modules/@jet-app/app-store/tmp/src/common/search/metadata-ribbon/editors-choice-metadata-ribbon-item.js new file mode 100644 index 0000000..764624e --- /dev/null +++ b/node_modules/@jet-app/app-store/tmp/src/common/search/metadata-ribbon/editors-choice-metadata-ribbon-item.js @@ -0,0 +1,21 @@ +import { isSome } from "@jet/environment/types/optional"; +import * as models from "../../../api/models"; +import * as metricsHelpersImpressions from "../../metrics/helpers/impressions"; +export function createMetadataRibbonItems(objectGraph, data, lockup, dedupeSet, metricsOptions) { + var _a; + if (lockup.isEditorsChoice) { + const editorsChoiceItem = new models.MetadataRibbonItem("editorsChoice"); + editorsChoiceItem.moduleType = "editorialBadgeInfo"; + // Only use an ad override locale if this is an ad. + editorsChoiceItem.useAdsLocale = + (isSome((_a = lockup.searchAdOpportunity) === null || _a === void 0 ? void 0 : _a.searchAd) || isSome(lockup.searchAd)) && + isSome(objectGraph.bag.adsOverrideLanguage); + const impressionOptions = metricsHelpersImpressions.impressionOptionsForMetadataRibbonItem(metricsOptions, "editorialBadgeInfo", "Editors Choice", "static"); + metricsHelpersImpressions.addImpressionFieldsToSearchMetadataRibbonItem(objectGraph, editorsChoiceItem, impressionOptions); + return [editorsChoiceItem]; + } + else { + return null; + } +} +//# sourceMappingURL=editors-choice-metadata-ribbon-item.js.map
\ No newline at end of file diff --git a/node_modules/@jet-app/app-store/tmp/src/common/search/metadata-ribbon/game-controller-metadata-ribbon-item.js b/node_modules/@jet-app/app-store/tmp/src/common/search/metadata-ribbon/game-controller-metadata-ribbon-item.js new file mode 100644 index 0000000..40d18c0 --- /dev/null +++ b/node_modules/@jet-app/app-store/tmp/src/common/search/metadata-ribbon/game-controller-metadata-ribbon-item.js @@ -0,0 +1,36 @@ +import { isSome } from "@jet/environment/types/optional"; +import * as models from "../../../api/models"; +import * as contentArtwork from "../../content/artwork/artwork"; +import * as contentAttributes from "../../content/attributes"; +import * as metricsHelpersImpressions from "../../metrics/helpers/impressions"; +export function createMetadataRibbonItems(objectGraph, data, lockup, dedupeSet, metricsOptions) { + var _a; + let isGameControllerSupported = false; + switch (contentAttributes.contentAttributeAsString(objectGraph, data, "remoteControllerRequirement")) { + case "CONTROLLER_REQUIRED": + case "CONTROLLER_OPTIONAL": + isGameControllerSupported = true; + break; + default: + break; + } + if (contentAttributes.contentAttributeAsBooleanOrFalse(objectGraph, data, "supportsGameController")) { + isGameControllerSupported = true; + } + if (!isGameControllerSupported) { + return null; + } + const gameControllerItem = new models.MetadataRibbonItem("imageWithLabel"); + gameControllerItem.moduleType = "supportsGameController"; + // Only use an ad override locale if this is an ad. + const useAdsLocale = (isSome(lockup.searchAd) || isSome((_a = lockup.searchAdOpportunity) === null || _a === void 0 ? void 0 : _a.searchAd)) && + isSome(objectGraph.bag.adsOverrideLanguage); + gameControllerItem.labelText = useAdsLocale + ? objectGraph.adsLoc.string("BADGE_MFI_SUPPORTED") + : objectGraph.loc.string("BADGE_MFI_SUPPORTED"); + gameControllerItem.artwork = contentArtwork.createArtworkForResource(objectGraph, "systemimage://gamecontroller.fill"); + const impressionOptions = metricsHelpersImpressions.impressionOptionsForMetadataRibbonItem(metricsOptions, "supportsGameController", "Supports Game Controller", "static"); + metricsHelpersImpressions.addImpressionFieldsToSearchMetadataRibbonItem(objectGraph, gameControllerItem, impressionOptions); + return [gameControllerItem]; +} +//# sourceMappingURL=game-controller-metadata-ribbon-item.js.map
\ No newline at end of file diff --git a/node_modules/@jet-app/app-store/tmp/src/common/search/metadata-ribbon/metadata-ribbon-item-factory.js b/node_modules/@jet-app/app-store/tmp/src/common/search/metadata-ribbon/metadata-ribbon-item-factory.js new file mode 100644 index 0000000..5c6f3a6 --- /dev/null +++ b/node_modules/@jet-app/app-store/tmp/src/common/search/metadata-ribbon/metadata-ribbon-item-factory.js @@ -0,0 +1,24 @@ +import * as categoryMetadataRibbonItem from "./category-metadata-ribbon-item"; +import * as chartMetadataRibbonItem from "./chart-metadata-ribbon-item"; +import * as developerMetadataRibbonItem from "./developer-metadata-ribbon-item"; +import * as dividerMetadataRibbonItem from "./divider-metadata-ribbon-item"; +import * as editorsChoiceMetadataRibbonItem from "./editors-choice-metadata-ribbon-item"; +import * as gameControllerMetadataRibbonItem from "./game-controller-metadata-ribbon-item"; +import * as secondaryShortCategoriesMetadataRibbonItem from "./secondary-short-categories-metadata-ribbon-item"; +import * as shortCategoryMetadataRibbonItem from "./short-category-metadata-ribbon-item"; +import * as starRatingMetadataRibbonItem from "./star-rating-metadata-ribbon-item"; +import * as tagMetadataRibbonItem from "./tag-metadata-ribbon-item"; +export const standardList = { + // every key in Key must be present + chartPositions: chartMetadataRibbonItem.createMetadataRibbonItems, + genreDisplayName: categoryMetadataRibbonItem.createMetadataRibbonItems, + genreShortDisplayName: shortCategoryMetadataRibbonItem.createMetadataRibbonItems, + secondaryGenreShortDisplayNames: secondaryShortCategoriesMetadataRibbonItem.createMetadataRibbonItems, + developerInfo: developerMetadataRibbonItem.createMetadataRibbonItems, + editorialBadgeInfo: editorsChoiceMetadataRibbonItem.createMetadataRibbonItems, + userRating: starRatingMetadataRibbonItem.createMetadataRibbonItems, + supportsGameController: gameControllerMetadataRibbonItem.createMetadataRibbonItems, + tag: tagMetadataRibbonItem.createMetadataRibbonItems, + divider: dividerMetadataRibbonItem.createMetadataRibbonItems, +}; +//# sourceMappingURL=metadata-ribbon-item-factory.js.map
\ No newline at end of file diff --git a/node_modules/@jet-app/app-store/tmp/src/common/search/metadata-ribbon/metadata-ribbon.js b/node_modules/@jet-app/app-store/tmp/src/common/search/metadata-ribbon/metadata-ribbon.js new file mode 100644 index 0000000..1b487cb --- /dev/null +++ b/node_modules/@jet-app/app-store/tmp/src/common/search/metadata-ribbon/metadata-ribbon.js @@ -0,0 +1,27 @@ +import * as serverData from "../../../foundation/json-parsing/server-data"; +import { standardList } from "./metadata-ribbon-item-factory"; +export function createMetadataRibbonItemsForLockup(objectGraph, data, lockup, itemTypes, options, metadataRibbonItemFactory = standardList) { + if (serverData.isNullOrEmpty(itemTypes)) { + return []; + } + const metadataRibbonItems = []; + const dedupeSet = new Set(); + for (const itemSlot of itemTypes) { + if (serverData.isNullOrEmpty(itemSlot)) { + continue; + } + for (const itemType of itemSlot) { + const metadataRibbonFactory = metadataRibbonItemFactory[itemType]; + if (serverData.isNull(metadataRibbonFactory)) { + continue; + } + const results = metadataRibbonFactory(objectGraph, data, lockup, dedupeSet, options.metricsOptions); + if (serverData.isDefinedNonNull(results)) { + metadataRibbonItems.push(...results); + break; + } + } + } + return metadataRibbonItems; +} +//# sourceMappingURL=metadata-ribbon.js.map
\ No newline at end of file diff --git a/node_modules/@jet-app/app-store/tmp/src/common/search/metadata-ribbon/ranked-secondary-category-metadata-ribbon-item.js b/node_modules/@jet-app/app-store/tmp/src/common/search/metadata-ribbon/ranked-secondary-category-metadata-ribbon-item.js new file mode 100644 index 0000000..217876d --- /dev/null +++ b/node_modules/@jet-app/app-store/tmp/src/common/search/metadata-ribbon/ranked-secondary-category-metadata-ribbon-item.js @@ -0,0 +1,22 @@ +import { MetadataRibbonItem } from "../../../api/models"; +import * as metricsHelpersImpressions from "../../metrics/helpers/impressions"; +import { isNothing, isSome } from "@jet/environment"; +/** + * Creates a metadata ribbon item for ranked secondary category metadata ribbon type. + * This particular function takes in the type string since we grab it from the data in the search-tags-ribbon. + */ +export function createMetadataRibbonItemsForRankedSecondaryCategory(objectGraph, data, lockup, dedupeSet, metricsOptions) { + if (isNothing(data) || data.length === 0 || dedupeSet.has(data)) { + return null; + } + const tagItem = new MetadataRibbonItem("textLabel"); + tagItem.moduleType = "rankedSecondaryGenre"; + if (isSome(data)) { + tagItem.labelText = data; + const impressionOptions = metricsHelpersImpressions.impressionOptionsForMetadataRibbonItem(metricsOptions, "rankedSecondaryGenre", tagItem.labelText, "static"); + metricsHelpersImpressions.addImpressionFieldsToSearchMetadataRibbonItem(objectGraph, tagItem, impressionOptions); + } + dedupeSet.add(data); + return [tagItem]; +} +//# sourceMappingURL=ranked-secondary-category-metadata-ribbon-item.js.map
\ No newline at end of file diff --git a/node_modules/@jet-app/app-store/tmp/src/common/search/metadata-ribbon/search-tags-ribbon.js b/node_modules/@jet-app/app-store/tmp/src/common/search/metadata-ribbon/search-tags-ribbon.js new file mode 100644 index 0000000..3901446 --- /dev/null +++ b/node_modules/@jet-app/app-store/tmp/src/common/search/metadata-ribbon/search-tags-ribbon.js @@ -0,0 +1,72 @@ +import { isSome } from "@jet/environment"; +import * as serverData from "../../../foundation/json-parsing/server-data"; +import * as metricsHelpersLocation from "../../metrics/helpers/location"; +import { standardList } from "./metadata-ribbon-item-factory"; +import * as rankedSecondaryCategoryMetadataRibbonItem from "./ranked-secondary-category-metadata-ribbon-item"; +export function createSearchTagsRibbonItemsForLockup(objectGraph, data, lockup, itemSlots, options, metadataRibbonItemFactory = standardList) { + if (serverData.isNullOrEmpty(itemSlots)) { + return []; + } + const tagData = serverData.asArrayOrEmpty(data.meta, "associations.tags.data"); + const metadataRibbonItems = []; + // We need to keep track of how many tags we have so we can assign the tag properly + let tagIndex = 0; + let rankedSecondaryGenreIndex = 0; + // We are going to pass in a set of strings for items we have already added to the ribbon so we never duplicate items + const dedupeSet = new Set(); + for (const itemSlot of itemSlots) { + const itemTypes = Array.isArray(itemSlot) ? itemSlot : [itemSlot]; + if (serverData.isNullOrEmpty(itemTypes)) { + continue; + } + for (const itemType of itemTypes) { + // If we find a tag, we pass in the tag data specifically + // If we find a rankedSecondaryGenre, we want to call the factory function specifically. + const isTag = itemType === "tag"; + const isRankedSecondaryGenre = itemType === "rankedSecondaryGenre"; + let results; + let metadataItemData = data; + let metadataItemString = ""; + if (isRankedSecondaryGenre) { + const searchExperimentDataForLockup = serverData.asDictionary(data, "meta"); + if (isSome(searchExperimentDataForLockup === null || searchExperimentDataForLockup === void 0 ? void 0 : searchExperimentDataForLockup.rankedSecondaryGenreShortDisplayNames)) { + metadataItemString = + searchExperimentDataForLockup === null || searchExperimentDataForLockup === void 0 ? void 0 : searchExperimentDataForLockup.rankedSecondaryGenreShortDisplayNames[rankedSecondaryGenreIndex]; + } + if (isSome(metadataItemString)) { + results = + rankedSecondaryCategoryMetadataRibbonItem.createMetadataRibbonItemsForRankedSecondaryCategory(objectGraph, metadataItemString, lockup, dedupeSet, options.metricsOptions); + rankedSecondaryGenreIndex = rankedSecondaryGenreIndex + 1; + } + else { + results = []; + } + } + else { + const metadataRibbonFactory = metadataRibbonItemFactory[itemType]; + if (serverData.isNull(metadataRibbonFactory)) { + continue; + } + if (isTag) { + metadataItemData = tagData[tagIndex]; + } + else { + metadataItemData = data; + } + results = metadataRibbonFactory(objectGraph, metadataItemData, lockup, dedupeSet, options.metricsOptions); + tagIndex = isTag ? tagIndex + 1 : tagIndex; + } + if (serverData.isDefinedNonNull(results)) { + metadataRibbonItems.push(...results); + for (const result of results) { + if (isSome(result.impressionMetrics)) { + metricsHelpersLocation.nextPosition(options.metricsOptions.locationTracker); + } + } + break; + } + } + } + return metadataRibbonItems; +} +//# sourceMappingURL=search-tags-ribbon.js.map
\ No newline at end of file diff --git a/node_modules/@jet-app/app-store/tmp/src/common/search/metadata-ribbon/secondary-short-categories-metadata-ribbon-item.js b/node_modules/@jet-app/app-store/tmp/src/common/search/metadata-ribbon/secondary-short-categories-metadata-ribbon-item.js new file mode 100644 index 0000000..c5469c7 --- /dev/null +++ b/node_modules/@jet-app/app-store/tmp/src/common/search/metadata-ribbon/secondary-short-categories-metadata-ribbon-item.js @@ -0,0 +1,27 @@ +import { MetadataRibbonItem } from "../../../api/models"; +import { isNullOrEmpty } from "../../../foundation/json-parsing/server-data"; +import { attributeAsArrayOrEmpty } from "../../../foundation/media/attributes"; +import * as metricsHelpersImpressions from "../../metrics/helpers/impressions"; +import * as metricsHelpersLocation from "../../metrics/helpers/location"; +export function createMetadataRibbonItems(objectGraph, data, lockup, dedupeSet, metricsOptions) { + const secondaryGenres = attributeAsArrayOrEmpty(data, "secondaryGenreShortDisplayNames"); + if (isNullOrEmpty(secondaryGenres)) { + return null; + } + const secondaryCategoryItems = secondaryGenres.map((secondaryGenre) => { + const categoryItem = new MetadataRibbonItem("textLabel"); + // Workaround for changing the moduleType to secondaryGenreShortDisplayNames from secondaryGenreShortDisplayName + // otherwise native doesnt layout the secondary genres correctly + // will be fixed with rdar://127458403 (Allow unknown metadataribbon items) + categoryItem.moduleType = "genreShortDisplayName"; + categoryItem.labelText = secondaryGenre; + const impressionOptions = metricsHelpersImpressions.impressionOptionsForMetadataRibbonItem(metricsOptions, "genreDisplayName", categoryItem.labelText, "static"); + metricsHelpersImpressions.addImpressionFieldsToSearchMetadataRibbonItem(objectGraph, categoryItem, impressionOptions); + metricsHelpersLocation.nextPosition(metricsOptions.locationTracker); + return categoryItem; + }); + return secondaryCategoryItems.filter((category) => { + return category.labelText != null && !dedupeSet.has(category.labelText); + }); +} +//# sourceMappingURL=secondary-short-categories-metadata-ribbon-item.js.map
\ No newline at end of file diff --git a/node_modules/@jet-app/app-store/tmp/src/common/search/metadata-ribbon/short-category-metadata-ribbon-item.js b/node_modules/@jet-app/app-store/tmp/src/common/search/metadata-ribbon/short-category-metadata-ribbon-item.js new file mode 100644 index 0000000..16a148a --- /dev/null +++ b/node_modules/@jet-app/app-store/tmp/src/common/search/metadata-ribbon/short-category-metadata-ribbon-item.js @@ -0,0 +1,36 @@ +import { isNothing, isSome } from "@jet/environment"; +import { MetadataRibbonItem } from "../../../api/models"; +import { attributeAsString } from "../../../foundation/media/attributes"; +import { categoryArtworkData } from "../../categories"; +import { artworkFromApiArtwork } from "../../content/content"; +import * as metricsHelpersImpressions from "../../metrics/helpers/impressions"; +export function createMetadataRibbonItems(objectGraph, data, lockup, dedupeSet, metricsOptions) { + const artworkData = categoryArtworkData(objectGraph, data, true); + const hasArtwork = isSome(artworkData); + const shortGenre = attributeAsString(data, "genreShortDisplayName"); + if (shortGenre != null) { + if (dedupeSet.has(shortGenre)) { + return null; + } + else { + dedupeSet.add(shortGenre); + } + } + if (isNothing(shortGenre) || shortGenre.length === 0) { + return null; + } + const viewType = hasArtwork ? "imageWithLabel" : "textLabel"; + const shortCategoryItem = new MetadataRibbonItem(viewType); + shortCategoryItem.moduleType = "genreShortDisplayName"; + shortCategoryItem.labelText = shortGenre; + if (hasArtwork) { + shortCategoryItem.artwork = artworkFromApiArtwork(objectGraph, artworkData, { + useCase: 20 /* ArtworkUseCase.CategoryIcon */, + cropCode: "sr", + }); + } + const impressionOptions = metricsHelpersImpressions.impressionOptionsForMetadataRibbonItem(metricsOptions, "genreDisplayName", shortCategoryItem.labelText, "static"); + metricsHelpersImpressions.addImpressionFieldsToSearchMetadataRibbonItem(objectGraph, shortCategoryItem, impressionOptions); + return [shortCategoryItem]; +} +//# sourceMappingURL=short-category-metadata-ribbon-item.js.map
\ No newline at end of file diff --git a/node_modules/@jet-app/app-store/tmp/src/common/search/metadata-ribbon/star-rating-metadata-ribbon-item.js b/node_modules/@jet-app/app-store/tmp/src/common/search/metadata-ribbon/star-rating-metadata-ribbon-item.js new file mode 100644 index 0000000..81587f8 --- /dev/null +++ b/node_modules/@jet-app/app-store/tmp/src/common/search/metadata-ribbon/star-rating-metadata-ribbon-item.js @@ -0,0 +1,20 @@ +import { MetadataRibbonItem } from "../../../api/models"; +import * as serverData from "../../../foundation/json-parsing/server-data"; +import { contentAttributeAsBooleanOrFalse } from "../../content/attributes"; +import * as metricsHelpersImpressions from "../../metrics/helpers/impressions"; +export function createMetadataRibbonItems(objectGraph, data, lockup, dedupeSet, metricsOptions) { + const isPreorder = contentAttributeAsBooleanOrFalse(objectGraph, data, "isPreorder"); + if (serverData.isDefinedNonNull(lockup.ratingCount) && serverData.isDefinedNonNull(lockup.rating) && !isPreorder) { + const starRatingItem = new MetadataRibbonItem("starRating"); + starRatingItem.moduleType = "userRating"; + starRatingItem.starRating = lockup.rating; + starRatingItem.labelText = lockup.ratingCount; + const impressionOptions = metricsHelpersImpressions.impressionOptionsForMetadataRibbonItem(metricsOptions, "userRating", "User Rating", "static"); + metricsHelpersImpressions.addImpressionFieldsToSearchMetadataRibbonItem(objectGraph, starRatingItem, impressionOptions); + return [starRatingItem]; + } + else { + return null; + } +} +//# sourceMappingURL=star-rating-metadata-ribbon-item.js.map
\ No newline at end of file diff --git a/node_modules/@jet-app/app-store/tmp/src/common/search/metadata-ribbon/tag-metadata-ribbon-item.js b/node_modules/@jet-app/app-store/tmp/src/common/search/metadata-ribbon/tag-metadata-ribbon-item.js new file mode 100644 index 0000000..37877c3 --- /dev/null +++ b/node_modules/@jet-app/app-store/tmp/src/common/search/metadata-ribbon/tag-metadata-ribbon-item.js @@ -0,0 +1,18 @@ +import { isNothing } from "@jet/environment"; +import { MetadataRibbonItem } from "../../../api/models"; +import * as mediaAttributes from "../../../foundation/media/attributes"; +import * as metricsHelpersImpressions from "../../metrics/helpers/impressions"; +export function createMetadataRibbonItems(objectGraph, data, lockup, dedupeSet, metricsOptions) { + const tagData = data; + const tagItem = new MetadataRibbonItem("textLabel"); + tagItem.moduleType = "tag"; + tagItem.labelText = mediaAttributes.attributeAsString(tagData, "name"); + if (isNothing(tagItem.labelText) || tagItem.labelText.length === 0 || dedupeSet.has(tagItem.labelText)) { + return null; + } + const impressionOptions = metricsHelpersImpressions.impressionOptionsForMetadataRibbonItem(metricsOptions, tagData.id, tagItem.labelText, "tag_id"); + metricsHelpersImpressions.addImpressionFieldsToSearchMetadataRibbonItem(objectGraph, tagItem, impressionOptions); + dedupeSet.add(tagItem.labelText); + return [tagItem]; +} +//# sourceMappingURL=tag-metadata-ribbon-item.js.map
\ No newline at end of file |
