@applicaster/zapp-react-native-ui-components 13.0.0-rc.13 → 13.0.0-rc.130

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 (212) 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/AudioPlayer.tsx +5 -9
  4. package/Components/AudioPlayer/AudioPlayerLayout.tsx +6 -7
  5. package/Components/AudioPlayer/__tests__/Runtime.test.js +5 -8
  6. package/Components/AudioPlayer/__tests__/__snapshots__/Runtime.test.js.snap +4 -4
  7. package/Components/AudioPlayer/__tests__/__snapshots__/artWork.test.js.snap +3 -3
  8. package/Components/AudioPlayer/__tests__/__snapshots__/audioPlayer.test.js.snap +56 -113
  9. package/Components/AudioPlayer/__tests__/__snapshots__/audioPlayerLayout.test.js.snap +39 -23
  10. package/Components/AudioPlayer/__tests__/__snapshots__/channel.test.js.snap +3 -3
  11. package/Components/AudioPlayer/__tests__/__snapshots__/summary.test.js.snap +2 -2
  12. package/Components/AudioPlayer/__tests__/__snapshots__/title.test.js.snap +2 -2
  13. package/Components/AudioPlayer/__tests__/artWork.test.js +3 -5
  14. package/Components/AudioPlayer/__tests__/audioPlayer.test.js +3 -5
  15. package/Components/AudioPlayer/__tests__/audioPlayerLayout.test.js +7 -8
  16. package/Components/AudioPlayer/__tests__/channel.test.js +3 -5
  17. package/Components/AudioPlayer/__tests__/summary.test.js +3 -5
  18. package/Components/AudioPlayer/__tests__/title.test.js +3 -5
  19. package/Components/AudioPlayer/helpers.tsx +1 -2
  20. package/Components/BaseFocusable/index.ios.ts +1 -1
  21. package/Components/BaseFocusable/index.tsx +67 -31
  22. package/Components/Cell/Cell.tsx +14 -14
  23. package/Components/Cell/CellWithFocusable.tsx +50 -59
  24. package/Components/Cell/CellWrapper.tsx +18 -0
  25. package/Components/Cell/TvOSCellComponent.tsx +20 -26
  26. package/Components/Cell/__tests__/CellWIthFocusable.test.js +13 -6
  27. package/Components/Cell/index.js +3 -1
  28. package/Components/Cell/styles.ts +17 -0
  29. package/Components/CellRendererResolver/__tests__/cellRendererResolver.test.js +50 -50
  30. package/Components/CellRendererResolver/index.ts +2 -1
  31. package/Components/ComponentResolver/__tests__/__snapshots__/componentResolver.test.js.snap +1 -42
  32. package/Components/ComponentResolver/__tests__/componentResolver.test.js +26 -30
  33. package/Components/ContentScreen/__tests__/contentScreen.test.js +3 -3
  34. package/Components/DisplayState/__tests__/__snapshots__/displayState.test.js.snap +2 -2
  35. package/Components/ErrorScreen/index.tsx +14 -6
  36. package/Components/Focusable/Focusable.tsx +1 -54
  37. package/Components/Focusable/FocusableTvOS.tsx +6 -2
  38. package/Components/Focusable/Touchable.tsx +19 -20
  39. package/Components/Focusable/index.android.tsx +10 -3
  40. package/Components/FocusableCell/index.tsx +1 -1
  41. package/Components/FocusableGroup/FocusableTvOS.tsx +34 -86
  42. package/Components/FocusableGroup/index.tsx +0 -3
  43. package/Components/FocusableList/index.tsx +26 -10
  44. package/Components/FocusableScrollView/index.tsx +43 -13
  45. package/Components/GeneralContentScreen/GeneralContentScreen.tsx +3 -0
  46. package/Components/GeneralContentScreen/utils/__tests__/useCurationAPI.test.js +9 -0
  47. package/Components/GeneralContentScreen/utils/useCurationAPI.ts +5 -3
  48. package/Components/GeneralContentScreen/utils/useEventAlerts.ts +30 -0
  49. package/Components/HandlePlayable/HandlePlayable.tsx +21 -27
  50. package/Components/Layout/TV/LayoutBackground.tsx +28 -0
  51. package/Components/Layout/TV/NavBarContainer.tsx +19 -23
  52. package/Components/Layout/TV/ScreenContainer.tsx +8 -2
  53. package/Components/Layout/TV/ScreenLayoutContextProvider.tsx +5 -0
  54. package/Components/Layout/TV/__tests__/ScreenContainer.test.tsx +3 -1
  55. package/Components/Layout/TV/__tests__/__snapshots__/LayoutContainer.test.tsx.snap +1 -1
  56. package/Components/Layout/TV/__tests__/__snapshots__/NavBarContainer.test.tsx.snap +6 -5
  57. package/Components/Layout/TV/__tests__/__snapshots__/ScreenContainer.test.tsx.snap +12 -11
  58. package/Components/Layout/TV/__tests__/__snapshots__/index.test.tsx.snap +15 -10
  59. package/Components/Layout/TV/__tests__/index.test.tsx +14 -4
  60. package/Components/Layout/TV/index.tsx +6 -20
  61. package/Components/Layout/TV/index.web.tsx +4 -1
  62. package/Components/MasterCell/DefaultComponents/ActionButton.tsx +2 -3
  63. package/Components/MasterCell/DefaultComponents/BorderContainerView/__tests__/index.test.tsx +66 -0
  64. package/Components/MasterCell/DefaultComponents/BorderContainerView/index.tsx +4 -1
  65. package/Components/MasterCell/DefaultComponents/Image/Image.ios.tsx +10 -15
  66. package/Components/MasterCell/DefaultComponents/Image/hooks/useImage.ts +11 -7
  67. package/Components/MasterCell/DefaultComponents/ImageBorderContainer/__tests__/index.test.ts +93 -0
  68. package/Components/MasterCell/DefaultComponents/LiveImage/index.tsx +2 -2
  69. package/Components/MasterCell/DefaultComponents/SecondaryImage/__tests__/__snapshots__/Image.test.tsx.snap +3 -3
  70. package/Components/MasterCell/DefaultComponents/SecondaryImage/utils.ts +1 -1
  71. package/Components/MasterCell/DefaultComponents/__tests__/image.test.js +1 -1
  72. package/Components/MasterCell/DefaultComponents/tv/TvActionButtons/const.ts +3 -0
  73. package/Components/MasterCell/DefaultComponents/tv/TvActionButtons/index.ts +6 -6
  74. package/Components/MasterCell/SharedUI/CollapsibleTextContainer/__tests__/__snapshots__/index.test.tsx.snap +1 -1
  75. package/Components/MasterCell/SharedUI/ProgressBar/hooks/useFillInPercent.ts +2 -8
  76. package/Components/MasterCell/__tests__/__snapshots__/dataAdapter.test.js.snap +180 -180
  77. package/Components/MasterCell/__tests__/__snapshots__/elementMapper.test.js.snap +11 -19
  78. package/Components/MasterCell/__tests__/__snapshots__/masterCell.test.js.snap +6 -235
  79. package/Components/MasterCell/__tests__/elementMapper.test.js +18 -5
  80. package/Components/MasterCell/__tests__/masterCell.test.js +26 -26
  81. package/Components/MasterCell/hooks/useAsyncRendering/MasterCellAsyncRenderManager.ts +2 -2
  82. package/Components/MasterCell/hooks/useAsyncRendering/index.ts +2 -2
  83. package/Components/MasterCell/utils/behaviorProvider.ts +136 -0
  84. package/Components/MasterCell/utils/index.ts +9 -135
  85. package/Components/ModalComponent/BottomSheetModalContent.tsx +66 -54
  86. package/Components/ModalComponent/Button/Item.tsx +6 -5
  87. package/Components/ModalComponent/Button/assets.ts +1 -1
  88. package/Components/ModalComponent/Button/index.tsx +45 -62
  89. package/Components/ModalComponent/Header/index.tsx +12 -11
  90. package/Components/ModalComponent/utils.ts +55 -7
  91. package/Components/OfflineHandler/NotificationView/NotificationView.lg.tsx +2 -2
  92. package/Components/OfflineHandler/NotificationView/NotificationView.samsung.tsx +2 -2
  93. package/Components/OfflineHandler/NotificationView/__tests__/index.test.tsx +0 -5
  94. package/Components/OfflineHandler/__tests__/__snapshots__/index.test.tsx.snap +7 -7
  95. package/Components/OfflineHandler/__tests__/index.test.tsx +28 -25
  96. package/Components/OfflineHandler/utils/index.ts +1 -1
  97. package/Components/PlayerContainer/PlayerContainer.tsx +49 -29
  98. package/Components/PlayerContainer/PlayerContainerContext.tsx +9 -0
  99. package/Components/PlayerContainer/ProgramInfo/index.tsx +2 -2
  100. package/Components/PlayerImageBackground/index.tsx +1 -1
  101. package/Components/River/ComponentsMap/ComponentsMap.tsx +53 -68
  102. package/Components/River/ComponentsMap/hooks/useLoadingState.ts +78 -51
  103. package/Components/River/RefreshControl.tsx +1 -1
  104. package/Components/River/RiverFooter.tsx +39 -9
  105. package/Components/River/RiverItem.tsx +43 -3
  106. package/Components/River/TV/index.tsx +6 -1
  107. package/Components/River/__tests__/__snapshots__/componentsMap.test.js.snap +121 -46
  108. package/Components/River/__tests__/__snapshots__/river.test.js.snap +21 -83
  109. package/Components/River/__tests__/componentsMap.test.js +64 -17
  110. package/Components/River/__tests__/river.test.js +75 -40
  111. package/Components/RouteManager/TestId.tsx +1 -5
  112. package/Components/RouteManager/__tests__/__snapshots__/routeManager.test.js.snap +11 -5
  113. package/Components/RouteManager/__tests__/routeManager.test.js +29 -14
  114. package/Components/RouteManager/__tests__/testId.test.js +4 -6
  115. package/Components/Screen/TV/__tests__/index.web.test.tsx +26 -0
  116. package/Components/Screen/TV/index.web.tsx +5 -6
  117. package/Components/Screen/__tests__/Screen.test.tsx +53 -31
  118. package/Components/Screen/__tests__/__snapshots__/Screen.test.tsx.snap +6 -6
  119. package/Components/Screen/hooks.ts +53 -0
  120. package/Components/Screen/index.tsx +16 -42
  121. package/Components/ScreenResolver/__tests__/screenResolver.test.js +95 -70
  122. package/Components/Tabs/Tab.tsx +12 -9
  123. package/Components/TextInputTv/__tests__/TextInputTv.test.js +42 -42
  124. package/Components/TextInputTv/__tests__/__snapshots__/TextInputTv.test.js.snap +7 -0
  125. package/Components/TextInputTv/index.tsx +6 -5
  126. package/Components/TopMarginApplicator/TopMarginApplicator.tsx +2 -3
  127. package/Components/Touchable/__tests__/__snapshots__/touchable.test.tsx.snap +2 -2
  128. package/Components/TrackedView/index.tsx +1 -0
  129. package/Components/Transitioner/AnimationManager.js +15 -15
  130. package/Components/Transitioner/Scene.tsx +53 -24
  131. package/Components/Transitioner/Transitioner.tsx +3 -3
  132. package/Components/Transitioner/__tests__/Scene.test.js +25 -14
  133. package/Components/Transitioner/__tests__/__snapshots__/AnimationManager.test.js.snap +26 -26
  134. package/Components/Transitioner/__tests__/__snapshots__/Scene.test.js.snap +10 -50
  135. package/Components/Transitioner/__tests__/__snapshots__/config.test.js.snap +20 -20
  136. package/Components/Transitioner/__tests__/__snapshots__/transitioner.test.js.snap +4 -4
  137. package/Components/Transitioner/__tests__/transitioner.test.js +13 -4
  138. package/Components/Transitioner/index.js +8 -4
  139. package/Components/VideoLive/LiveImageManager.ts +27 -1
  140. package/Components/VideoLive/PlayerLiveImageComponent.tsx +36 -24
  141. package/Components/VideoLive/__tests__/PlayerLiveImageComponent.test.tsx +63 -8
  142. package/Components/VideoLive/__tests__/__snapshots__/PlayerLiveImageComponent.test.tsx.snap +6 -10
  143. package/Components/VideoModal/ModalAnimation/AnimatedPlayerModalWrapper.tsx +1 -1
  144. package/Components/VideoModal/ModalAnimation/AnimatedScrollModal.tsx +51 -31
  145. package/Components/VideoModal/ModalAnimation/AnimatedVideoPlayerComponent.tsx +8 -4
  146. package/Components/VideoModal/ModalAnimation/AnimationComponent.tsx +48 -23
  147. package/Components/VideoModal/ModalAnimation/ModalAnimationContext.tsx +16 -15
  148. package/Components/VideoModal/ModalAnimation/__tests__/getMoveUpValue.test.ts +108 -0
  149. package/Components/VideoModal/ModalAnimation/const.ts +5 -0
  150. package/Components/VideoModal/ModalAnimation/index.ts +4 -1
  151. package/Components/VideoModal/ModalAnimation/useModalAnimationContext.ts +6 -0
  152. package/Components/VideoModal/ModalAnimation/utils.ts +32 -2
  153. package/Components/VideoModal/OpaqueLayer.tsx +33 -0
  154. package/Components/VideoModal/PlayerDetails.tsx +18 -10
  155. package/Components/VideoModal/PlayerWrapper.tsx +51 -57
  156. package/Components/VideoModal/VideoModal.tsx +17 -11
  157. package/Components/VideoModal/__tests__/PlayerDetails.test.tsx +5 -2
  158. package/Components/VideoModal/__tests__/PlayerWrapper.test.tsx +13 -10
  159. package/Components/VideoModal/__tests__/__snapshots__/PlayerDetails.test.tsx.snap +2 -40
  160. package/Components/VideoModal/__tests__/__snapshots__/PlayerWrapper.test.tsx.snap +66 -156
  161. package/Components/VideoModal/hooks/__tests__/useDelayedPlayerDetails.test.ts +89 -0
  162. package/Components/VideoModal/hooks/index.ts +7 -0
  163. package/Components/VideoModal/hooks/useDelayedPlayerDetails.ts +49 -0
  164. package/Components/VideoModal/hooks/utils/__tests__/showDetails.test.ts +91 -0
  165. package/Components/VideoModal/hooks/utils/index.ts +33 -0
  166. package/Components/VideoModal/utils.ts +6 -9
  167. package/Components/Viewport/ViewportAware/__tests__/__snapshots__/viewportAware.test.js.snap +24 -36
  168. package/Components/Viewport/ViewportAware/__tests__/viewportAware.test.js +12 -18
  169. package/Components/Viewport/ViewportTracker/__tests__/__snapshots__/viewportTracker.test.js.snap +1 -1
  170. package/Components/Viewport/__tests__/utils.test.js +5 -4
  171. package/Components/ZappUIComponent/Placeholder.tsx +3 -1
  172. package/Components/ZappUIComponent/__tests__/{ZappUIComponent.test.js → ZappUIComponent.test.tsx} +26 -10
  173. package/Components/ZappUIComponent/index.tsx +4 -17
  174. package/Components/default-cell-renderer/__tests__/defaultCellRenderer.test.tsx +20 -17
  175. package/Components/default-cell-renderer/viewTrees/tv/DefaultCell/__tests__/DefaultCell.test.tsx +15 -11
  176. package/Contexts/ComponentsMapOffsetContext/index.tsx +49 -0
  177. package/Contexts/ConfigutaionContext/__tests__/__snapshots__/ConfigurationProvider.test.tsx.snap +1 -1
  178. package/Contexts/FocusableGroupContext/withFocusableContext.tsx +4 -10
  179. package/Contexts/HeaderOffsetContext/index.tsx +4 -6
  180. package/Contexts/ScreenContext/index.tsx +6 -12
  181. package/Contexts/ScreenLayoutContext/index.tsx +5 -3
  182. package/Decorators/Navigator/__tests__/navigator.test.js +16 -16
  183. package/Decorators/Navigator/index.tsx +1 -1
  184. package/Decorators/RiverFeedLoader/__tests__/__snapshots__/riverFeedLoader.test.tsx.snap +77 -77
  185. package/Decorators/RiverFeedLoader/__tests__/riverFeedLoader.test.tsx +34 -39
  186. package/Decorators/RiverFeedLoader/__tests__/utils.test.ts +0 -9
  187. package/Decorators/RiverFeedLoader/index.tsx +1 -1
  188. package/Decorators/RiverFeedLoader/utils/getDatasourceUrl.ts +39 -0
  189. package/Decorators/RiverFeedLoader/utils/index.ts +29 -0
  190. package/Decorators/RiverFeedLoader/utils/usePipesContexts.ts +40 -0
  191. package/Decorators/RiverResolver/__tests__/riverResolver.test.tsx +27 -27
  192. package/Decorators/RiverResolver/index.tsx +6 -8
  193. package/Decorators/ZappPipesDataConnector/__tests__/Hero.js +1 -1
  194. package/Decorators/ZappPipesDataConnector/__tests__/zappPipesDataConnector.test.js +29 -22
  195. package/Decorators/ZappPipesDataConnector/index.tsx +7 -3
  196. package/package.json +13 -11
  197. package/tsconfig.json +2 -3
  198. package/.babelrc +0 -8
  199. package/Components/Cell/CellStyles/FallbackCellStyle/index.js +0 -157
  200. package/Components/Cell/CellStyles/Hero/index.js +0 -111
  201. package/Components/Cell/CellStyles/ScreenSelector/index.js +0 -68
  202. package/Components/Cell/CellStyles/cellStylesResolver.ts +0 -19
  203. package/Components/Cell/CellStyles/colors.js +0 -40
  204. package/Components/Cell/CellStyles/index.js +0 -15
  205. package/Components/CellRendererResolver/__tests__/__snapshots__/cellRendererResolver.test.js.snap +0 -53
  206. package/Components/RouteManager/__tests__/__snapshots__/testId.test.js.snap +0 -17
  207. package/Components/ScreenResolver/__tests__/__snapshots__/screenResolver.test.js.snap +0 -17
  208. package/Components/ZappUIComponent/__tests__/__snapshots__/ZappUIComponent.test.js.snap +0 -91
  209. package/Components/default-cell-renderer/__tests__/__snapshots__/defaultCellRenderer.test.tsx.snap +0 -338
  210. package/Decorators/Navigator/__tests__/__snapshots__/navigator.test.js.snap +0 -18
  211. package/Decorators/RiverFeedLoader/utils.ts +0 -100
  212. package/Decorators/RiverResolver/__tests__/__snapshots__/riverResolver.test.tsx.snap +0 -28
