@applicaster/zapp-react-native-ui-components 13.0.0-alpha.1177234712 → 13.0.0-alpha.1199723621

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 (109) hide show
  1. package/Components/AppContainer/__tests__/AppContainer.test.js +4 -6
  2. package/Components/AudioPlayer/__tests__/Runtime.test.js +5 -8
  3. package/Components/AudioPlayer/__tests__/__snapshots__/audioPlayer.test.js.snap +54 -111
  4. package/Components/AudioPlayer/__tests__/__snapshots__/audioPlayerLayout.test.js.snap +36 -20
  5. package/Components/AudioPlayer/__tests__/artWork.test.js +3 -5
  6. package/Components/AudioPlayer/__tests__/audioPlayer.test.js +3 -5
  7. package/Components/AudioPlayer/__tests__/audioPlayerLayout.test.js +7 -8
  8. package/Components/AudioPlayer/__tests__/channel.test.js +3 -5
  9. package/Components/AudioPlayer/__tests__/summary.test.js +3 -5
  10. package/Components/AudioPlayer/__tests__/title.test.js +3 -5
  11. package/Components/BaseFocusable/index.ios.ts +1 -1
  12. package/Components/BaseFocusable/index.tsx +2 -3
  13. package/Components/Cell/Cell.tsx +1 -0
  14. package/Components/Cell/CellWithFocusable.tsx +43 -58
  15. package/Components/Cell/TvOSCellComponent.tsx +20 -22
  16. package/Components/Cell/__tests__/CellWIthFocusable.test.js +13 -6
  17. package/Components/Cell/index.js +3 -1
  18. package/Components/CellRendererResolver/__tests__/cellRendererResolver.test.js +46 -48
  19. package/Components/ComponentResolver/__tests__/__snapshots__/componentResolver.test.js.snap +1 -42
  20. package/Components/ComponentResolver/__tests__/componentResolver.test.js +16 -22
  21. package/Components/ContentScreen/__tests__/contentScreen.test.js +3 -3
  22. package/Components/ErrorScreen/index.tsx +6 -6
  23. package/Components/Focusable/Focusable.tsx +1 -0
  24. package/Components/Focusable/FocusableTvOS.tsx +5 -1
  25. package/Components/Focusable/Touchable.tsx +19 -20
  26. package/Components/Focusable/index.android.tsx +10 -3
  27. package/Components/FocusableGroup/FocusableTvOS.tsx +34 -83
  28. package/Components/FocusableGroup/index.tsx +1 -3
  29. package/Components/FocusableList/index.tsx +26 -9
  30. package/Components/FocusableScrollView/index.tsx +43 -13
  31. package/Components/Layout/TV/NavBarContainer.tsx +19 -23
  32. package/Components/Layout/TV/__tests__/__snapshots__/NavBarContainer.test.tsx.snap +3 -2
  33. package/Components/Layout/TV/__tests__/__snapshots__/ScreenContainer.test.tsx.snap +3 -2
  34. package/Components/MasterCell/DefaultComponents/ActionButton.tsx +2 -3
  35. package/Components/MasterCell/DefaultComponents/BorderContainerView/__tests__/index.test.tsx +13 -7
  36. package/Components/MasterCell/DefaultComponents/ImageBorderContainer/__tests__/index.test.ts +0 -17
  37. package/Components/MasterCell/DefaultComponents/LiveImage/index.tsx +2 -2
  38. package/Components/MasterCell/DefaultComponents/SecondaryImage/utils.ts +1 -1
  39. package/Components/MasterCell/SharedUI/ProgressBar/hooks/useFillInPercent.ts +2 -8
  40. package/Components/MasterCell/__tests__/__snapshots__/elementMapper.test.js.snap +4 -12
  41. package/Components/MasterCell/__tests__/__snapshots__/masterCell.test.js.snap +0 -229
  42. package/Components/MasterCell/__tests__/elementMapper.test.js +18 -5
  43. package/Components/MasterCell/__tests__/masterCell.test.js +26 -26
  44. package/Components/MasterCell/hooks/useAsyncRendering/MasterCellAsyncRenderManager.ts +2 -2
  45. package/Components/MasterCell/utils/index.ts +1 -1
  46. package/Components/ModalComponent/Button/index.tsx +6 -6
  47. package/Components/ModalComponent/Header/index.tsx +3 -3
  48. package/Components/OfflineHandler/NotificationView/NotificationView.lg.tsx +2 -2
  49. package/Components/OfflineHandler/NotificationView/NotificationView.samsung.tsx +2 -2
  50. package/Components/OfflineHandler/NotificationView/__tests__/index.test.tsx +0 -5
  51. package/Components/PlayerContainer/PlayerContainer.tsx +8 -8
  52. package/Components/PlayerContainer/ProgramInfo/index.tsx +2 -2
  53. package/Components/PlayerImageBackground/index.tsx +23 -3
  54. package/Components/River/ComponentsMap/ComponentsMap.tsx +39 -65
  55. package/Components/River/ComponentsMap/hooks/useLoadingState.ts +78 -51
  56. package/Components/River/RiverFooter.tsx +39 -9
  57. package/Components/River/RiverItem.tsx +37 -2
  58. package/Components/River/TV/index.tsx +6 -1
  59. package/Components/River/__tests__/__snapshots__/componentsMap.test.js.snap +100 -31
  60. package/Components/River/__tests__/__snapshots__/river.test.js.snap +20 -82
  61. package/Components/River/__tests__/componentsMap.test.js +3 -4
  62. package/Components/River/__tests__/river.test.js +75 -40
  63. package/Components/RouteManager/__tests__/__snapshots__/routeManager.test.js.snap +11 -4
  64. package/Components/RouteManager/__tests__/routeManager.test.js +29 -14
  65. package/Components/RouteManager/__tests__/testId.test.js +8 -6
  66. package/Components/Screen/hooks.ts +56 -0
  67. package/Components/Screen/index.tsx +16 -42
  68. package/Components/ScreenResolver/__tests__/screenResolver.test.js +91 -70
  69. package/Components/Tabs/Tab.tsx +11 -9
  70. package/Components/TextInputTv/index.tsx +4 -3
  71. package/Components/Transitioner/AnimationManager.js +8 -8
  72. package/Components/Transitioner/Scene.tsx +53 -24
  73. package/Components/Transitioner/Transitioner.tsx +3 -3
  74. package/Components/Transitioner/__tests__/Scene.test.js +25 -14
  75. package/Components/Transitioner/__tests__/__snapshots__/Scene.test.js.snap +9 -49
  76. package/Components/Transitioner/__tests__/__snapshots__/transitioner.test.js.snap +2 -2
  77. package/Components/Transitioner/__tests__/transitioner.test.js +13 -4
  78. package/Components/Transitioner/index.js +8 -4
  79. package/Components/VideoLive/PlayerLiveImageComponent.tsx +14 -8
  80. package/Components/VideoModal/ModalAnimation/AnimatedScrollModal.tsx +11 -11
  81. package/Components/VideoModal/ModalAnimation/AnimationComponent.tsx +14 -13
  82. package/Components/VideoModal/ModalAnimation/ModalAnimationContext.tsx +2 -3
  83. package/Components/VideoModal/ModalAnimation/utils.ts +2 -2
  84. package/Components/VideoModal/PlayerDetails.tsx +9 -6
  85. package/Components/VideoModal/PlayerWrapper.tsx +2 -2
  86. package/Components/Viewport/ViewportAware/__tests__/__snapshots__/viewportAware.test.js.snap +24 -36
  87. package/Components/Viewport/ViewportAware/__tests__/viewportAware.test.js +12 -18
  88. package/Components/Viewport/__tests__/utils.test.js +5 -4
  89. package/Components/ZappUIComponent/Placeholder.tsx +3 -1
  90. package/Components/ZappUIComponent/__tests__/{ZappUIComponent.test.js → ZappUIComponent.test.tsx} +26 -10
  91. package/Components/ZappUIComponent/index.tsx +3 -16
  92. package/Components/default-cell-renderer/__tests__/defaultCellRenderer.test.tsx +20 -17
  93. package/Components/default-cell-renderer/viewTrees/tv/DefaultCell/__tests__/DefaultCell.test.tsx +15 -11
  94. package/Contexts/ComponentsMapOffsetContext/index.tsx +49 -0
  95. package/Contexts/ScreenContext/index.tsx +3 -2
  96. package/Decorators/Navigator/__tests__/navigator.test.js +16 -16
  97. package/Decorators/Navigator/index.tsx +1 -1
  98. package/Decorators/RiverResolver/__tests__/riverResolver.test.tsx +18 -24
  99. package/Decorators/RiverResolver/index.tsx +1 -1
  100. package/Decorators/ZappPipesDataConnector/__tests__/Hero.js +1 -1
  101. package/Decorators/ZappPipesDataConnector/__tests__/zappPipesDataConnector.test.js +29 -22
  102. package/package.json +7 -7
  103. package/Components/CellRendererResolver/__tests__/__snapshots__/cellRendererResolver.test.js.snap +0 -53
  104. package/Components/RouteManager/__tests__/__snapshots__/testId.test.js.snap +0 -17
  105. package/Components/ScreenResolver/__tests__/__snapshots__/screenResolver.test.js.snap +0 -17
  106. package/Components/ZappUIComponent/__tests__/__snapshots__/ZappUIComponent.test.js.snap +0 -91
  107. package/Components/default-cell-renderer/__tests__/__snapshots__/defaultCellRenderer.test.tsx.snap +0 -338
  108. package/Decorators/Navigator/__tests__/__snapshots__/navigator.test.js.snap +0 -18
  109. package/Decorators/RiverResolver/__tests__/__snapshots__/riverResolver.test.tsx.snap +0 -28
