@applicaster/zapp-react-native-ui-components 13.0.0-alpha.4863201005 → 13.0.0-alpha.4951885994

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 (113) hide show
  1. package/Components/AppContainer/__tests__/AppContainer.test.js +4 -6
  2. package/Components/AudioPlayer/AudioPlayer.tsx +7 -0
  3. package/Components/AudioPlayer/__tests__/Runtime.test.js +5 -8
  4. package/Components/AudioPlayer/__tests__/__snapshots__/audioPlayer.test.js.snap +54 -111
  5. package/Components/AudioPlayer/__tests__/__snapshots__/audioPlayerLayout.test.js.snap +36 -20
  6. package/Components/AudioPlayer/__tests__/artWork.test.js +3 -5
  7. package/Components/AudioPlayer/__tests__/audioPlayer.test.js +3 -5
  8. package/Components/AudioPlayer/__tests__/audioPlayerLayout.test.js +7 -8
  9. package/Components/AudioPlayer/__tests__/channel.test.js +3 -5
  10. package/Components/AudioPlayer/__tests__/summary.test.js +3 -5
  11. package/Components/AudioPlayer/__tests__/title.test.js +3 -5
  12. package/Components/AudioPlayer/helpers.tsx +1 -0
  13. package/Components/BaseFocusable/index.tsx +1 -2
  14. package/Components/Cell/Cell.tsx +1 -0
  15. package/Components/Cell/CellWithFocusable.tsx +44 -59
  16. package/Components/Cell/TvOSCellComponent.tsx +20 -22
  17. package/Components/Cell/__tests__/CellWIthFocusable.test.js +13 -6
  18. package/Components/Cell/index.js +3 -1
  19. package/Components/CellRendererResolver/__tests__/cellRendererResolver.test.js +46 -48
  20. package/Components/ComponentResolver/__tests__/__snapshots__/componentResolver.test.js.snap +1 -42
  21. package/Components/ComponentResolver/__tests__/componentResolver.test.js +16 -22
  22. package/Components/ContentScreen/__tests__/contentScreen.test.js +3 -3
  23. package/Components/ErrorScreen/index.tsx +6 -6
  24. package/Components/Focusable/Focusable.tsx +1 -0
  25. package/Components/Focusable/FocusableTvOS.tsx +5 -1
  26. package/Components/Focusable/index.android.tsx +10 -3
  27. package/Components/FocusableCell/index.tsx +1 -1
  28. package/Components/FocusableGroup/FocusableTvOS.tsx +34 -86
  29. package/Components/FocusableGroup/index.tsx +0 -3
  30. package/Components/FocusableList/index.tsx +26 -9
  31. package/Components/FocusableScrollView/index.tsx +43 -13
  32. package/Components/Layout/TV/NavBarContainer.tsx +19 -23
  33. package/Components/Layout/TV/ScreenContainer.tsx +8 -1
  34. package/Components/Layout/TV/ScreenLayoutContextProvider.tsx +5 -0
  35. package/Components/Layout/TV/__tests__/ScreenContainer.test.tsx +2 -1
  36. package/Components/Layout/TV/__tests__/__snapshots__/NavBarContainer.test.tsx.snap +3 -2
  37. package/Components/Layout/TV/__tests__/__snapshots__/ScreenContainer.test.tsx.snap +3 -2
  38. package/Components/MasterCell/DefaultComponents/ActionButton.tsx +2 -3
  39. package/Components/MasterCell/DefaultComponents/Image/Image.web.tsx +8 -31
  40. package/Components/MasterCell/DefaultComponents/LiveImage/index.tsx +2 -2
  41. package/Components/MasterCell/SharedUI/ProgressBar/hooks/useFillInPercent.ts +2 -8
  42. package/Components/MasterCell/__tests__/__snapshots__/elementMapper.test.js.snap +4 -12
  43. package/Components/MasterCell/__tests__/__snapshots__/masterCell.test.js.snap +0 -229
  44. package/Components/MasterCell/__tests__/elementMapper.test.js +18 -5
  45. package/Components/MasterCell/__tests__/masterCell.test.js +26 -26
  46. package/Components/MasterCell/utils/behaviorProvider.ts +136 -0
  47. package/Components/MasterCell/utils/index.ts +8 -134
  48. package/Components/ModalComponent/Button/index.tsx +6 -6
  49. package/Components/OfflineHandler/NotificationView/NotificationView.lg.tsx +2 -2
  50. package/Components/OfflineHandler/NotificationView/NotificationView.samsung.tsx +2 -2
  51. package/Components/OfflineHandler/NotificationView/__tests__/index.test.tsx +0 -5
  52. package/Components/PlayerContainer/PlayerContainer.tsx +17 -13
  53. package/Components/PlayerContainer/ProgramInfo/index.tsx +2 -2
  54. package/Components/PlayerImageBackground/index.tsx +1 -1
  55. package/Components/River/ComponentsMap/ComponentsMap.tsx +3 -0
  56. package/Components/River/ComponentsMap/hooks/useLoadingState.ts +3 -3
  57. package/Components/River/TV/index.tsx +6 -1
  58. package/Components/River/__tests__/__snapshots__/river.test.js.snap +20 -82
  59. package/Components/River/__tests__/river.test.js +75 -40
  60. package/Components/RouteManager/__tests__/__snapshots__/routeManager.test.js.snap +11 -4
  61. package/Components/RouteManager/__tests__/routeManager.test.js +29 -14
  62. package/Components/RouteManager/__tests__/testId.test.js +8 -6
  63. package/Components/Screen/TV/index.web.tsx +5 -6
  64. package/Components/Screen/hooks.ts +3 -6
  65. package/Components/Screen/index.tsx +4 -4
  66. package/Components/ScreenResolver/__tests__/screenResolver.test.js +91 -70
  67. package/Components/Tabs/Tab.tsx +5 -3
  68. package/Components/TextInputTv/index.tsx +2 -1
  69. package/Components/TrackedView/index.tsx +1 -0
  70. package/Components/Transitioner/AnimationManager.js +15 -15
  71. package/Components/Transitioner/Scene.tsx +1 -1
  72. package/Components/Transitioner/Transitioner.tsx +3 -3
  73. package/Components/Transitioner/__tests__/Scene.test.js +25 -14
  74. package/Components/Transitioner/__tests__/__snapshots__/Scene.test.js.snap +12 -68
  75. package/Components/Transitioner/__tests__/__snapshots__/transitioner.test.js.snap +2 -2
  76. package/Components/Transitioner/__tests__/transitioner.test.js +13 -4
  77. package/Components/VideoLive/PlayerLiveImageComponent.tsx +7 -3
  78. package/Components/VideoLive/__tests__/__snapshots__/PlayerLiveImageComponent.test.tsx.snap +1 -0
  79. package/Components/VideoModal/ModalAnimation/AnimatedPlayerModalWrapper.tsx +1 -1
  80. package/Components/VideoModal/ModalAnimation/AnimatedScrollModal.tsx +44 -30
  81. package/Components/VideoModal/ModalAnimation/AnimatedVideoPlayerComponent.tsx +3 -3
  82. package/Components/VideoModal/ModalAnimation/AnimationComponent.tsx +24 -11
  83. package/Components/VideoModal/ModalAnimation/ModalAnimationContext.tsx +4 -5
  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/FocusableGroupContext/withFocusableContext.tsx +4 -10
  96. package/Contexts/HeaderOffsetContext/index.tsx +4 -6
  97. package/Contexts/ScreenContext/index.tsx +3 -10
  98. package/Contexts/ScreenLayoutContext/index.tsx +5 -3
  99. package/Decorators/Navigator/__tests__/navigator.test.js +16 -16
  100. package/Decorators/Navigator/index.tsx +1 -1
  101. package/Decorators/RiverResolver/__tests__/riverResolver.test.tsx +18 -24
  102. package/Decorators/RiverResolver/index.tsx +6 -8
  103. package/Decorators/ZappPipesDataConnector/__tests__/zappPipesDataConnector.test.js +29 -22
  104. package/Decorators/ZappPipesDataConnector/index.tsx +2 -29
  105. package/package.json +7 -10
  106. package/tsconfig.json +2 -3
  107. package/Components/CellRendererResolver/__tests__/__snapshots__/cellRendererResolver.test.js.snap +0 -53
  108. package/Components/RouteManager/__tests__/__snapshots__/testId.test.js.snap +0 -17
  109. package/Components/ScreenResolver/__tests__/__snapshots__/screenResolver.test.js.snap +0 -17
  110. package/Components/ZappUIComponent/__tests__/__snapshots__/ZappUIComponent.test.js.snap +0 -91
  111. package/Components/default-cell-renderer/__tests__/__snapshots__/defaultCellRenderer.test.tsx.snap +0 -338
  112. package/Decorators/Navigator/__tests__/__snapshots__/navigator.test.js.snap +0 -18
  113. package/Decorators/RiverResolver/__tests__/__snapshots__/riverResolver.test.tsx.snap +0 -28
