summaryrefslogtreecommitdiff
path: root/node_modules/@jet-app/app-store/tmp/src/common/editorial-pages/editorial-page-shelf-token.js
blob: 6857cdbb2ba50b9d3126a667d73313c0f0105694 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
import * as serverData from "../../foundation/json-parsing/server-data";
import * as mediaAttributes from "../../foundation/media/attributes";
import * as mediaRelationship from "../../foundation/media/relationships";
import * as content from "../content/content";
import { recoMetricsDataForFCData } from "../grouping/shelf-controllers/grouping-shelf-controller-common";
import { collectionShelfDisplayStyleFromShelfData, extractEditorialClientParams } from "./editorial-data-util";
import { buildShelfMetricsOptions } from "./editorial-page-shelf-metrics";
import { GameCenterShelfClientFilter, } from "./editorial-page-types";
import { isSome } from "@jet/environment";
/**
 * Create the base shelf token to start parsing an editorial page shelf. This will create a new shelf token with the
 * base metrics options
 *
 * @param objectGraph The App Store dependency graph for making native calls and viewing properties
 * @param pageId The id of the editorial page this shelf is on.
 * @param shelfData The media api data for this specific shelf
 * @param isArcadePage Whether this shelf is on the arcade page or not
 * @param shelfIndex The index of this shelf on the page, at the time of building
 * @param metricsPageInformation The metrics page information for the editorial page
 * @param metricsLocationTracker The location tracker for building metrics location information
 * @param isSeeAll Whether the shelf is being built as a shelf for a sidepacked See All page.
 * @param collectionDisplayStyleOverride A way to override collection display style that is coming from mediaAPI.
 */
export function createBaseShelfToken(objectGraph, pageId, shelfData, isArcadePage, shelfIndex, metricsPageInformation, metricsLocationTracker, isSeeAll = false, collectionDisplayStyle = null) {
    const shelfToken = {
        id: serverData.asString(shelfData, "id"),
        type: shelfData.type,
        collectionDisplayStyle: collectionDisplayStyle !== null && collectionDisplayStyle !== void 0 ? collectionDisplayStyle : collectionShelfDisplayStyleFromShelfData(objectGraph, shelfData),
        filterOverrides: mediaAttributes.attributeAsArrayOrEmpty(shelfData, "filterOverrides"),
        pageId: pageId,
        data: shelfData,
        presentationHints: {},
        clientIdentifierOverride: null,
        isFirstRender: true,
        shouldFilter: true,
        gamesFilter: gamesFilterFromShelfData(shelfData),
        hasExistingContent: false,
        title: null,
        subtitle: null,
        eyebrow: null,
        titleArtwork: null,
        remainingItems: [],
        metricsImpressionOptions: null,
        metricsPageInformation: metricsPageInformation,
        metricsLocationTracker: metricsLocationTracker,
        recoMetricsData: recoMetricsDataForFCData(objectGraph, shelfData),
        isDeferring: false,
        showOrdinals: false,
        ordinalIndex: 1,
        isSearchLandingPage: false,
        isArcadePage: isArcadePage,
        shelfIndex: shelfIndex,
        isSeeAll: isSeeAll,
    };
    applyBaseShelfTokenTitleValues(objectGraph, shelfData, shelfToken);
    return shelfToken;
}
/**
 * Apply the values for the title, subtitle, and eyebrow to the shelf token, as well as the impressionOptions
 *
 * @param objectGraph The App Store dependency graph for making native calls and viewing properties
 * @param shelfData The media api data for this specific shelf
 * @param shelfToken The shelf token to apply the title values to
 */
export function applyBaseShelfTokenTitleValues(objectGraph, shelfData, shelfToken) {
    let title = mediaAttributes.attributeAsString(shelfData, "editorialNotes.name");
    let subtitle = mediaAttributes.attributeAsString(shelfData, "editorialNotes.tagline");
    let eyebrow = mediaAttributes.attributeAsString(shelfData, "editorialNotes.badge");
    let titleArtwork = null;
    // 'Similar To' Personalised Shelf
    // Check if personalised shelf has a badge-content, if it's got valid content, and the clients support eyebrows and title artwork:
    // - Reco shelf title becomes the eyebrow
    // - Featured App in badge-content becomes the shelf title, and we add the icon as title artwork
    // - No subtitle should be shown
    // - Flag to use the eyebrown name for metrics
    let wantsEyebrowNameForMetrics = false;
    const badgeContent = mediaRelationship.relationshipData(objectGraph, shelfData, "badge-content");
    if (serverData.isDefinedNonNullNonEmpty(badgeContent)) {
        eyebrow = objectGraph.loc.uppercased(mediaAttributes.attributeAsString(shelfData, "editorialNotes.name"));
        title = mediaAttributes.attributeAsString(badgeContent, "editorialNotes.name");
        titleArtwork = content.iconFromData(objectGraph, badgeContent, {
            useCase: 1 /* content.ArtworkUseCase.LockupIconSmall */,
        });
        subtitle = null;
        wantsEyebrowNameForMetrics = true;
    }
    if (preprocessor.GAMES_TARGET) {
        const editorialClientParams = extractEditorialClientParams(objectGraph, shelfData);
        // This flag hides the whole shelf header content altogether
        if (isSome(editorialClientParams) && editorialClientParams.suppressName) {
            title = null;
            subtitle = null;
            eyebrow = null;
            titleArtwork = null;
        }
    }
    const shelfMetricsOptionsTitle = wantsEyebrowNameForMetrics ? eyebrow : title;
    const shelfMetricsOptions = buildShelfMetricsOptions(objectGraph, shelfData, shelfMetricsOptionsTitle, shelfToken.metricsPageInformation, shelfToken.metricsLocationTracker);
    shelfToken.title = title;
    shelfToken.subtitle = subtitle;
    shelfToken.eyebrow = eyebrow;
    shelfToken.titleArtwork = titleArtwork;
    shelfToken.metricsImpressionOptions = shelfMetricsOptions;
}
function gamesFilterFromShelfData(shelfData) {
    const clientFilter = mediaAttributes.attributeAsString(shelfData, "clientFilter");
    let gamesFilter = null;
    switch (clientFilter) {
        case GameCenterShelfClientFilter.ArcadeGames:
            gamesFilter = "arcade";
            break;
        case GameCenterShelfClientFilter.AllGames:
            gamesFilter = "all";
            break;
        default:
            break;
    }
    return gamesFilter;
}
//# sourceMappingURL=editorial-page-shelf-token.js.map