@@ -1,9 +1,18 @@
1
1
  import React from "react";
2
2
  import { Text, View } from "react-native";
3
- import { shallow } from "enzyme";
4
- import { shallowToJson } from "enzyme-to-json";
5
3
 
6
4
  import { TransitionerComponent } from "../Transitioner";
5
+ import { render } from "@testing-library/react-native";
6
+
7
+ jest.mock("../Scene", () => {
8
+ const View = jest.requireActual("react-native").View;
9
+
10
+ return {
11
+ Scene(props) {
12
+ return <View {...props} />;
13
+ },
14
+ };
15
+ });
7
16
 
8
17
  const children = (
9
18
  <View foo="bar">
@@ -33,12 +42,12 @@ jest.mock("uuid");
33
42
 
34
43
  describe("<TransitionerComponent />", () => {
35
44
  it("renders correctly", () => {
36
- const wrapper = shallow(
45
+ const wrapper = render(
37
46
  <TransitionerComponent {...transitionerComponentProps}>
38
47
  {children}
39
48
  </TransitionerComponent>
40
49
  );
41
50
 
42
- expect(shallowToJson(wrapper)).toMatchSnapshot();
51
+ expect(wrapper.toJSON()).toMatchSnapshot();
43
52
  });
44
53
  });
@@ -1,5 +1,4 @@
1
1
  import * as React from "react";
2
- import { useWindowDimensions } from "react-native";
3
2
  import { useNavigation } from "@applicaster/zapp-react-native-utils/reactHooks/navigation";
4
3
  import { useDimensions } from "@applicaster/zapp-react-native-utils/reactHooks/layout";
5
4
  import { usePickFromState } from "@applicaster/zapp-react-native-redux/hooks";
@@ -7,10 +6,15 @@ import { TransitionerComponent } from "./Transitioner";
7
6
 
8
7
  export const Transitioner = (props) => {
9
8
  const navigator = useNavigation();
10
- const { height, width } = useWindowDimensions();
11
9
 
12
- const dimensions = useDimensions("window", { deviceInfo: true });
13
- const isTablet = dimensions?.deviceInfo?.isTablet;
10
+ const {
11
+ width,
12
+ height,
13
+ deviceInfo: { isTablet },
14
+ } = useDimensions("window", {
15
+ updateForInactiveScreens: false,
16
+ deviceInfo: true,
17
+ });
14
18
 
15
19
  const { appData } = usePickFromState(["appData"]);
16
20
  const isTabletPortrait = appData?.isTabletPortrait;
@@ -1,6 +1,7 @@
1
1
  // /// <reference types="@applicaster/applicaster-types" />
2
2
  //
3
3
  import * as React from "react";
4
+ import { useEffect } from "react";
4
5
 
5
6
  import { AppState, AppStateStatus, View } from "react-native";
6
7
  import { TrackedView } from "../TrackedView";
@@ -25,7 +26,6 @@ import { PlayerRole } from "@applicaster/zapp-react-native-utils/appUtils/player
25
26
  import { getAutoplaySettings } from "./utils";
26
27
  import { isString } from "@applicaster/zapp-react-native-utils/stringUtils";
27
28
  import { BufferAnimation } from "../PlayerContainer/BufferAnimation";
28
- import { useEffect } from "react";
29
29
 
30
30
  const { log_error, log_debug } = loggerLiveImageComponent;
31
31
 
@@ -44,7 +44,10 @@ type Props = {
44
44
  };
45
45
 
46
46
  const PlayerLiveImageComponent = (props: Props) => {
47
- const dimensions = useDimensions("screen", { fullDimensions: true });
47
+ const dimensions = useDimensions("screen", {
48
+ fullDimensions: true,
49
+ updateForInactiveScreens: false,
50
+ });
48
51
 
49
52
  const { item, style, playerId } = props;
50
53
 
@@ -135,13 +138,16 @@ const PlayerLiveImageComponent = (props: Props) => {
135
138
  } else {
136
139
  throw new Error("Player factory item is null");
137
140
  }
138
- }, [playerId, item, playerPluginId, screenConfig]);
141
+ }, [playerId, item.id, playerPluginId, screenConfig]);
139
142
 