@@ -2,21 +2,21 @@ import { Animated } from "react-native";
2
2
 
3
3
  import { NAV_ACTION_PUSH, NAV_ACTION_BACK } from "./Transitioner";
4
4
 
5
- type TransitionConfig = {
6
- duration: number;
7
- easing: any;
8
- from: {
9
- style: any;
10
- };
11
- to: {
12
- style: any;
13
- };
14
- };
5
+ // type TransitionConfig = {
6
+ // duration: number;
7
+ // easing: any;
8
+ // from: {
9
+ // style: any;
10
+ // };
11
+ // to: {
12
+ // style: any;
13
+ // };
14
+ // };
15
15
 
16
- type Props = {
17
- transitionConfig: TransitionConfig;
18
- contentStyle: { [string]: any };
19
- };
16
+ // type Props = {
17
+ // transitionConfig: TransitionConfig;
18
+ // contentStyle: { [string]: any };
19
+ // };
20
20
 
21
21
  /**
22
22
  * Manages animation for the Transitioner,
@@ -25,7 +25,7 @@ type Props = {
25
25
  * which must have a proper structure, see types above ^.
26
26
  */
27
27
  export class AnimationManager {
28
- constructor(props: Props) {
28
+ constructor(props) {
29
29
  this.animatedValue = new Animated.Value(0.0);
30
30
 
31
31
  this.config = props.transitionConfig(
@@ -105,7 +105,7 @@ function SceneComponent({
105
105
  style={[style, contentStyle, dimensions]}
106
106
  >
107
107
  {children}
108
- {isAnimating && <Animated.View style={overlayStyle} />}
108
+ {isAnimating ? <Animated.View style={overlayStyle} /> : null}
109
109
  </Animated.View>
110
110
  );
111
111
  }
@@ -1,6 +1,6 @@
1
1
  import * as React from "react";
2
2
  import { View } from "react-native";
3
- import { update, compose, tail, append, take, identity, isNil } from "ramda";
3
+ import { append, compose, identity, isNil, tail, take, update } from "ramda";
4
4
 
5
5
  import { AnimationManager } from "./AnimationManager";
6
6
  import { Scene } from "./Scene";
@@ -289,7 +289,7 @@ export class TransitionerComponent extends React.PureComponent<Props, State> {
289
289
 
290
290
  return (
291
291
  <View style={styles.container}>
292
- {scenes[to.index] && (
292
+ {scenes[to.index] ? (
293
293
  <Scene
294
294
  {...{ style: to?.style || {} }}
295
295
  pathname={pathname}
@@ -301,7 +301,7 @@ export class TransitionerComponent extends React.PureComponent<Props, State> {
301
301
  >
302
302
  {scenes[to.index].children}
303
303
  </Scene>
304
- )}
304
+ ) : null}
305
305
  </View>
306
306
  );
307
307
  }
@@ -1,6 +1,7 @@
1
1
  import React from "react";
2
- import { shallow } from "enzyme";
3
- import { shallowToJson } from "enzyme-to-json";
2
+ import { render } from "@testing-library/react-native";
3
+
4
+ import { Scene } from "../Scene";
4
5
 
5
6
  const overlayStyle = { opacity: 1 };
6
7
  const contentStyle = { paddingBottom: 49 };
@@ -23,28 +24,38 @@ jest.mock(
23
24
  })
24
25
  );
25
26
 
26
- const { Scene } = require("../Scene");
27
+ jest.mock("../../../Contexts/PathnameContext", () => ({
28
+ PathnameContext: jest.requireActual("react").createContext({ pathname: "" }),
29
+ }));
27
30
 
28
- const wrapper = shallow(
29
- <Scene
30
- style={style}
31
- overlayStyle={overlayStyle}
32
- contentStyle={contentStyle}
33
- />
34
- );
31
+ jest.mock("../../../Contexts/ScreenDataContext", () => ({
32
+ ScreenDataContext: jest.requireActual("react").createContext({}),
33
+ }));
34
+
35
+ jest.mock("../../../Contexts/ScreenContext", () => ({
36
+ ScreenContextProvider: jest.requireActual("react-native").View,
37
+ }));
35
38
 
36
39
  describe("<Scene />", () => {
40
+ const wrapper = render(
41
+ <Scene
42
+ style={style}
43
+ overlayStyle={overlayStyle}
44
+ contentStyle={contentStyle}
45
+ />
46
+ );
47
+
37
48
  it("renders correctly", () => {
38
- expect(shallowToJson(wrapper)).toMatchSnapshot();
49
+ expect(wrapper.toJSON()).toMatchSnapshot();
39
50
  });
40
51
 
41
52
  // skipped - this isn't a very useful test, and it doesn't work as it used to on the new version of RN
42
53
  it.skip("renders children surrounded by AnimatedComponent", () => {
43
- expect(shallowToJson(wrapper).type).toEqual("AnimatedComponent");
54
+ expect(wrapper.toJSON()).toEqual("AnimatedComponent");
44
55
  });
45
56
 
46
57
  it("renders the overlay while animating", () => {
47
- const wrapperWithOverlay = shallow(
58
+ const wrapperWithOverlay = render(
48
59
  <Scene
49
60
  style={style}
50
61
  overlayStyle={overlayStyle}
@@ -53,6 +64,6 @@ describe("<Scene />", () => {
53
64
  />
54
65
  );
55
66
 
56
- expect(shallowToJson(wrapperWithOverlay)).toMatchSnapshot();
67
+ expect(wrapperWithOverlay.toJSON).toMatchSnapshot();
57
68
  });
58
69
  });
@@ -1,79 +1,23 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
3
  exports[`<Scene /> renders correctly 1`] = `
4
- <CurrentScreenContextProvider
5
- contentStyle={
6
- {
7
- "paddingBottom": 49,
8
- }
9
- }
10
- overlayStyle={
11
- {
12
- "opacity": 1,
13
- }
14
- }
15
- style={
16
- {
17
- "flex": 1,
18
- }
19
- }
20
- >
21
- <SceneComponent
22
- contentStyle={
23
- {
24
- "paddingBottom": 49,
25
- }
26
- }
27
- overlayStyle={
28
- {
29
- "opacity": 1,
30
- }
31
- }
4
+ <View>
5
+ <View
6
+ collapsable={false}
7
+ pointerEvents="auto"
32
8
  style={
33
9
  {
34
10
  "flex": 1,
35
- }
36
- }
37
- />
38
- </CurrentScreenContextProvider>
39
- `;
40
-
41
- exports[`<Scene /> renders the overlay while animating 1`] = `
42
- <CurrentScreenContextProvider
43
- animating={true}
44
- contentStyle={
45
- {
46
- "paddingBottom": 49,
47
- }
48
- }
49
- overlayStyle={
50
- {
51
- "opacity": 1,
52
- }
53
- }
54
- style={
55
- {
56
- "flex": 1,
57
- }
58
- }
59
- >
60
- <SceneComponent
61
- animating={true}
62
- contentStyle={
63
- {
11
+ "fontScale": 2,
12
+ "height": 1334,
64
13
  "paddingBottom": 49,
65
- }
66
- }
67
- overlayStyle={
68
- {
69
- "opacity": 1,
70
- }
71
- }
72
- style={
73
- {
74
- "flex": 1,
14
+ "scale": 2,
15
+ "statusBarHeight": null,
16
+ "width": 750,
75
17
  }
76
18
  }
77
19
  />
78
- </CurrentScreenContextProvider>
20
+ </View>
79
21
  `;
22
+
23
+ exports[`<Scene /> renders the overlay while animating 1`] = `[Function]`;
@@ -9,7 +9,7 @@ exports[`<TransitionerComponent /> renders correctly 1`] = `
9
9
  }
10
10
  }
11
11
  >
12
- <SceneComponent
12
+ <View
13
13
  isActive={true}
14
14
  screenUniqueId="mocked-uuid"
15
15
  style={{}}
@@ -23,6 +23,6 @@ exports[`<TransitionerComponent /> renders correctly 1`] = `
23
23
  children
24
24
  </Text>
25
25
  </View>
26
- </SceneComponent>
26
+ </View>
27
27
  </View>
28
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,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,13 +26,15 @@ 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
 
32
32
  const isMeasurement = (item: ZappEntry) =>
33
33
  isString(item.id) && item.id.startsWith("pre-measurement-");
34
34
 
35
+ // Pixels by which the view can slightly extend outside the viewport and still be considered fully visible.
36
+ const CLIP_THRESHOLD = 10;
37
+
35
38
  type Props = {
36
39
  item: ZappEntry;
37
40
  style: Record<string, any>;
@@ -328,9 +331,10 @@ const PlayerLiveImageComponent = (props: Props) => {
328
331
  <TrackedView
329
332
  testId={`tracked-view-${playerId}-${item.title}`}
330
333
  onPositionUpdated={onPositionUpdated}
334
+ clipThreshold={CLIP_THRESHOLD}
331
335
  >
332
336
  <View ref={trackViewRef}>
333
- {isVideoMode && (
337
+ {isVideoMode ? (
334
338
  <Player
335
339
  autoplay={false}
336
340
  ref={_assignRoot}
@@ -342,7 +346,7 @@ const PlayerLiveImageComponent = (props: Props) => {
342
346
  resizeMode={"cover"}
343
347
  {...platformSpecificProps}
344
348
  />
345
- )}
349
+ ) : null}
346
350
  {
347
351
  <AnimatedInOut
348
352
  visible={isBackgroundImageVisible}
@@ -2,6 +2,7 @@
2
2
 
3
3
  exports[`PlayerLiveImageComponent should render correctly with default props 1`] = `
4
4
  <TrackedView
5
+ clipThreshold={10}
5
6
  onPositionUpdated={[Function]}
6
7
  testId="tracked-view-player1-Test"
7
8
  >
@@ -46,7 +46,7 @@ export const AnimatedPlayerModalWrapper = (props: Props) => {
46
46
 
47
47
  React.useEffect(() => {
48
48
  (playerAnimationState === PlayerAnimationStateEnum.minimize ||
49
- playerAnimationState === PlayerAnimationStateEnum.maximaze) &&
49
+ playerAnimationState === PlayerAnimationStateEnum.maximize) &&
50
50
  setStartComponentsAnimation(true);
51
51
  }, [playerAnimationState]);
52
52
 
@@ -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) => {
@@ -70,21 +70,26 @@ export const AnimatedScrollModalComponent = ({ children }: Props) => {
70
70
  const { maximiseVideoModal, minimiseVideoModal, videoModalState } =
71
71
  useNavigation();
72
72
 
73
- const { mode: videoModalMode, item: videoModalItem } = videoModalState;
74
- const isMaximazedModal = videoModalMode === "MAXIMIZED";
75
- const isMinimizedModal = videoModalMode === "MINIMIZED";
73
+ const {
74
+ mode: videoModalMode,
75
+ previousMode: previousVideoModalMode,
76
+ item: videoModalItem,
77
+ } = videoModalState;
78
+
79
+ const isMaximizedModal: boolean = videoModalMode === "MAXIMIZED";
80
+ const isMinimizedModal: boolean = videoModalMode === "MINIMIZED";
76
81
  const previousItemId = usePrevious(videoModalItem?.id);
77
82
 
78
83
  const isNotMinimizeMaximazeAnimation =
79
84
  playerAnimationState !== PlayerAnimationStateEnum.minimize &&
80
- playerAnimationState !== PlayerAnimationStateEnum.maximaze;
85
+ playerAnimationState !== PlayerAnimationStateEnum.maximize;
81
86
 
82
87
  const isEnablePanGesture =
83
88
  enableGesture &&
84
89
  !isLanguageOverlayVisible &&
85
90
  isNotMinimizeMaximazeAnimation &&
86
91
  !isSeekBarTouch &&
87
- (isMaximazedModal || isMinimizedModal);
92
+ (isMaximizedModal || isMinimizedModal);
88
93
 
89
94
  const isAudioItem = React.useMemo(
90
95
  () =>
@@ -121,7 +126,7 @@ export const AnimatedScrollModalComponent = ({ children }: Props) => {
121
126
  const preparedTranslationY =
122
127
  Math.abs(translationY) - lastScrollYValue.current;
123
128
 
124
- if (videoModalMode === "MAXIMIZED") {
129
+ if (isMaximizedModal) {
125
130
  const endOffsetY =
126
131
  lastSnap + preparedTranslationY + dragToss * velocityY + 150;
127
132
 
@@ -137,14 +142,14 @@ export const AnimatedScrollModalComponent = ({ children }: Props) => {
137
142
 
138
143
  setLastSnap(destSnapPoint);
139
144
 
140
- if (destSnapPoint === modalSnapPoints[0]) {
145
+ if (destSnapPoint === modalSnapPoints[0] && isMinimizedModal) {
141
146
  translateYOffset.extractOffset();
142
147
  translateYOffset.setValue(preparedTranslationY);
143
148
  translateYOffset.flattenOffset();
144
149
  dragScrollY.setValue(0);
145
150
 
146
- setPlayerAnimationState(PlayerAnimationStateEnum.maximaze);
147
- } else {
151
+ setPlayerAnimationState(PlayerAnimationStateEnum.maximize);
152
+ } else if (destSnapPoint !== modalSnapPoints[0] && isMaximizedModal) {
148
153
  setPlayerAnimationState(PlayerAnimationStateEnum.minimize);
149
154
  }
150
155
  } else {
@@ -158,7 +163,7 @@ export const AnimatedScrollModalComponent = ({ children }: Props) => {
158
163
 
159
164
  dragScrollY.setValue(0);
160
165
 
161
- setPlayerAnimationState(PlayerAnimationStateEnum.maximaze);
166
+ setPlayerAnimationState(PlayerAnimationStateEnum.maximize);
162
167
  } else {
163
168
  resetPlayerAnimationState();
164
169
  }
@@ -168,7 +173,13 @@ export const AnimatedScrollModalComponent = ({ children }: Props) => {
168
173
  resetPlayerAnimationState();
169
174
  }
170
175
  },
171
- [lastSnap, modalSnapPoints, playerAnimationState, videoModalMode]
176
+ [
177
+ lastSnap,
178
+ modalSnapPoints,
179
+ playerAnimationState,
180
+ isMinimizedModal,
181
+ isMaximizedModal,
182
+ ]
172
183
  );
173
184
 
174
185
  const onScroll = React.useCallback(({ nativeEvent }) => {
@@ -219,17 +230,18 @@ export const AnimatedScrollModalComponent = ({ children }: Props) => {
219
230
  }, []);
220
231
 
221
232
  React.useEffect(() => {
222
- const { mode, previousMode, item } = videoModalState;
223
-
224
233
  if (
225
- mode === "MAXIMIZED" &&
234
+ videoModalMode === "MAXIMIZED" &&
226
235
  !enableGesture &&
227
236
  scrollPosition.current === 0
228
237
  ) {
229
238
  setIEnableGesture(true);
230
239
  }
231
240
 
232
- if (mode === "MINIMIZED" && previousMode === "MAXIMIZED") {
241
+ if (
242
+ videoModalMode === "MINIMIZED" &&
243
+ previousVideoModalMode === "MAXIMIZED"
244
+ ) {
233
245
  // set animation to the minimize values if moving from the player to another screen
234
246
  if (playerAnimationState === null) {
235
247
  setScrollModalAnimatedValue(
@@ -247,14 +259,16 @@ export const AnimatedScrollModalComponent = ({ children }: Props) => {
247
259
  }
248
260
  } else if (
249
261
  playerAnimationState === null &&
250
- ((previousItemId === item?.id &&
251
- mode === "MAXIMIZED" &&
252
- (previousMode === "MINIMIZED" || previousMode === "MAXIMIZED")) ||
253
- (previousItemId !== item?.id && mode !== "FULLSCREEN"))
262
+ ((previousItemId === videoModalItem?.id &&
263
+ videoModalMode === "MAXIMIZED" &&
264
+ (previousVideoModalMode === "MINIMIZED" ||
265
+ previousVideoModalMode === "MAXIMIZED")) ||
266
+ (previousItemId !== videoModalItem?.id &&
267
+ videoModalMode !== "FULLSCREEN"))
254
268
  ) {
255
- setPlayerAnimationState(PlayerAnimationStateEnum.maximaze);
269
+ setPlayerAnimationState(PlayerAnimationStateEnum.maximize);
256
270
  }
257
- }, [videoModalState]);
271
+ }, [videoModalMode, previousVideoModalMode, videoModalItem]);
258
272
 
259
273
  React.useEffect(() => {
260
274
  if (playerAnimationState === PlayerAnimationStateEnum.minimize) {
@@ -296,7 +310,7 @@ export const AnimatedScrollModalComponent = ({ children }: Props) => {
296
310
 
297
311
  resetPlayerAnimationState();
298
312
  });
299
- } else if (playerAnimationState === PlayerAnimationStateEnum.maximaze) {
313
+ } else if (playerAnimationState === PlayerAnimationStateEnum.maximize) {
300
314
  Animated.timing(translateYOffset, getAnimatedConfig(0)).start(() => {
301
315
  maximiseVideoModal();
302
316
  setScrollModalAnimatedValue(translateYOffset, 0, setLastSnap);
@@ -346,6 +360,8 @@ export const AnimatedScrollModalComponent = ({ children }: Props) => {
346
360
  []
347
361
  );
348
362
 
363
+ const scrollEnabled = isMaximizedModal && isNotMinimizeMaximazeAnimation;
364
+
349
365
  return (
350
366
  <Wrapper style={generalStyles.container}>
351
367
  <TapGestureHandler
@@ -359,7 +375,7 @@ export const AnimatedScrollModalComponent = ({ children }: Props) => {
359
375
  enabled={isEnablePanGesture}
360
376
  ref={panHandlerRef}
361
377
  simultaneousHandlers={[scrollRef, tapHandlerRef]}
362
- shouldCancelWhenOutside={isMaximazedModal}
378
+ shouldCancelWhenOutside={isMaximizedModal}
363
379
  onGestureEvent={onGestureEvent}
364
380
  onHandlerStateChange={onHandlerStateChange}
365
381
  activeOffsetY={[-5, 5]}
@@ -371,9 +387,7 @@ export const AnimatedScrollModalComponent = ({ children }: Props) => {
371
387
  simultaneousHandlers={panHandlerRef}
372
388
  >
373
389
  <Animated.ScrollView
374
- scrollEnabled={
375
- isMaximazedModal && isNotMinimizeMaximazeAnimation
376
- }
390
+ scrollEnabled={scrollEnabled}
377
391
  bounces={false}
378
392
  onScrollBeginDrag={onRegisterLastScroll}
379
393
  onScroll={onScroll}
@@ -50,7 +50,7 @@ export const AnimatedVideoPlayer = ({ children }: Props) => {
50
50
 
51
51
  const isNotMinimizeMaximazeAnimation =
52
52
  playerAnimationState !== PlayerAnimationStateEnum.minimize &&
53
- playerAnimationState !== PlayerAnimationStateEnum.maximaze;
53
+ playerAnimationState !== PlayerAnimationStateEnum.maximize;
54
54
 
55
55
  const isEnablePanGesture =
56
56
  !isLanguageOverlayVisible &&
@@ -89,7 +89,7 @@ export const AnimatedVideoPlayer = ({ children }: Props) => {
89
89
  setLastSnap(destSnapPoint);
90
90
 
91
91
  if (destSnapPoint === modalSnapPoints[0]) {
92
- setPlayerAnimationState(PlayerAnimationStateEnum.maximaze);
92
+ setPlayerAnimationState(PlayerAnimationStateEnum.maximize);
93
93
  } else {
94
94
  lastScrollY.setValue(0);
95
95
  lastScrollYValue.current = 0;
@@ -105,7 +105,7 @@ export const AnimatedVideoPlayer = ({ children }: Props) => {
105
105
  modalSnapPoints[1] - preparedTranslationY
106
106
  );
107
107
 
108
- setPlayerAnimationState(PlayerAnimationStateEnum.maximaze);
108
+ setPlayerAnimationState(PlayerAnimationStateEnum.maximize);
109
109
  } else {
110
110
  resetPlayerAnimationState();
111
111
  }
@@ -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 = {
@@ -228,6 +228,8 @@ export const AnimationView = ({
228
228
  isAudioItem,
229
229
  moveUpValue,
230
230
  moveComponentHorizontalValue,
231
+ isRTL,
232
+ inlineAudioPlayer,
231
233
  ]
232
234
  );
233
235
 
@@ -246,7 +248,7 @@ export const AnimationView = ({
246
248
  default:
247
249
  return getAnimationValue(
248
250
  animationType,
249
- PlayerAnimationStateEnum.maximaze
251
+ PlayerAnimationStateEnum.maximize
250
252
  ).toValue;
251
253
  }
252
254
  }, [defaultValue, videoModalState]);
@@ -278,6 +280,11 @@ export const AnimationView = ({
278
280
  moveUpValue,
279
281
  moveComponentHorizontalValue,
280
282
  videoModalMode,
283
+ isAudioItem,
284
+ isTablet,
285
+ isTabletLandscape,
286
+ isRTL,
287
+ inlineAudioPlayer,
281
288
  ]
282
289
  );
283
290
 
@@ -306,7 +313,7 @@ export const AnimationView = ({
306
313
  }
307
314
 
308
315
  if (
309
- videoModalMode === "MAXIMIZED" &&
316
+ (videoModalMode === "MAXIMIZED" || videoModalMode === "MINIMIZED") &&
310
317
  defaultValue.x !== screenWidth &&
311
318
  width &&
312
319
  height
@@ -332,7 +339,13 @@ export const AnimationView = ({
332
339
  animatedValue.setValue(value);
333
340
  }
334
341
  }
335
- }, [videoModalState]);
342
+ }, [
343
+ animatedValue,
344
+ animationType,
345
+ getAnimationValue,
346
+ playerAnimationState,
347
+ videoModalState,
348
+ ]);
336
349
 
337
350
  React.useEffect(() => {
338
351
  if (
@@ -344,7 +357,7 @@ export const AnimationView = ({
344
357
  animatedValue,
345
358
  getAnimationValue(animationType, playerAnimationState)
346
359
  ).start();
347
- } else if (playerAnimationState === PlayerAnimationStateEnum.maximaze) {
360
+ } else if (playerAnimationState === PlayerAnimationStateEnum.maximize) {
348
361
  animatedValue.setValue(defaultValue);
349
362
  }
350
363
  }, [playerAnimationState, startComponentsAnimation, defaultValue]);
@@ -405,7 +418,7 @@ export const AnimationView = ({
405
418
 
406
419
  return (
407
420
  <Animated.View
408
- onLayout={additionalData.useLayoutMeasure && measureView}
421
+ onLayout={additionalData.useLayoutMeasure ? measureView : undefined}
409
422
  ref={animationComponentRef}
410
423
  style={[
411
424
  ...preparedStyles,