@applicaster/zapp-react-native-utils 16.0.0-alpha.1833861900 → 16.0.0-alpha.1852433906

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 (245) hide show
  1. package/actionUtils/index.ts +3 -1
  2. package/actionsExecutor/ActionExecutor.ts +57 -12
  3. package/actionsExecutor/ActionExecutorContext.tsx +113 -314
  4. package/actionsExecutor/__tests__/ActionExecutor.test.ts +71 -0
  5. package/actionsExecutor/__tests__/StorageActions.test.ts +98 -0
  6. package/actionsExecutor/__tests__/feedDecorator.test.ts +91 -0
  7. package/actionsExecutor/__tests__/screenToggleFlag.test.ts +90 -0
  8. package/actionsExecutor/actions/__tests__/dismissBottomSheet.test.ts +25 -0
  9. package/actionsExecutor/actions/__tests__/goBack.test.ts +62 -0
  10. package/actionsExecutor/actions/__tests__/goHome.test.ts +19 -0
  11. package/actionsExecutor/actions/__tests__/loadItemsFromSource.test.ts +88 -0
  12. package/actionsExecutor/actions/__tests__/navigateToScreen.test.ts +267 -0
  13. package/actionsExecutor/actions/__tests__/openBottomSheet.customContent.test.ts +100 -0
  14. package/actionsExecutor/actions/__tests__/openBottomSheet.inlineItems.test.ts +372 -0
  15. package/actionsExecutor/actions/__tests__/presentScreen.test.ts +127 -0
  16. package/actionsExecutor/actions/__tests__/showAlert.test.ts +49 -0
  17. package/actionsExecutor/actions/__tests__/showToast.test.ts +88 -0
  18. package/actionsExecutor/actions/appRestart.ts +24 -0
  19. package/actionsExecutor/actions/confirmDialog.ts +53 -0
  20. package/actionsExecutor/actions/dismissBottomSheet.ts +23 -0
  21. package/actionsExecutor/actions/goBack.ts +60 -0
  22. package/actionsExecutor/actions/goHome.ts +31 -0
  23. package/actionsExecutor/actions/index.ts +42 -0
  24. package/actionsExecutor/actions/localStorageRemove.ts +27 -0
  25. package/actionsExecutor/actions/localStorageSet.ts +28 -0
  26. package/actionsExecutor/actions/localStorageToggleFlag.ts +28 -0
  27. package/actionsExecutor/actions/navigateToScreen.ts +121 -0
  28. package/actionsExecutor/actions/openBottomSheet.ts +340 -0
  29. package/actionsExecutor/actions/presentScreen.ts +78 -0
  30. package/actionsExecutor/actions/refreshComponent.ts +85 -0
  31. package/actionsExecutor/actions/screenSetVariable.ts +35 -0
  32. package/actionsExecutor/actions/screenToggleFlag.ts +36 -0
  33. package/actionsExecutor/actions/sendCloudEvent.ts +93 -0
  34. package/actionsExecutor/actions/sessionStorageRemove.ts +19 -0
  35. package/actionsExecutor/actions/sessionStorageSet.ts +20 -0
  36. package/actionsExecutor/actions/sessionStorageToggleFlag.ts +15 -0
  37. package/actionsExecutor/actions/showAlert.ts +51 -0
  38. package/actionsExecutor/actions/showToast.ts +87 -0
  39. package/actionsExecutor/actions/switchLayout.ts +40 -0
  40. package/actionsExecutor/consts.ts +27 -0
  41. package/actionsExecutor/feedDecorator.ts +12 -6
  42. package/actionsExecutor/types.ts +59 -0
  43. package/analyticsUtils/AnalyticsEvents/sendMenuClickEvent.ts +2 -2
  44. package/analyticsUtils/PlayerAnalyticsManager.ts +1 -1
  45. package/analyticsUtils/__tests__/analyticsMapper.test.ts +35 -0
  46. package/analyticsUtils/__tests__/fixtures/analytics_mapper_testACP_events.json +1 -1
  47. package/analyticsUtils/__tests__/fixtures/analytics_mapper_testBlockUnlistedParams_rules.json +1 -1
  48. package/analyticsUtils/__tests__/fixtures/analytics_mapper_testEmptyRenameKeepsName_events.json +4 -0
  49. package/analyticsUtils/__tests__/fixtures/analytics_mapper_testEmptyRenameKeepsName_rules.json +6 -0
  50. package/analyticsUtils/__tests__/fixtures/analytics_mapper_testEventRegex_events.json +3 -9
  51. package/analyticsUtils/__tests__/fixtures/analytics_mapper_testIgnoreOrdering_events.json +18 -0
  52. package/analyticsUtils/__tests__/fixtures/analytics_mapper_testIgnoreOrdering_rules.json +16 -0
  53. package/analyticsUtils/__tests__/fixtures/analytics_mapper_testRegexEventNoFallback_events.json +4 -0
  54. package/analyticsUtils/__tests__/fixtures/analytics_mapper_testRegexEventNoFallback_rules.json +6 -0
  55. package/analyticsUtils/__tests__/fixtures/analytics_mapper_testRegexMultiGroupRename_events.json +4 -0
  56. package/analyticsUtils/__tests__/fixtures/analytics_mapper_testRegexMultiGroupRename_rules.json +6 -0
  57. package/analyticsUtils/__tests__/fixtures/analytics_mapper_testRegexNonNamedFullMatch_events.json +4 -0
  58. package/analyticsUtils/__tests__/fixtures/analytics_mapper_testRegexNonNamedFullMatch_rules.json +6 -0
  59. package/analyticsUtils/__tests__/fixtures/index.js +20 -0
  60. package/analyticsUtils/analyticsMapper.ts +4 -1
  61. package/appUtils/HooksManager/index.ts +9 -0
  62. package/appUtils/contextKeysManager/__tests__/getKey/failure.test.ts +2 -23
  63. package/appUtils/contextKeysManager/__tests__/getKey/success/fullSearch.test.ts +1 -25
  64. package/appUtils/contextKeysManager/__tests__/getKey/success/searchInSecure.test.ts +1 -7
  65. package/appUtils/contextKeysManager/__tests__/removeKey/failure.test.ts +1 -26
  66. package/appUtils/contextKeysManager/__tests__/removeKey/success.test.ts +0 -6
  67. package/appUtils/contextKeysManager/__tests__/setKey/failure/failedToSaveInStorage.test.ts +0 -40
  68. package/appUtils/contextKeysManager/__tests__/setKey/failure/invalidKey.test.ts +4 -4
  69. package/appUtils/contextKeysManager/__tests__/setKey/{success/saveItemAndReference.test.ts → success.test.ts} +2 -42
  70. package/appUtils/contextKeysManager/index.ts +29 -130
  71. package/appUtils/playerManager/OverlayObserver/OverlaysObserver.ts +142 -59
  72. package/appUtils/playerManager/OverlayObserver/__tests__/getUpcomingQueue.test.ts +67 -0
  73. package/appUtils/playerManager/OverlayObserver/__tests__/liveContent.test.ts +205 -0
  74. package/appUtils/playerManager/OverlayObserver/__tests__/utils.test.ts +56 -0
  75. package/appUtils/playerManager/OverlayObserver/getUpcomingQueue.android.tv.ts +4 -0
  76. package/appUtils/playerManager/OverlayObserver/getUpcomingQueue.ios.tv.ts +4 -0
  77. package/appUtils/playerManager/OverlayObserver/getUpcomingQueue.ts +24 -0
  78. package/appUtils/playerManager/OverlayObserver/getUpcomingQueue.web.ts +4 -0
  79. package/appUtils/playerManager/OverlayObserver/utils.ts +51 -20
  80. package/appUtils/playerManager/__tests__/playerContent.test.ts +403 -0
  81. package/appUtils/playerManager/__tests__/playerDiagnostics.test.ts +62 -0
  82. package/appUtils/playerManager/__tests__/playerFactory.test.ts +1 -1
  83. package/appUtils/playerManager/__tests__/playerNative.test.ts +114 -0
  84. package/appUtils/playerManager/__tests__/playerNativeCommand.test.ts +62 -0
  85. package/appUtils/playerManager/__tests__/playerToolbox.test.ts +281 -0
  86. package/appUtils/playerManager/__tests__/usePlayerContent.test.tsx +64 -0
  87. package/appUtils/playerManager/__tests__/usePlayerControllerSetup.test.tsx +62 -0
  88. package/appUtils/playerManager/{conts.ts → const.ts} +33 -0
  89. package/appUtils/playerManager/index.ts +8 -1
  90. package/appUtils/playerManager/player.ts +140 -3
  91. package/appUtils/playerManager/playerFactory.ts +1 -1
  92. package/appUtils/playerManager/playerNative.ts +28 -4
  93. package/appUtils/playerManager/playerNativeCommand.ts +3 -6
  94. package/appUtils/playerManager/playerToolbox.ts +196 -0
  95. package/appUtils/playerManager/usePlayerContent.tsx +43 -0
  96. package/appUtils/playerManager/usePlayerControllerSetup.tsx +7 -1
  97. package/appUtils/playerManager/userLanguagePreference.ts +1 -1
  98. package/arrayUtils/__tests__/{anyThruthy.test.ts → anyTruthy.test.ts} +8 -0
  99. package/arrayUtils/__tests__/arrayUtils.test.ts +165 -108
  100. package/arrayUtils/__tests__/isEmptyArray.test.ts +11 -0
  101. package/arrayUtils/__tests__/isFilledArray.test.ts +12 -0
  102. package/arrayUtils/__tests__/isFirst.test.ts +17 -0
  103. package/arrayUtils/__tests__/isIndexInRange.test.ts +14 -0
  104. package/arrayUtils/__tests__/isLast.test.ts +31 -0
  105. package/arrayUtils/__tests__/makeListOf.test.ts +31 -0
  106. package/arrayUtils/__tests__/makeListOfIndexes.test.ts +20 -0
  107. package/arrayUtils/__tests__/reorderByIds.test.ts +63 -0
  108. package/arrayUtils/__tests__/sample.test.ts +61 -0
  109. package/arrayUtils/index.ts +119 -20
  110. package/bottomSheet/__tests__/scrollContext.test.tsx +35 -0
  111. package/bottomSheet/index.ts +17 -0
  112. package/cellUtils/__tests__/getButtonsEnabled.test.ts +28 -0
  113. package/cellUtils/__tests__/getCellNavigationEnabled.test.ts +36 -0
  114. package/cellUtils/__tests__/getIsCellNavigationEnabled.test.ts +35 -0
  115. package/cellUtils/__tests__/isCellNavigationEnabled.test.ts +21 -0
  116. package/cellUtils/index.ts +73 -8
  117. package/colorUtils/__tests__/isTransparentColor.test.ts +76 -0
  118. package/colorUtils/__tests__/isValidColor.test.ts +70 -0
  119. package/colorUtils/index.ts +50 -0
  120. package/configurationUtils/__tests__/manifestKeyParser.test.ts +21 -0
  121. package/configurationUtils/__tests__/modalBlocksParser.test.ts +403 -0
  122. package/configurationUtils/manifestKeyParser.ts +50 -10
  123. package/configurationUtils/modalBlocksParser.ts +252 -0
  124. package/entryActions/__tests__/buildEntryActions.test.ts +235 -0
  125. package/entryActions/aliasPresentation.ts +108 -0
  126. package/entryActions/buildEntryActions.ts +167 -0
  127. package/entryActions/index.ts +15 -0
  128. package/entryActions/types.ts +39 -0
  129. package/focusManager/FocusManager.ts +26 -0
  130. package/focusManager/__tests__/FocusManager.test.ts +9 -0
  131. package/localizationUtils/index.ts +12 -6
  132. package/logger/__tests__/xrayToolbox.test.ts +69 -0
  133. package/logger/xrayToolbox.ts +67 -0
  134. package/manifestUtils/__tests__/player.audioControls.test.js +158 -0
  135. package/manifestUtils/_internals/index.js +14 -3
  136. package/manifestUtils/defaultManifestConfigurations/generalContent.js +41 -0
  137. package/manifestUtils/defaultManifestConfigurations/player.js +357 -20
  138. package/manifestUtils/fieldUtils/__tests__/fieldUtils.test.js +84 -0
  139. package/manifestUtils/fieldUtils/index.js +125 -0
  140. package/manifestUtils/index.js +3 -0
  141. package/manifestUtils/keys.js +16 -2
  142. package/manifestUtils/mobileAction/button/index.js +16 -0
  143. package/manifestUtils/mobileAction/container/__tests__/mobileActionButtonsContainer.test.js +21 -0
  144. package/manifestUtils/mobileAction/container/index.js +3 -1
  145. package/manifestUtils/mobileAction/groups/__tests__/buildMobileActionButtonGroups.test.js +1 -1
  146. package/manifestUtils/mobileAction/groups/defaults.js +5 -2
  147. package/manifestUtils/modalBlocks.js +304 -0
  148. package/manifestUtils/platformIsTV.js +1 -0
  149. package/modalState/ContentViewModel.ts +113 -0
  150. package/modalState/EditableCollection.ts +17 -0
  151. package/modalState/EditableCollectionRegistry.ts +51 -0
  152. package/modalState/ModalOrchestrator.ts +213 -0
  153. package/modalState/RemoteEditableCollection.ts +235 -0
  154. package/modalState/__tests__/ContentViewModel.editable.test.ts +69 -0
  155. package/modalState/__tests__/ContentViewModel.test.ts +165 -0
  156. package/modalState/__tests__/EditableCollectionRegistry.test.ts +112 -0
  157. package/modalState/__tests__/ModalOrchestrator.phase3.test.ts +86 -0
  158. package/modalState/__tests__/RemoteEditableCollection.test.ts +415 -0
  159. package/modalState/__tests__/index.test.ts +30 -1
  160. package/modalState/__tests__/useBottomSheetContent.test.ts +349 -0
  161. package/modalState/__tests__/useModalStoreState.test.ts +142 -0
  162. package/modalState/index.ts +37 -83
  163. package/modalState/store.ts +109 -0
  164. package/modalState/types.ts +173 -0
  165. package/modalState/useBottomSheetContent.ts +109 -0
  166. package/navigationUtils/xrayNavigator.ts +12 -0
  167. package/numberUtils/__tests__/isMinusZero.test.ts +20 -0
  168. package/numberUtils/__tests__/isZero.test.ts +27 -0
  169. package/numberUtils/__tests__/requireNumber.test.ts +50 -0
  170. package/numberUtils/__tests__/toNumber.test.ts +27 -0
  171. package/numberUtils/__tests__/toNumberWithDefault.test.ts +64 -0
  172. package/numberUtils/__tests__/toNumberWithDefaultZero.test.ts +48 -0
  173. package/numberUtils/index.ts +27 -8
  174. package/package.json +3 -2
  175. package/pipesUtils/__tests__/buildUrlWithQuery.test.ts +33 -0
  176. package/pipesUtils/__tests__/withPipesEndpoint.test.tsx +56 -0
  177. package/pipesUtils/index.ts +1 -0
  178. package/pipesUtils/withPipesEndpoint.tsx +54 -0
  179. package/playerUtils/__tests__/contentDataKeys.test.ts +297 -0
  180. package/playerUtils/__tests__/resolvePlayerActions.test.ts +138 -0
  181. package/playerUtils/__tests__/resolvePlayerTitleSubtitle.test.ts +180 -0
  182. package/playerUtils/contentDataKeys.ts +134 -0
  183. package/playerUtils/index.ts +37 -16
  184. package/playerUtils/isAudioItem.ts +26 -0
  185. package/playerUtils/resolvePlayerActions.ts +71 -0
  186. package/playerUtils/resolvePlayerTitleSubtitle.ts +76 -0
  187. package/pluginUtils/__tests__/pluginUtils.test.js +32 -0
  188. package/pluginUtils/index.ts +29 -0
  189. package/quickBrickAssets/__tests__/index.test.ts +18 -0
  190. package/quickBrickAssets/index.ts +35 -0
  191. package/reactHooks/__tests__/getPluginConfiguration.test.ts +82 -0
  192. package/reactHooks/actions/index.ts +124 -3
  193. package/reactHooks/cell-click/__tests__/index.test.js +64 -0
  194. package/reactHooks/cell-click/index.ts +39 -24
  195. package/reactHooks/connection/index.tsx +8 -5
  196. package/reactHooks/feed/__mocks__/useMarkPipesDataStale.ts +4 -0
  197. package/reactHooks/feed/__tests__/feedInvalidation.test.tsx +338 -0
  198. package/reactHooks/feed/__tests__/useBatchLoading.test.tsx +8 -2
  199. package/reactHooks/feed/__tests__/useInflatedUrl.test.tsx +25 -0
  200. package/reactHooks/feed/__tests__/useMarkPipesDataStale.test.tsx +243 -0
  201. package/reactHooks/feed/index.ts +5 -1
  202. package/reactHooks/feed/useBatchLoading.ts +9 -1
  203. package/reactHooks/feed/useFeedLoader.tsx +28 -1
  204. package/reactHooks/feed/useLoadPipesDataDispatch.ts +12 -11
  205. package/reactHooks/feed/useMarkPipesDataStale.ts +97 -0
  206. package/reactHooks/index.ts +2 -0
  207. package/reactHooks/layout/index.ts +1 -1
  208. package/reactHooks/navigation/__mocks__/index.ts +4 -0
  209. package/reactHooks/navigation/__tests__/index.test.tsx +176 -1
  210. package/reactHooks/navigation/__tests__/useIsScreenActive.test.ts +42 -0
  211. package/reactHooks/navigation/__tests__/usePresentScreen.test.ts +154 -0
  212. package/reactHooks/navigation/index.ts +3 -1
  213. package/reactHooks/navigation/useIsScreenActive.ts +29 -8
  214. package/reactHooks/navigation/usePresentScreen.ts +157 -0
  215. package/reactHooks/navigation/useRoute.ts +22 -5
  216. package/reactHooks/state/useComponentScreenState.ts +1 -1
  217. package/reactHooks/usePluginConfiguration.ts +88 -47
  218. package/reactHooks/utils/__tests__/index.test.js +22 -2
  219. package/reactHooks/utils/index.ts +13 -2
  220. package/riverComponetsMeasurementProvider/index.tsx +15 -9
  221. package/stringUtils/__tests__/stringUtils.test.js +42 -0
  222. package/stringUtils/index.ts +2 -2
  223. package/uiActionsRegistrator/__tests__/resolveActionIdentifiers.test.ts +93 -0
  224. package/uiActionsRegistrator/__tests__/subscribe.test.ts +133 -0
  225. package/uiActionsRegistrator/__tests__/usableActionItems.test.ts +52 -0
  226. package/uiActionsRegistrator/index.ts +25 -0
  227. package/uiActionsRegistrator/registry.ts +351 -0
  228. package/uiActionsRegistrator/resolveActionIdentifiers.ts +100 -0
  229. package/uiActionsRegistrator/usableActionItems.ts +66 -0
  230. package/zappFrameworkUtils/__tests__/localStorageHelper.test.ts +146 -0
  231. package/zappFrameworkUtils/localStorageHelper.ts +19 -15
  232. package/appUtils/contextKeysManager/__tests__/getKey/success/byReference.test.ts +0 -56
  233. package/appUtils/contextKeysManager/__tests__/getKeyByReference/failure.test.ts +0 -265
  234. package/appUtils/contextKeysManager/__tests__/getKeyByReference/success.test.ts +0 -303
  235. package/appUtils/contextKeysManager/__tests__/removeReferenceForKey/failure.test.ts +0 -82
  236. package/appUtils/contextKeysManager/__tests__/removeReferenceForKey/success.test.ts +0 -41
  237. package/appUtils/contextKeysManager/__tests__/setKey/success/saveItemButNotReference.test.ts +0 -208
  238. package/appUtils/contextKeysManager/__tests__/setReferenceForKey/failure.test.ts +0 -93
  239. package/appUtils/contextKeysManager/__tests__/setReferenceForKey/success.test.ts +0 -45
  240. package/appUtils/playerManager/usePlayerTitleSummaryOverlay.tsx +0 -56
  241. package/playerUtils/__tests__/getPlayerActionButtons.test.ts +0 -54
  242. package/playerUtils/getPlayerActionButtons.ts +0 -17
  243. package/reactHooks/feed/__mocks__/usePipesCacheReset.ts +0 -1
  244. package/reactHooks/feed/usePipesCacheReset.ts +0 -44
  245. /package/reactHooks/actions/__tests__/{index.test.js → index.test.tsx} +0 -0
