@applicaster/zapp-react-native-ui-components 14.0.0-rc.8 → 15.0.0-rc.1

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 (163) hide show
  1. package/Components/AnimatedInOut/index.tsx +5 -3
  2. package/Components/AudioPlayer/index.tsx +15 -0
  3. package/Components/AudioPlayer/mobile/Layout.tsx +66 -0
  4. package/Components/AudioPlayer/{__tests__/__snapshots__/audioPlayer.test.js.snap → mobile/__tests__/__snapshots__/audioPlayerMobileLayout.test.js.snap} +2 -2
  5. package/Components/AudioPlayer/mobile/__tests__/audioPlayerMobileLayout.test.js +18 -0
  6. package/Components/AudioPlayer/mobile/index.tsx +18 -0
  7. package/Components/AudioPlayer/{Artwork.tsx → tv/Artwork.tsx} +3 -2
  8. package/Components/AudioPlayer/{Channel.tsx → tv/Channel.tsx} +7 -7
  9. package/Components/AudioPlayer/tv/Layout.tsx +168 -0
  10. package/Components/AudioPlayer/{Runtime.tsx → tv/Runtime.tsx} +7 -1
  11. package/Components/AudioPlayer/{Summary.tsx → tv/Summary.tsx} +6 -2
  12. package/Components/AudioPlayer/{Title.tsx → tv/Title.tsx} +6 -2
  13. package/Components/AudioPlayer/{__tests__ → tv/__tests__}/__snapshots__/Runtime.test.js.snap +2 -2
  14. package/Components/AudioPlayer/tv/__tests__/__snapshots__/audioPlayer.test.js.snap +164 -0
  15. package/Components/AudioPlayer/tv/__tests__/__snapshots__/channel.test.js.snap +19 -0
  16. package/Components/AudioPlayer/{__tests__ → tv/__tests__}/__snapshots__/summary.test.js.snap +1 -2
  17. package/Components/AudioPlayer/{__tests__ → tv/__tests__}/__snapshots__/title.test.js.snap +1 -2
  18. package/Components/AudioPlayer/{__tests__ → tv/__tests__}/audioPlayer.test.js +7 -3
  19. package/Components/AudioPlayer/{helpers.tsx → tv/helpers.tsx} +11 -5
  20. package/Components/AudioPlayer/{AudioPlayer.tsx → tv/index.tsx} +17 -58
  21. package/Components/AudioPlayer/types.ts +40 -0
  22. package/Components/BaseFocusable/index.tsx +23 -12
  23. package/Components/Cell/Cell.tsx +91 -64
  24. package/Components/Cell/CellWithFocusable.tsx +3 -0
  25. package/Components/Cell/__tests__/CellWIthFocusable.test.js +3 -2
  26. package/Components/Cell/index.js +7 -3
  27. package/Components/ComponentResolver/index.ts +1 -1
  28. package/Components/FeedLoader/FeedLoader.tsx +7 -16
  29. package/Components/FeedLoader/FeedLoaderHOC.tsx +21 -0
  30. package/Components/FeedLoader/index.js +2 -8
  31. package/Components/Focusable/Focusable.tsx +12 -3
  32. package/Components/Focusable/FocusableTvOS.tsx +5 -5
  33. package/Components/Focusable/FocusableiOS.tsx +2 -2
  34. package/Components/Focusable/Touchable.tsx +5 -3
  35. package/Components/Focusable/__tests__/index.android.test.tsx +3 -0
  36. package/Components/Focusable/index.android.tsx +19 -11
  37. package/Components/Focusable/index.tsx +1 -1
  38. package/Components/FocusableGroup/FocusableTvOS.tsx +1 -1
  39. package/Components/FocusableList/FocusableItem.tsx +4 -3
  40. package/Components/FocusableList/FocusableListItemWrapper.tsx +2 -1
  41. package/Components/FocusableList/hooks/useCellState.android.ts +13 -3
  42. package/Components/FocusableList/index.tsx +20 -9
  43. package/Components/FreezeWithCallback/__tests__/index.test.tsx +67 -43
  44. package/Components/GeneralContentScreen/utils/__tests__/useCurationAPI.test.js +42 -59
  45. package/Components/GeneralContentScreen/utils/useCurationAPI.ts +13 -10
  46. package/Components/HandlePlayable/HandlePlayable.tsx +25 -9
  47. package/Components/HookRenderer/HookRenderer.tsx +5 -1
  48. package/Components/Layout/TV/LayoutBackground.tsx +1 -1
  49. package/Components/Layout/TV/__tests__/index.test.tsx +0 -1
  50. package/Components/MasterCell/DefaultComponents/ActionButton.tsx +6 -2
  51. package/Components/MasterCell/DefaultComponents/Button.tsx +1 -1
  52. package/Components/MasterCell/DefaultComponents/FocusableView/index.tsx +4 -39
  53. package/Components/MasterCell/DefaultComponents/Image/hoc/withDimensions.tsx +1 -1
  54. package/Components/MasterCell/DefaultComponents/ImageContainer/index.tsx +1 -1
  55. package/Components/MasterCell/DefaultComponents/SecondaryImage/Image.tsx +65 -17
  56. package/Components/MasterCell/DefaultComponents/SecondaryImage/__tests__/Image.test.tsx +21 -3
  57. package/Components/MasterCell/DefaultComponents/SecondaryImage/__tests__/__snapshots__/Image.test.tsx.snap +6 -3
  58. package/Components/MasterCell/DefaultComponents/Text/index.tsx +26 -6
  59. package/Components/MasterCell/DefaultComponents/__tests__/image.test.js +10 -10
  60. package/Components/MasterCell/DefaultComponents/__tests__/text.test.tsx +18 -18
  61. package/Components/MasterCell/SharedUI/CollapsibleTextContainer/__tests__/index.test.tsx +10 -10
  62. package/Components/MasterCell/elementMapper.tsx +1 -2
  63. package/Components/MasterCell/index.tsx +1 -1
  64. package/Components/MasterCell/utils/behaviorProvider.ts +82 -14
  65. package/Components/MasterCell/utils/index.ts +11 -5
  66. package/Components/OfflineHandler/NotificationView/__tests__/index.test.tsx +13 -18
  67. package/Components/OfflineHandler/__tests__/__snapshots__/index.test.tsx.snap +9 -0
  68. package/Components/OfflineHandler/__tests__/index.test.tsx +26 -35
  69. package/Components/PlayerContainer/ErrorDisplay/index.ts +1 -1
  70. package/Components/PlayerContainer/PlayerContainer.tsx +46 -33
  71. package/Components/PlayerContainer/ProgramInfo/index.tsx +1 -1
  72. package/Components/PlayerContainer/index.ts +1 -1
  73. package/Components/PlayerImageBackground/index.tsx +1 -1
  74. package/Components/River/ComponentsMap/ComponentsMap.tsx +1 -6
  75. package/Components/River/ComponentsMap/hooks/__tests__/useLoadingState.test.ts +378 -0
  76. package/Components/River/ComponentsMap/hooks/useLoadingState.ts +2 -2
  77. package/Components/River/RefreshControl.tsx +11 -17
  78. package/Components/River/RiverItem.tsx +11 -8
  79. package/Components/River/TV/River.tsx +2 -17
  80. package/Components/River/TV/index.tsx +3 -1
  81. package/Components/River/TV/withPipesV1DataLoader.tsx +43 -0
  82. package/Components/River/TV/withRiverDataLoader.tsx +17 -0
  83. package/Components/River/TV/withTVEventHandler.tsx +1 -1
  84. package/Components/River/__tests__/__snapshots__/componentsMap.test.js.snap +2 -6
  85. package/Components/River/__tests__/river.test.js +12 -26
  86. package/Components/River/index.tsx +1 -1
  87. package/Components/Screen/__tests__/Screen.test.tsx +28 -29
  88. package/Components/Screen/__tests__/navigationHandler.test.ts +133 -22
  89. package/Components/Screen/navigationHandler.ts +20 -2
  90. package/Components/ScreenResolver/index.tsx +15 -0
  91. package/Components/ScreenRevealManager/ScreenRevealManager.ts +76 -0
  92. package/Components/ScreenRevealManager/__tests__/ScreenRevealManager.test.ts +107 -0
  93. package/Components/ScreenRevealManager/__tests__/withScreenRevealManager.test.tsx +96 -0
  94. package/Components/ScreenRevealManager/index.ts +1 -0
  95. package/Components/ScreenRevealManager/withScreenRevealManager.tsx +79 -0
  96. package/Components/Tabs/TV/Tabs.android.tsx +1 -3
  97. package/Components/Tabs/Tabs.tsx +2 -3
  98. package/Components/TextInputTv/__tests__/__snapshots__/TextInputTv.test.js.snap +13 -0
  99. package/Components/TextInputTv/index.tsx +11 -0
  100. package/Components/Touchable/__tests__/__snapshots__/touchable.test.tsx.snap +34 -0
  101. package/Components/Touchable/__tests__/touchable.test.tsx +12 -17
  102. package/Components/Transitioner/__tests__/__snapshots__/Scene.test.js.snap +15 -9
  103. package/Components/VideoLive/animationUtils.ts +3 -3
  104. package/Components/VideoModal/ModalAnimation/AnimatedScrollModal.tsx +3 -9
  105. package/Components/VideoModal/ModalAnimation/AnimatedScrollModal.web.tsx +294 -0
  106. package/Components/VideoModal/ModalAnimation/AnimatedVideoPlayerComponent.web.tsx +93 -0
  107. package/Components/VideoModal/ModalAnimation/ModalAnimationContext.tsx +73 -29
  108. package/Components/VideoModal/PlayerDetails.tsx +24 -2
  109. package/Components/VideoModal/PlayerWrapper.tsx +26 -142
  110. package/Components/VideoModal/VideoModal.tsx +3 -17
  111. package/Components/VideoModal/__tests__/PlayerDetails.test.tsx +5 -5
  112. package/Components/VideoModal/__tests__/PlayerWrapper.test.tsx +1 -7
  113. package/Components/VideoModal/__tests__/__snapshots__/PlayerWrapper.test.tsx.snap +44 -180
  114. package/Components/VideoModal/hooks/__tests__/useDelayedPlayerDetails.test.ts +21 -51
  115. package/Components/VideoModal/hooks/index.ts +0 -2
  116. package/Components/VideoModal/hooks/useDelayedPlayerDetails.ts +15 -1
  117. package/Components/VideoModal/hooks/useModalSize.ts +18 -2
  118. package/Components/VideoModal/hooks/utils/__tests__/showDetails.test.ts +2 -2
  119. package/Components/VideoModal/hooks/utils/index.ts +4 -0
  120. package/Components/VideoModal/utils.ts +6 -0
  121. package/Components/Viewport/ViewportAware/__tests__/viewportAware.test.js +12 -16
  122. package/Components/Viewport/ViewportTracker/__tests__/viewportTracker.test.js +84 -24
  123. package/Components/Viewport/VisibilitySensor/VisibilitySensor.tsx +3 -3
  124. package/Components/default-cell-renderer/viewTrees/tv/DefaultCell/index.ts +3 -3
  125. package/Contexts/CellFocusedStateContext/index.tsx +27 -0
  126. package/Contexts/ConfigutaionContext/__tests__/ConfigurationProvider.test.tsx +3 -3
  127. package/Contexts/ScreenContext/index.tsx +46 -6
  128. package/Decorators/ConfigurationWrapper/__tests__/withConfigurationProvider.test.tsx +3 -3
  129. package/Decorators/ConfigurationWrapper/withConfigurationProvider.tsx +2 -2
  130. package/Decorators/RiverFeedLoader/__tests__/__snapshots__/riverFeedLoader.test.tsx.snap +221 -209
  131. package/Decorators/RiverFeedLoader/__tests__/riverFeedLoader.test.tsx +14 -16
  132. package/Decorators/RiverFeedLoader/__tests__/utils.test.ts +0 -20
  133. package/Decorators/RiverFeedLoader/index.tsx +22 -4
  134. package/Decorators/RiverFeedLoader/utils/index.ts +0 -18
  135. package/Decorators/RiverResolver/__tests__/riverResolver.test.tsx +3 -6
  136. package/Decorators/ZappPipesDataConnector/ResolverSelector.tsx +25 -0
  137. package/Decorators/ZappPipesDataConnector/__tests__/NullFeedResolver.test.tsx +78 -0
  138. package/Decorators/ZappPipesDataConnector/__tests__/ResolverSelector.test.tsx +205 -0
  139. package/Decorators/ZappPipesDataConnector/__tests__/StaticFeedResolver.test.tsx +251 -0
  140. package/Decorators/ZappPipesDataConnector/__tests__/UrlFeedResolver.test.tsx +368 -0
  141. package/Decorators/ZappPipesDataConnector/__tests__/utils.test.ts +39 -0
  142. package/Decorators/ZappPipesDataConnector/index.tsx +26 -293
  143. package/Decorators/ZappPipesDataConnector/resolvers/NullFeedResolver.tsx +25 -0
  144. package/Decorators/ZappPipesDataConnector/resolvers/StaticFeedResolver.tsx +87 -0
  145. package/Decorators/ZappPipesDataConnector/resolvers/UrlFeedResolver.tsx +266 -0
  146. package/Decorators/ZappPipesDataConnector/types.ts +29 -0
  147. package/Decorators/ZappPipesDataConnector/utils/mongoFilter.ts +738 -0
  148. package/Decorators/ZappPipesDataConnector/utils/useFilter.tsx +157 -0
  149. package/events/index.ts +3 -0
  150. package/package.json +5 -10
  151. package/Components/AudioPlayer/AudioPlayerLayout.tsx +0 -202
  152. package/Components/AudioPlayer/__tests__/__snapshots__/audioPlayerLayout.test.js.snap +0 -66
  153. package/Components/AudioPlayer/__tests__/__snapshots__/channel.test.js.snap +0 -28
  154. package/Components/AudioPlayer/__tests__/audioPlayerLayout.test.js +0 -26
  155. package/Components/AudioPlayer/index.ts +0 -1
  156. package/Components/River/__tests__/__snapshots__/river.test.js.snap +0 -27
  157. package/Components/VideoModal/hooks/useBackgroundColor.ts +0 -10
  158. /package/Components/AudioPlayer/{__tests__ → tv/__tests__}/Runtime.test.js +0 -0
  159. /package/Components/AudioPlayer/{__tests__ → tv/__tests__}/__snapshots__/artWork.test.js.snap +0 -0
  160. /package/Components/AudioPlayer/{__tests__ → tv/__tests__}/artWork.test.js +0 -0
  161. /package/Components/AudioPlayer/{__tests__ → tv/__tests__}/channel.test.js +0 -0
  162. /package/Components/AudioPlayer/{__tests__ → tv/__tests__}/summary.test.js +0 -0
  163. /package/Components/AudioPlayer/{__tests__ → tv/__tests__}/title.test.js +0 -0