@@ -3,14 +3,12 @@
3
3
  exports[`elementMapper renders the nodes 1`] = `
4
4
  <View>
5
5
  <View
6
- key="View_0"
7
6
  testProp={true}
8
7
  viewProp={true}
9
8
  >
10
- <ImageContainer
11
- key="0"
9
+ <View
12
10
  style={
13
- Object {
11
+ {
14
12
  "borderTopLeftRadius": 4,
15
13
  "borderTopRightRadius": 4,
16
14
  "height": 216,
@@ -20,9 +18,8 @@ exports[`elementMapper renders the nodes 1`] = `
20
18
  uri="http://urlOfTheImage.net/img.png"
21
19
  />
22
20
  <View
23
- key="1"
24
21
  style={
25
- Object {
22
+ {
26
23
  "height": 30,
27
24
  "marginHorizontal": 24,
28
25
  "marginTop": 24,
@@ -32,12 +29,11 @@ exports[`elementMapper renders the nodes 1`] = `
32
29
  testProp={true}
33
30
  viewProp={true}
34
31
  >
35
- <_Text
36
- key="0"
32
+ <View
37
33
  label="Test Entry"
38
34
  numberOfLines={1}
39
35
  style={
40
- Object {
36
+ {
41
37
  "color": "#EFEFEF",
42
38
  "fontSize": 26,
43
39
  "fontStyle": "normal",
@@ -47,9 +43,8 @@ exports[`elementMapper renders the nodes 1`] = `
47
43
  />
48
44
  </View>
49
45
  <View
50
- key="2"
51
46
  style={
52
- Object {
47
+ {
53
48
  "height": 60,
54
49
  "marginHorizontal": 24,
55
50
  "marginTop": 10,
@@ -58,12 +53,11 @@ exports[`elementMapper renders the nodes 1`] = `
58
53
  }
59
54
  testProp={true}
60
55
  >
61
- <_Text
62
- key="0"
56
+ <View
63
57
  label="Summary of the test entry"
64
58
  numberOfLines={2}
65
59
  style={
66
- Object {
60
+ {
67
61
  "color": "#EFEFEF",
68
62
  "fontSize": 24,
69
63
  "fontStyle": "normal",
@@ -74,9 +68,8 @@ exports[`elementMapper renders the nodes 1`] = `
74
68
  />
75
69
  </View>
76
70
  <View
77
- key="3"
78
71
  style={
79
- Object {
72
+ {
80
73
  "height": 42,
81
74
  "margin": 24,
82
75
  "width": 56,
@@ -85,10 +78,9 @@ exports[`elementMapper renders the nodes 1`] = `
85
78
  testProp={true}
86
79
  viewProp={true}
87
80
  >
88
- <ImageContainer
89
- key="0"
81
+ <View
90
82
  style={
91
- Object {
83
+ {
92
84
  "height": 42,
93
85
  "width": 56,
94
86
  }
@@ -1,39 +1,9 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
- exports[`masterCellBuilder when using a custom data adapter renders correctly 1`] = `
4
- <View
5
- style={
6
- Object {
7
- "flex": 1,
8
- }
9
- }
10
- >
11
- <View
12
- cellUUID="mocked-uuid"
13
- key="0"
14
- skipButtons={false}
15
- style={
16
- Object {
17
- "backgroundColor": "#2F2F2F",
18
- "borderRadius": 4,
19
- "height": 436,
20
- "marginRight": 20,
21
- "width": 384,
22
- }
23
- }
24
- wrapperRef={
25
- Object {
26
- "current": null,
27
- }
28
- }
29
- />
30
- </View>
31
- `;
32
-
33
3
  exports[`masterCellBuilder when using custom containerStyle renders correctly 1`] = `
34
4
  <View
35
5
  style={
36
- Object {
6
+ {
37
7
  "backgroundColor": "black",
38
8
  }
39
9
  }
@@ -42,9 +12,9 @@ exports[`masterCellBuilder when using custom containerStyle renders correctly 1`
42
12
  cellUUID="mocked-uuid"
43
13
  key="0"
44
14
  skipButtons={false}
45
- style={Object {}}
15
+ style={{}}
46
16
  wrapperRef={
47
- Object {
17
+ {
48
18
  "current": null,
49
19
  }
50
20
  }
@@ -55,7 +25,7 @@ exports[`masterCellBuilder when using custom containerStyle renders correctly 1`
55
25
  exports[`masterCellBuilder when using custom default components renders correctly 1`] = `
56
26
  <mockConstructor
57
27
  style={
58
- Object {
28
+ {
59
29
  "flex": 1,
60
30
  }
61
31
  }
@@ -64,211 +34,12 @@ exports[`masterCellBuilder when using custom default components renders correctl
64
34
  cellUUID="mocked-uuid"
65
35
  key="0"
66
36
  skipButtons={false}
67
- style={Object {}}
37
+ style={{}}
68
38
  wrapperRef={
69
- Object {
39
+ {
70
40
  "current": null,
71
41
  }
72
42
  }
73
43
  />
74
44
  </mockConstructor>
75
45
  `;
76
-
77
- exports[`masterCellBuilder when using default options can be invoked as a React Component 1`] = `
78
- <View
79
- style={
80
- Object {
81
- "flex": 1,
82
- }
83
- }
84
- >
85
- <View
86
- cellUUID="mocked-uuid"
87
- key="0"
88
- skipButtons={false}
89
- style={
90
- Object {
91
- "backgroundColor": "#2F2F2F",
92
- "borderRadius": 4,
93
- "height": 436,
94
- "marginRight": 20,
95
- "width": 384,
96
- }
97
- }
98
- whoAmI={
99
- Object {
100
- "contentType": "feed",
101
- "state": "default",
102
- }
103
- }
104
- wrapperRef={
105
- Object {
106
- "current": null,
107
- }
108
- }
109
- >
110
- <ImageContainer
111
- cellUUID="mocked-uuid"
112
- key="0"
113
- numberOfLines={1}
114
- skipButtons={false}
115
- style={
116
- Object {
117
- "borderTopLeftRadius": 4,
118
- "borderTopRightRadius": 4,
119
- "height": 216,
120
- "width": 384,
121
- }
122
- }
123
- uri="http://urlOfTheImage.net/img.png"
124
- />
125
- <View
126
- cellUUID="mocked-uuid"
127
- key="1"
128
- skipButtons={false}
129
- style={
130
- Object {
131
- "height": 30,
132
- "marginHorizontal": 24,
133
- "marginTop": 24,
134
- "width": 336,
135
- }
136
- }
137
- wrapperRef={
138
- Object {
139
- "current": null,
140
- }
141
- }
142
- >
143
- <_Text
144
- key="0"
145
- label="Test Entry"
146
- numberOfLines={1}
147
- skipButtons={false}
148
- style={
149
- Object {
150
- "color": "#EFEFEF",
151
- "fontSize": 26,
152
- "fontStyle": "normal",
153
- "fontWeight": "bold",
154
- }
155
- }
156
- />
157
- </View>
158
- <View
159
- cellUUID="mocked-uuid"
160
- key="2"
161
- skipButtons={false}
162
- style={
163
- Object {
164
- "height": 60,
165
- "marginHorizontal": 24,
166
- "marginTop": 10,
167
- "width": 336,
168
- }
169
- }
170
- wrapperRef={
171
- Object {
172
- "current": null,
173
- }
174
- }
175
- >
176
- <_Text
177
- key="0"
178
- label="Summary of the test entry"
179
- numberOfLines={2}
180
- skipButtons={false}
181
- style={
182
- Object {
183
- "color": "#EFEFEF",
184
- "fontSize": 24,
185
- "fontStyle": "normal",
186
- "fontWeight": "normal",
187
- "opacity": 0.8,
188
- }
189
- }
190
- />
191
- </View>
192
- <View
193
- cellUUID="mocked-uuid"
194
- key="3"
195
- skipButtons={false}
196
- style={
197
- Object {
198
- "height": 42,
199
- "margin": 24,
200
- "width": 56,
201
- }
202
- }
203
- wrapperRef={
204
- Object {
205
- "current": null,
206
- }
207
- }
208
- >
209
- <ImageContainer
210
- cellUUID="mocked-uuid"
211
- key="0"
212
- skipButtons={false}
213
- style={
214
- Object {
215
- "height": 42,
216
- "width": 56,
217
- }
218
- }
219
- uri="http://urlOfTheImage.net/channelLogo.png"
220
- />
221
- </View>
222
- </View>
223
- </View>
224
- `;
225
-
226
- exports[`masterCellBuilder when using default options renders correctly 1`] = `
227
- <View>
228
- <Memo(MasterCell)
229
- item={
230
- Object {
231
- "author": Object {
232
- "name": "John Doe",
233
- },
234
- "id": "A1234",
235
- "media_group": Array [
236
- Object {
237
- "media_item": Array [
238
- Object {
239
- "key": "image_base",
240
- "src": "http://urlOfTheImage.net/img.png",
241
- },
242
- ],
243
- "type": "image",
244
- },
245
- Object {
246
- "media_item": Array [
247
- Object {
248
- "key": "logo_thumbnail",
249
- "src": "http://urlOfTheImage.net/channelLogo.png",
250
- },
251
- ],
252
- "type": "thumbnail",
253
- },
254
- ],
255
- "published": "2019/03/17 02:17:46 +0000",
256
- "summary": "Summary of the test entry",
257
- "title": "Test Entry",
258
- "type": Object {
259
- "value": "feed",
260
- },
261
- }
262
- }
263
- />
264
- </View>
265
- `;
266
-
267
- exports[`masterCellBuilder when using default options returns a function 1`] = `
268
- Object {
269
- "$$typeof": Symbol(react.memo),
270
- "compare": null,
271
- "hasFocusableInside": [Function],
272
- "type": [Function],
273
- }
274
- `;
@@ -1,20 +1,33 @@
1
1
  import * as R from "ramda";
2
2
  import * as React from "react";
3
3
  import { View } from "react-native";
4
- import { shallow } from "enzyme";
5
- import { shallowToJson } from "enzyme-to-json";
4
+ import { render } from "@testing-library/react-native";
6
5
  import { elementMapper } from "../elementMapper";
7
6
  import { elements } from "./testElements";
8
7
  import { defaultComponents } from "../DefaultComponents";
9
8
 
9
+ jest.mock(
10
+ "@applicaster/zapp-react-native-utils/reactHooks/navigation/useNavigation"
11
+ );
12
+
10
13
  describe("elementMapper", () => {
11
14
  it("renders the nodes", () => {
12
- const wrapper = shallow(
15
+ const wrapper = render(
13
16
  <View key={1}>
14
- {R.map(elementMapper(defaultComponents, { testProp: true }), elements)}
17
+ {R.map(
18
+ elementMapper(
19
+ Object.entries(defaultComponents).reduce((acc, [key]) => {
20
+ acc[key] = View;
21
+
22
+ return acc;
23
+ }, {}),
24
+ { testProp: true }
25
+ ),
26
+ elements
27
+ )}
15
28
  </View>
16
29
  );
17
30
 
18
- expect(shallowToJson(wrapper)).toMatchSnapshot();
31
+ expect(wrapper.toJSON()).toMatchSnapshot();
19
32
  });
20
33
  });
@@ -1,16 +1,25 @@
1
1
  import * as React from "react";
2
2
  import { View } from "react-native";
3
- import { shallow } from "enzyme";
4
- import { shallowToJson } from "enzyme-to-json";
3
+ import { renderWithProviders } from "@applicaster/zapp-react-native-utils/testUtils";
5
4
 
6
5
  import { testCellStyle } from "./TestCellStyle";
7
6
  import { singleView } from "./SingleView";
8
7
  import { entry } from "./testEntry";
9
8
  import { singleElement } from "./testElements";
10
9
 
11
- jest.mock("@applicaster/zapp-react-native-utils/reactHooks/navigation", () => ({
12
- useRoute: jest.fn(() => ({ screenData: { id: "test" } })),
13
- }));
10
+ jest.mock(
11
+ "@applicaster/zapp-react-native-utils/reactHooks/navigation/useRoute",
12
+ () => ({
13
+ useRoute: jest.fn(() => ({ screenData: { id: "test" } })),
14
+ })
15
+ );
16
+
17
+ jest.mock(
18
+ "@applicaster/zapp-react-native-utils/reactHooks/navigation/useIsScreenActive",
19
+ () => ({
20
+ useIsScreenActive: jest.fn(() => true),
21
+ })
22
+ );
14
23
 
15
24
  jest.mock("@applicaster/zapp-react-native-utils/screenState", () => ({
16
25
  useScreenState: jest.fn(() => ({
@@ -27,36 +36,27 @@ describe("masterCellBuilder", () => {
27
36
  describe("when using default options", () => {
28
37
  const MasterCell = masterCellBuilder({ cellConfiguration: testCellStyle });
29
38
 
30
- it("returns a function", () => {
31
- expect(MasterCell).toMatchSnapshot();
32
- });
33
-
34
39
  it("renders correctly", () => {
35
- const wrapper = shallow(
36
- <View>
40
+ const wrapper = renderWithProviders(
41
+ <View testID="master-cell">
37
42
  <MasterCell item={entry} />
38
43
  </View>
39
44
  );
40
45
 
41
- expect(shallowToJson(wrapper)).toMatchSnapshot();
42
- });
43
-
44
- it("can be invoked as a React Component", () => {
45
- const wrapper = shallow(<MasterCell item={entry} state={null} />);
46
-
47
- expect(shallowToJson(wrapper)).toMatchSnapshot();
46
+ expect(wrapper.getByTestId("master-cell").children[0]).toBeDefined();
48
47
  });
49
48
  });
50
49
 
51
- describe("when using custom containerStyle", () => {
50
+ describe.skip("when using custom containerStyle", () => {
52
51
  const MasterCell = masterCellBuilder({
53
52
  cellConfiguration: singleView,
54
53
  containerStyle: { backgroundColor: "black" },
55
54
  });
56
55
 
57
56
  it("renders correctly", () => {
58
- const renderer = shallow(<MasterCell item={entry} />);
59
- expect(shallowToJson(renderer)).toMatchSnapshot();
57
+ renderWithProviders(<MasterCell item={entry} />);
58
+
59
+ // TODO define the test need
60
60
  });
61
61
  });
62
62
 
@@ -69,14 +69,14 @@ describe("masterCellBuilder", () => {
69
69
  });
70
70
 
71
71
  it("renders correctly", () => {
72
- const renderer = shallow(<MasterCell item={entry} />);
73
- expect(shallowToJson(renderer)).toMatchSnapshot();
72
+ renderWithProviders(<MasterCell item={entry} />);
73
+ // TODO define the test need
74
74
 
75
75
  expect(dataAdapter).toHaveBeenCalledWith(singleView);
76
76
  });
77
77
  });
78
78
 
79
- describe("when using custom default components", () => {
79
+ describe.skip("when using custom default components", () => {
80
80
  // the collapsable prop is added here to easily check from the snapshot that the mock
81
81
  // component is being used instead of the default one
82
82
  const CustomView = jest.fn((props) => <View {...props} collapsable />);
@@ -88,8 +88,8 @@ describe("masterCellBuilder", () => {
88
88
  });
89
89
 
90
90
  it("renders correctly", () => {
91
- const renderer = shallow(<MasterCell item={entry} />);
92
- expect(shallowToJson(renderer)).toMatchSnapshot();
91
+ renderWithProviders(<MasterCell item={entry} />);
92
+ // TODO define the test need
93
93
  });
94
94
  });
95
95
  });
@@ -16,13 +16,13 @@ export class MasterCellAsyncRenderManager {
16
16
  }
17
17
 
18
18
  public emitAsyncElementRegistrate = () => {
19
- this.asyncElementRegistrate$.next();
19
+ this.asyncElementRegistrate$.next(null);
20
20
 
21
21
  return this.decrementAsyncElementRegistrationCount;
22
22
  };
23
23
 
24
24
  public emitAsyncElementLayout = () => {
25
- this.asyncElementLayout$.next();
25
+ this.asyncElementLayout$.next(null);
26
26
  };
27
27
 
28
28
  public decrementAsyncElementRegistrationCount = () => {
@@ -8,7 +8,7 @@ import { MasterCellAsyncRenderManager } from "./MasterCellAsyncRenderManager";
8
8
  const layoutMeasure = (viewRef, onMeasure) => {
9
9
  viewRef?.measureLayout?.(
10
10
  findNodeHandle(viewRef),
11
- (x, y, width, height) => {
11
+ (_x, _y, width, height) => {
12
12
  onMeasure({ width, height });
13
13
  },
14
14
  noop
@@ -16,7 +16,7 @@ const layoutMeasure = (viewRef, onMeasure) => {
16
16
  };
17
17
 
18
18
  const regularMeasure = (viewRef, onMeasure) => {
19
- viewRef?.measure?.((x, y, width, height) => {
19
+ viewRef?.measure?.((_x, _y, width, height) => {
20
20
  onMeasure({ width, height });
21
21
  });
22
22
  };
@@ -0,0 +1,136 @@
1
+ import { playerManager } from "@applicaster/zapp-react-native-utils/appUtils";
2
+ import { StorageSingleValueProvider } from "@applicaster/zapp-react-native-bridge/ZappStorage/StorageSingleSelectProvider";
3
+ import { PushTopicManager } from "@applicaster/zapp-react-native-bridge/PushNotifications/PushTopicManager";
4
+ import { StorageMultiSelectProvider } from "@applicaster/zapp-react-native-bridge/ZappStorage/StorageMultiSelectProvider";
5
+ import React, { useEffect } from "react";
6
+ import { usePlayer } from "@applicaster/zapp-react-native-utils/appUtils/playerManager/usePlayer";
7
+ import { BehaviorSubject } from "rxjs";
8
+ import { masterCellLogger } from "../logger";
9
+ import get from "lodash/get";
10
+
11
+ const parseContextKey = (key: string): string | null => {
12
+ if (!key?.startsWith("@{ctx/")) return null;
13
+
14
+ return key.substring("@{ctx/".length, key.length - 1);
15
+ };
16
+
17
+ const getDataSourceProvider = (
18
+ behavior: Behavior
19
+ ): BehaviorSubject<string[] | string> | null => {
20
+ if (!behavior) return null;
21
+
22
+ const selection = String(behavior.current_selection);
23
+ const contextKey = parseContextKey(selection);
24
+
25
+ if (contextKey) {
26
+ if (behavior.select_mode === "multi") {
27
+ return StorageMultiSelectProvider.getProvider(contextKey).getObservable();
28
+ }
29
+
30
+ if (behavior.select_mode === "single") {
31
+ return StorageSingleValueProvider.getProvider(contextKey).getObservable();
32
+ }
33
+ }
34
+
35
+ if (behavior.selection_source === "@{push/topics}") {
36
+ return PushTopicManager.getInstance().getEntryObservable();
37
+ }
38
+
39
+ return null;
40
+ };
41
+
42
+ export const useBehaviorUpdate = (behavior: Behavior) => {
43
+ const [lastUpdate, setLastUpdate] = React.useState<number | null>(null);
44
+ const player = usePlayer();
45
+
46
+ const triggerUpdate = () => setLastUpdate(Date.now());
47
+
48
+ useEffect(() => {
49
+ if (!behavior) return;
50
+
51
+ const dataSource = getDataSourceProvider(behavior);
52
+
53
+ if (dataSource) {
54
+ const subscription = dataSource.subscribe(triggerUpdate);
55
+
56
+ return () => subscription.unsubscribe();
57
+ }
58
+ }, [behavior]);
59
+
60
+ useEffect(() => {
61
+ if (!behavior || !player || behavior.selection_source !== "now_playing") {
62
+ return;
63
+ }
64
+
65
+ const subscription = player.getEntryObservable().subscribe(triggerUpdate);
66
+
67
+ return () => subscription.unsubscribe();
68
+ }, [behavior, player]);
69
+
70
+ return lastUpdate;
71
+ };
72
+
73
+ // We cant use async in this function (its inside render),
74
+ // so we rely on useBehaviorUpdate to update current value and trigger re-render
75
+ export const isCellSelected = (
76
+ item: ZappEntry,
77
+ behavior?: Behavior
78
+ ): boolean => {
79
+ if (!behavior) return false;
80
+
81
+ const id = behavior.selector ? get(item, behavior.selector) : item.id;
82
+
83
+ if (behavior.selection_source === "now_playing") {
84
+ const player = playerManager.getActivePlayer();
85
+
86
+ return player?.entry?.id === id;
87
+ }
88
+
89
+ if (behavior.selection_source === "@{push/topics}") {
90
+ if (behavior.select_mode === "single") {
91
+ masterCellLogger.warning(
92
+ "Unexpected single selection mode for push topics"
93
+ );
94
+ }
95
+
96
+ const tags = PushTopicManager.getInstance().getRegisteredTags();
97
+
98
+ return tags.includes(String(id));
99
+ }
100
+
101
+ const selection = String(behavior.current_selection);
102
+ const contextKey = parseContextKey(selection);
103
+
104
+ if (contextKey) {
105
+ if (behavior.select_mode === "single") {
106
+ const selectedItem =
107
+ StorageSingleValueProvider.getProvider(contextKey)?.getValue();
108
+
109
+ return selectedItem === String(id);
110
+ }
111
+
112
+ if (behavior.select_mode === "multi") {
113
+ const selectedItems =
114
+ StorageMultiSelectProvider.getProvider(contextKey)?.getSelectedItems();
115
+
116
+ return selectedItems?.includes(String(id));
117
+ }
118
+ }
119
+
120
+ if (behavior.select_mode === "single") {
121
+ return behavior.current_selection === id;
122
+ }
123
+
124
+ if (
125
+ behavior.select_mode === "multi" &&
126
+ Array.isArray(behavior.current_selection)
127
+ ) {
128
+ const currentSelection: string[] = behavior.current_selection.map(
129
+ (item): string => String(item)
130
+ );
131
+
132
+ return currentSelection.includes(String(id));
133
+ }
134
+
135
+ return false;
136
+ };