@@ -1,208 +0,0 @@
1
- import { ContextKeysManager } from "../../..";
2
- import { StorageLevel } from "../../../consts";
3
-
4
- describe("Context Keys Manager - setKey", () => {
5
- it("returns true if saved item but not reference with storage-level=default", async () => {
6
- // setup
7
- const key = "namespace.key";
8
- const value = "value";
9
- const storageLevel = StorageLevel.default;
10
-
11
- const mockedLogger = {
12
- warn: jest.fn(),
13
- };
14
-
15
- const mockedSessionStorage = {
16
- getItem: jest.fn(),
17
- setItem: jest.fn().mockResolvedValueOnce(true),
18
- removeItem: jest.fn(),
19
- };
20
-
21
- const mockedLocalStorage = {
22
- getItem: jest.fn(),
23
- setItem: jest.fn(),
24
- removeItem: jest.fn(),
25
- };
26
-
27
- const mockedSecureStorage = {
28
- getItem: jest.fn(),
29
- setItem: jest.fn(),
30
- removeItem: jest.fn(),
31
- };
32
-
33
- const contextManager = new ContextKeysManager({
34
- logger: mockedLogger,
35
- sessionStorage: mockedSessionStorage,
36
- localStorage: mockedLocalStorage,
37
- secureStorage: mockedSecureStorage,
38
- });
39
-
40
- const setReferenceForKey = jest
41
- .spyOn(contextManager, "setReferenceForKey")
42
- .mockResolvedValueOnce(false);
43
-
44
- // run
45
- const result = await contextManager.setKey({ key, value, storageLevel });
46
-
47
- // verify
48
- expect(result).toBe(true);
49
-
50
- expect(mockedLogger.warn).not.toHaveBeenCalled();
51
-
52
- expect(mockedSessionStorage.getItem).not.toHaveBeenCalled();
53
-
54
- expect(mockedSessionStorage.setItem).toHaveBeenCalledWith(
55
- "key",
56
- value,
57
- "namespace"
58
- );
59
-
60
- expect(mockedLocalStorage.getItem).not.toHaveBeenCalled();
61
- expect(mockedLocalStorage.setItem).not.toHaveBeenCalled();
62
-
63
- expect(mockedSecureStorage.getItem).not.toHaveBeenCalled();
64
- expect(mockedSecureStorage.setItem).not.toHaveBeenCalled();
65
-
66
- expect(setReferenceForKey).toHaveBeenCalledWith(
67
- "key",
68
- "namespace",
69
- StorageLevel.default
70
- );
71
- });
72
-
73
- it("returns true if saved item but not reference with storage-level=persisted", async () => {
74
- // setup
75
- const key = "namespace.key";
76
- const value = "value";
77
- const storageLevel = StorageLevel.persisted;
78
-
79
- const mockedLogger = {
80
- warn: jest.fn(),
81
- };
82
-
83
- const mockedSessionStorage = {
84
- getItem: jest.fn(),
85
- setItem: jest.fn(),
86
- removeItem: jest.fn(),
87
- };
88
-
89
- const mockedLocalStorage = {
90
- getItem: jest.fn(),
91
- setItem: jest.fn().mockResolvedValueOnce(true),
92
- removeItem: jest.fn(),
93
- };
94
-
95
- const mockedSecureStorage = {
96
- getItem: jest.fn(),
97
- setItem: jest.fn(),
98
- removeItem: jest.fn(),
99
- };
100
-
101
- const contextManager = new ContextKeysManager({
102
- logger: mockedLogger,
103
- sessionStorage: mockedSessionStorage,
104
- localStorage: mockedLocalStorage,
105
- secureStorage: mockedSecureStorage,
106
- });
107
-
108
- const setReferenceForKey = jest
109
- .spyOn(contextManager, "setReferenceForKey")
110
- .mockResolvedValueOnce(false);
111
-
112
- // run
113
- const result = await contextManager.setKey({ key, value, storageLevel });
114
-
115
- // verify
116
- expect(result).toBe(true);
117
-
118
- expect(mockedLogger.warn).not.toHaveBeenCalled();
119
-
120
- expect(mockedSessionStorage.getItem).not.toHaveBeenCalled();
121
- expect(mockedSessionStorage.setItem).not.toHaveBeenCalled();
122
-
123
- expect(mockedLocalStorage.getItem).not.toHaveBeenCalled();
124
-
125
- expect(mockedLocalStorage.setItem).toHaveBeenCalledWith(
126
- "key",
127
- value,
128
- "namespace"
129
- );
130
-
131
- expect(mockedSecureStorage.getItem).not.toHaveBeenCalled();
132
- expect(mockedSecureStorage.setItem).not.toHaveBeenCalled();
133
-
134
- expect(setReferenceForKey).toHaveBeenCalledWith(
135
- "key",
136
- "namespace",
137
- StorageLevel.persisted
138
- );
139
- });
140
-
141
- it("returns true if saved item but not reference with storage-level=secure", async () => {
142
- // setup
143
- const key = "namespace.key";
144
- const value = "value";
145
- const storageLevel = StorageLevel.secure;
146
-
147
- const mockedLogger = {
148
- warn: jest.fn(),
149
- };
150
-
151
- const mockedSessionStorage = {
152
- getItem: jest.fn(),
153
- setItem: jest.fn(),
154
- removeItem: jest.fn(),
155
- };
156
-
157
- const mockedLocalStorage = {
158
- getItem: jest.fn(),
159
- setItem: jest.fn(),
160
- removeItem: jest.fn(),
161
- };
162
-
163
- const mockedSecureStorage = {
164
- getItem: jest.fn(),
165
- setItem: jest.fn().mockResolvedValueOnce(true),
166
- removeItem: jest.fn(),
167
- };
168
-
169
- const contextManager = new ContextKeysManager({
170
- logger: mockedLogger,
171
- sessionStorage: mockedSessionStorage,
172
- localStorage: mockedLocalStorage,
173
- secureStorage: mockedSecureStorage,
174
- });
175
-
176
- const setReferenceForKey = jest
177
- .spyOn(contextManager, "setReferenceForKey")
178
- .mockResolvedValueOnce(false);
179
-
180
- // run
181
- const result = await contextManager.setKey({ key, value, storageLevel });
182
-
183
- // verify
184
- expect(result).toBe(true);
185
-
186
- expect(mockedLogger.warn).not.toHaveBeenCalled();
187
-
188
- expect(mockedSessionStorage.getItem).not.toHaveBeenCalled();
189
- expect(mockedSessionStorage.setItem).not.toHaveBeenCalled();
190
-
191
- expect(mockedLocalStorage.getItem).not.toHaveBeenCalled();
192
- expect(mockedLocalStorage.setItem).not.toHaveBeenCalled();
193
-
194
- expect(mockedSecureStorage.getItem).not.toHaveBeenCalled();
195
-
196
- expect(mockedSecureStorage.setItem).toHaveBeenCalledWith(
197
- "key",
198
- value,
199
- "namespace"
200
- );
201
-
202
- expect(setReferenceForKey).toHaveBeenCalledWith(
203
- "key",
204
- "namespace",
205
- StorageLevel.secure
206
- );
207
- });
208
- });
@@ -1,93 +0,0 @@
1
- import { ContextKeysManager, REFERENCE_NAMESPACE } from "../..";
2
- import { buildNamespaceKey } from "../../utils";
3
- import { StorageLevel } from "../../consts";
4
-
5
- describe("Context Keys Manager - setReferenceForKey", () => {
6
- it("returns false if save failed", async () => {
7
- // setup
8
- const key = "key";
9
- const namespace = "namespace";
10
- const storageLevel = StorageLevel.default;
11
- const error = Error("oops");
12
-
13
- const mockedLogger = {
14
- warn: jest.fn(),
15
- };
16
-
17
- const mockedReferenceStorage = {
18
- getItem: jest.fn(),
19
- setItem: jest.fn().mockRejectedValueOnce(error),
20
- removeItem: jest.fn(),
21
- };
22
-
23
- const contextManager = new ContextKeysManager({
24
- logger: mockedLogger,
25
- referenceStorage: mockedReferenceStorage,
26
- });
27
-
28
- // run
29
- const result = await contextManager.setReferenceForKey(
30
- key,
31
- namespace,
32
- storageLevel
33
- );
34
-
35
- // verify
36
- expect(result).toBe(false);
37
-
38
- expect(mockedLogger.warn).toHaveBeenCalledWith({
39
- message: error.message,
40
- data: { key, namespace, storageLevel },
41
- });
42
-
43
- expect(mockedReferenceStorage.setItem).toHaveBeenCalledWith(
44
- buildNamespaceKey(key, namespace),
45
- storageLevel,
46
- REFERENCE_NAMESPACE
47
- );
48
- });
49
-
50
- it("returns false if save success but result is not true", async () => {
51
- // setup
52
- const key = "key";
53
- const namespace = "namespace";
54
- const storageLevel = StorageLevel.default;
55
-
56
- const mockedLogger = {
57
- warn: jest.fn(),
58
- };
59
-
60
- const mockedReferenceStorage = {
61
- getItem: jest.fn(),
62
- setItem: jest.fn().mockResolvedValueOnce(undefined),
63
- removeItem: jest.fn(),
64
- };
65
-
66
- const contextManager = new ContextKeysManager({
67
- logger: mockedLogger,
68
- referenceStorage: mockedReferenceStorage,
69
- });
70
-
71
- // run
72
- const result = await contextManager.setReferenceForKey(
73
- key,
74
- namespace,
75
- storageLevel
76
- );
77
-
78
- // verify
79
- expect(result).toBe(false);
80
-
81
- expect(mockedLogger.warn).toHaveBeenCalledWith({
82
- message:
83
- "While saving reference - reference storage return non expected value: true",
84
- data: { key, namespace, storageLevel },
85
- });
86
-
87
- expect(mockedReferenceStorage.setItem).toHaveBeenCalledWith(
88
- buildNamespaceKey(key, namespace),
89
- storageLevel,
90
- REFERENCE_NAMESPACE
91
- );
92
- });
93
- });
@@ -1,45 +0,0 @@
1
- import { ContextKeysManager, REFERENCE_NAMESPACE } from "../..";
2
- import { buildNamespaceKey } from "../../utils";
3
- import { StorageLevel } from "../../consts";
4
-
5
- describe("Context Keys Manager - setReferenceForKey", () => {
6
- it("returns true if save success", async () => {
7
- // setup
8
- const key = "key";
9
- const namespace = "namespace";
10
- const value = StorageLevel.default;
11
-
12
- const mockedLogger = {
13
- warn: jest.fn(),
14
- };
15
-
16
- const mockedReferenceStorage = {
17
- getItem: jest.fn(),
18
- setItem: jest.fn().mockResolvedValueOnce(true),
19
- removeItem: jest.fn(),
20
- };
21
-
22
- const contextManager = new ContextKeysManager({
23
- logger: mockedLogger,
24
- referenceStorage: mockedReferenceStorage,
25
- });
26
-
27
- // run
28
- const result = await contextManager.setReferenceForKey(
29
- key,
30
- namespace,
31
- value
32
- );
33
-
34
- // verify
35
- expect(result).toBe(true);
36
-
37
- expect(mockedLogger.warn).not.toHaveBeenCalled();
38
-
39
- expect(mockedReferenceStorage.setItem).toHaveBeenCalledWith(
40
- buildNamespaceKey(key, namespace),
41
- value,
42
- REFERENCE_NAMESPACE
43
- );
44
- });
45
- });
@@ -1,56 +0,0 @@
1
- import { useEffect, useState } from "react";
2
- import { OverlaysObserver } from "./OverlayObserver/OverlaysObserver";
3
- import { useFeedLoader } from "../../reactHooks";
4
- import { usePlayer } from "./usePlayer";
5
-
6
- const getLiveUrl = (url: string) => {
7
- // Use the replace method with a regular expression to replace all instances of subClass with livePage
8
- return url.replace(new RegExp("subClass", "g"), "livePage");
9
- };
10
-
11
- export const useTitleSummaryOverlay = (
12
- entry,
13
- isLive = false,
14
- interval: number
15
- ) => {
16
- // TODO: Have generic place for live url from configuration. Currently its hardcoded for client.
17
- const feedUrl = getLiveUrl(entry?.extensions?.live?.channel_src ?? "");
18
- const player = usePlayer();
19
- const [title, setTitle] = useState<string | number>(entry?.title || "");
20
- const [summary, setSummary] = useState<string | number>(entry?.summary || "");
21
-
22
- // Hook to load feed data
23
- const { data: feedData, reloadData } = useFeedLoader({ feedUrl });
24
-
25
- useEffect(() => {
26
- if (player && feedUrl && isLive) {
27
- const observer = new OverlaysObserver({ player });
28
-
29
- observer.setFeedDataHandlers(feedUrl, reloadData, interval, (entry) => {
30
- setTitle(entry?.title || "");
31
- setSummary(entry?.summary || "");
32
- });
33
-
34
- const subscription = observer
35
- .getTitleSummaryObservable()
36
- .subscribe(({ title, summary }) => {
37
- setTitle(title);
38
- setSummary(summary);
39
- });
40
-
41
- return () => {
42
- subscription.unsubscribe();
43
- observer.clearFeedDataInterval();
44
- };
45
- }
46
- }, [player, feedUrl, reloadData, isLive]);
47
-
48
- useEffect(() => {
49
- if (isLive && feedData?.entry?.[0]) {
50
- setTitle(feedData.entry[0].title || "");
51
- setSummary(feedData.entry[0].summary || "");
52
- }
53
- }, [feedData]);
54
-
55
- return { title, summary };
56
- };
@@ -1,54 +0,0 @@
1
- import { getPlayerActionButtons } from "../getPlayerActionButtons";
2
- import { selectActionButtons } from "../../conf/player/selectors";
3
-
4
- jest.mock("../../conf/player/selectors", () => ({
5
- selectActionButtons: jest.fn(),
6
- }));
7
-
8
- describe("getPlayerActionButtons", () => {
9
- afterEach(() => {
10
- jest.clearAllMocks();
11
- });
12
-
13
- it("returns an empty array if selectActionButtons returns undefined", () => {
14
- (selectActionButtons as jest.Mock).mockReturnValue(undefined);
15
- const result = getPlayerActionButtons({});
16
- expect(result).toEqual([]);
17
- });
18
-
19
- it("returns an empty array if selectActionButtons returns null", () => {
20
- (selectActionButtons as jest.Mock).mockReturnValue(null);
21
- const result = getPlayerActionButtons({});
22
- expect(result).toEqual([]);
23
- });
24
-
25
- it("returns an empty array if selectActionButtons returns empty string", () => {
26
- (selectActionButtons as jest.Mock).mockReturnValue("");
27
- const result = getPlayerActionButtons({});
28
- expect(result).toEqual([]);
29
- });
30
-
31
- it("returns the first two trimmed action buttons", () => {
32
- (selectActionButtons as jest.Mock).mockReturnValue(" play , pause , stop ");
33
- const result = getPlayerActionButtons({});
34
- expect(result).toEqual(["play", "pause"]);
35
- });
36
-
37
- it("returns only one button if only one is present", () => {
38
- (selectActionButtons as jest.Mock).mockReturnValue(" play ");
39
- const result = getPlayerActionButtons({});
40
- expect(result).toEqual(["play"]);
41
- });
42
-
43
- it("trims whitespace from button names", () => {
44
- (selectActionButtons as jest.Mock).mockReturnValue(" play , pause ");
45
- const result = getPlayerActionButtons({});
46
- expect(result).toEqual(["play", "pause"]);
47
- });
48
-
49
- it("returns an empty array if selectActionButtons returns only commas", () => {
50
- (selectActionButtons as jest.Mock).mockReturnValue(" , , ");
51
- const result = getPlayerActionButtons({});
52
- expect(result).toEqual(["", ""]);
53
- });
54
- });
@@ -1,17 +0,0 @@
1
- import { map, take, trim } from "../utils";
2
- import { selectActionButtons } from "../conf/player/selectors";
3
-
4
- /**
5
- * Returns the first two action buttons from the configuration.
6
- * @param {Object} configuration - The player configuration object.
7
- * @returns {Array} An array containing the first two action buttons.
8
- */
9
- export const getPlayerActionButtons = (configuration: any) => {
10
- const buttonsString = selectActionButtons(configuration);
11
-
12
- if (!buttonsString) {
13
- return [];
14
- }
15
-
16
- return take(2, map(buttonsString.split(","), trim));
17
- };
@@ -1 +0,0 @@
1
- export const usePipesCacheReset = jest.fn();
@@ -1,44 +0,0 @@
1
- import React from "react";
2
-
3
- import { getDatasourceUrl } from "@applicaster/zapp-react-native-ui-components/Decorators/RiverFeedLoader/utils/getDatasourceUrl";
4
- import { usePipesContexts } from "@applicaster/zapp-react-native-ui-components/Decorators/RiverFeedLoader/utils/usePipesContexts";
5
- import { clearPipesData } from "@applicaster/zapp-react-native-redux/ZappPipes";
6
-
7
- import { useRoute } from "../navigation";
8
- import { useAppDispatch } from "@applicaster/zapp-react-native-redux";
9
-
10
- /**
11
- * reset river components cache when screen is unmounted
12
- * @param {string} riverId screen id
13
- * @param {Array} riverComponents list of UI components
14
- */
15
- export const usePipesCacheReset = (riverId, riverComponents) => {
16
- const dispatch = useAppDispatch();
17
- const { screenData, pathname } = useRoute();
18
- const pipesContexts = usePipesContexts(riverId, pathname);
19
-
20
- React.useEffect(() => {
21
- return () => {
22
- riverComponents.forEach((component) => {
23
- if (
24
- component?.rules?.clear_cache_on_reload &&
25
- component?.data?.source &&
26
- // We don't want to refresh cache when closing/minimising videoModal
27
- !pathname.includes("videoModal")
28
- ) {
29
- const url = getDatasourceUrl(
30
- {
31
- screenData,
32
- ...pipesContexts,
33
- },
34
- component
35
- );
36
-
37
- if (url) {
38
- dispatch(clearPipesData(url, { riverId }));
39
- }
40
- }
41
- });
42
- };
43
- }, []);
44
- };