summaryrefslogtreecommitdiff
path: root/node_modules/@jet-app/app-store/tmp/src/common/arcade/arcade-see-all-games-facets.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/@jet-app/app-store/tmp/src/common/arcade/arcade-see-all-games-facets.js')
-rw-r--r--node_modules/@jet-app/app-store/tmp/src/common/arcade/arcade-see-all-games-facets.js245
1 files changed, 245 insertions, 0 deletions
diff --git a/node_modules/@jet-app/app-store/tmp/src/common/arcade/arcade-see-all-games-facets.js b/node_modules/@jet-app/app-store/tmp/src/common/arcade/arcade-see-all-games-facets.js
new file mode 100644
index 0000000..2418b5f
--- /dev/null
+++ b/node_modules/@jet-app/app-store/tmp/src/common/arcade/arcade-see-all-games-facets.js
@@ -0,0 +1,245 @@
+/**
+ * Build methods for Arcade See All Games Facets.
+ */
+import * as models from "../../api/models";
+import { isDefinedNonNull, isDefinedNonNullNonEmpty, isNullOrEmpty } from "../../foundation/json-parsing/server-data";
+import { Parameters } from "../../foundation/network/url-constants";
+import * as metricsClickHelpers from "../metrics/helpers/clicks";
+// All Facet Options
+export const sortReleaseDateFacetOptionValue = `-releaseDateByDay&sort=name`;
+export const sortLastUpdatedFacetOptionValue = `-lastUpdatedByDay&sort=name`;
+export const sortNameFacetOptionValue = `alphabet&sort=name`;
+export const sortCategoryFacetOptionValue = `category&sort=-releaseDate`;
+export const sortFacetOptionParameter = "groupBy";
+export const comingSoonFacetOptionParameter = "with";
+export const comingSoonAppsFacetOptionValue = "comingSoonApps";
+export const comingSoonGroupingFacetOptionValue = "comingSoonGrouping";
+/**
+ * The facet for filtering bincompat games in visionOS
+ * By default, not passing this parameter will includes both bincompat and native games.
+ * To filter native games only, passing `filter[platform]=reality`
+ */
+export const binCompatGamesFacetOptionParameter = "filter[platform]";
+// The facet option for toggling video preview in lockups.
+// This facet is used for toggle `isCompactMode` locally, it don't match with any media api parameter.
+export const gamePreviewsFacetOptionParameter = "gamePreviews";
+export const facetOptionsParameterMapping = {};
+let areFacetsInitialized = false;
+let sortReleaseDateFacetOption = null;
+let sortLastUpdatedFacetOption = null;
+let sortNameFacetOption = null;
+let sortCategoryFacetOption = null;
+let ageRatingDefaultFacetOption = null;
+let ageRating4PlusFacetOption = null;
+let ageRating9PlusFacetOption = null;
+let ageRating12PlusFacetOption = null;
+let controllerSupportFacetOption = null;
+let multiplayerSupportFacetOption = null;
+let comingSoonFacetOption = null;
+let includeBinCompatGamesFacetOption = null;
+let onlyNativeGamesFacetOption = null;
+let gamePreviewsFacetOption = null;
+// Mapping of external facet parameters to media api paramter values
+const facetParameterMediaApiMapping = {};
+facetParameterMediaApiMapping[Parameters.sort] = sortFacetOptionParameter;
+facetParameterMediaApiMapping[Parameters.ageRating] = "filter[ageRating]";
+facetParameterMediaApiMapping[Parameters.controllerSupport] = "filter[supportsGameController]";
+facetParameterMediaApiMapping[Parameters.multiplayerSupport] = "filter[isMultiplayer]";
+facetParameterMediaApiMapping[Parameters.comingSoon] = comingSoonFacetOptionParameter;
+facetParameterMediaApiMapping[Parameters.binCompatGames] = binCompatGamesFacetOptionParameter;
+function initializeFacets(objectGraph) {
+ if (areFacetsInitialized) {
+ return;
+ }
+ areFacetsInitialized = true;
+ sortReleaseDateFacetOption = new models.PageFacetOption(objectGraph.loc.string("PAGE_FACETS_SORTS_RELEASE_DATE"), sortReleaseDateFacetOptionValue, "releaseDate");
+ sortLastUpdatedFacetOption = new models.PageFacetOption(objectGraph.loc.string("PAGE_FACETS_SORTS_LAST_UPDATED"), sortLastUpdatedFacetOptionValue, "lastUpdated");
+ sortNameFacetOption = new models.PageFacetOption(objectGraph.loc.string("PAGE_FACETS_SORTS_NAME"), sortNameFacetOptionValue, "name");
+ sortCategoryFacetOption = new models.PageFacetOption(objectGraph.loc.string("PAGE_FACETS_SORTS_CATEGORY"), sortCategoryFacetOptionValue, "category");
+ ageRatingDefaultFacetOption = new models.PageFacetOption(objectGraph.loc.string("PAGE_FACETS_DEFAULT_ALL"), null);
+ ageRating4PlusFacetOption = new models.PageFacetOption(objectGraph.loc.string("PAGE_FACETS_FILTERS_AGE_VALUE_4PLUS"), "4Plus");
+ ageRating9PlusFacetOption = new models.PageFacetOption(objectGraph.loc.string("PAGE_FACETS_FILTERS_AGE_VALUE_9PLUS"), "9Plus");
+ ageRating12PlusFacetOption = new models.PageFacetOption(objectGraph.loc.string("PAGE_FACETS_FILTERS_AGE_VALUE_12PLUS"), "12Plus");
+ controllerSupportFacetOption = new models.PageFacetOption(objectGraph.loc.string("PAGE_FACETS_FILTERS_CONTROLLER_SUPPORT"), "true", null, "gamecontroller");
+ multiplayerSupportFacetOption = new models.PageFacetOption(objectGraph.loc.string("PAGE_FACETS_FILTERS_MULTIPLAYER"), "true", null, "person.2");
+ comingSoonFacetOption = new models.PageFacetOption(objectGraph.loc.string("PAGE_FACETS_FILTERS_COMING_SOON"), "true");
+ if (objectGraph.client.isVision) {
+ includeBinCompatGamesFacetOption = new models.PageFacetOption(objectGraph.loc.string("PAGE_FACETS_FILTERS_BIN_COMPAT_GAMES"), null);
+ onlyNativeGamesFacetOption = new models.PageFacetOption(objectGraph.loc.string("PAGE_FACETS_FILTERS_BIN_COMPAT_GAMES"), "realityDevice");
+ gamePreviewsFacetOption = new models.PageFacetOption(objectGraph.loc.string("PAGE_FACETS_FILTERS_GAME_PREVIEWS"), null);
+ }
+ facetOptionsParameterMapping[Parameters.sort] = {
+ releaseDate: [sortReleaseDateFacetOption],
+ lastUpdated: [sortLastUpdatedFacetOption],
+ name: [sortNameFacetOption],
+ category: [sortCategoryFacetOption],
+ };
+ facetOptionsParameterMapping[Parameters.ageRating] = {
+ "4plus": [ageRating4PlusFacetOption],
+ "9plus": [ageRating9PlusFacetOption],
+ "12plus": [ageRating12PlusFacetOption],
+ };
+ facetOptionsParameterMapping[Parameters.controllerSupport] = {
+ true: [controllerSupportFacetOption],
+ false: [],
+ };
+ facetOptionsParameterMapping[Parameters.multiplayerSupport] = {
+ true: [multiplayerSupportFacetOption],
+ false: [],
+ };
+ facetOptionsParameterMapping[Parameters.comingSoon] = {
+ true: [comingSoonFacetOption],
+ false: [],
+ };
+ if (objectGraph.client.isVision) {
+ facetOptionsParameterMapping[Parameters.binCompatGames] = {
+ true: [includeBinCompatGamesFacetOption],
+ false: [onlyNativeGamesFacetOption],
+ };
+ facetOptionsParameterMapping[Parameters.gamePreviews] = {
+ true: [gamePreviewsFacetOption],
+ false: [],
+ };
+ }
+}
+/**
+ *
+ * Create Page Facets. Theres platform specific variations here.
+ */
+export function createArcadeSeeAllGamesFacets(objectGraph) {
+ initializeFacets(objectGraph);
+ const isEnabledVisionSAGSegmentedNavFeature = objectGraph.featureFlags.isEnabled("see_all_games_segmented_nav_2024A");
+ const ageRatingsFacetTitle = objectGraph.client.isMac
+ ? objectGraph.loc.string("PAGE_FACETS_AGE_RATINGS_TITLE")
+ : objectGraph.loc.string("PAGE_FACETS_FILTERS_AGE_RATINGS");
+ const ageRatingsFacet = new models.PageFacetsFacet(Parameters.ageRating, "filter[ageRating]", ageRatingsFacetTitle, "singleSelection", [ageRatingDefaultFacetOption, ageRating4PlusFacetOption, ageRating9PlusFacetOption, ageRating12PlusFacetOption], [ageRatingDefaultFacetOption], "age", pageFacetChangeAction(objectGraph, "sort"));
+ // Sorts
+ const isEnabledArcadeSeeAllGamesUplift = objectGraph.featureFlags.isEnabled("arcade_see_all_games_menu_uplift");
+ const isFeatureFlagEnabled = (objectGraph.client.isiOS && isEnabledArcadeSeeAllGamesUplift) ||
+ (objectGraph.client.isVision && isEnabledVisionSAGSegmentedNavFeature);
+ const sortsFacet = new models.PageFacetsFacet(Parameters.sort, sortFacetOptionParameter, objectGraph.loc.string("PAGE_FACETS_SORT_BY_TITLE"), "singleSelection", [sortReleaseDateFacetOption, sortLastUpdatedFacetOption, sortNameFacetOption, sortCategoryFacetOption], isFeatureFlagEnabled ? [sortReleaseDateFacetOption] : null, "sort", pageFacetChangeAction(objectGraph, "sort"));
+ // Controllers
+ const controllerSupportFacetOptionFacetTitle = objectGraph.client.isMac
+ ? objectGraph.loc.string("PAGE_FACETS_FILTERS_CONTROLLERS")
+ : objectGraph.loc.string("PAGE_FACETS_FILTERS_CONTROLLER_SUPPORT");
+ const controllerSupportFacetOptionFacet = new models.PageFacetsFacet(Parameters.controllerSupport, "filter[supportsGameController]", controllerSupportFacetOptionFacetTitle, "toggle", [controllerSupportFacetOption], null, "controllerSupport", pageFacetChangeAction(objectGraph, "sort"));
+ const multiplayerFacetTitle = objectGraph.client.isMac
+ ? objectGraph.loc.string("PAGE_FACETS_FILTERS_MULTIPLAYER")
+ : objectGraph.loc.string("PAGE_FACETS_FILTERS_MULTIPLAYER_GAMES");
+ const multiplayerSupportFacetOptionFacet = new models.PageFacetsFacet(Parameters.multiplayerSupport, "filter[isMultiplayer]", multiplayerFacetTitle, "toggle", [multiplayerSupportFacetOption], null, "multiplayer", pageFacetChangeAction(objectGraph, "sort"));
+ const comingSoonFacet = new models.PageFacetsFacet(Parameters.comingSoon, comingSoonFacetOptionParameter, objectGraph.loc.string("PAGE_FACETS_FILTERS_COMING_SOON"), "toggle", [comingSoonFacetOption], [comingSoonFacetOption], "comingSoon", pageFacetChangeAction(objectGraph, "comingSoon"));
+ comingSoonFacet.isHiddenFromMenu = isFeatureFlagEnabled;
+ const pageFacets = new models.PageFacets([], false, null);
+ if (objectGraph.client.isVision) {
+ sortsFacet.displayOptionsInline = true;
+ pageFacets.facetGroups.push(new models.PageFacetsGroup([sortsFacet], objectGraph.loc.string("PAGE_FACETS_SORT_BY_TITLE_LOWERCASE")));
+ ageRatingsFacet.showsSelectedOptions = true;
+ pageFacets.facetGroups.push(new models.PageFacetsGroup([controllerSupportFacetOptionFacet, multiplayerSupportFacetOptionFacet, ageRatingsFacet], objectGraph.loc.string("PAGE_FACETS_FILTER_BY_TITLE_LOWERCASE")));
+ const binCompatGamesFacet = createBinCompatGamesFacet(objectGraph);
+ const gamePreviewsFacet = new models.PageFacetsFacet(Parameters.gamePreviews, gamePreviewsFacetOptionParameter, objectGraph.loc.string("PAGE_FACETS_FILTERS_GAME_PREVIEWS"), "toggle", [gamePreviewsFacetOption], [gamePreviewsFacetOption], "gamePreviews", pageFacetChangeAction(objectGraph, "gamePreviews"));
+ const includeGroupsTitle = objectGraph.client.isVision && isEnabledVisionSAGSegmentedNavFeature
+ ? objectGraph.loc.string("PAGE_FACETS_SHOW_TITLE_LOWERCASE")
+ : objectGraph.loc.string("PAGE_FACETS_INCLUDE_TITLE_LOWERCASE");
+ pageFacets.facetGroups.push(new models.PageFacetsGroup([binCompatGamesFacet, gamePreviewsFacet, comingSoonFacet], includeGroupsTitle));
+ }
+ else {
+ switch (objectGraph.client.deviceType) {
+ case "mac":
+ pageFacets.facetGroups.push(new models.PageFacetsGroup([ageRatingsFacet]));
+ if (objectGraph.bag.enableComingSoonToggle) {
+ pageFacets.facetGroups.push(new models.PageFacetsGroup([comingSoonFacet], objectGraph.loc.string("PAGE_FACETS_INCLUDE_TITLE")));
+ }
+ pageFacets.facetGroups.push(new models.PageFacetsGroup([controllerSupportFacetOptionFacet, multiplayerSupportFacetOptionFacet], objectGraph.loc.string("PAGE_FACETS_SUPPORTS_TITLE")));
+ pageFacets.facetGroups.push(new models.PageFacetsGroup([sortsFacet]));
+ break;
+ case "tv":
+ pageFacets.facetGroups.push(new models.PageFacetsGroup([ageRatingsFacet], objectGraph.loc.string("PAGE_FACETS_AGE_RATINGS_TITLE_LOWERCASE")));
+ const filterGroupFacets = [
+ controllerSupportFacetOptionFacet,
+ multiplayerSupportFacetOptionFacet,
+ ];
+ if (objectGraph.bag.enableComingSoonToggle) {
+ filterGroupFacets.push(comingSoonFacet);
+ }
+ pageFacets.facetGroups.push(new models.PageFacetsGroup(filterGroupFacets, objectGraph.loc.string("PAGE_FACETS_FILTERS_TITLE")));
+ pageFacets.facetGroups.push(new models.PageFacetsGroup([sortsFacet], objectGraph.loc.string("PAGE_FACETS_SORT_BY_TITLE_LOWERCASE")));
+ break;
+ default:
+ sortsFacet.displayOptionsInline = true;
+ pageFacets.facetGroups.push(new models.PageFacetsGroup([sortsFacet], objectGraph.loc.string("PAGE_FACETS_SORT_BY_TITLE")));
+ ageRatingsFacet.showsSelectedOptions = true;
+ pageFacets.facetGroups.push(new models.PageFacetsGroup([controllerSupportFacetOptionFacet, multiplayerSupportFacetOptionFacet, ageRatingsFacet], objectGraph.loc.string("PAGE_FACETS_FILTER_BY_TITLE")));
+ if (objectGraph.bag.enableComingSoonToggle) {
+ pageFacets.facetGroups.push(new models.PageFacetsGroup([comingSoonFacet], objectGraph.loc.string("PAGE_FACETS_INCLUDE_TITLE")));
+ }
+ break;
+ }
+ }
+ return pageFacets;
+}
+function createBinCompatGamesFacet(objectGraph) {
+ const binCompatGamesFacet = new models.PageFacetsFacet(Parameters.binCompatGames, binCompatGamesFacetOptionParameter, objectGraph.loc.string("PAGE_FACETS_FILTERS_BIN_COMPAT_GAMES"), "toggle", [includeBinCompatGamesFacetOption], [includeBinCompatGamesFacetOption], "binCompatGames", pageFacetChangeAction(objectGraph, "binCompatGames"));
+ // Hiding this facet from the Filters menu, because this facet will be control by the page segmented picker.
+ binCompatGamesFacet.isHiddenFromMenu = objectGraph.featureFlags.isEnabled("see_all_games_segmented_nav_2024A");
+ return binCompatGamesFacet;
+}
+export function createDefaultSelectedFacetOptions(objectGraph, urlParameters = {}) {
+ initializeFacets(objectGraph);
+ const selectedFacetOptions = {
+ "filter[ageRating]": [ageRatingDefaultFacetOption],
+ };
+ selectedFacetOptions[sortFacetOptionParameter] = [sortReleaseDateFacetOption];
+ selectedFacetOptions[comingSoonFacetOptionParameter] = [comingSoonFacetOption];
+ if (objectGraph.client.isVision) {
+ selectedFacetOptions[binCompatGamesFacetOptionParameter] = [includeBinCompatGamesFacetOption];
+ selectedFacetOptions[gamePreviewsFacetOptionParameter] = [gamePreviewsFacetOption];
+ }
+ const availableParameters = [
+ Parameters.sort,
+ Parameters.ageRating,
+ Parameters.controllerSupport,
+ Parameters.multiplayerSupport,
+ Parameters.comingSoon,
+ ];
+ if (objectGraph.client.isVision) {
+ availableParameters.push(Parameters.binCompatGames);
+ }
+ for (const parameter of availableParameters) {
+ const facetOption = urlParameters[parameter];
+ if (isNullOrEmpty(facetOption)) {
+ continue;
+ }
+ const selectedFacetOption = facetOptionsParameterMapping[parameter][facetOption];
+ const mediaApiFacetName = facetParameterMediaApiMapping[parameter];
+ if (isDefinedNonNull(selectedFacetOption) && isDefinedNonNullNonEmpty(mediaApiFacetName)) {
+ selectedFacetOptions[`${mediaApiFacetName}`] = selectedFacetOption;
+ }
+ }
+ return selectedFacetOptions;
+}
+function pageFacetChangeAction(objectGraph, facetParameter) {
+ const action = new models.BlankAction();
+ metricsClickHelpers.addClickEventToPageFacetsChangeAction(objectGraph, action, facetParameter);
+ return action;
+}
+export function createPageSegments(objectGraph) {
+ const isSegmentedNavEnabled = objectGraph.client.isVision && objectGraph.featureFlags.isEnabled("see_all_games_segmented_nav_2024A");
+ if (!isSegmentedNavEnabled) {
+ return [];
+ }
+ else {
+ const binCompatGamesFacet = createBinCompatGamesFacet(objectGraph);
+ const allGamesPageSegment = {
+ id: "all_games",
+ title: objectGraph.loc.string("Arcade.SeeAllGames.PageSegment.AllGames.Title"),
+ segmentAction: new models.ArcadeSeeAllGamesPageSegmentChangeAction(binCompatGamesFacet, includeBinCompatGamesFacetOption),
+ };
+ const visionGamesOnlyPageSegment = {
+ id: "vision",
+ title: objectGraph.loc.string("Arcade.SeeAllGames.PageSegment.AppleVisionGames.Title"),
+ segmentAction: new models.ArcadeSeeAllGamesPageSegmentChangeAction(binCompatGamesFacet, undefined),
+ };
+ return [allGamesPageSegment, visionGamesOnlyPageSegment];
+ }
+}
+//# sourceMappingURL=arcade-see-all-games-facets.js.map \ No newline at end of file