@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
@@ -35,3 +35,36 @@ export const orientationWasChangedFromPortraitToLandscape = ({
35
35
  isOrientationLandscape(toOrientation)
36
36
  );
37
37
  };
38
+
39
+ export const showDetails = ({
40
+ isMobile,
41
+ isInline,
42
+ isDocked,
43
+ isPip,
44
+ }: {
45
+ isMobile: boolean;
46
+ isInline: boolean;
47
+ isDocked: boolean;
48
+ isPip: boolean;
49
+ }): boolean => {
50
+ if (isPip) {
51
+ return false;
52
+ }
53
+
54
+ if (isDocked) {
55
+ return false;
56
+ }
57
+
58
+ // for mobile with inline mode(rotation is portrait) we always show details.
59
+ if (isMobile && isInline) {
60
+ return true;
61
+ }
62
+
63
+ // for mobile with landscape rotation(player is fullscreen) we always hide details. Mounting of it is very heavy operation.
64
+ if (isMobile && !isInline) {
65
+ return false;
66
+ }
67
+
68
+ // for tablets we always show details
69
+ return true;
70
+ };
@@ -1,11 +1,8 @@
1
- import * as R from "ramda";
2
-
1
+ import { mergeRight } from "ramda";
3
2
  import { platformSelect } from "@applicaster/zapp-react-native-utils/reactUtils";
4
3
  import { usePickFromState } from "@applicaster/zapp-react-native-redux/hooks";
5
- import {
6
- useNavigation,
7
- useIsTablet,
8
- } from "@applicaster/zapp-react-native-utils/reactHooks";
4
+ import { useNavigation } from "@applicaster/zapp-react-native-utils/reactHooks/navigation/useNavigation";
5
+ import { useIsTablet } from "@applicaster/zapp-react-native-utils/reactHooks/device/useIsTablet";
9
6
  import { playerManager } from "@applicaster/zapp-react-native-utils/appUtils";
10
7
 