@@ -1,214 +1,226 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
3
  exports[`WithRiverFeedLoader renders correctly 1`] = `
4
- <View
5
- dispatch={[MockFunction]}
6
- river={
7
- {
8
- "id": "A1234",
9
- "ui_components": [
10
- {
11
- "data": {
12
- "source": "http://datasource0",
13
- },
14
- "rules": {
15
- "clear_cache_on_reload": false,
16
- },
17
- },
18
- {
19
- "data": {
20
- "source": "http://datasource1",
21
- },
22
- "rules": {
23
- "clear_cache_on_reload": false,
24
- },
25
- },
26
- {
27
- "data": {
28
- "source": "http://datasource2",
29
- },
30
- "rules": {
31
- "clear_cache_on_reload": false,
32
- },
33
- },
34
- {
35
- "data": {
36
- "source": "http://datasource3",
37
- },
38
- "rules": {
39
- "clear_cache_on_reload": false,
40
- },
41
- },
42
- {
43
- "data": {
44
- "source": "http://datasource4",
45
- },
46
- "rules": {
47
- "clear_cache_on_reload": false,
48
- },
49
- },
50
- {
51
- "data": {
52
- "source": "http://datasource5",
53
- },
54
- "rules": {
55
- "clear_cache_on_reload": false,
56
- },
57
- },
58
- {
59
- "data": {
60
- "source": "http://datasource6",
61
- },
62
- "rules": {
63
- "clear_cache_on_reload": false,
64
- },
65
- },
66
- {
67
- "data": {
68
- "source": "http://datasource7",
69
- },
70
- "rules": {
71
- "clear_cache_on_reload": false,
72
- },
73
- },
74
- {
75
- "data": {
76
- "source": "http://datasource8",
77
- },
78
- "rules": {
79
- "clear_cache_on_reload": false,
80
- },
81
- },
82
- {
83
- "data": {
84
- "source": "http://datasource9",
85
- },
86
- "rules": {
87
- "clear_cache_on_reload": false,
88
- },
89
- },
90
- {
91
- "data": {
92
- "source": "http://datasource10",
93
- },
94
- "rules": {
95
- "clear_cache_on_reload": false,
96
- },
97
- },
98
- {
99
- "data": {
100
- "source": "http://datasource11",
101
- },
102
- "rules": {
103
- "clear_cache_on_reload": false,
104
- },
105
- },
106
- {
107
- "data": {
108
- "source": "http://datasource12",
109
- },
110
- "rules": {
111
- "clear_cache_on_reload": true,
112
- },
113
- },
114
- {
115
- "data": {
116
- "source": "http://datasource13",
117
- },
118
- "rules": {
119
- "clear_cache_on_reload": false,
120
- },
121
- },
122
- {
123
- "data": {
124
- "source": "http://datasource14",
125
- },
126
- "rules": {
127
- "clear_cache_on_reload": false,
128
- },
129
- },
130
- {
131
- "data": {
132
- "source": "http://datasource15",
133
- },
134
- "rules": {
135
- "clear_cache_on_reload": false,
136
- },
137
- },
138
- {
139
- "data": {
140
- "source": "http://datasource16",
141
- },
142
- "rules": {
143
- "clear_cache_on_reload": false,
144
- },
145
- },
146
- {
147
- "data": {
148
- "source": "http://datasource17",
149
- },
150
- "rules": {
151
- "clear_cache_on_reload": false,
152
- },
153
- },
154
- {
155
- "data": {
156
- "source": "http://datasource18",
157
- },
158
- "rules": {
159
- "clear_cache_on_reload": false,
160
- },
161
- },
162
- {
163
- "data": {
164
- "source": "http://datasource19",
165
- },
166
- "rules": {
167
- "clear_cache_on_reload": false,
168
- },
169
- },
170
- {
171
- "data": {
172
- "source": "http://datasource20",
173
- },
174
- "rules": {
175
- "clear_cache_on_reload": true,
176
- },
177
- },
178
- {
179
- "data": {
180
- "source": "http://datasource21",
181
- },
182
- "rules": {
183
- "clear_cache_on_reload": false,
184
- },
185
- },
186
- {
187
- "data": {
188
- "source": "http://datasource22",
189
- },
190
- "rules": {
191
- "clear_cache_on_reload": false,
192
- },
193
- },
194
- {
195
- "data": {
196
- "source": "http://datasource23",
197
- },
198
- "rules": {
199
- "clear_cache_on_reload": false,
200
- },
201
- },
202
- {
203
- "data": {
204
- "source": "http://datasource24",
205
- },
206
- "rules": {
207
- "clear_cache_on_reload": false,
208
- },
209
- },
210
- ],
211
- }
4
+ <RNCSafeAreaProvider
5
+ onInsetsChange={[Function]}
6
+ style={
7
+ [
8
+ {
9
+ "flex": 1,
10
+ },
11
+ undefined,
12
+ ]
212
13
  }
213
- />
14
+ >
15
+ <View
16
+ dispatch={[MockFunction]}
17
+ river={
18
+ {
19
+ "id": "A1234",
20
+ "ui_components": [
21
+ {
22
+ "data": {
23
+ "source": "http://datasource0",
24
+ },
25
+ "rules": {
26
+ "clear_cache_on_reload": false,
27
+ },
28
+ },
29
+ {
30
+ "data": {
31
+ "source": "http://datasource1",
32
+ },
33
+ "rules": {
34
+ "clear_cache_on_reload": false,
35
+ },
36
+ },
37
+ {
38
+ "data": {
39
+ "source": "http://datasource2",
40
+ },
41
+ "rules": {
42
+ "clear_cache_on_reload": false,
43
+ },
44
+ },
45
+ {
46
+ "data": {
47
+ "source": "http://datasource3",
48
+ },
49
+ "rules": {
50
+ "clear_cache_on_reload": false,
51
+ },
52
+ },
53
+ {
54
+ "data": {
55
+ "source": "http://datasource4",
56
+ },
57
+ "rules": {
58
+ "clear_cache_on_reload": false,
59
+ },
60
+ },
61
+ {
62
+ "data": {
63
+ "source": "http://datasource5",
64
+ },
65
+ "rules": {
66
+ "clear_cache_on_reload": false,
67
+ },
68
+ },
69
+ {
70
+ "data": {
71
+ "source": "http://datasource6",
72
+ },
73
+ "rules": {
74
+ "clear_cache_on_reload": false,
75
+ },
76
+ },
77
+ {
78
+ "data": {
79
+ "source": "http://datasource7",
80
+ },
81
+ "rules": {
82
+ "clear_cache_on_reload": false,
83
+ },
84
+ },
85
+ {
86
+ "data": {
87
+ "source": "http://datasource8",
88
+ },
89
+ "rules": {
90
+ "clear_cache_on_reload": false,
91
+ },
92
+ },
93
+ {
94
+ "data": {
95
+ "source": "http://datasource9",
96
+ },
97
+ "rules": {
98
+ "clear_cache_on_reload": false,
99
+ },
100
+ },
101
+ {
102
+ "data": {
103
+ "source": "http://datasource10",
104
+ },
105
+ "rules": {
106
+ "clear_cache_on_reload": false,
107
+ },
108
+ },
109
+ {
110
+ "data": {
111
+ "source": "http://datasource11",
112
+ },
113
+ "rules": {
114
+ "clear_cache_on_reload": false,
115
+ },
116
+ },
117
+ {
118
+ "data": {
119
+ "source": "http://datasource12",
120
+ },
121
+ "rules": {
122
+ "clear_cache_on_reload": true,
123
+ },
124
+ },
125
+ {
126
+ "data": {
127
+ "source": "http://datasource13",
128
+ },
129
+ "rules": {
130
+ "clear_cache_on_reload": false,
131
+ },
132
+ },
133
+ {
134
+ "data": {
135
+ "source": "http://datasource14",
136
+ },
137
+ "rules": {
138
+ "clear_cache_on_reload": false,
139
+ },
140
+ },
141
+ {
142
+ "data": {
143
+ "source": "http://datasource15",
144
+ },
145
+ "rules": {
146
+ "clear_cache_on_reload": false,
147
+ },
148
+ },
149
+ {
150
+ "data": {
151
+ "source": "http://datasource16",
152
+ },
153
+ "rules": {
154
+ "clear_cache_on_reload": false,
155
+ },
156
+ },
157
+ {
158
+ "data": {
159
+ "source": "http://datasource17",
160
+ },
161
+ "rules": {
162
+ "clear_cache_on_reload": false,
163
+ },
164
+ },
165
+ {
166
+ "data": {
167
+ "source": "http://datasource18",
168
+ },
169
+ "rules": {
170
+ "clear_cache_on_reload": false,
171
+ },
172
+ },
173
+ {
174
+ "data": {
175
+ "source": "http://datasource19",
176
+ },
177
+ "rules": {
178
+ "clear_cache_on_reload": false,
179
+ },
180
+ },
181
+ {
182
+ "data": {
183
+ "source": "http://datasource20",
184
+ },
185
+ "rules": {
186
+ "clear_cache_on_reload": true,
187
+ },
188
+ },
189
+ {
190
+ "data": {
191
+ "source": "http://datasource21",
192
+ },
193
+ "rules": {
194
+ "clear_cache_on_reload": false,
195
+ },
196
+ },
197
+ {
198
+ "data": {
199
+ "source": "http://datasource22",
200
+ },
201
+ "rules": {
202
+ "clear_cache_on_reload": false,
203
+ },
204
+ },
205
+ {
206
+ "data": {
207
+ "source": "http://datasource23",
208
+ },
209
+ "rules": {
210
+ "clear_cache_on_reload": false,
211
+ },
212
+ },
213
+ {
214
+ "data": {
215
+ "source": "http://datasource24",
216
+ },
217
+ "rules": {
218
+ "clear_cache_on_reload": false,
219
+ },
220
+ },
221
+ ],
222
+ }
223
+ }
224
+ />
225
+ </RNCSafeAreaProvider>
214
226
  `;
