@applicaster/zapp-react-native-utils 14.0.0-rc.8 → 15.0.0-alpha.1351496011

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. package/actionsExecutor/ActionExecutorContext.tsx +60 -84
  2. package/actionsExecutor/ScreenActions.ts +164 -0
  3. package/actionsExecutor/StorageActions.ts +110 -0
  4. package/actionsExecutor/feedDecorator.ts +171 -0
  5. package/actionsExecutor/screenResolver.ts +11 -0
  6. package/analyticsUtils/AnalyticPlayerListener.ts +5 -2
  7. package/analyticsUtils/AnalyticsEvents/helper.ts +81 -0
  8. package/analyticsUtils/AnalyticsEvents/sendHeaderClickEvent.ts +1 -1
  9. package/analyticsUtils/AnalyticsEvents/sendMenuClickEvent.ts +2 -1
  10. package/analyticsUtils/AnalyticsEvents/sendOnClickEvent.ts +14 -4
  11. package/analyticsUtils/__tests__/analyticsUtils.test.js +3 -0
  12. package/analyticsUtils/events.ts +8 -0
  13. package/analyticsUtils/index.tsx +3 -4
  14. package/analyticsUtils/manager.ts +1 -1
  15. package/analyticsUtils/playerAnalyticsTracker.ts +2 -1
  16. package/appUtils/HooksManager/Hook.ts +4 -4
  17. package/appUtils/HooksManager/index.ts +11 -1
  18. package/appUtils/accessibilityManager/const.ts +13 -0
  19. package/appUtils/accessibilityManager/hooks.ts +35 -1
  20. package/appUtils/accessibilityManager/index.ts +154 -30
  21. package/appUtils/accessibilityManager/utils.ts +24 -0
  22. package/appUtils/contextKeysManager/contextResolver.ts +42 -1
  23. package/appUtils/focusManager/__tests__/__snapshots__/focusManager.test.js.snap +7 -0
  24. package/appUtils/focusManager/__tests__/focusManager.test.js +1 -1
  25. package/appUtils/focusManager/events.ts +2 -0
  26. package/appUtils/focusManager/index.ios.ts +10 -0
  27. package/appUtils/focusManager/index.ts +86 -11
  28. package/appUtils/focusManager/treeDataStructure/Tree/index.js +1 -1
  29. package/appUtils/focusManagerAux/index.ts +2 -0
  30. package/appUtils/focusManagerAux/utils/index.ts +94 -3
  31. package/appUtils/platform/platformUtils.ts +31 -1
  32. package/appUtils/playerManager/OverlayObserver/OverlaysObserver.ts +0 -15
  33. package/appUtils/playerManager/conts.ts +21 -0
  34. package/appUtils/playerManager/useChapterMarker.tsx +0 -1
  35. package/appUtils/playerManager/usePlayerControllerSetup.tsx +16 -0
  36. package/arrayUtils/__tests__/isEmptyArray.test.ts +63 -0
  37. package/arrayUtils/__tests__/isFilledArray.test.ts +1 -1
  38. package/arrayUtils/index.ts +8 -3
  39. package/audioPlayerUtils/__tests__/getArtworkImage.test.ts +144 -0
  40. package/audioPlayerUtils/__tests__/getBackgroundImage.test.ts +72 -0
  41. package/audioPlayerUtils/__tests__/getImageFromEntry.test.ts +110 -0
  42. package/audioPlayerUtils/assets/index.ts +2 -0
  43. package/audioPlayerUtils/index.ts +242 -0
  44. package/componentsUtils/__tests__/isTabsScreen.test.ts +38 -0
  45. package/componentsUtils/index.ts +4 -1
  46. package/conf/player/__tests__/selectors.test.ts +34 -0
  47. package/conf/player/selectors.ts +10 -0
  48. package/configurationUtils/__tests__/configurationUtils.test.js +0 -31
  49. package/configurationUtils/__tests__/getMediaItems.test.ts +65 -0
  50. package/configurationUtils/__tests__/imageSrcFromMediaItem.test.ts +34 -0
  51. package/configurationUtils/__tests__/manifestKeyParser.test.ts +546 -0
  52. package/configurationUtils/index.ts +64 -35
  53. package/configurationUtils/manifestKeyParser.ts +57 -32
  54. package/focusManager/FocusManager.ts +104 -20
  55. package/focusManager/Tree.ts +25 -21
  56. package/focusManager/__tests__/FocusManager.test.ts +50 -8
  57. package/focusManager/aux/index.ts +98 -0
  58. package/focusManager/utils.ts +12 -6
  59. package/index.d.ts +1 -10
  60. package/manifestUtils/_internals/getDefaultConfiguration.js +28 -0
  61. package/manifestUtils/{_internals.js → _internals/index.js} +2 -25
  62. package/manifestUtils/createConfig.js +4 -1
  63. package/manifestUtils/defaultManifestConfigurations/player.js +2764 -1539
  64. package/manifestUtils/index.js +4 -0
  65. package/manifestUtils/keys.js +12 -0
  66. package/manifestUtils/progressBar/__tests__/mobileProgressBar.test.js +0 -30
  67. package/manifestUtils/sharedConfiguration/screenPicker/stylesFields.js +6 -0
  68. package/navigationUtils/__tests__/mapContentTypesToRivers.test.ts +130 -0
  69. package/navigationUtils/index.ts +26 -21
  70. package/package.json +2 -3
  71. package/playerUtils/PlayerTTS/PlayerTTS.ts +359 -0
  72. package/playerUtils/PlayerTTS/index.ts +1 -0
  73. package/playerUtils/__tests__/configurationUtils.test.ts +1 -65
  74. package/playerUtils/__tests__/getPlayerActionButtons.test.ts +54 -0
  75. package/playerUtils/_internals/__tests__/utils.test.ts +71 -0
  76. package/playerUtils/_internals/index.ts +1 -0
  77. package/playerUtils/_internals/utils.ts +31 -0
  78. package/playerUtils/configurationUtils.ts +0 -44
  79. package/playerUtils/getPlayerActionButtons.ts +17 -0
  80. package/playerUtils/index.ts +53 -0
  81. package/playerUtils/usePlayerTTS.ts +21 -0
  82. package/playerUtils/useValidatePlayerConfig.tsx +22 -19
  83. package/reactHooks/autoscrolling/__tests__/useTrackedView.test.tsx +15 -14
  84. package/reactHooks/cell-click/__tests__/index.test.js +3 -0
  85. package/reactHooks/cell-click/index.ts +8 -1
  86. package/reactHooks/debugging/__tests__/index.test.js +0 -1
  87. package/reactHooks/feed/__tests__/useBatchLoading.test.tsx +47 -90
  88. package/reactHooks/feed/__tests__/useFeedLoader.test.tsx +71 -31
  89. package/reactHooks/feed/index.ts +2 -0
  90. package/reactHooks/feed/useBatchLoading.ts +17 -10
  91. package/reactHooks/feed/useFeedLoader.tsx +36 -43
  92. package/reactHooks/feed/useInflatedUrl.ts +23 -29
  93. package/reactHooks/feed/useLoadPipesDataDispatch.ts +63 -0
  94. package/reactHooks/feed/usePipesCacheReset.ts +3 -3
  95. package/reactHooks/flatList/useSequentialRenderItem.tsx +3 -3
  96. package/reactHooks/layout/__tests__/index.test.tsx +3 -1
  97. package/reactHooks/layout/isTablet/index.ts +12 -5
  98. package/reactHooks/layout/useDimensions/__tests__/useDimensions.test.ts +34 -36
  99. package/reactHooks/layout/useDimensions/useDimensions.ts +2 -3
  100. package/reactHooks/layout/useLayoutVersion.ts +5 -5
  101. package/reactHooks/navigation/index.ts +7 -5
  102. package/reactHooks/navigation/useIsScreenActive.ts +9 -5
  103. package/reactHooks/navigation/useRoute.ts +7 -2
  104. package/reactHooks/navigation/useScreenStateStore.ts +8 -0
  105. package/reactHooks/resolvers/__tests__/useCellResolver.test.tsx +4 -0
  106. package/reactHooks/screen/useScreenContext.ts +1 -1
  107. package/reactHooks/state/__tests__/ZStoreProvider.test.tsx +2 -1
  108. package/reactHooks/state/index.ts +1 -1
  109. package/reactHooks/state/useHomeRiver.ts +4 -2
  110. package/reactHooks/state/useRivers.ts +7 -8
  111. package/riverComponetsMeasurementProvider/index.tsx +1 -1
  112. package/screenPickerUtils/index.ts +13 -0
  113. package/services/js2native.ts +1 -0
  114. package/storage/ScreenSingleValueProvider.ts +204 -0
  115. package/storage/ScreenStateMultiSelectProvider.ts +293 -0
  116. package/storage/StorageMultiSelectProvider.ts +192 -0
  117. package/storage/StorageSingleSelectProvider.ts +108 -0
  118. package/testUtils/index.tsx +7 -8
  119. package/time/BackgroundTimer.ts +6 -4
  120. package/utils/__tests__/endsWith.test.ts +30 -0
  121. package/utils/__tests__/find.test.ts +36 -0
  122. package/utils/__tests__/omit.test.ts +19 -0
  123. package/utils/__tests__/path.test.ts +33 -0
  124. package/utils/__tests__/pathOr.test.ts +37 -0
  125. package/utils/__tests__/startsWith.test.ts +30 -0
  126. package/utils/__tests__/take.test.ts +40 -0
  127. package/utils/endsWith.ts +9 -0
  128. package/utils/find.ts +3 -0
  129. package/utils/index.ts +33 -1
  130. package/utils/omit.ts +5 -0
  131. package/utils/path.ts +5 -0
  132. package/utils/pathOr.ts +5 -0
  133. package/utils/startsWith.ts +9 -0
  134. package/utils/take.ts +5 -0
  135. package/zappFrameworkUtils/HookCallback/callbackNavigationAction.ts +217 -0
  136. package/zappFrameworkUtils/HookCallback/hookCallbackManifestExtensions.config.js +76 -0
  137. package/zappFrameworkUtils/HookCallback/useCallbackActions.ts +19 -0
  138. package/zappFrameworkUtils/loginPluginUtils.ts +1 -1
  139. package/playerUtils/configurationGenerator.ts +0 -2572