140
143
  React.useEffect(() => {
141
144
  liveImageItem.setMode = setModeDebounced;
142
145
  }, [setModeDebounced, liveImageItem]);
143
146
 
144
- const { start, end } = React.useMemo(() => getAutoplaySettings(item), [item]);
147
+ const { start, end } = React.useMemo(
148
+ () => getAutoplaySettings(item),
149
+ [item.id]
150
+ );
145
151
 
146
152
  const controller = liveImageItem.getPlayer();
147
153
  const player = usePlayer(playerId);
@@ -174,7 +180,7 @@ const PlayerLiveImageComponent = (props: Props) => {
174
180
 
175
181
  unregister();
176
182
  };
177
- }, [item, liveImageItem]);
183
+ }, [item.id, liveImageItem]);
178
184
 
179
185
  React.useEffect(() => {
180
186
  if (!player) {
@@ -304,7 +310,7 @@ const PlayerLiveImageComponent = (props: Props) => {
304
310
  LiveImageManager.instance.checkPlayerPosition(liveImageItem);
305
311
  }
306
312
  },
307
- [liveImageItem, dimensions]
313
+ [liveImageItem, dimensions.height, dimensions.width]
308
314
  );
309
315
 
310
316
  const platformSpecificProps = isApplePlatform()
@@ -324,7 +330,7 @@ const PlayerLiveImageComponent = (props: Props) => {
324
330
  onPositionUpdated={onPositionUpdated}
325
331
  >
326
332
  <View ref={trackViewRef}>
327
- {isVideoMode && (
333
+ {isVideoMode ? (
328
334
  <Player
329
335
  autoplay={false}
330
336
  ref={_assignRoot}
@@ -336,7 +342,7 @@ const PlayerLiveImageComponent = (props: Props) => {
336
342
  resizeMode={"cover"}
337
343
  {...platformSpecificProps}
338
344
  />
339
- )}
345
+ ) : null}
340
346
  {
341
347
  <AnimatedInOut
342
348
  visible={isBackgroundImageVisible}
@@ -1,26 +1,26 @@
1
1
  import React from "react";
2
- import { Animated, StyleSheet, View, Platform } from "react-native";
2
+ import { Animated, Platform, StyleSheet, View } from "react-native";
3
3
 
4
4
  import { useNavigation } from "@applicaster/zapp-react-native-utils/reactHooks";
5
5
  import {
6
+ GestureHandlerRootView,
6
7
  NativeViewGestureHandler,
7
8
  PanGestureHandler,
8
9
  State,
9
10
  TapGestureHandler,
10
- GestureHandlerRootView,
11
11
  } from "react-native-gesture-handler";
12
12
 
13
13
  import { PlayerContainerContext } from "@applicaster/zapp-react-native-ui-components/Components/PlayerContainer/PlayerContainerContext";
14
14
  import {
15
- useModalAnimationContext,
16
15
  PlayerAnimationStateEnum,
16
+ useModalAnimationContext,
17
17
  } from "@applicaster/zapp-react-native-ui-components/Components/VideoModal/ModalAnimation";
18
18
  import { isTV } from "@applicaster/zapp-react-native-utils/reactUtils";
19
19
  import { usePrevious } from "@applicaster/zapp-react-native-utils/reactHooks/utils";
20
20
 
21
21
  import {
22
- setScrollModalAnimatedValue,
23
22
  resetScrollAnimatedValues,
23
+ setScrollModalAnimatedValue,
24
24
  } from "./utils";
25
25
 
26
26
  const getAnimatedConfig = (toValue) => {
@@ -71,8 +71,8 @@ export const AnimatedScrollModalComponent = ({ children }: Props) => {
71
71
  useNavigation();
72
72
 
73
73
  const { mode: videoModalMode, item: videoModalItem } = videoModalState;
74
- const isMaximazedModal = videoModalMode === "MAXIMIZED";
75
- const isMinimizedModal = videoModalMode === "MINIMIZED";
74
+ const isMaximizedModal: boolean = videoModalMode === "MAXIMIZED";
75
+ const isMinimizedModal: boolean = videoModalMode === "MINIMIZED";
76
76
  const previousItemId = usePrevious(videoModalItem?.id);
77
77
 
78
78
  const isNotMinimizeMaximazeAnimation =
@@ -84,7 +84,7 @@ export const AnimatedScrollModalComponent = ({ children }: Props) => {
84
84
  !isLanguageOverlayVisible &&
85
85
  isNotMinimizeMaximazeAnimation &&
86
86
  !isSeekBarTouch &&
87
- (isMaximazedModal || isMinimizedModal);
87
+ (isMaximizedModal || isMinimizedModal);
88
88
 
89
89
  const isAudioItem = React.useMemo(
90
90
  () =>
@@ -346,6 +346,8 @@ export const AnimatedScrollModalComponent = ({ children }: Props) => {
346
346
  []
347
347
  );
348
348
 
349
+ const scrollEnabled = isMaximizedModal && isNotMinimizeMaximazeAnimation;
350
+
349
351
  return (
350
352
  <Wrapper style={generalStyles.container}>
351
353
  <TapGestureHandler
@@ -359,7 +361,7 @@ export const AnimatedScrollModalComponent = ({ children }: Props) => {
359
361
  enabled={isEnablePanGesture}
360
362
  ref={panHandlerRef}
361
363
  simultaneousHandlers={[scrollRef, tapHandlerRef]}
362
- shouldCancelWhenOutside={isMaximazedModal}
364
+ shouldCancelWhenOutside={isMaximizedModal}
363
365
  onGestureEvent={onGestureEvent}
364
366
  onHandlerStateChange={onHandlerStateChange}
365
367
  activeOffsetY={[-5, 5]}
@@ -371,9 +373,7 @@ export const AnimatedScrollModalComponent = ({ children }: Props) => {
371
373
  simultaneousHandlers={panHandlerRef}
372
374
  >
373
375
  <Animated.ScrollView
374
- scrollEnabled={
375
- isMaximazedModal && isNotMinimizeMaximazeAnimation
376
- }
376
+ scrollEnabled={scrollEnabled}
377
377
  bounces={false}
378
378
  onScrollBeginDrag={onRegisterLastScroll}
379
379
  onScroll={onScroll}
@@ -4,26 +4,26 @@ import { Animated, View } from "react-native";
4
4
  import { useSafeAreaInsets } from "react-native-safe-area-context";
5
5
 
6
6
  import {
7
- useModalAnimationContext,
8
7
  PlayerAnimationStateEnum,
8
+ useModalAnimationContext,
9
9
  } from "@applicaster/zapp-react-native-ui-components/Components/VideoModal/ModalAnimation";
10
10
 
11
11
  import {
12
+ useDimensions,
12
13
  useGetBottomTabBarHeight,
13
14
  useNavigation,
14
- useDimensions,
15
15
  } from "@applicaster/zapp-react-native-utils/reactHooks";
16
16
  import { useIsRTL } from "@applicaster/zapp-react-native-utils/localizationUtils";
17
17
  import { isTV } from "@applicaster/zapp-react-native-utils/reactUtils";
18
18
  import { useAppState } from "@applicaster/zapp-react-native-utils/reactHooks/app";
19
19
 
20
20
  import {
21
- gestureListenerHelper,
22
- getAnimationStyle,
21
+ AUDIO_PLAYER_HORIZONTAL_PADDING,
22
+ ComponentAnimationType,
23
23
  defaultAspectRatioWidth,
24
+ gestureListenerHelper,
24
25
  getAnimationDefaultValue,
25
- ComponentAnimationType,
26
- AUDIO_PLAYER_HORIZONTAL_PADDING,
26
+ getAnimationStyle,
27
27
  } from "./utils";
28
28
 
29
29
  type Props = {
@@ -100,10 +100,11 @@ export const AnimationView = ({
100
100
  const moveUpValue = additionalData.saveArea
101
101
  ? -insets.top + (isAudioItem ? 0 : progressBarHeight)
102
102
  : isTablet
103
- ? isTabletLandscape && (!isAudioItem || (isAudioItem && inlineAudioPlayer))
104
- ? -tabletLandscapePlayerTopPosition + progressBarHeight
105
- : -130
106
- : -50 + progressBarHeight;
103
+ ? isTabletLandscape &&
104
+ (!isAudioItem || (isAudioItem && inlineAudioPlayer))
105
+ ? -tabletLandscapePlayerTopPosition + progressBarHeight
106
+ : -130
107
+ : -50 + progressBarHeight;
107
108
 
108
109
  const moveComponentHorizontalValue = additionalData.moveValue
109
110
  ? isRTL
@@ -404,7 +405,7 @@ export const AnimationView = ({
404
405
 
405
406
  return (
406
407
  <Animated.View
407
- onLayout={additionalData.useLayoutMeasure && measureView}
408
+ onLayout={additionalData.useLayoutMeasure ? measureView : undefined}
408
409
  ref={animationComponentRef}
409
410
  style={[
410
411
  ...preparedStyles,
@@ -434,8 +435,8 @@ export const AnimationComponent = (props: Props) => {
434
435
  const Component = useAnimation
435
436
  ? AnimationView
436
437
  : style
437
- ? View
438
- : React.Fragment;
438
+ ? View
439
+ : React.Fragment;
439
440
 
440
441
  if (
441
442
  additionalData.extraAnimation &&
@@ -118,11 +118,10 @@ const Provider = ({ children }: { children: React.ReactNode }) => {
118
118
  If bottomTabBarHeight is equal 0 it means an app does not use bottomTabBar.
119
119
  Because of this we need to minus bottom SafeArea offset.
120
120
  */
121
+
121
122
  const minValue =
122
123
  height -
123
- minimisedHeight -
124
- (bottomTabBarHeight || bottomSafeArea) -
125
- progressBarHeight;
124
+ (minimisedHeight + bottomTabBarHeight + progressBarHeight + bottomSafeArea);
126
125
 
127
126
  const modalSnapPoints = React.useMemo(() => [0, minValue], [minValue]);
128
127
  // Last snap state which will helps us to make smooth responder to scrollview animation
@@ -108,8 +108,8 @@ export const calculateAnimationValue = (animationType, dragPosition, data) => {
108
108
  : { forWidth: 3, forHeight: 3 }
109
109
  : { forWidth: 2, forHeight: 2 }
110
110
  : isTabletLandscape
111
- ? { forWidth: 8, forHeight: 6.5 }
112
- : { forWidth: 3.5, forHeight: 2 };
111
+ ? { forWidth: 8, forHeight: 6.5 }
112
+ : { forWidth: 3.5, forHeight: 2 };
113
113
 
114
114
  const minWidth =
115
115
  isAudioItem && !inlineAudioPlayer ? minimisedHeight : minimisedWidth;
@@ -1,10 +1,11 @@
1
1
  import React, { useEffect, useRef } from "react";
2
2
  import {
3
- StyleProp,
4
- ViewStyle,
5
3
  Animated,
6
- Easing,
7
4
  Dimensions,
5
+ Easing,
6
+ StyleProp,
7
+ ViewStyle,
8
+ StyleSheet,
8
9
  } from "react-native";
9
10
  import { useTargetScreenData } from "@applicaster/zapp-react-native-utils/reactHooks/screen";
10
11
  import { ComponentsMap } from "@applicaster/zapp-react-native-ui-components/Components/River/ComponentsMap";
@@ -90,17 +91,19 @@ export const PlayerDetails = ({
90
91
  {
91
92
  // workaround for avoid wrong text-height after going back to portrait rotation
92
93
  // we don't see this view in landscape mode, so we are able to use fixed width from portrait mode
93
- width: isTablet ? undefined : SCREEN_WIDTH,
94
+ width: isTablet
95
+ ? undefined
96
+ : (StyleSheet.flatten(style)?.width ?? SCREEN_WIDTH),
94
97
  },
95
98
  ]}
96
99
  >
97
- {screenData && (
100
+ {screenData ? (
98
101
  <ComponentsMap
99
102
  riverId={screenData.id}
100
103
  feed={screenData?.data?.source}
101
104
  riverComponents={screenData.ui_components}
102
105
  />
103
- )}
106
+ ) : null}
104
107
  </Animated.View>
105
108
  );
106
109
  };
@@ -227,7 +227,7 @@ const PlayerWrapperComponent = (props: Props) => {
227
227
  </View>
228
228
 
229
229
  <AnimatedScrollModal>
230
- {isShowPlayerDetails && (
230
+ {isShowPlayerDetails ? (
231
231
  <AnimationComponent
232
232
  animationType={ComponentAnimationType.componentFade}
233
233
  style={defaultStyles.flex}
@@ -240,7 +240,7 @@ const PlayerWrapperComponent = (props: Props) => {
240
240
  isTablet={isTablet}
241
241
  />
242
242
  </AnimationComponent>
243
- )}
243
+ ) : null}
244
244
  </AnimatedScrollModal>
245
245
  </AnimationComponent>
246
246
  </WrapperView>
@@ -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": [],
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": [],
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}
@@ -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
  });