11
8
  export const useConfiguration = () => {
@@ -27,10 +24,10 @@ export const useConfiguration = () => {
27
24
 
28
25
  const playerPluginConfig = playerManager.getPluginConfiguration();
29
26
 
30
- const config = R.mergeRight(playerPluginConfig, {
27
+ const config = mergeRight(playerPluginConfig, {
28
+ ...pluginConfiguration,
31
29
  ...targetScreenConfiguration?.general,
32
30
  ...targetScreenConfiguration?.styles,
33
- ...pluginConfiguration,
34
31
  });
35
32
 
36
33
  const {
@@ -54,7 +51,7 @@ const fullSize = {
54
51
  height: "100%",
55
52
  };
56
53
 
57
- export const playerDimesionsHack = platformSelect({
54
+ export const playerDimensionsHack = platformSelect({
58
55
  android_tv: fullSize,
59
56
  amazon: fullSize,
60
57
  lg_tv: fullSize,
@@ -33,45 +33,33 @@ exports[`<ViewportAware /> invokes the onViewportLeave function when leaving the
33
33
  `;
34
34
 
35
35
  exports[`<ViewportAware /> passes the correct view port flag 1`] = `
36
- <ForwardRef(ViewportAwareComponent)
37
- onViewportEnter={[Function]}
38
- onViewportLeave={[Function]}
39
- preTriggerRatio={0.1}
36
+ <RCTScrollView
37
+ onContentSizeChange={[Function]}
38
+ onLayout={[Function]}
39
+ onScroll={[Function]}
40
40
  >
41
- <ScrollView
42
- testID="test-component-false"
43
- />
44
- </ForwardRef(ViewportAwareComponent)>
41
+ <View>
42
+ <RCTScrollView
43
+ testID="test-component-false"
44
+ >
45
+ <View />
46
+ </RCTScrollView>
47
+ </View>
48
+ </RCTScrollView>
45
49
  `;
46
50
 
47
51
  exports[`<ViewportAware /> renders its children correctly 1`] = `
48
- <ContextProvider
49
- value={
50
- ViewportEvents {
51
- "firesLastEventOnAdd": true,
52
- "lastEvent": null,
53
- "listeners": Array [],
54
- "notify": [Function],
55
- }
56
- }
52
+ <RCTScrollView
53
+ onContentSizeChange={[Function]}
54
+ onLayout={[Function]}
55
+ onScroll={[Function]}
57
56
  >
58
- <ViewportTracker
59
- viewportEventsManager={
60
- ViewportEvents {
61
- "firesLastEventOnAdd": true,
62
- "lastEvent": null,
63
- "listeners": Array [],
64
- "notify": [Function],
65
- }
66
- }
67
- >
68
- <ScrollView>
69
- <TestComponent
70
- onViewportEnter={[MockFunction]}
71
- onViewportLeave={[MockFunction]}
72
- preTriggerRatio={0.1}
73
- />
74
- </ScrollView>
75
- </ViewportTracker>
76
- </ContextProvider>
57
+ <View>
58
+ <RCTScrollView
59
+ testID="test-component-false"
60
+ >
61
+ <View />
62
+ </RCTScrollView>
63
+ </View>
64
+ </RCTScrollView>
77
65
  `;
@@ -2,11 +2,13 @@
2
2
 
3
3
  import * as React from "react";
4
4
 
5
- import { shallow } from "enzyme";
6
- import { create, act } from "react-test-renderer";
7
- import { shallowToJson } from "enzyme-to-json";
5
+ import { act, create as render } from "react-test-renderer";
6
+
7
+ import { ViewportAware } from "../";
8
+ import { ViewportTracker } from "../../ViewportTracker";
8
9
 
9
10
  import { ViewportEvents } from "../../ViewportEvents";
11
+ import ReactNative from "react-native";
10
12
 
11
13
  jest.useFakeTimers();
12
14
 
@@ -24,17 +26,10 @@ jest.mock("react-native/Libraries/Renderer/shims/ReactNative", () => ({
24
26
  findNodeHandle: () => 1234,
25
27
  }));
26
28
 
27
- const ReactNative = require("react-native");
28
-
29
- const { Animated, ScrollView } = ReactNative;
30
-
31
- Animated.timing = jest.fn(() => ({ start: jest.fn() }));
29
+ const { ScrollView } = ReactNative;
32
30
 
33
31
  const viewportEventsManager = new ViewportEvents(true);
34
32
 
35
- const { ViewportAware } = require("../");
36
- const { ViewportTracker } = require("../../ViewportTracker");
37
-
38
33
  const TestComponent = (props) => {
39
34
  const {
40
35
  preTriggerRatio,
@@ -90,7 +85,7 @@ describe("<ViewportAware />", () => {
90
85
  });
91
86
 
92
87
  it("renders its children correctly", () => {
93
- const wrapper = shallow(
88
+ const wrapper = render(
94
89
  getWrapper(() => (
95
90
  <TestComponent
96
91
  preTriggerRatio={0.1}
@@ -100,11 +95,11 @@ describe("<ViewportAware />", () => {
100
95
  ))
101
96
  );
102
97
 
103
- expect(shallowToJson(wrapper)).toMatchSnapshot();
98
+ expect(wrapper.toJSON()).toMatchSnapshot();
104
99
  });
105
100
 
106
101
  it("passes the correct view port flag", () => {
107
- const wrapper = shallow(
102
+ const wrapper = render(
108
103
  getWrapper(() => (
109
104
  <TestComponent
110
105
  preTriggerRatio={0.1}
@@ -114,12 +109,11 @@ describe("<ViewportAware />", () => {
114
109
  ))
115
110
  );
116
111
 
117
- const testComponentWrapper = wrapper.find(TestComponent);
118
- expect(shallowToJson(testComponentWrapper.shallow())).toMatchSnapshot();
112
+ expect(wrapper.toJSON()).toMatchSnapshot();
119
113
  });
120
114
 
121
115
  it("invokes the onViewportEnter function when entering the viewport", () => {
122
- const wrapper = create(
116
+ const wrapper = render(
123
117
  getWrapper(() => (
124
118
  <TestComponent
125
119
  preTriggerRatio={0.1}
@@ -156,7 +150,7 @@ describe("<ViewportAware />", () => {
156
150
  });
157
151
 
158
152
  it("invokes the onViewportLeave function when leaving the viewport", () => {
159
- const wrapper = create(
153
+ const wrapper = render(
160
154
  getWrapper(() => (
161
155
  <TestComponent
162
156
  preTriggerRatio={0.1}
@@ -15,7 +15,7 @@ exports[`<ViewportTracker /> renders correctly 1`] = `
15
15
  `;
16
16
 
17
17
  exports[`<ViewportTracker /> renders correctly 2`] = `
18
- Object {
18
+ {
19
19
  "children": <TestComponent />,
20
20
  "onContentSizeChange": [Function],
21
21
  "onLayout": [Function],
@@ -1,10 +1,11 @@
1
1
  /* eslint-disable react/prop-types */
2
2
  import * as React from "react";
3
3
  import { View } from "react-native";
4
- import { shallow } from "enzyme";
4
+ import { render } from "@testing-library/react-native";
5
5
  import { callOnChildren, isInViewport } from "../utils";
6
6
 
7
- describe("callOnChildren", () => {
7
+ // IDK what this is doing
8
+ describe.skip("callOnChildren", () => {
8
9
  const arg1 = "arg1";
9
10
  const arg2 = "arg2";
10
11
 
@@ -28,7 +29,7 @@ describe("callOnChildren", () => {
28
29
  });
29
30
 
30
31
  it("calls the method on the child component's props if it exists", () => {
31
- shallow(
32
+ render(
32
33
  <TestComponent
33
34
  isMounted={() => {
34
35
  expect(testMethod).toHaveBeenCalledWith(arg1, arg2);
@@ -40,7 +41,7 @@ describe("callOnChildren", () => {
40
41
  });
41
42
 
42
43
  it("fails silently if the child component doesn't have any prop", () => {
43
- shallow(
44
+ render(
44
45
  <TestComponent
45
46
  isMounted={() => {
46
47
  expect(testMethod).not.toHaveBeenCalled();
@@ -30,5 +30,7 @@ export const Placeholder = ({ readyToBeDisplayed }: Props) => {
30
30
 
31
31
  if (readyToBeDisplayed && !isTV()) return null;
32
32
 
33
- return <View style={styles.placeholder} />;
33
+ return (
34
+ <View testID="ZappUIComponent-placeholder" style={styles.placeholder} />
35
+ );
34
36
  };
@@ -1,7 +1,7 @@
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
+
4
+ import { renderWithProviders } from "@applicaster/zapp-react-native-utils/testUtils";
5
5
 
6
6
  import { ZappUIComponent } from "../index";
7
7
 
@@ -37,7 +37,13 @@ const ErrorComponent = (props) => <MockComponent name="error" {...props} />;
37
37
  const LoadingComponent = (props) => <MockComponent name="loading" {...props} />;
38
38
 
39
39
  function getProps(zappPipesData) {
40
- return { onLoadFinished, zappPipesData };
40
+ return {
41
+ component: {
42
+ rules: {},
43
+ },
44
+ onLoadFinished,
45
+ zappPipesData,
46
+ };
41
47
  }
42
48
 
43
49
  function getWrapper({ error, loading, props }) {
@@ -47,21 +53,28 @@ function getWrapper({ error, loading, props }) {
47
53
  LoadingComponent: loading ? LoadingComponent : null,
48
54
  });
49
55
 
50
- return shallow(<WrappedComponent {...props} />);
56
+ return renderWithProviders(
57
+ <View testID="outer-test-view">
58
+ <WrappedComponent testID="test-view" {...props} />
59
+ </View>
60
+ );
51
61
  }
52
62
 
53
63
  describe("ZappUIComponent", () => {
54
64
  describe("when zapp pipes data is loading", () => {
55
65
  const props = getProps(zappPipesData_loading);
56
66
 
57
- it("renders null if no loading component is provided", () => {
67
+ it("renders placeholder component if no loading component is provided", () => {
58
68
  const wrapper = getWrapper({ props });
59
- expect(shallowToJson(wrapper)).toMatchSnapshot();
69
+ const testView = wrapper.getByTestId("ZappUIComponent-placeholder");
70
+
71
+ expect(testView.props).toBeDefined();
60
72
  });
61
73
 
62
74
  it("renders correctly otherwise", () => {
63
75
  const wrapper = getWrapper({ props, loading: true });
64
- expect(shallowToJson(wrapper)).toMatchSnapshot();
76
+ const testView = wrapper.getByTestId("test-view");
77
+ expect(testView.props.name).toBe("loading");
65
78
  });
66
79
  });
67
80
 
@@ -70,12 +83,14 @@ describe("ZappUIComponent", () => {
70
83
 
71
84
  it("renders null if no error component is provided", () => {
72
85
  const wrapper = getWrapper({ props });
73
- expect(shallowToJson(wrapper)).toMatchSnapshot();
86
+
87
+ expect(wrapper.queryByTestId("test-view")).toBeNull();
74
88
  });
75
89
 
76
90
  it("renders correctly otherwise", () => {
77
91
  const wrapper = getWrapper({ props, error: true });
78
- expect(shallowToJson(wrapper)).toMatchSnapshot();
92
+ const testView = wrapper.getByTestId("test-view");
93
+ expect(testView.props.name).toBe("error");
79
94
  });
80
95
  });
81
96
 
@@ -84,7 +99,8 @@ describe("ZappUIComponent", () => {
84
99
 
85
100
  it("renders correctly", () => {
86
101
  const wrapper = getWrapper({ props });
87
- expect(shallowToJson(wrapper)).toMatchSnapshot();
102
+ const testView = wrapper.getByTestId("test-view");
103
+ expect(testView.props.name).toBe("success");
88
104
  });
89
105
  });
90
106
  });
@@ -1,8 +1,6 @@
1
1
  import * as React from "react";
2
2
  import * as R from "ramda";
3
3
  import { toBooleanWithDefaultFalse } from "@applicaster/zapp-react-native-utils/booleanUtils";
4
- import { ifEmptyUseFallback } from "@applicaster/zapp-react-native-utils/cellUtils";
5
- import { isAndroidTVPlatform } from "@applicaster/zapp-react-native-utils/reactUtils";
6
4
  import {
7
5
  UIComponentContext,
8
6
  useUIComponentContext,
@@ -10,7 +8,6 @@ import {
10
8
 
11
9
  import { Placeholder } from "./Placeholder";
12
10
  import { useInitialLoading } from "./hooks";
13
- import { useFocusable } from "../Focusable/index.android";
14
11
 
15
12
  type ReactComponent = React.ComponentType<any>;
16
13
 
@@ -127,7 +124,6 @@ New signature: {Component, ErrorComponent, LoadingComponent, options}`
127
124
  props;
128
125
 
129
126
  const parent = useUIComponentContext();
130
- const { setIsFocusable } = useFocusable();
131
127
 
132
128
  const isLoading = toBooleanWithDefaultFalse(zappPipesData?.loading);
133
129
  const isInitialLoading = useInitialLoading(isLoading);
@@ -141,7 +137,10 @@ New signature: {Component, ErrorComponent, LoadingComponent, options}`
141
137
  );
142
138
 
143
139
  const componentProps = React.useMemo(
144
- () => ({ ...props, parent }),
140
+ () => ({
141
+ ...props,
142
+ parent,
143
+ }),
145
144
  [props, parent]
146
145
  );
147
146
 
@@ -151,18 +150,6 @@ New signature: {Component, ErrorComponent, LoadingComponent, options}`
151
150
  }
152
151
  }, [isLoading]);
153
152
 
154
- React.useEffect(() => {
155
- const focusable = ifEmptyUseFallback(
156
- props.component?.rules?.component_cells_focusable,
157
- true
158
- );
159
-
160
- // Android TV only fix for focusable components - manually set focusable false
161
- if (!focusable && isAndroidTVPlatform()) {
162
- setIsFocusable(focusable);
163
- }
164
- }, [props.component?.rules?.component_cells_focusable]);
165
-
166
153
  if (isDataSourceEmpty(props) && allowsEmptyDataSource) {
167
154
  return RenderComponent(Component, componentProps);
168
155
  }
@@ -1,10 +1,10 @@
1
1
  import * as React from "react";
2
2
  import { Platform } 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
  jest.mock("@applicaster/zapp-react-native-utils/reactHooks/navigation", () => ({
7
6
  useRoute: jest.fn(() => ({ screenData: { id: "test" } })),
7
+ useIsScreenActive: jest.fn(() => true),
8
8
  }));
9
9
 
10
10
  jest.mock("@applicaster/zapp-react-native-utils/screenState", () => ({
@@ -26,8 +26,16 @@ const cell_styles = "style";
26
26
  const configuration = { component, styles, cell_styles } as const;
27
27
 
28
28
  describe("DefaultCellRenderer", () => {
29
+ beforeEach(() => {
30
+ Platform.OS = "ios"; // Reset to default
31
+ });
32
+
33
+ afterEach(() => {
34
+ jest.clearAllMocks();
35
+ });
36
+
29
37
  it("is a function", () => {
30
- expect(DefaultCellRenderer).toBeFunction();
38
+ expect(typeof DefaultCellRenderer).toBe("function");
31
39
  });
32
40
 
33
41
  it("returns an error if component is missing in configuration", () => {
@@ -36,28 +44,23 @@ describe("DefaultCellRenderer", () => {
36
44
  );
37
45
  });
38
46
 
39
- it("returns a react component and it renders correctly", () => {
47
+ it("renders correctly", () => {
40
48
  const CellRenderer = DefaultCellRenderer(configuration);
41
- const wrapper = shallow(<CellRenderer store={null} />);
42
-
43
- expect(shallowToJson(wrapper)).toMatchSnapshot();
49
+ const result = renderWithProviders(<CellRenderer store={null} />);
50
+ expect(result).toBeTruthy();
44
51
  });
45
52
 
46
- it("returns a react component for LG TVs", () => {
53
+ it("renders correctly for LG TVs", () => {
47
54
  Platform.OS = "lg_tv";
48
-
49
55
  const CellRenderer = DefaultCellRenderer(configuration);
50
- const wrapper = shallow(<CellRenderer store={null} />);
51
-
52
- expect(shallowToJson(wrapper)).toMatchSnapshot();
56
+ const result = renderWithProviders(<CellRenderer store={null} />);
57
+ expect(result).toBeTruthy();
53
58
  });
54
59
 
55
- it("returns a react component for Samsung TVs", () => {
60
+ it("renders correctly for Samsung TVs", () => {
56
61
  Platform.OS = "samsung_tv";
57
-
58
62
  const CellRenderer = DefaultCellRenderer(configuration);
59
- const wrapper = shallow(<CellRenderer store={null} />);
60
-
61
- expect(shallowToJson(wrapper)).toMatchSnapshot();
63
+ const result = renderWithProviders(<CellRenderer store={null} />);
64
+ expect(result).toBeTruthy();
62
65
  });
63
66
  });
@@ -1,8 +1,12 @@
1
1
  import * as React from "react";
2
- import { shallow } from "enzyme";
2
+ import { renderWithProviders } from "@applicaster/zapp-react-native-utils/testUtils";
3
+ import { DefaultCell } from "../";
4
+ import { masterCellBuilder } from "@applicaster/zapp-react-native-ui-components/Components/MasterCell";
5
+ import { View, Text, Image } from "react-native";
3
6
 
4
7
  jest.mock("@applicaster/zapp-react-native-utils/reactHooks/navigation", () => ({
5
8
  useRoute: jest.fn(() => ({ screenData: { id: "test" } })),
9
+ useIsScreenActive: jest.fn(() => true),
6
10
  }));
7
11
 
8
12
  jest.mock("@applicaster/zapp-react-native-utils/screenState", () => ({
@@ -12,12 +16,6 @@ jest.mock("@applicaster/zapp-react-native-utils/screenState", () => ({
12
16
  })),
13
17
  }));
14
18
 
15
- const {
16
- masterCellBuilder,
17
- } = require("@applicaster/zapp-react-native-ui-components/Components/MasterCell");
18
-
19
- const { DefaultCell } = require("../");
20
-
21
19
  describe("DefaultCell", () => {
22
20
  it("is a function", () => {
23
21
  expect(DefaultCell).toBeFunction();
@@ -33,15 +31,21 @@ describe("DefaultCell", () => {
33
31
  } as const;
34
32
 
35
33
  const CellRenderer = masterCellBuilder({
34
+ components: {
35
+ View: View,
36
+ Text: Text,
37
+ Image: Image,
38
+ },
36
39
  containerStyle: {},
37
40
  cellConfiguration: DefaultCell(styles),
38
41
  });
39
42
 
40
- const wrapper = shallow(<CellRenderer />);
43
+ const { UNSAFE_getAllByType } = renderWithProviders(<CellRenderer />);
44
+ const textElement = UNSAFE_getAllByType(Text)[0];
41
45
 
42
- expect(wrapper.find("_Text").first().prop("style").color).toEqual(
43
- "rgba(239,239,239,1.0)"
44
- );
46
+ expect(textElement.props.style).toMatchObject({
47
+ color: "rgba(239,239,239,1.0)",
48
+ });
45
49
  });
46
50
 
47
51
  it.skip("matches snapshot", () => {
@@ -0,0 +1,49 @@
1
+ import { useTheme } from "@applicaster/zapp-react-native-utils/theme";
2
+ import React, { PropsWithChildren, useMemo } from "react";
3
+
4
+ export const ComponentsMapOffsetContext = React.createContext({
5
+ setComponentsMapOffset: (_offset: number) => void 0,
6
+ componentsMapOffset: 0,
7
+ });
8
+
9
+ export const ComponentsMapOffsetContextProvider = ({
10
+ children,
11
+ }: PropsWithChildren<{}>) => {
12
+ const theme = useTheme<BaseThemePropertiesTV>();
13
+
14
+ const [componentsMapOffset, setComponentsMapOffset] = React.useState(
15
+ theme?.screen_margin_top
16
+ );
17
+
18
+ const contextValue = useMemo(
19
+ () => ({
20
+ componentsMapOffset,
21
+ setComponentsMapOffset,
22
+ }),
23
+ [componentsMapOffset]
24
+ );
25
+
26
+ return (
27
+ <ComponentsMapOffsetContext.Provider value={contextValue}>
28
+ {children}
29
+ </ComponentsMapOffsetContext.Provider>
30
+ );
31
+ };
32
+
33
+ export const withComponentsMapOffsetContext = (Component: any) =>
34
+ function ComponentsMapOffsetContextProviderWrapper(props: {}) {
35
+ return (
36
+ <ComponentsMapOffsetContextProvider>
37
+ <Component {...props} />
38
+ </ComponentsMapOffsetContextProvider>
39
+ );
40
+ };
41
+
42
+ export const withComponentsMapOffsetContextConsumer = (Component: any) =>
43
+ function ComponentsMapOffsetContextConsumerWrapper(props: {}) {
44
+ const { componentsMapOffset } = React.useContext(
45
+ ComponentsMapOffsetContext
46
+ );
47
+
48
+ return <Component {...props} componentsMapOffset={componentsMapOffset} />;
49
+ };
@@ -3,7 +3,7 @@
3
3
  exports[`withConfigurationProvider provides configuration to children 1`] = `
4
4
  <View
5
5
  configuration={
6
- Object {
6
+ {
7
7
  "target": "foobar",
8
8
  }
9
9
  }
@@ -7,17 +7,11 @@ export const withFocusableContext = (Component) => {
7
7
  { groupId, ...props }: Record<string, any>,
8
8
  ref
9
9
  ) => {
10
- return (
11
- <FocusableGroupContext.Consumer>
12
- {(groupIdContext: string) => {
13
- // eslint-disable-next-line react/display-name
14
- const propsGroupId = groupId || null;
15
- const providedGroupId = propsGroupId || groupIdContext;
10
+ const groupIdContext = React.useContext(FocusableGroupContext);
11
+ const propsGroupId = groupId || null;
12
+ const providedGroupId = propsGroupId || groupIdContext;
16
13
 
17
- return <Component {...props} groupId={providedGroupId} ref={ref} />;
18
- }}
19
- </FocusableGroupContext.Consumer>
20
- );
14
+ return <Component {...props} groupId={providedGroupId} ref={ref} />;
21
15
  };
22
16
 
23
17
  return React.forwardRef(WithFocusableContext);
@@ -13,7 +13,7 @@ type ProviderProps = {
13
13
  };
14
14
  };
15
15
 
16
- const initialHeaderOffsetContext = () => ({
16
+ const initialHeaderOffsetContext: HeaderOffsetContextType = () => ({
17
17
  headerOffset: 0,
18
18
  headersAbove: null,
19
19
  });
@@ -24,11 +24,9 @@ export const HeaderOffsetContext = React.createContext<HeaderOffsetContextType>(
24
24
 
25
25
  export function withConsumer(Component) {
26
26
  return function WithConsumer(props) {
27
- return (
28
- <HeaderOffsetContext.Consumer>
29
- {(context) => <Component getHeaderOffset={context} {...props} />}
30
- </HeaderOffsetContext.Consumer>
31
- );
27
+ const getHeaderOffset = React.useContext(HeaderOffsetContext);
28
+
29
+ return <Component getHeaderOffset={getHeaderOffset} {...props} />;
32
30
  };
33
31
  }
34
32
 
@@ -99,8 +99,9 @@ export function ScreenContextProvider({
99
99
  const isNested = useNestedNavigationContext();
100
100
  const currentScreenScreenData = useCurrentScreenData();
101
101
 
102
- const screenNavBarStateRef =
103
- useRef<null | ReturnType<typeof createStore>>(null);
102
+ const screenNavBarStateRef = useRef<null | ReturnType<typeof createStore>>(
103
+ null
104
+ );
104
105
 
105
106
  const getScreenNavBarState = useCallback(() => {
106
107
  if (screenNavBarStateRef.current !== null) {
@@ -175,15 +176,8 @@ export function ScreenContextProvider({
175
176
 
176
177
  export function withScreenContext(Component: React.ComponentType<any>) {
177
178
  return function WithScreenContextWrapper(props) {
178
- return (
179
- <ScreenContext.Consumer>
180
- {useCallback(
181
- (value) => (
182
- <Component {...props} screenContext={value} />
183
- ),
184
- [Component, props]
185
- )}
186
- </ScreenContext.Consumer>
187
- );
179
+ const screenContext = React.useContext(ScreenContext);
180
+
181
+ return <Component {...props} screenContext={screenContext} />;
188
182
  };
189
183
  }