@@ -5,7 +5,7 @@ const EMPTY_GROUP_COMPONENT = "empty_group_component";
5
5
 
6
6
  const GALLERY = "gallery-qb";
7
7
 
8
- const SCREEN_PICKER = "screen-picker-qb-tv";
8
+ export const SCREEN_PICKER = "screen-picker-qb-tv";
9
9
 
10
10
  const HORIZONTAL_LIST = "horizontal_list_qb";
11
11
 
@@ -37,3 +37,6 @@ export const isEmptyGroup = (item): boolean =>
37
37
  export const isGroupInfo = (item): boolean =>
38
38
  item?.component_type === GROUP_INFO ||
39
39
  item?.component_type === GROUP_INFO_OLD;
40
+
41
+ export const isTabsScreen = (item): boolean =>
42
+ isScreenPicker(item) && item?.tabs_screen;
@@ -0,0 +1,34 @@
1
+ import { selectActionButtons } from "@applicaster/zapp-react-native-utils/conf/player/selectors";
2
+
3
+ describe("selectActionButtons", () => {
4
+ it("returns the player_action_buttons array if present", () => {
5
+ const pluginConf = {
6
+ player_action_buttons: [
7
+ { id: "like", label: "Like" },
8
+ { id: "share", label: "Share" },
9
+ ],
10
+ };
11
+
12
+ expect(selectActionButtons(pluginConf)).toEqual(
13
+ pluginConf.player_action_buttons
14
+ );
15
+ });
16
+
17
+ it("returns null if player_action_buttons is not present", () => {
18
+ const pluginConf = { some_other_key: [] };
19
+ expect(selectActionButtons(pluginConf)).toBeNull();
20
+ });
21
+
22
+ it("returns null if pluginConf is undefined", () => {
23
+ expect(selectActionButtons(undefined)).toBeNull();
24
+ });
25
+
26
+ it("returns null if pluginConf is null", () => {
27
+ expect(selectActionButtons(null)).toBeNull();
28
+ });
29
+
30
+ it("returns null if player_action_buttons is explicitly set to null", () => {
31
+ const pluginConf = { player_action_buttons: null };
32
+ expect(selectActionButtons(pluginConf)).toBeNull();
33
+ });
34
+ });
@@ -0,0 +1,10 @@
1
+ import { get } from "@applicaster/zapp-react-native-utils/utils";
2
+
3
+ /**
4
+ * Selects the action buttons from the player configuration.
5
+ * @param {Object} pluginConf - player plugin config
6
+ * @returns {Array|null} An array of action buttons or null if not found.
7
+ */
8
+ export const selectActionButtons = (pluginConf: any) => {
9
+ return get(pluginConf, "player_action_buttons", null);
10
+ };
@@ -1,11 +1,8 @@
1
- import * as R from "ramda";
2
1
  import {
3
2
  populateConfigurationValues,
4
- imageSrcFromMediaItem,
5
3
  getBoolFromConfigValue,
6
4
  remapUpdatedKeys,
7
5
  } from "../";
