@applicaster/zapp-react-native-ui-components 13.0.0-rc.14 → 13.0.0-rc.140

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 (226) hide show
  1. package/Components/AppContainer/__tests__/AppContainer.test.js +4 -6
  2. package/Components/AppContainer/__tests__/__snapshots__/AppContainer.test.js.snap +1 -1
  3. package/Components/AudioPlayer/index.tsx +15 -0
  4. package/Components/AudioPlayer/mobile/Layout.tsx +63 -0
  5. package/Components/AudioPlayer/mobile/__tests__/__snapshots__/audioPlayerMobileLayout.test.js.snap +66 -0
  6. package/Components/AudioPlayer/mobile/__tests__/audioPlayerMobileLayout.test.js +18 -0
  7. package/Components/AudioPlayer/mobile/index.tsx +23 -0
  8. package/Components/AudioPlayer/tv/Artwork.tsx +40 -0
  9. package/Components/AudioPlayer/{AudioPlayerLayout.tsx → tv/Layout.tsx} +37 -79
  10. package/Components/AudioPlayer/{Runtime.tsx → tv/Runtime.tsx} +2 -1
  11. package/Components/AudioPlayer/{Summary.tsx → tv/Summary.tsx} +12 -9
  12. package/Components/AudioPlayer/{Title.tsx → tv/Title.tsx} +12 -9
  13. package/Components/AudioPlayer/{__tests__ → tv/__tests__}/Runtime.test.js +5 -8
  14. package/Components/AudioPlayer/{__tests__ → tv/__tests__}/__snapshots__/Runtime.test.js.snap +6 -6
  15. package/Components/AudioPlayer/{__tests__ → tv/__tests__}/__snapshots__/artWork.test.js.snap +11 -6
  16. package/Components/AudioPlayer/tv/__tests__/__snapshots__/audioPlayer.test.js.snap +170 -0
  17. package/Components/AudioPlayer/{__tests__ → tv/__tests__}/__snapshots__/channel.test.js.snap +3 -3
  18. package/Components/AudioPlayer/{__tests__ → tv/__tests__}/__snapshots__/summary.test.js.snap +3 -3
  19. package/Components/AudioPlayer/{__tests__ → tv/__tests__}/__snapshots__/title.test.js.snap +3 -3
  20. package/Components/AudioPlayer/{__tests__ → tv/__tests__}/artWork.test.js +3 -5
  21. package/Components/AudioPlayer/{__tests__ → tv/__tests__}/audioPlayer.test.js +5 -7
  22. package/Components/AudioPlayer/{__tests__ → tv/__tests__}/channel.test.js +3 -5
  23. package/Components/AudioPlayer/{__tests__ → tv/__tests__}/summary.test.js +3 -5
  24. package/Components/AudioPlayer/{__tests__ → tv/__tests__}/title.test.js +3 -5
  25. package/Components/AudioPlayer/{helpers.tsx → tv/helpers.tsx} +3 -5
  26. package/Components/AudioPlayer/{AudioPlayer.tsx → tv/index.tsx} +21 -62
  27. package/Components/AudioPlayer/types.ts +40 -0
  28. package/Components/BaseFocusable/index.ios.ts +1 -1
  29. package/Components/BaseFocusable/index.tsx +67 -31
  30. package/Components/Cell/Cell.tsx +14 -14
  31. package/Components/Cell/CellWithFocusable.tsx +50 -59
  32. package/Components/Cell/CellWrapper.tsx +18 -0
  33. package/Components/Cell/TvOSCellComponent.tsx +20 -26
  34. package/Components/Cell/__tests__/CellWIthFocusable.test.js +13 -6
  35. package/Components/Cell/index.js +3 -1
  36. package/Components/Cell/styles.ts +17 -0
  37. package/Components/CellRendererResolver/__tests__/cellRendererResolver.test.js +50 -50
  38. package/Components/CellRendererResolver/index.ts +2 -1
  39. package/Components/ComponentResolver/__tests__/__snapshots__/componentResolver.test.js.snap +1 -42
  40. package/Components/ComponentResolver/__tests__/componentResolver.test.js +26 -30
  41. package/Components/ContentScreen/__tests__/contentScreen.test.js +3 -3
  42. package/Components/DisplayState/__tests__/__snapshots__/displayState.test.js.snap +2 -2
  43. package/Components/ErrorScreen/index.tsx +14 -6
  44. package/Components/Focusable/Focusable.tsx +1 -54
  45. package/Components/Focusable/FocusableTvOS.tsx +6 -2
  46. package/Components/Focusable/Touchable.tsx +19 -20
  47. package/Components/Focusable/index.android.tsx +10 -3
  48. package/Components/FocusableCell/index.tsx +1 -1
  49. package/Components/FocusableGroup/FocusableTvOS.tsx +34 -86
  50. package/Components/FocusableGroup/index.tsx +0 -3
  51. package/Components/FocusableList/index.tsx +26 -10
  52. package/Components/FocusableScrollView/index.tsx +43 -13
  53. package/Components/GeneralContentScreen/GeneralContentScreen.tsx +3 -0
  54. package/Components/GeneralContentScreen/utils/__tests__/useCurationAPI.test.js +9 -0
  55. package/Components/GeneralContentScreen/utils/useCurationAPI.ts +5 -3
  56. package/Components/GeneralContentScreen/utils/useEventAlerts.ts +30 -0
  57. package/Components/HandlePlayable/HandlePlayable.tsx +21 -27
  58. package/Components/Layout/TV/LayoutBackground.tsx +28 -0
  59. package/Components/Layout/TV/NavBarContainer.tsx +19 -23
  60. package/Components/Layout/TV/ScreenContainer.tsx +8 -2
  61. package/Components/Layout/TV/ScreenLayoutContextProvider.tsx +5 -0
  62. package/Components/Layout/TV/__tests__/ScreenContainer.test.tsx +3 -1
  63. package/Components/Layout/TV/__tests__/__snapshots__/LayoutContainer.test.tsx.snap +1 -1
  64. package/Components/Layout/TV/__tests__/__snapshots__/NavBarContainer.test.tsx.snap +6 -5
  65. package/Components/Layout/TV/__tests__/__snapshots__/ScreenContainer.test.tsx.snap +12 -11
  66. package/Components/Layout/TV/__tests__/__snapshots__/index.test.tsx.snap +15 -10
  67. package/Components/Layout/TV/__tests__/index.test.tsx +14 -4
  68. package/Components/Layout/TV/index.tsx +6 -20
  69. package/Components/Layout/TV/index.web.tsx +4 -1
  70. package/Components/MasterCell/DefaultComponents/ActionButton.tsx +2 -3
  71. package/Components/MasterCell/DefaultComponents/BorderContainerView/__tests__/index.test.tsx +66 -0
  72. package/Components/MasterCell/DefaultComponents/BorderContainerView/index.tsx +4 -1
  73. package/Components/MasterCell/DefaultComponents/Image/Image.ios.tsx +10 -15
  74. package/Components/MasterCell/DefaultComponents/Image/hooks/useImage.ts +11 -7
  75. package/Components/MasterCell/DefaultComponents/ImageBorderContainer/__tests__/index.test.ts +93 -0
  76. package/Components/MasterCell/DefaultComponents/LiveImage/index.tsx +2 -2
  77. package/Components/MasterCell/DefaultComponents/SecondaryImage/__tests__/__snapshots__/Image.test.tsx.snap +3 -3
  78. package/Components/MasterCell/DefaultComponents/SecondaryImage/utils.ts +1 -1
  79. package/Components/MasterCell/DefaultComponents/__tests__/image.test.js +1 -1
  80. package/Components/MasterCell/DefaultComponents/tv/TvActionButtons/const.ts +3 -0
  81. package/Components/MasterCell/DefaultComponents/tv/TvActionButtons/index.ts +6 -6
  82. package/Components/MasterCell/SharedUI/CollapsibleTextContainer/__tests__/__snapshots__/index.test.tsx.snap +1 -1
  83. package/Components/MasterCell/SharedUI/ProgressBar/hooks/useFillInPercent.ts +2 -8
  84. package/Components/MasterCell/__tests__/__snapshots__/dataAdapter.test.js.snap +180 -180
  85. package/Components/MasterCell/__tests__/__snapshots__/elementMapper.test.js.snap +11 -19
  86. package/Components/MasterCell/__tests__/__snapshots__/masterCell.test.js.snap +6 -235
  87. package/Components/MasterCell/__tests__/elementMapper.test.js +18 -5
  88. package/Components/MasterCell/__tests__/masterCell.test.js +26 -26
  89. package/Components/MasterCell/hooks/useAsyncRendering/MasterCellAsyncRenderManager.ts +2 -2
  90. package/Components/MasterCell/hooks/useAsyncRendering/index.ts +2 -2
  91. package/Components/MasterCell/utils/behaviorProvider.ts +136 -0
  92. package/Components/MasterCell/utils/index.ts +9 -135
  93. package/Components/ModalComponent/BottomSheetModalContent.tsx +66 -54
  94. package/Components/ModalComponent/Button/Item.tsx +6 -5
  95. package/Components/ModalComponent/Button/assets.ts +1 -1
  96. package/Components/ModalComponent/Button/index.tsx +45 -62
  97. package/Components/ModalComponent/Header/index.tsx +12 -11
  98. package/Components/ModalComponent/utils.ts +55 -7
  99. package/Components/OfflineHandler/NotificationView/NotificationView.lg.tsx +2 -2
  100. package/Components/OfflineHandler/NotificationView/NotificationView.samsung.tsx +2 -2
  101. package/Components/OfflineHandler/NotificationView/__tests__/index.test.tsx +0 -5
  102. package/Components/OfflineHandler/__tests__/__snapshots__/index.test.tsx.snap +7 -7
  103. package/Components/OfflineHandler/__tests__/index.test.tsx +28 -25
  104. package/Components/OfflineHandler/utils/index.ts +1 -1
  105. package/Components/PlayerContainer/PlayerContainer.tsx +76 -66
  106. package/Components/PlayerContainer/PlayerContainerContext.tsx +9 -0
  107. package/Components/PlayerContainer/ProgramInfo/index.tsx +2 -2
  108. package/Components/PlayerImageBackground/index.tsx +2 -2
  109. package/Components/River/ComponentsMap/ComponentsMap.tsx +49 -68
  110. package/Components/River/ComponentsMap/hooks/useLoadingState.ts +78 -51
  111. package/Components/River/RefreshControl.tsx +1 -1
  112. package/Components/River/RiverFooter.tsx +39 -9
  113. package/Components/River/RiverItem.tsx +44 -4
  114. package/Components/River/TV/index.tsx +6 -1
  115. package/Components/River/__tests__/__snapshots__/componentsMap.test.js.snap +115 -46
  116. package/Components/River/__tests__/__snapshots__/river.test.js.snap +21 -83
  117. package/Components/River/__tests__/componentsMap.test.js +64 -17
  118. package/Components/River/__tests__/river.test.js +75 -40
  119. package/Components/RouteManager/TestId.tsx +1 -5
  120. package/Components/RouteManager/__tests__/__snapshots__/routeManager.test.js.snap +11 -5
  121. package/Components/RouteManager/__tests__/routeManager.test.js +29 -14
  122. package/Components/RouteManager/__tests__/testId.test.js +4 -6
  123. package/Components/Screen/TV/__tests__/index.web.test.tsx +26 -0
  124. package/Components/Screen/TV/index.web.tsx +5 -6
  125. package/Components/Screen/__tests__/Screen.test.tsx +53 -31
  126. package/Components/Screen/__tests__/__snapshots__/Screen.test.tsx.snap +6 -6
  127. package/Components/Screen/hooks.ts +53 -0
  128. package/Components/Screen/index.tsx +16 -42
  129. package/Components/ScreenResolver/__tests__/screenResolver.test.js +95 -70
  130. package/Components/Tabs/Tab.tsx +12 -9
  131. package/Components/TextInputTv/__tests__/TextInputTv.test.js +42 -42
  132. package/Components/TextInputTv/__tests__/__snapshots__/TextInputTv.test.js.snap +7 -0
  133. package/Components/TextInputTv/index.tsx +6 -5
  134. package/Components/TopMarginApplicator/TopMarginApplicator.tsx +2 -3
  135. package/Components/Touchable/__tests__/__snapshots__/touchable.test.tsx.snap +2 -2
  136. package/Components/TrackedView/index.tsx +1 -0
  137. package/Components/Transitioner/AnimationManager.js +15 -15
  138. package/Components/Transitioner/Scene.tsx +53 -24
  139. package/Components/Transitioner/Transitioner.tsx +3 -3
  140. package/Components/Transitioner/__tests__/Scene.test.js +25 -14
  141. package/Components/Transitioner/__tests__/__snapshots__/AnimationManager.test.js.snap +26 -26
  142. package/Components/Transitioner/__tests__/__snapshots__/Scene.test.js.snap +10 -50
  143. package/Components/Transitioner/__tests__/__snapshots__/config.test.js.snap +20 -20
  144. package/Components/Transitioner/__tests__/__snapshots__/transitioner.test.js.snap +4 -4
  145. package/Components/Transitioner/__tests__/transitioner.test.js +13 -4
  146. package/Components/Transitioner/index.js +8 -4
  147. package/Components/VideoLive/LiveImageManager.ts +27 -1
  148. package/Components/VideoLive/PlayerLiveImageComponent.tsx +36 -24
  149. package/Components/VideoLive/__tests__/PlayerLiveImageComponent.test.tsx +63 -8
  150. package/Components/VideoLive/__tests__/__snapshots__/PlayerLiveImageComponent.test.tsx.snap +6 -10
  151. package/Components/VideoModal/ModalAnimation/AnimatedPlayerModalWrapper.tsx +1 -1
  152. package/Components/VideoModal/ModalAnimation/AnimatedScrollModal.tsx +51 -31
  153. package/Components/VideoModal/ModalAnimation/AnimatedVideoPlayerComponent.tsx +8 -4
  154. package/Components/VideoModal/ModalAnimation/AnimationComponent.tsx +48 -23
  155. package/Components/VideoModal/ModalAnimation/ModalAnimationContext.tsx +16 -15
  156. package/Components/VideoModal/ModalAnimation/__tests__/getMoveUpValue.test.ts +108 -0
  157. package/Components/VideoModal/ModalAnimation/const.ts +5 -0
  158. package/Components/VideoModal/ModalAnimation/index.ts +4 -1
  159. package/Components/VideoModal/ModalAnimation/useModalAnimationContext.ts +6 -0
  160. package/Components/VideoModal/ModalAnimation/utils.ts +32 -2
  161. package/Components/VideoModal/OpaqueLayer.tsx +33 -0
  162. package/Components/VideoModal/PlayerDetails.tsx +18 -10
  163. package/Components/VideoModal/PlayerWrapper.tsx +51 -57
  164. package/Components/VideoModal/VideoModal.tsx +17 -11
  165. package/Components/VideoModal/__tests__/PlayerDetails.test.tsx +5 -2
  166. package/Components/VideoModal/__tests__/PlayerWrapper.test.tsx +13 -10
  167. package/Components/VideoModal/__tests__/__snapshots__/PlayerDetails.test.tsx.snap +2 -40
  168. package/Components/VideoModal/__tests__/__snapshots__/PlayerWrapper.test.tsx.snap +74 -104
  169. package/Components/VideoModal/hooks/__tests__/useDelayedPlayerDetails.test.ts +51 -0
  170. package/Components/VideoModal/hooks/index.ts +7 -0
  171. package/Components/VideoModal/hooks/useDelayedPlayerDetails.ts +38 -0
  172. package/Components/VideoModal/hooks/utils/__tests__/showDetails.test.ts +91 -0
  173. package/Components/VideoModal/hooks/utils/index.ts +33 -0
  174. package/Components/VideoModal/utils.ts +6 -9
  175. package/Components/Viewport/ViewportAware/__tests__/__snapshots__/viewportAware.test.js.snap +24 -36
  176. package/Components/Viewport/ViewportAware/__tests__/viewportAware.test.js +12 -18
  177. package/Components/Viewport/ViewportTracker/__tests__/__snapshots__/viewportTracker.test.js.snap +1 -1
  178. package/Components/Viewport/__tests__/utils.test.js +5 -4
  179. package/Components/ZappUIComponent/Placeholder.tsx +3 -1
  180. package/Components/ZappUIComponent/__tests__/{ZappUIComponent.test.js → ZappUIComponent.test.tsx} +26 -10
  181. package/Components/ZappUIComponent/index.tsx +4 -17
  182. package/Components/default-cell-renderer/__tests__/defaultCellRenderer.test.tsx +20 -17
  183. package/Components/default-cell-renderer/viewTrees/tv/DefaultCell/__tests__/DefaultCell.test.tsx +15 -11
  184. package/Contexts/ComponentsMapOffsetContext/index.tsx +49 -0
  185. package/Contexts/ConfigutaionContext/__tests__/__snapshots__/ConfigurationProvider.test.tsx.snap +1 -1
  186. package/Contexts/FocusableGroupContext/withFocusableContext.tsx +4 -10
  187. package/Contexts/HeaderOffsetContext/index.tsx +4 -6
  188. package/Contexts/ScreenContext/index.tsx +6 -12
  189. package/Contexts/ScreenLayoutContext/index.tsx +5 -3
  190. package/Decorators/Navigator/__tests__/navigator.test.js +16 -16
  191. package/Decorators/Navigator/index.tsx +1 -1
  192. package/Decorators/RiverFeedLoader/__tests__/__snapshots__/riverFeedLoader.test.tsx.snap +77 -77
  193. package/Decorators/RiverFeedLoader/__tests__/riverFeedLoader.test.tsx +34 -39
  194. package/Decorators/RiverFeedLoader/__tests__/utils.test.ts +0 -9
  195. package/Decorators/RiverFeedLoader/index.tsx +1 -1
  196. package/Decorators/RiverFeedLoader/utils/getDatasourceUrl.ts +39 -0
  197. package/Decorators/RiverFeedLoader/utils/index.ts +29 -0
  198. package/Decorators/RiverFeedLoader/utils/usePipesContexts.ts +40 -0
  199. package/Decorators/RiverResolver/__tests__/riverResolver.test.tsx +27 -27
  200. package/Decorators/RiverResolver/index.tsx +6 -8
  201. package/Decorators/ZappPipesDataConnector/__tests__/Hero.js +1 -1
  202. package/Decorators/ZappPipesDataConnector/__tests__/zappPipesDataConnector.test.js +29 -22
  203. package/Decorators/ZappPipesDataConnector/index.tsx +7 -3
  204. package/package.json +13 -11
  205. package/tsconfig.json +2 -3
  206. package/.babelrc +0 -8
  207. package/Components/AudioPlayer/Artwork.tsx +0 -35
  208. package/Components/AudioPlayer/__tests__/__snapshots__/audioPlayer.test.js.snap +0 -123
  209. package/Components/AudioPlayer/__tests__/__snapshots__/audioPlayerLayout.test.js.snap +0 -50
  210. package/Components/AudioPlayer/__tests__/audioPlayerLayout.test.js +0 -27
  211. package/Components/AudioPlayer/index.ts +0 -1
  212. package/Components/Cell/CellStyles/FallbackCellStyle/index.js +0 -157
  213. package/Components/Cell/CellStyles/Hero/index.js +0 -111
  214. package/Components/Cell/CellStyles/ScreenSelector/index.js +0 -68
  215. package/Components/Cell/CellStyles/cellStylesResolver.ts +0 -19
  216. package/Components/Cell/CellStyles/colors.js +0 -40
  217. package/Components/Cell/CellStyles/index.js +0 -15
  218. package/Components/CellRendererResolver/__tests__/__snapshots__/cellRendererResolver.test.js.snap +0 -53
  219. package/Components/RouteManager/__tests__/__snapshots__/testId.test.js.snap +0 -17
  220. package/Components/ScreenResolver/__tests__/__snapshots__/screenResolver.test.js.snap +0 -17
  221. package/Components/ZappUIComponent/__tests__/__snapshots__/ZappUIComponent.test.js.snap +0 -91
  222. package/Components/default-cell-renderer/__tests__/__snapshots__/defaultCellRenderer.test.tsx.snap +0 -338
  223. package/Decorators/Navigator/__tests__/__snapshots__/navigator.test.js.snap +0 -18
  224. package/Decorators/RiverFeedLoader/utils.ts +0 -100
  225. package/Decorators/RiverResolver/__tests__/__snapshots__/riverResolver.test.tsx.snap +0 -28
  226. /package/Components/AudioPlayer/{Channel.tsx → tv/Channel.tsx} +0 -0