@@ -1,9 +1,8 @@
1
1
  import React from "react";
2
- import * as R from "ramda";
3
2
  import { View } from "react-native";
4
- import { render } from "@testing-library/react-native";
5
3
 
6
4
  import * as mock_fixtures from "./fixtures";
5
+ import { renderWithProviders } from "@applicaster/zapp-react-native-utils/testUtils";
7
6
 
8
7
  const mockUsePipesContexts = () => ({
9
8
  entry: mock_fixtures.entryContext,
@@ -11,8 +10,13 @@ const mockUsePipesContexts = () => ({
11
10
  search: mock_fixtures.searchContext,
12
11
  });
13
12
 
14
- const mockGetDatasourceUrl = jest.fn(
15
- R.curry((_, component) => component.data.source)
13
+ const mockDispatchLoadPipesData = jest.fn();
14
+
15
+ jest.mock(
16
+ "@applicaster/zapp-react-native-utils/reactHooks/feed/useLoadPipesDataDispatch",
17
+ () => ({
18
+ useLoadPipesDataDispatch: jest.fn(() => mockDispatchLoadPipesData),
19
+ })
16
20
  );
17
21
 
18
22
  jest.mock(
@@ -31,8 +35,6 @@ jest.mock(
31
35
 
32
36
  jest.mock("../utils", () => ({
33
37
  ...jest.requireActual("../utils"),
34
- loadDatasources: jest.fn(),
35
- getDatasourceUrl: mockGetDatasourceUrl,
36
38
  usePipesContexts: mockUsePipesContexts,
37
39
  }));
38
40
 
@@ -45,27 +47,23 @@ const riverProps = {
45
47
  dispatch: jest.fn(),
46
48
  };
47
49
 
48
- const { loadDatasources, getDatasourceUrl } = require("../utils");
49
-
50
50
  const { WithRiverFeedLoader } = require("..");
51
51
 
52
52
  describe("WithRiverFeedLoader", () => {
53
53
  const DecoratedRiver = WithRiverFeedLoader(River);
54
- const wrapper = render(<DecoratedRiver {...riverProps} />);
54
+ const wrapper = renderWithProviders(<DecoratedRiver {...riverProps} />);
55
55
 
56
56
  it("renders correctly", () => {
57
57
  expect(wrapper.toJSON()).toMatchSnapshot();
58
58
  });
59
59
 
60
60
  it("collects the datasources in the screen and loads them", () => {
61
- expect(getDatasourceUrl).toHaveBeenCalledTimes(1);
62
- expect(loadDatasources).toHaveBeenCalledTimes(1);
61
+ expect(mockDispatchLoadPipesData).toHaveBeenCalledTimes(23);
63
62
 
64
- expect(loadDatasources).toHaveBeenNthCalledWith(
65
- 1,
66
- mock_fixtures.riverDataSources,
67
- mock_fixtures.river.id,
68
- riverProps.dispatch
63
+ expect(mockDispatchLoadPipesData).toHaveBeenLastCalledWith(
64
+ "http://datasource24",
65
+ {},
66
+ { withResolvers: true, withScreenRouteMapping: true }
69
67
  );
70
68
  });
71
69
  });
@@ -14,31 +14,11 @@ jest.mock("@applicaster/zapp-react-native-redux/ZappPipes", () => ({
14
14
  }));
15
15
 
16
16
  const {
17
- loadDatasources,
18
17
  riverIsCurrentRoute,
19
18
  getDatasourceUrl,
20
19
  ignoreComponentsWithClearCacheFlag,
21
20
  } = require("../utils");
22
21
 
23
- const {
24
- loadPipesData,
25
- } = require("@applicaster/zapp-react-native-redux/ZappPipes");
26
-
27
- const dispatch = (value) => Promise.resolve(value);
28
-
29
- describe("loadDataSource", () => {
30
- it("calls loadPipesData for each provided urls", async () => {
31
- const urls = [
32
- ["http://datasource1", "http://datasource2"],
33
- ["http://datasource3", "http://datasource4"],
34
- ];
35
-
36
- await loadDatasources(urls, river.id, dispatch);
37
-
38
- expect(loadPipesData).toHaveBeenCalledTimes(R.flatten(urls).length);
39
- });
40
- });
41
-
42
22
  describe("riverIsCurrentRoute", () => {
43
23
  const route = "/river/homeId/river/screenId";
44
24
  const riverId = "screenId";
@@ -4,15 +4,19 @@ import { DispatchProp } from "react-redux";
4
4
 
5
5
  import { useRoute } from "@applicaster/zapp-react-native-utils/reactHooks/navigation/useRoute";
6
6
 
7
- import { mapAndSplit } from "@applicaster/zapp-react-native-utils/arrayUtils";
7
+ import {
8
+ mapAndSplit,
9
+ mapPromises,
10
+ reducePromises,
11
+ } from "@applicaster/zapp-react-native-utils/arrayUtils";
8
12
 
9
13
  import {
10
14
  DATASOURCE_CHUNKS,
11
15
  getDatasourceUrl,
12
16
  ignoreComponentsWithClearCacheFlag,
13
- loadDatasources,
14
17
  usePipesContexts,
15
18
  } from "./utils";
19
+ import { useLoadPipesDataDispatch } from "@applicaster/zapp-react-native-utils/reactHooks";
16
20
 
17
21
  type RiverProps = {
18
22
  dispatch: DispatchProp;
@@ -25,9 +29,10 @@ export function WithRiverFeedLoader(Component: ZappComponent) {
25
29
  return function WrappedWithRiverFeedLoader(props: RiverProps) {
26
30
  const { river } = props;
27
31
  const { screenData, pathname } = useRoute();
28
-
29
32
  const pipesContexts = usePipesContexts(river.id, pathname);
30
33
 
34
+ const loadPipesDataDispatcher = useLoadPipesDataDispatch();
35
+
31
36
  const componentsToLoad = ignoreComponentsWithClearCacheFlag(
32
37
  river?.ui_components || []
33
38
  );
@@ -49,7 +54,20 @@ export function WithRiverFeedLoader(Component: ZappComponent) {
49
54
  item?.filter((item2) => item2 !== undefined)
50
55
  );
51
56
 
52
- loadDatasources(nonEmptyDataSources, river?.id, props.dispatch);
57
+ reducePromises<string, void>(
58
+ mapPromises<string, void>((url) =>
59
+ loadPipesDataDispatcher(
60
+ url,
61
+ {},
62
+ {
63
+ withResolvers: true,
64
+ withScreenRouteMapping: true,
65
+ }
66
+ )
67
+ ),
68
+ undefined,
69
+ nonEmptyDataSources
70
+ );
53
71
  }, []);
54
72
 
55
73
  return <Component {...props} />;
@@ -1,10 +1,4 @@
1
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
2
 
9
3
  export { riverIsCurrentRoute, usePipesContexts } from "./usePipesContexts";
10
4
 
@@ -12,18 +6,6 @@ export { getDatasourceUrl } from "./getDatasourceUrl";
12
6
 
13
7
  export const DATASOURCE_CHUNKS = 10;
14
8
 
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
9
  export const ignoreComponentsWithClearCacheFlag = R.reject(
28
10
  R.pathEq(["rules", "clear_cache_on_reload"], true)
29
11
  );
@@ -13,12 +13,9 @@ const rivers = {
13
13
  },
14
14
  };
15
15
 
16
- jest.doMock(
17
- "@applicaster/zapp-react-native-redux/hooks/usePickFromState",
18
- () => ({
19
- usePickFromState: jest.fn(() => ({ rivers })),
20
- })
21
- );
16
+ jest.doMock("@applicaster/zapp-react-native-redux/hooks", () => ({
17
+ usePickFromState: jest.fn(() => ({ rivers })),
18
+ }));
22
19
 
23
20
  jest.doMock(
24
21
  "@applicaster/zapp-react-native-utils/reactHooks/navigation/usePathname",
@@ -0,0 +1,25 @@
1
+ // ResolverSelector.tsx
2
+ import React from "react";
3
+ import { ComponentDataSourceContext, ZappPipesDataProps } from "./types";
4
+ import { StaticFeedResolver } from "./resolvers/StaticFeedResolver";
5
+ import { UrlFeedResolver } from "./resolvers/UrlFeedResolver";
6
+ import { NullFeedResolver } from "./resolvers/NullFeedResolver";
7
+
8
+ type ResolverSelectorProps = ComponentDataSourceContext & {
9
+ children: (dataProps: ZappPipesDataProps) => React.ReactNode;
10
+ };
11
+
12
+ export function ResolverSelector(props: ResolverSelectorProps) {
13
+ const { getStaticComponentFeed, component, feedUrl, children } = props;
14
+
15
+ // Determine which resolver to use
16
+ if (getStaticComponentFeed) {
17
+ return <StaticFeedResolver {...props}>{children}</StaticFeedResolver>;
18
+ }
19
+
20
+ if (feedUrl || component?.data?.source) {
21
+ return <UrlFeedResolver {...props}>{children}</UrlFeedResolver>;
22
+ }
23
+
24
+ return <NullFeedResolver>{children}</NullFeedResolver>;
25
+ }