8
- import { entry } from "./testEntry";
9
6
 
10
7
  describe("getBoolFromConfigValue", () => {
11
8
  it('returns true if value is "true" string', () => {
@@ -57,34 +54,6 @@ describe("getBoolFromConfigValue", () => {
57
54
  });
58
55
  });
59
56
 
60
- describe("imageSrcFromMediaItem", () => {
61
- describe("returns the src value of first media_item", () => {
62
- it("when the matching key is found and the src is not empty", () => {
63
- const result = imageSrcFromMediaItem(entry, ["logo_thumbnail"]);
64
-
65
- expect(result).toEqual(entry.media_group[1].media_item[0].src);
66
- expect(result).not.toEqual("");
67
- });
68
- });
69
-
70
- it("returns a media item with the 'image_base' key as a fallback", () => {
71
- const result = imageSrcFromMediaItem(entry, ["does_not_exist"]);
72
- const fallback = entry.media_group[0].media_item[0];
73
- expect(result).toEqual(fallback.src);
74
- expect(fallback.key).toBe("image_base");
75
- });
76
-
77
- it("returns undefined if the key was found but the source was empty", () => {
78
- const badEntry = R.set(
79
- R.lensPath(["media_group", 0, "media_item", 0, "src"]),
80
- "",
81
- entry
82
- );
83
-
84
- expect(imageSrcFromMediaItem(badEntry, ["image_base"])).toBeUndefined();
85
- });
86
- });
87
-
88
57
  describe("populateConfigurationValues", () => {
89
58
  it("transforms and returns the valid values", () => {
90
59
  const fields = [
@@ -0,0 +1,65 @@
1
+ import { getMediaItems } from "..";
2
+ import { entry as baseEntry } from "./testEntry";
3
+
4
+ describe("getMediaItems", () => {
5
+ it("returns both image and thumbnail media items", () => {
6
+ const items = getMediaItems(baseEntry);
7
+ expect(items).toHaveLength(2);
8
+ expect(items[0].key).toBe("image_base");
9
+ expect(items[1].key).toBe("logo_thumbnail");
10
+ });
11
+
12
+ it("returns only image media items if no thumbnail present", () => {
13
+ const entry = {
14
+ ...baseEntry,
15
+ media_group: [
16
+ {
17
+ type: "image",
18
+ media_item: [
19
+ { key: "image_base", src: "img.png" },
20
+ { key: "other", src: "other.png" },
21
+ ],
22
+ },
23
+ ],
24
+ };
25
+
26
+ const items = getMediaItems(entry);
27
+ expect(items).toHaveLength(2);
28
+ expect(items[0].key).toBe("image_base");
29
+ expect(items[1].key).toBe("other");
30
+ });
31
+
32
+ it("returns only thumbnail media items if no image present", () => {
33
+ const entry = {
34
+ ...baseEntry,
35
+ media_group: [
36
+ {
37
+ type: "thumbnail",
38
+ media_item: [{ key: "thumb1", src: "thumb1.png" }],
39
+ },
40
+ ],
41
+ };
42
+
43
+ const items = getMediaItems(entry);
44
+ expect(items).toHaveLength(1);
45
+ expect(items[0].key).toBe("thumb1");
46
+ });
47
+
48
+ it("returns undefined if no media_group present", () => {
49
+ const entry = { ...baseEntry };
50
+ delete entry.media_group;
51
+ expect(getMediaItems(entry)).toBeUndefined();
52
+ });
53
+
54
+ it("returns undefined if media_group is present but has no image or thumbnail", () => {
55
+ const entry = {
56
+ ...baseEntry,
57
+ media_group: [
58
+ { type: "audio", media_item: [{ key: "audio1", src: "audio1.mp3" }] },
59
+ ],
60
+ };
61
+
62
+ const items = getMediaItems(entry);
63
+ expect(items).toBeUndefined();
64
+ });
65
+ });
@@ -0,0 +1,34 @@
1
+ import * as R from "ramda";
2
+ import { imageSrcFromMediaItem } from "../";
3
+ import { entry } from "./testEntry";
4
+
5
+ describe("imageSrcFromMediaItem", () => {
6
+ it("when the matching key is found and the src is not empty", () => {
7
+ const result = imageSrcFromMediaItem(entry as ZappEntry, [
8
+ "logo_thumbnail",
9
+ ]);
10
+
11
+ expect(result).toEqual(entry.media_group[1].media_item[0].src);
12
+ expect(result).not.toEqual("");
13
+ });
14
+
15
+ it("returns a media item with the 'image_base' key as a fallback", () => {
16
+ const result = imageSrcFromMediaItem(entry as ZappEntry, [
17
+ "does_not_exist",
18
+ ]);
19
+
20
+ const fallback = entry.media_group[0].media_item[0];
21
+ expect(result).toEqual(fallback.src);
22
+ expect(fallback.key).toBe("image_base");
23
+ });
24
+
25
+ it("returns undefined if the key was found but the source was empty", () => {
26
+ const badEntry: ZappEntry = R.set(
27
+ R.lensPath(["media_group", 0, "media_item", 0, "src"]),
28
+ "",
29
+ entry
30
+ );
31
+
32
+ expect(imageSrcFromMediaItem(badEntry, ["image_base"])).toBeUndefined();
33
+ });
34
+ });