@@ -1,4 +1,7 @@
1
- jest.mock("react-router-native", () => require("./react-router-native-mock"));
1
+ import React from "react";
2
+ import { View } from "react-native";
3
+ import { renderWithProviders } from "@applicaster/zapp-react-native-utils/testUtils";
4
+ import { withNavigator } from "..";
2
5
 
3
6
  const navigatorMock = {
4
7
  push: jest.fn(),
@@ -12,27 +15,24 @@ const navigatorMock = {
12
15
 
13
16
  const mocked_context = navigatorMock;
14
17
 
15
- jest.mock("react", () => {
16
- return {
17
- ...jest.requireActual("react"),
18
- useContext: jest.fn(() => mocked_context),
19
- };
20
- });
21
-
22
- import { View } from "react-native";
23
- import { shallow } from "enzyme";
24
-
25
- const React = require("react");
26
- const { withNavigator } = require("../index");
18
+ jest.mock(
19
+ "@applicaster/zapp-react-native-utils/reactHooks/navigation/useNavigation",
20
+ () => {
21
+ return {
22
+ useNavigation: jest.fn(() => mocked_context),
23
+ };
24
+ }
25
+ );
27
26
 
28
27
  describe("withNavigator Decorator", () => {
29
28
  it("renders correctly", () => {
30
29
  const Component = () => <View />;
31
30
  const WrappedComponent = withNavigator(Component);
32
31
 
33
- const wrapper = shallow(<WrappedComponent someProp="foo" />);
32
+ const wrapper = renderWithProviders(<WrappedComponent someProp="foo" />);
34
33
 
35
- expect(wrapper).toMatchSnapshot();
36
- expect(wrapper.prop("navigator")).toEqual(navigatorMock);
34
+ expect(wrapper.UNSAFE_getByType(Component).props.navigator).toEqual(
35
+ navigatorMock
36
+ );
37
37
  });
38
38
  });
@@ -1,6 +1,6 @@
1
1
  import * as React from "react";
2
2
 
3
- import { useNavigation } from "@applicaster/zapp-react-native-utils/reactHooks/navigation";
3
+ import { useNavigation } from "@applicaster/zapp-react-native-utils/reactHooks/navigation/useNavigation";
4
4
  import { deprecationWarningWithIdentifier } from "@applicaster/zapp-react-native-utils/appUtils";
5
5
 
6
6
  export function withNavigator(Component) {
@@ -4,206 +4,206 @@ exports[`WithRiverFeedLoader renders correctly 1`] = `
4
4
  <View
5
5
  dispatch={[MockFunction]}
6
6
  river={
7
- Object {
7
+ {
8
8
  "id": "A1234",
9
- "ui_components": Array [
10
- Object {
11
- "data": Object {
9
+ "ui_components": [
10
+ {
11
+ "data": {
12
12
  "source": "http://datasource0",
13
13
  },
14
- "rules": Object {
14
+ "rules": {
15
15
  "clear_cache_on_reload": false,
16
16
  },
17
17
  },
18
- Object {
19
- "data": Object {
18
+ {
19
+ "data": {
20
20
  "source": "http://datasource1",
21
21
  },
22
- "rules": Object {
22
+ "rules": {
23
23
  "clear_cache_on_reload": false,
24
24
  },
25
25
  },
26
- Object {
27
- "data": Object {
26
+ {
27
+ "data": {
28
28
  "source": "http://datasource2",
29
29
  },
30
- "rules": Object {
30
+ "rules": {
31
31
  "clear_cache_on_reload": false,
32
32
  },
33
33
  },
34
- Object {
35
- "data": Object {
34
+ {
35
+ "data": {
36
36
  "source": "http://datasource3",
37
37
  },
38
- "rules": Object {
38
+ "rules": {
39
39
  "clear_cache_on_reload": false,
40
40
  },
41
41
  },
42
- Object {
43
- "data": Object {
42
+ {
43
+ "data": {
44
44
  "source": "http://datasource4",
45
45
  },
46
- "rules": Object {
46
+ "rules": {
47
47
  "clear_cache_on_reload": false,
48
48
  },
49
49
  },
50
- Object {
51
- "data": Object {
50
+ {
51
+ "data": {
52
52
  "source": "http://datasource5",
53
53
  },
54
- "rules": Object {
54
+ "rules": {
55
55
  "clear_cache_on_reload": false,
56
56
  },
57
57
  },
58
- Object {
59
- "data": Object {
58
+ {
59
+ "data": {
60
60
  "source": "http://datasource6",
61
61
  },
62
- "rules": Object {
62
+ "rules": {
63
63
  "clear_cache_on_reload": false,
64
64
  },
65
65
  },
66
- Object {
67
- "data": Object {
66
+ {
67
+ "data": {
68
68
  "source": "http://datasource7",
69
69
  },
70
- "rules": Object {
70
+ "rules": {
71
71
  "clear_cache_on_reload": false,
72
72
  },
73
73
  },
74
- Object {
75
- "data": Object {
74
+ {
75
+ "data": {
76
76
  "source": "http://datasource8",
77
77
  },
78
- "rules": Object {
78
+ "rules": {
79
79
  "clear_cache_on_reload": false,
80
80
  },
81
81
  },
82
- Object {
83
- "data": Object {
82
+ {
83
+ "data": {
84
84
  "source": "http://datasource9",
85
85
  },
86
- "rules": Object {
86
+ "rules": {
87
87
  "clear_cache_on_reload": false,
88
88
  },
89
89
  },
90
- Object {
91
- "data": Object {
90
+ {
91
+ "data": {
92
92
  "source": "http://datasource10",
93
93
  },
94
- "rules": Object {
94
+ "rules": {
95
95
  "clear_cache_on_reload": false,
96
96
  },
97
97
  },
98
- Object {
99
- "data": Object {
98
+ {
99
+ "data": {
100
100
  "source": "http://datasource11",
101
101
  },
102
- "rules": Object {
102
+ "rules": {
103
103
  "clear_cache_on_reload": false,
104
104
  },
105
105
  },
106
- Object {
107
- "data": Object {
106
+ {
107
+ "data": {
108
108
  "source": "http://datasource12",
109
109
  },
110
- "rules": Object {
110
+ "rules": {
111
111
  "clear_cache_on_reload": true,
112
112
  },
113
113
  },
114
- Object {
115
- "data": Object {
114
+ {
115
+ "data": {
116
116
  "source": "http://datasource13",
117
117
  },
118
- "rules": Object {
118
+ "rules": {
119
119
  "clear_cache_on_reload": false,
120
120
  },
121
121
  },
122
- Object {
123
- "data": Object {
122
+ {
123
+ "data": {
124
124
  "source": "http://datasource14",
125
125
  },
126
- "rules": Object {
126
+ "rules": {
127
127
  "clear_cache_on_reload": false,
128
128
  },
129
129
  },
130
- Object {
131
- "data": Object {
130
+ {
131
+ "data": {
132
132
  "source": "http://datasource15",
133
133
  },
134
- "rules": Object {
134
+ "rules": {
135
135
  "clear_cache_on_reload": false,
136
136
  },
137
137
  },
138
- Object {
139
- "data": Object {
138
+ {
139
+ "data": {
140
140
  "source": "http://datasource16",
141
141
  },
142
- "rules": Object {
142
+ "rules": {
143
143
  "clear_cache_on_reload": false,
144
144
  },
145
145
  },
146
- Object {
147
- "data": Object {
146
+ {
147
+ "data": {
148
148
  "source": "http://datasource17",
149
149
  },
150
- "rules": Object {
150
+ "rules": {
151
151
  "clear_cache_on_reload": false,
152
152
  },
153
153
  },
154
- Object {
155
- "data": Object {
154
+ {
155
+ "data": {
156
156
  "source": "http://datasource18",
157
157
  },
158
- "rules": Object {
158
+ "rules": {
159
159
  "clear_cache_on_reload": false,
160
160
  },
161
161
  },
162
- Object {
163
- "data": Object {
162
+ {
163
+ "data": {
164
164
  "source": "http://datasource19",
165
165
  },
166
- "rules": Object {
166
+ "rules": {
167
167
  "clear_cache_on_reload": false,
168
168
  },
169
169
  },
170
- Object {
171
- "data": Object {
170
+ {
171
+ "data": {
172
172
  "source": "http://datasource20",
173
173
  },
174
- "rules": Object {
174
+ "rules": {
175
175
  "clear_cache_on_reload": true,
176
176
  },
177
177
  },
178
- Object {
179
- "data": Object {
178
+ {
179
+ "data": {
180
180
  "source": "http://datasource21",
181
181
  },
182
- "rules": Object {
182
+ "rules": {
183
183
  "clear_cache_on_reload": false,
184
184
  },
185
185
  },
186
- Object {
187
- "data": Object {
186
+ {
187
+ "data": {
188
188
  "source": "http://datasource22",
189
189
  },
190
- "rules": Object {
190
+ "rules": {
191
191
  "clear_cache_on_reload": false,
192
192
  },
193
193
  },
194
- Object {
195
- "data": Object {
194
+ {
195
+ "data": {
196
196
  "source": "http://datasource23",
197
197
  },
198
- "rules": Object {
198
+ "rules": {
199
199
  "clear_cache_on_reload": false,
200
200
  },
201
201
  },
202
- Object {
203
- "data": Object {
202
+ {
203
+ "data": {
204
204
  "source": "http://datasource24",
205
205
  },
206
- "rules": Object {
206
+ "rules": {
207
207
  "clear_cache_on_reload": false,
208
208
  },
209
209
  },
@@ -3,73 +3,68 @@ import * as R from "ramda";
3
3
  import { View } from "react-native";
4
4
  import { render } from "@testing-library/react-native";
5
5
 
6
- import {
7
- entryContext,
8
- navigator,
9
- river,
10
- riverDataSources,
11
- screenContext,
12
- screenData,
13
- searchContext,
14
- } from "./fixtures";
6
+ import * as mock_fixtures from "./fixtures";
15
7
 
16
- jest.mock("@applicaster/zapp-react-native-utils/reactHooks", () => ({
17
- useNavigation: jest.fn(() => navigator),
18
- useRoute: jest.fn(() => ({ screenData })),
19
- }));
8
+ const mockUsePipesContexts = () => ({
9
+ entry: mock_fixtures.entryContext,
10
+ screen: mock_fixtures.screenContext,
11
+ search: mock_fixtures.searchContext,
12
+ });
13
+
14
+ const mockGetDatasourceUrl = jest.fn(
15
+ R.curry((_, component) => component.data.source)
16
+ );
17
+
18
+ jest.mock(
19
+ "@applicaster/zapp-react-native-utils/reactHooks/navigation/useRoute",
20
+ () => ({
21
+ useRoute: jest.fn(() => ({ screenData: mock_fixtures.screenData })),
22
+ })
23
+ );
24
+
25
+ jest.mock(
26
+ "@applicaster/zapp-react-native-utils/reactHooks/navigation/useNavigation",
27
+ () => ({
28
+ useNavigation: jest.fn(() => mock_fixtures.navigator),
29
+ })
30
+ );
20
31
 
21
32
  jest.mock("../utils", () => ({
22
- DATASOURCE_CHUNKS: 10,
33
+ ...jest.requireActual("../utils"),
23
34
  loadDatasources: jest.fn(),
24
- getDatasourceUrl: jest.fn(R.curry((_, component) => component.data.source)),
25
- usePipesContexts: jest.fn(() => ({
26
- entryContext,
27
- searchContext,
28
- screenContext,
29
- })),
30
- ignoreComponentsWithClearCacheFlag: R.reject(
31
- R.pathEq(["rules", "clear_cache_on_reload"], true)
32
- ),
35
+ getDatasourceUrl: mockGetDatasourceUrl,
36
+ usePipesContexts: mockUsePipesContexts,
33
37
  }));
34
38
 
35
- const { WithRiverFeedLoader } = require("../index");
36
-
37
39
  const River = function (props) {
38
40
  return <View {...props} />;
39
41
  };
40
42
 
41
43
  const riverProps = {
42
- river,
44
+ river: mock_fixtures.river,
43
45
  dispatch: jest.fn(),
44
46
  };
45
47
 
46
- const DecoratedRiver = WithRiverFeedLoader(River);
47
-
48
48
  const { loadDatasources, getDatasourceUrl } = require("../utils");
49
49
 
50
- describe("WithRiverFeedLoader", () => {
51
- const getWrapper = () => render(<DecoratedRiver {...riverProps} />);
50
+ const { WithRiverFeedLoader } = require("..");
52
51
 
53
- beforeEach(() => {
54
- getDatasourceUrl.mockClear();
55
- loadDatasources.mockClear();
56
- });
52
+ describe("WithRiverFeedLoader", () => {
53
+ const DecoratedRiver = WithRiverFeedLoader(River);
54
+ const wrapper = render(<DecoratedRiver {...riverProps} />);
57
55
 
58
56
  it("renders correctly", () => {
59
- const wrapper = getWrapper();
60
57
  expect(wrapper.toJSON()).toMatchSnapshot();
61
58
  });
62
59
 
63
60
  it("collects the datasources in the screen and loads them", () => {
64
- getWrapper();
65
-
66
61
  expect(getDatasourceUrl).toHaveBeenCalledTimes(1);
67
62
  expect(loadDatasources).toHaveBeenCalledTimes(1);
68
63
 
69
64
  expect(loadDatasources).toHaveBeenNthCalledWith(
70
65
  1,
71
- riverDataSources,
72
- river.id,
66
+ mock_fixtures.riverDataSources,
67
+ mock_fixtures.river.id,
73
68
  riverProps.dispatch
74
69
  );
75
70
  });
@@ -14,7 +14,6 @@ jest.mock("@applicaster/zapp-react-native-redux/ZappPipes", () => ({
14
14
  }));
15
15
 
16
16
  const {
17
- DATASOURCE_CHUNKS,
18
17
  loadDatasources,
19
18
  riverIsCurrentRoute,
20
19
  getDatasourceUrl,
@@ -27,14 +26,6 @@ const {
27
26
 
28
27
  const dispatch = (value) => Promise.resolve(value);
29
28
 
30
- describe("DATASOURCE_CHUNKS", () => {
31
- const DEFAULT_DATASOURCE_CHUNKS = 10;
32
-
33
- it("has the correct value", () => {
34
- expect(DATASOURCE_CHUNKS).toBe(DEFAULT_DATASOURCE_CHUNKS);
35
- });
36
- });
37
-
38
29
  describe("loadDataSource", () => {
39
30
  it("calls loadPipesData for each provided urls", async () => {
40
31
  const urls = [
@@ -2,7 +2,7 @@ import React, { ComponentClass, FC, useEffect } from "react";
2
2
  import * as R from "ramda";
3
3
  import { DispatchProp } from "react-redux";
4
4
 
5
- import { useRoute } from "@applicaster/zapp-react-native-utils/reactHooks";
5
+ import { useRoute } from "@applicaster/zapp-react-native-utils/reactHooks/navigation/useRoute";
6
6
 
7
7
  import { mapAndSplit } from "@applicaster/zapp-react-native-utils/arrayUtils";
8
8
 
@@ -0,0 +1,39 @@
1
+ import * as R from "ramda";
2
+
3
+ import {
4
+ getInflatedDataSourceUrl,
5
+ getSearchContext,
6
+ } from "@applicaster/zapp-react-native-utils/reactHooks";
7
+
8
+ import { ZappPipesEntryContext } from "../../../Contexts";
9
+
10
+ export const getDatasourceUrl: (
11
+ contexts: {
12
+ screenData?: Record<string, any>;
13
+ entryContext: ReturnType<
14
+ typeof ZappPipesEntryContext.useZappPipesContext
15
+ >[0];
16
+ searchContext: string;
17
+ screenContext: ZappRiver;
18
+ },
19
+ component?: ZappUIComponent
20
+ ) => string | null = R.curry(
21
+ (
22
+ { screenData, entryContext, searchContext, screenContext },
23
+ component: ZappUIComponent
24
+ ) => {
25
+ const { source, mapping } = R.propOr({}, ["data"], component);
26
+
27
+ if (mapping) {
28
+ const contexts = {
29
+ entry: entryContext,
30
+ screen: screenContext || screenData,
31
+ search: getSearchContext(searchContext, mapping),
32
+ };
33
+
34
+ return getInflatedDataSourceUrl({ source, mapping, contexts });
35
+ }
36
+
37
+ return source;
38
+ }
39
+ );
@@ -0,0 +1,29 @@
1
+ import * as R from "ramda";
2
+ import { loadPipesData } from "@applicaster/zapp-react-native-redux/ZappPipes";
3
+
4
+ import {
5
+ mapPromises,
6
+ reducePromises,
7
+ } from "@applicaster/zapp-react-native-utils/arrayUtils";
8
+
9
+ export { riverIsCurrentRoute, usePipesContexts } from "./usePipesContexts";
10
+
11
+ export { getDatasourceUrl } from "./getDatasourceUrl";
12
+
13
+ export const DATASOURCE_CHUNKS = 10;
14
+
15
+ export async function loadDatasources(urls: string[][], riverId, dispatch) {
16
+ return reducePromises<string, void>(
17
+ mapPromises<string, void>((url) => {
18
+ if (url) {
19
+ return dispatch(loadPipesData(url, { riverId }));
20
+ }
21
+ }),
22
+ undefined,
23
+ urls
24
+ );
25
+ }
26
+
27
+ export const ignoreComponentsWithClearCacheFlag = R.reject(
28
+ R.pathEq(["rules", "clear_cache_on_reload"], true)
29
+ );
@@ -0,0 +1,40 @@
1
+ import * as R from "ramda";
2
+
3
+ import {
4
+ ZappPipesEntryContext,
5
+ ZappPipesScreenContext,
6
+ ZappPipesSearchContext,
7
+ } from "../../../Contexts";
8
+
9
+ export function riverIsCurrentRoute(riverId, route) {
10
+ const routeRiverId = R.compose(R.last, R.split("/"))(route);
11
+
12
+ return typeof riverId === "undefined" || routeRiverId === riverId;
13
+ }
14
+
15
+ export function usePipesContexts(
16
+ riverId: string,
17
+ route: string
18
+ ): {
19
+ entryContext: ReturnType<typeof ZappPipesEntryContext.useZappPipesContext>[0];
20
+ searchContext: string;
21
+ screenContext: ZappRiver;
22
+ } {
23
+ const isNestedScreen = !riverIsCurrentRoute(riverId, route);
24
+
25
+ const routeForEntry = isNestedScreen ? `${route}/river/${riverId}` : route;
26
+
27
+ const [entryContext] = ZappPipesEntryContext.useZappPipesContext(
28
+ routeForEntry,
29
+ isNestedScreen
30
+ );
31
+
32
+ const [searchContext] = ZappPipesSearchContext.useZappPipesContext();
33
+ const [screenContext] = ZappPipesScreenContext.useZappPipesContext();
34
+
35
+ return {
36
+ entryContext,
37
+ searchContext,
38
+ screenContext,
39
+ };
40
+ }
@@ -1,8 +1,8 @@
1
1
  import React from "react";
2
- import { shallow } from "enzyme";
3
2
  import { View } from "react-native";
4
- import { shallowToJson } from "enzyme-to-json";
5
- import * as navigationHooks from "@applicaster/zapp-react-native-utils/reactHooks/navigation";
3
+ import { renderWithProviders } from "@applicaster/zapp-react-native-utils/testUtils";
4
+
5
+ import { withRiver } from "../";
6
6
 
7
7
  const rivers = {
8
8
  A123: {
@@ -13,38 +13,38 @@ const rivers = {
13
13
  },
14
14
  };
15
15
 
16
- jest.doMock("@applicaster/zapp-react-native-redux/hooks", () => ({
17
- usePickFromState: jest.fn(() => ({ rivers })),
18
- }));
19
-
20
- jest.mock("@applicaster/zapp-react-native-utils/reactHooks/layout", () => ({
21
- useLayoutVersion: jest.fn(() => true),
22
- }));
23
-
24
- jest.spyOn(navigationHooks, "usePathname").mockReturnValue("/home");
25
-
26
- // mocks useNavigator to return currentRoute: "/home"
27
- jest.mock("@applicaster/zapp-react-native-utils/reactHooks", () => ({
28
- useNavigation: jest.fn(() => ({ currentRoute: "/home" })),
29
- useRoute: jest.fn(() => ({ pathname: "/home" })),
30
- }));
16
+ jest.doMock(
17
+ "@applicaster/zapp-react-native-redux/hooks/usePickFromState",
18
+ () => ({
19
+ usePickFromState: jest.fn(() => ({ rivers })),
20
+ })
21
+ );
31
22
 
32
- const { withRiver } = require("../index");
23
+ jest.doMock(
24
+ "@applicaster/zapp-react-native-utils/reactHooks/navigation/usePathname",
25
+ () => ({
26
+ usePathname: jest.fn(() => "/home"),
27
+ })
28
+ );
33
29
 
34
- const TestComponent = jest.fn(() => <View />);
30
+ const TestComponent = jest.fn((props) => <View {...props} />);
35
31
 
36
32
  describe("withRiver HoC", () => {
37
33
  const WrappedComponent = withRiver(TestComponent);
38
34
 
39
- const wrapper = shallow(
40
- <WrappedComponent screenId="A123" rivers={rivers} otherProp="otherProp" />
35
+ const wrapper = renderWithProviders(
36
+ <WrappedComponent
37
+ testID="test-view"
38
+ screenId="A123"
39
+ otherProp="otherProp"
40
+ />,
41
+ { rivers: rivers }
41
42
  );
42
43
 
43
- it("renders correctly", () => {
44
- expect(shallowToJson(wrapper)).toMatchSnapshot();
45
- });
46
-
47
44
  it("populates the river prop", () => {
48
- expect(wrapper.find(TestComponent).prop("river")).toEqual(rivers.A123);
45
+ const targetView = wrapper.getByTestId("test-view");
46
+
47
+ expect(targetView.props.river).toEqual(rivers.A123);
48
+ expect(targetView.props.screenData).toEqual(rivers.A123);
49
49
  });
50
50
  });