@applicaster/zapp-react-native-ui-components 14.0.0-alpha.1661204539 → 14.0.0-alpha.2175196485

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 (90) hide show
  1. package/Components/AnimatedInOut/index.tsx +5 -3
  2. package/Components/AudioPlayer/index.tsx +15 -0
  3. package/Components/AudioPlayer/mobile/Layout.tsx +66 -0
  4. package/Components/AudioPlayer/{__tests__/__snapshots__/audioPlayer.test.js.snap → mobile/__tests__/__snapshots__/audioPlayerMobileLayout.test.js.snap} +2 -2
  5. package/Components/AudioPlayer/mobile/__tests__/audioPlayerMobileLayout.test.js +18 -0
  6. package/Components/AudioPlayer/mobile/index.tsx +18 -0
  7. package/Components/AudioPlayer/tv/Artwork.tsx +41 -0
  8. package/Components/AudioPlayer/{Channel.tsx → tv/Channel.tsx} +7 -7
  9. package/Components/AudioPlayer/tv/Layout.tsx +168 -0
  10. package/Components/AudioPlayer/{Runtime.tsx → tv/Runtime.tsx} +9 -2
  11. package/Components/AudioPlayer/{Summary.tsx → tv/Summary.tsx} +17 -10
  12. package/Components/AudioPlayer/tv/Title.tsx +46 -0
  13. package/Components/AudioPlayer/{__tests__ → tv/__tests__}/__snapshots__/Runtime.test.js.snap +4 -4
  14. package/Components/AudioPlayer/{__tests__ → tv/__tests__}/__snapshots__/artWork.test.js.snap +9 -4
  15. package/Components/AudioPlayer/tv/__tests__/__snapshots__/audioPlayer.test.js.snap +164 -0
  16. package/Components/AudioPlayer/tv/__tests__/__snapshots__/channel.test.js.snap +19 -0
  17. package/Components/AudioPlayer/{__tests__ → tv/__tests__}/__snapshots__/summary.test.js.snap +2 -3
  18. package/Components/AudioPlayer/{__tests__ → tv/__tests__}/__snapshots__/title.test.js.snap +2 -3
  19. package/Components/AudioPlayer/{__tests__ → tv/__tests__}/audioPlayer.test.js +7 -3
  20. package/Components/AudioPlayer/{helpers.tsx → tv/helpers.tsx} +3 -4
  21. package/Components/AudioPlayer/{AudioPlayer.tsx → tv/index.tsx} +18 -57
  22. package/Components/AudioPlayer/types.ts +40 -0
  23. package/Components/Cell/index.js +6 -2
  24. package/Components/Focusable/Focusable.tsx +5 -3
  25. package/Components/Focusable/FocusableTvOS.tsx +3 -3
  26. package/Components/Focusable/FocusableiOS.tsx +1 -1
  27. package/Components/Focusable/__tests__/index.android.test.tsx +3 -0
  28. package/Components/Focusable/index.android.tsx +12 -8
  29. package/Components/FocusableList/index.tsx +4 -0
  30. package/Components/GeneralContentScreen/GeneralContentScreen.tsx +0 -2
  31. package/Components/HandlePlayable/HandlePlayable.tsx +25 -9
  32. package/Components/MasterCell/DefaultComponents/FocusableView/index.tsx +4 -27
  33. package/Components/MasterCell/DefaultComponents/Text/index.tsx +1 -0
  34. package/Components/MasterCell/elementMapper.tsx +1 -2
  35. package/Components/MasterCell/index.tsx +1 -1
  36. package/Components/MasterCell/utils/behaviorProvider.ts +12 -67
  37. package/Components/MasterCell/utils/index.ts +3 -13
  38. package/Components/OfflineHandler/NotificationView/__tests__/index.test.tsx +13 -18
  39. package/Components/OfflineHandler/__tests__/__snapshots__/index.test.tsx.snap +9 -0
  40. package/Components/PlayerContainer/PlayerContainer.tsx +62 -66
  41. package/Components/PlayerImageBackground/index.tsx +1 -1
  42. package/Components/River/ComponentsMap/ComponentsMap.tsx +1 -6
  43. package/Components/River/RiverItem.tsx +8 -8
  44. package/Components/River/TV/River.tsx +0 -3
  45. package/Components/River/TV/withTVEventHandler.tsx +1 -1
  46. package/Components/River/__tests__/__snapshots__/componentsMap.test.js.snap +2 -6
  47. package/Components/ScreenRevealManager/ScreenRevealManager.ts +76 -0
  48. package/Components/ScreenRevealManager/__tests__/ScreenRevealManager.test.ts +107 -0
  49. package/Components/ScreenRevealManager/__tests__/withScreenRevealManager.test.tsx +96 -0
  50. package/Components/ScreenRevealManager/index.ts +1 -0
  51. package/Components/ScreenRevealManager/withScreenRevealManager.tsx +79 -0
  52. package/Components/Tabs/TV/Tabs.android.tsx +0 -2
  53. package/Components/TopMarginApplicator/TopMarginApplicator.tsx +16 -15
  54. package/Components/Touchable/__tests__/__snapshots__/touchable.test.tsx.snap +34 -0
  55. package/Components/Transitioner/__tests__/__snapshots__/Scene.test.js.snap +15 -9
  56. package/Components/VideoLive/animationUtils.ts +3 -3
  57. package/Components/VideoModal/ModalAnimation/ModalAnimationContext.tsx +9 -1
  58. package/Components/VideoModal/PlayerDetails.tsx +24 -2
  59. package/Components/VideoModal/PlayerWrapper.tsx +26 -142
  60. package/Components/VideoModal/VideoModal.tsx +3 -17
  61. package/Components/VideoModal/__tests__/PlayerWrapper.test.tsx +1 -7
  62. package/Components/VideoModal/__tests__/__snapshots__/PlayerWrapper.test.tsx.snap +44 -180
  63. package/Components/VideoModal/hooks/__tests__/useDelayedPlayerDetails.test.ts +17 -55
  64. package/Components/VideoModal/hooks/index.ts +0 -2
  65. package/Components/VideoModal/hooks/useDelayedPlayerDetails.ts +15 -26
  66. package/Components/VideoModal/hooks/useModalSize.ts +18 -2
  67. package/Components/VideoModal/utils.ts +6 -0
  68. package/Components/Viewport/ViewportAware/__tests__/viewportAware.test.js +12 -16
  69. package/Components/Viewport/ViewportTracker/__tests__/viewportTracker.test.js +84 -24
  70. package/Components/Viewport/VisibilitySensor/VisibilitySensor.tsx +3 -3
  71. package/Components/default-cell-renderer/viewTrees/tv/DefaultCell/index.ts +3 -3
  72. package/Decorators/ConfigurationWrapper/withConfigurationProvider.tsx +2 -2
  73. package/Decorators/RiverFeedLoader/index.tsx +2 -8
  74. package/Decorators/RiverFeedLoader/utils/index.ts +2 -7
  75. package/Decorators/ZappPipesDataConnector/index.tsx +2 -16
  76. package/index.d.ts +0 -1
  77. package/package.json +5 -9
  78. package/Components/AudioPlayer/Artwork.tsx +0 -35
  79. package/Components/AudioPlayer/AudioPlayerLayout.tsx +0 -202
  80. package/Components/AudioPlayer/Title.tsx +0 -39
  81. package/Components/AudioPlayer/__tests__/__snapshots__/audioPlayerLayout.test.js.snap +0 -66
  82. package/Components/AudioPlayer/__tests__/__snapshots__/channel.test.js.snap +0 -28
  83. package/Components/AudioPlayer/__tests__/audioPlayerLayout.test.js +0 -26
  84. package/Components/AudioPlayer/index.ts +0 -1
  85. package/Components/VideoModal/hooks/useBackgroundColor.ts +0 -10
  86. /package/Components/AudioPlayer/{__tests__ → tv/__tests__}/Runtime.test.js +0 -0
  87. /package/Components/AudioPlayer/{__tests__ → tv/__tests__}/artWork.test.js +0 -0
  88. /package/Components/AudioPlayer/{__tests__ → tv/__tests__}/channel.test.js +0 -0
  89. /package/Components/AudioPlayer/{__tests__ → tv/__tests__}/summary.test.js +0 -0
  90. /package/Components/AudioPlayer/{__tests__ → tv/__tests__}/title.test.js +0 -0
@@ -1,19 +1,9 @@
1
1
  import { renderHook } from "@testing-library/react-hooks";
2
2
  import { useDelayedPlayerDetails } from "../useDelayedPlayerDetails";
3
- import { withTimeout$ } from "@applicaster/zapp-react-native-utils/idleUtils";
4
- import { showDetails } from "../utils";
5
3
  import { useIsTablet } from "@applicaster/zapp-react-native-utils/reactHooks";
6
4
 
7
- jest.mock("@applicaster/zapp-react-native-utils/idleUtils", () => ({
8
- withTimeout$: jest.fn(),
9
- }));
10
-
11
- jest.mock("../utils", () => ({
12
- showDetails: jest.fn(),
13
- }));
14
-
15
5
  jest.mock("@applicaster/zapp-react-native-utils/reactHooks", () => ({
16
- useIsTablet: jest.fn(),
6
+ useIsTablet: jest.fn().mockReturnValue(false),
17
7
  }));
18
8
 
19
9
  describe("useDelayedPlayerDetails", () => {
@@ -21,69 +11,41 @@ describe("useDelayedPlayerDetails", () => {
21
11
  jest.clearAllMocks();
22
12
  });
23
13
 
24
- it("should return false initially", () => {
25
- (withTimeout$ as jest.Mock).mockReturnValue({
26
- subscribe: jest.fn().mockReturnValue({ unsubscribe: jest.fn() }),
27
- });
28
-
14
+ it("should return true initially", () => {
29
15
  const { result } = renderHook(() =>
30
16
  useDelayedPlayerDetails({ isInline: true, isDocked: false, isPip: false })
31
17
  );
32
18
 
33
- expect(result.current).toBe(false);
19
+ expect(result.current).toBe(true);
34
20
  });
35
21
 
36
- it("should return true if showDetails returns true", () => {
37
- (withTimeout$ as jest.Mock).mockReturnValue({
38
- subscribe: (callback) => {
39
- callback.next();
40
-
41
- return { unsubscribe: jest.fn() };
42
- },
43
- });
44
-
45
- (showDetails as jest.Mock).mockReturnValue(true);
46
- (useIsTablet as jest.Mock).mockReturnValue(false);
47
-
22
+ it("should return false when isPip is true", () => {
48
23
  const { result } = renderHook(() =>
49
- useDelayedPlayerDetails({ isInline: true, isDocked: false, isPip: false })
24
+ useDelayedPlayerDetails({ isInline: true, isDocked: true, isPip: true })
50
25
  );
51
26
 
52
- expect(result.current).toBe(true);
27
+ expect(result.current).toBe(false);
53
28
  });
54
29
 
55
- it("should return false if showDetails returns false", () => {
56
- (withTimeout$ as jest.Mock).mockReturnValue({
57
- subscribe: (callback) => {
58
- callback.next();
59
-
60
- return { unsubscribe: jest.fn() };
61
- },
62
- });
63
-
64
- (showDetails as jest.Mock).mockReturnValue(false);
65
- (useIsTablet as jest.Mock).mockReturnValue(false);
66
-
30
+ it("should return false when isDocked is true", () => {
67
31
  const { result } = renderHook(() =>
68
- useDelayedPlayerDetails({ isInline: true, isDocked: false, isPip: false })
32
+ useDelayedPlayerDetails({ isInline: true, isDocked: true, isPip: false })
69
33
  );
70
34
 
71
35
  expect(result.current).toBe(false);
72
36
  });
73
37
 
74
- it("should unsubscribe on unmount", () => {
75
- const unsubscribeMock = jest.fn();
38
+ it("should return true for tablet regardless of other flags", () => {
39
+ (useIsTablet as jest.Mock).mockReturnValue(true);
76
40
 
77
- (withTimeout$ as jest.Mock).mockReturnValue({
78
- subscribe: jest.fn().mockReturnValue({ unsubscribe: unsubscribeMock }),
79
- });
80
-
81
- const { unmount } = renderHook(() =>
82
- useDelayedPlayerDetails({ isInline: true, isDocked: false, isPip: false })
41
+ const { result } = renderHook(() =>
42
+ useDelayedPlayerDetails({
43
+ isInline: false,
44
+ isDocked: false,
45
+ isPip: false,
46
+ })
83
47
  );
84
48
 
85
- unmount();
86
-
87
- expect(unsubscribeMock).toHaveBeenCalled();
49
+ expect(result.current).toBe(true);
88
50
  });
89
51
  });
@@ -1,5 +1,3 @@
1
- export { useBackgroundColor } from "./useBackgroundColor";
2
-
3
1
  export { useDelayedPlayerDetails } from "./useDelayedPlayerDetails";
4
2
 
5
3
  export { useInitialPlayerState } from "./useInitialPlayerState";
@@ -1,13 +1,23 @@
1
- import * as React from "react";
2
1
  import { useIsTablet } from "@applicaster/zapp-react-native-utils/reactHooks";
3
- import { withTimeout$ } from "@applicaster/zapp-react-native-utils/idleUtils";
4
2
 
5
3
  import { showDetails } from "./utils";
6
4
 
7
- const TIMEOUT = 100; // ms
8
-
9
5
  type Props = { isInline: boolean; isDocked: boolean; isPip: boolean };
10
6
 
7
+ const showPlayerDetails = (
8
+ isInline: boolean,
9
+ isDocked: boolean,
10
+ isPip: boolean,
11
+ isTablet: boolean
12
+ ) => {
13
+ return showDetails({
14
+ isMobile: !isTablet,
15
+ isInline,
16
+ isDocked,
17
+ isPip,
18
+ });
19
+ };
20
+
11
21
  /**
12
22
  * Custom hook to determine whether to show player details with a delay.
13
23
  *
@@ -22,28 +32,7 @@ export const useDelayedPlayerDetails = ({
22
32
  isDocked,
23
33
  isPip,
24
34
  }: Props): boolean => {
25
- const [shouldShowDetails, setShouldShowDetails] = React.useState(false);
26
-
27
35
  const isTablet = useIsTablet();
28
36
 
29
- React.useEffect(() => {
30
- const subscription = withTimeout$(TIMEOUT).subscribe({
31
- next: () => {
32
- setShouldShowDetails(() => {
33
- return showDetails({
34
- isMobile: !isTablet,
35
- isInline,
36
- isDocked,
37
- isPip,
38
- });
39
- });
40
- },
41
- });
42
-
43
- return () => {
44
- subscription.unsubscribe();
45
- };
46
- }, [isDocked, isTablet, isInline, isPip]);
47
-
48
- return shouldShowDetails;
37
+ return showPlayerDetails(isInline, isDocked, isPip, isTablet);
49
38
  };
@@ -9,6 +9,12 @@ import {
9
9
 
10
10
  import { getXray } from "@applicaster/zapp-react-native-utils/logger";
11
11
  import { useSafeAreaFrame } from "react-native-safe-area-context";
12
+ import {
13
+ isAndroidPlatform,
14
+ isAndroidVersionAtLeast,
15
+ } from "@applicaster/zapp-react-native-utils/reactUtils";
16
+ import { StatusBar } from "react-native";
17
+ import { isAndroidTablet } from "@applicaster/zapp-react-native-utils/reactHooks/layout/isTablet";
12
18
 
13
19
  const { Logger } = getXray();
14
20
 
@@ -27,12 +33,17 @@ const MODAL_SIZE_FOR_LANDSCAPE: Size = {
27
33
  height: "100%",
28
34
  };
29
35
 
36
+ const isOldAndroidDevice =
37
+ isAndroidPlatform() && !isAndroidVersionAtLeast(35) && !isAndroidTablet();
38
+
30
39
  export const useModalSize = (): Size => {
31
40
  const frame = useSafeAreaFrame();
32
41
 
33
42
  const [modalSize, setModalSize] = React.useState<Size>({
34
43
  width: frame.width,
35
- height: frame.height,
44
+ height: isOldAndroidDevice
45
+ ? frame.height + StatusBar.currentHeight
46
+ : frame.height,
36
47
  });
37
48
 
38
49
  const setNewModalSize = React.useCallback((newSize, log) => {
@@ -44,7 +55,12 @@ export const useModalSize = (): Size => {
44
55
  return oldSize;
45
56
  }
46
57
 
47
- return newSize;
58
+ return {
59
+ width: newSize.width,
60
+ height: isOldAndroidDevice
61
+ ? newSize.height + StatusBar.currentHeight
62
+ : newSize.height,
63
+ };
48
64
  });
49
65
 
50
66
  logger.debug({
@@ -34,6 +34,9 @@ export const useConfiguration = () => {
34
34
  minimised_height = 0,
35
35
  minimised_height_tablet = 0,
36
36
  modal_background_color,
37
+ tablet_landscape_player_container_background_color,
38
+ screen_background_color,
39
+ audio_player_background_color,
37
40
  } = config;
38
41
 
39
42
  const minimisedHeight = useIsTablet()
@@ -43,6 +46,9 @@ export const useConfiguration = () => {
43
46
  return {
44
47
  minimised_height: Number(minimisedHeight),
45
48
  modal_background_color,
49
+ tablet_landscape_player_container_background_color,
50
+ audio_player_background_color,
51
+ screen_background_color,
46
52
  };
47
53
  };
48
54
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  import * as React from "react";
4
4
 
5
- import { act, create as render } from "react-test-renderer";
5
+ import { act, render } from "@testing-library/react-native";
6
6
 
7
7
  import { ViewportAware } from "../";
8
8
  import { ViewportTracker } from "../../ViewportTracker";
@@ -12,21 +12,17 @@ import ReactNative from "react-native";
12
12
 
13
13
  jest.useFakeTimers();
14
14
 
15
- jest.mock("react-native/Libraries/ReactNative/UIManager", () => {
16
- return {
17
- ...jest.requireActual("react-native/Libraries/ReactNative/NativeUIManager"),
18
- measureLayout: (handle, parent, error, success) => {
19
- success(100, 100, 400, 400);
20
- },
21
- };
22
- });
15
+ const { ScrollView } = ReactNative;
23
16
 
24
- jest.mock("react-native/Libraries/Renderer/shims/ReactNative", () => ({
25
- ...jest.requireActual("react-native/Libraries/Renderer/shims/ReactNative"),
26
- findNodeHandle: () => 1234,
27
- }));
17
+ jest.spyOn(ReactNative, "findNodeHandle").mockImplementation(() => 1234);
28
18
 
29
- const { ScrollView } = ReactNative;
19
+ ReactNative.UIManager.measureLayout = jest.fn(
20
+ (handle, parent, error, success) => {
21
+ success(100, 100, 400, 400);
22
+ }
23
+ );
24
+
25
+ ReactNative.findNodeHandle = () => 1234;
30
26
 
31
27
  const viewportEventsManager = new ViewportEvents(true);
32
28
 
@@ -138,7 +134,7 @@ describe("<ViewportAware />", () => {
138
134
  expect(wrapper.toJSON()).toMatchSnapshot();
139
135
  expect(onViewportEnter).toHaveBeenCalled();
140
136
 
141
- const scrollviews = wrapper.root.findAllByType(ScrollView);
137
+ const scrollviews = wrapper.UNSAFE_getAllByType(ScrollView);
142
138
  expect(scrollviews).toBeArray();
143
139
  expect(scrollviews).toHaveProperty("length", 2);
144
140
 
@@ -179,7 +175,7 @@ describe("<ViewportAware />", () => {
179
175
 
180
176
  expect(wrapper.toJSON()).toMatchSnapshot();
181
177
 
182
- const scrollviews = wrapper.root.findAllByType(ScrollView);
178
+ const scrollviews = wrapper.UNSAFE_getAllByType(ScrollView);
183
179
  expect(scrollviews).toBeArray();
184
180
  expect(scrollviews).toHaveProperty("length", 2);
185
181
 
@@ -1,14 +1,19 @@
1
1
  import * as React from "react";
2
- import { ScrollView } from "react-native";
3
- import TestRenderer, { act } from "react-test-renderer";
2
+ import { act, render } from "@testing-library/react-native";
4
3
  import { ViewportEvents } from "../../ViewportEvents";
4
+ import ReactNative from "react-native";
5
+
6
+ const { ScrollView } = ReactNative;
5
7
 
6
8
  const TestComponent = () => <ScrollView />;
7
9
 
8
- jest.mock("react-native/Libraries/Renderer/shims/ReactNative", () => ({
9
- ...jest.requireActual("react-native/Libraries/Renderer/shims/ReactNative"),
10
- findNodeHandle: () => 1234,
11
- }));
10
+ jest.spyOn(ReactNative, "findNodeHandle").mockImplementation(() => 1234);
11
+
12
+ ReactNative.UIManager.measureLayout = jest.fn(
13
+ (handle, parent, error, success) => {
14
+ success(100, 100, 400, 400);
15
+ }
16
+ );
12
17
 
13
18
  const viewportEventsManager = new ViewportEvents(true);
14
19
 
@@ -23,32 +28,49 @@ const event = {
23
28
  };
24
29
 
25
30
  describe("<ViewportTracker />", () => {
26
- // eslint-disable-next-line react/prop-types
27
- const ReactWrapper = ({ children }) => (
28
- <ViewportTracker viewportEventsManager={viewportEventsManager}>
29
- <ScrollView>{children}</ScrollView>
30
- </ViewportTracker>
31
- );
32
-
33
- const wrapper = TestRenderer.create(
34
- <ReactWrapper>
35
- <TestComponent />
36
- </ReactWrapper>
37
- );
38
-
39
- const scrollView = wrapper.root.findByType(ScrollView);
40
-
41
31
  beforeEach(() => {
42
32
  viewportEventSpy.mockClear();
43
33
  });
44
34
 
45
35
  it("renders correctly", () => {
36
+ // eslint-disable-next-line react/prop-types
37
+ const ReactWrapper = ({ children }) => (
38
+ <ViewportTracker viewportEventsManager={viewportEventsManager}>
39
+ <ScrollView>{children}</ScrollView>
40
+ </ViewportTracker>
41
+ );
42
+
43
+ const wrapper = render(
44
+ <ReactWrapper>
45
+ <TestComponent />
46
+ </ReactWrapper>
47
+ );
48
+
49
+ const scrollView = wrapper.UNSAFE_getByType(ScrollView);
50
+
46
51
  expect(wrapper.toJSON()).toMatchSnapshot();
47
52
  expect(scrollView.props).toMatchSnapshot();
48
53
  });
49
54
 
50
55
  it("notifies viewport listeners when layout changes", () => {
51
- act(() => scrollView.props.onLayout(event));
56
+ // eslint-disable-next-line react/prop-types
57
+ const ReactWrapper = ({ children }) => (
58
+ <ViewportTracker viewportEventsManager={viewportEventsManager}>
59
+ <ScrollView>{children}</ScrollView>
60
+ </ViewportTracker>
61
+ );
62
+
63
+ const wrapper = render(
64
+ <ReactWrapper>
65
+ <TestComponent />
66
+ </ReactWrapper>
67
+ );
68
+
69
+ const scrollView = wrapper.UNSAFE_getByType(ScrollView);
70
+
71
+ act(() => {
72
+ scrollView.props.onLayout(event);
73
+ });
52
74
 
53
75
  expect(viewportEventSpy).toHaveBeenCalledWith(
54
76
  expect.objectContaining({
@@ -63,12 +85,50 @@ describe("<ViewportTracker />", () => {
63
85
  });
64
86
 
65
87
  it("notifies viewport listeners when content scrolls", () => {
66
- act(() => scrollView.props.onScroll(event));
88
+ // eslint-disable-next-line react/prop-types
89
+ const ReactWrapper = ({ children }) => (
90
+ <ViewportTracker viewportEventsManager={viewportEventsManager}>
91
+ <ScrollView>{children}</ScrollView>
92
+ </ViewportTracker>
93
+ );
94
+
95
+ const wrapper = render(
96
+ <ReactWrapper>
97
+ <TestComponent />
98
+ </ReactWrapper>
99
+ );
100
+
101
+ const scrollView = wrapper.UNSAFE_getByType(ScrollView);
102
+
103
+ act(() => {
104
+ scrollView.props.onLayout(event);
105
+ scrollView.props.onScroll(event);
106
+ });
107
+
67
108
  expect(viewportEventSpy).toHaveBeenCalled();
68
109
  });
69
110
 
70
111
  it("notifies viewport listeners when content size changes", () => {
71
- act(() => scrollView.props.onContentSizeChange(100, 100));
112
+ // eslint-disable-next-line react/prop-types
113
+ const ReactWrapper = ({ children }) => (
114
+ <ViewportTracker viewportEventsManager={viewportEventsManager}>
115
+ <ScrollView>{children}</ScrollView>
116
+ </ViewportTracker>
117
+ );
118
+
119
+ const wrapper = render(
120
+ <ReactWrapper>
121
+ <TestComponent />
122
+ </ReactWrapper>
123
+ );
124
+
125
+ const scrollView = wrapper.UNSAFE_getByType(ScrollView);
126
+
127
+ act(() => {
128
+ scrollView.props.onLayout(event);
129
+ scrollView.props.onContentSizeChange(100, 100);
130
+ });
131
+
72
132
  expect(viewportEventSpy).toHaveBeenCalled();
73
133
  });
74
134
  });
@@ -4,8 +4,8 @@ which helps in detecting whether a given component is visible within the viewpor
4
4
  It is useful for implementing lazy loading or triggering specific actions when a component comes into view.
5
5
  */
6
6
 
7
- import React, { useEffect, useState, useRef, ReactNode, FC } from "react";
8
- import { View, Dimensions } from "react-native";
7
+ import React, { FC, ReactNode, useEffect, useRef, useState } from "react";
8
+ import { Dimensions, View } from "react-native";
9
9
  import { useIsRTL } from "@applicaster/zapp-react-native-utils/localizationUtils";
10
10
  import { isTV } from "@applicaster/zapp-react-native-utils/reactUtils";
11
11
 
@@ -78,7 +78,7 @@ const VisibilitySensorComponent: FC<Props> = ({
78
78
  };
79
79
 
80
80
  const stopWatching = () => {
81
- interval = clearInterval(interval);
81
+ clearInterval(interval);
82
82
  };
83
83
 
84
84
  const isInViewPort = () => {
@@ -1,10 +1,10 @@
1
1
  import {
2
- getColor,
3
2
  ACTIVE_COLOR,
4
3
  BACKGROUND_COLOR,
5
- MAIN_TEXT_COLOR,
6
4
  FOCUSED_TEXT_COLOR,
7
- } from "../../../colors/index";
5
+ getColor,
6
+ MAIN_TEXT_COLOR,
7
+ } from "../../../colors";
8
8
 
9
9
  const Image = "Image";
10
10
  const View = "View";
@@ -21,13 +21,13 @@ const prepareConfiguration = (
21
21
  keys: [string]
22
22
  ) => R.compose(R.evolve(keysMap), R.pickAll(keys))(configuration);
23
23
 
24
+ const configurationKeys = R.keys(keysMap);
25
+
24
26
  export function withConfigurationProvider(Component: React.ComponentType<any>) {
25
27
  return function WithConfigurationProvider(props: Props) {
26
28
  const styles = props?.screenData?.styles;
27
29
  const general = props?.screenData?.general;
28
30
 
29
- const configurationKeys = React.useMemo(() => R.keys(keysMap), []);
30
-
31
31
  const configuration = React.useMemo(
32
32
  () => prepareConfiguration({ ...general, ...styles }, configurationKeys),
33
33
  []
@@ -13,7 +13,6 @@ import {
13
13
  loadDatasources,
14
14
  usePipesContexts,
15
15
  } from "./utils";
16
- import { useScreenResolvers } from "@applicaster/zapp-react-native-utils/actionsExecutor/screenResolver";
17
16
 
18
17
  type RiverProps = {
19
18
  dispatch: DispatchProp;
@@ -26,7 +25,7 @@ export function WithRiverFeedLoader(Component: ZappComponent) {
26
25
  return function WrappedWithRiverFeedLoader(props: RiverProps) {
27
26
  const { river } = props;
28
27
  const { screenData, pathname } = useRoute();
29
- const resolvers = useScreenResolvers(pathname);
28
+
30
29
  const pipesContexts = usePipesContexts(river.id, pathname);
31
30
 
32
31
  const componentsToLoad = ignoreComponentsWithClearCacheFlag(
@@ -50,12 +49,7 @@ export function WithRiverFeedLoader(Component: ZappComponent) {
50
49
  item?.filter((item2) => item2 !== undefined)
51
50
  );
52
51
 
53
- loadDatasources(
54
- nonEmptyDataSources,
55
- river?.id,
56
- props.dispatch,
57
- resolvers
58
- );
52
+ loadDatasources(nonEmptyDataSources, river?.id, props.dispatch);
59
53
  }, []);
60
54
 
61
55
  return <Component {...props} />;
@@ -12,16 +12,11 @@ export { getDatasourceUrl } from "./getDatasourceUrl";
12
12
 
13
13
  export const DATASOURCE_CHUNKS = 10;
14
14
 
15
- export async function loadDatasources(
16
- urls: string[][],
17
- riverId,
18
- dispatch,
19
- resolvers
20
- ) {
15
+ export async function loadDatasources(urls: string[][], riverId, dispatch) {
21
16
  return reducePromises<string, void>(
22
17
  mapPromises<string, void>((url) => {
23
18
  if (url) {
24
- return dispatch(loadPipesData(url, { riverId, resolvers }));
19
+ return dispatch(loadPipesData(url, { riverId }));
25
20
  }
26
21
  }),
27
22
  undefined,
@@ -19,10 +19,7 @@ import { ZappPipesSearchContext } from "@applicaster/zapp-react-native-ui-compon
19
19
  import { useScreenContext } from "@applicaster/zapp-react-native-utils/reactHooks/screen/useScreenContext";
20
20
 
21
21
  import { isVerticalListOrGrid } from "./utils";
22
- import {
23
- subscribeForUrlContextKeyChanges,
24
- subscribeForUrlScreenKeyChanges,
25
- } from "@applicaster/zapp-pipes-v2-client";
22
+ import { subscribeForUrlContextKeyChanges } from "@applicaster/zapp-pipes-v2-client";
26
23
 
27
24
  type Props = {
28
25
  component: ZappUIComponent;
@@ -207,7 +204,7 @@ export function zappPipesDataConnector(
207
204
  Component: React.FC<any> | React.ComponentClass<any>
208
205
  ) {
209
206
  return function WrappedWithZappPipesData(props: Props) {
210
- const { screenData, pathname } = useRoute();
207
+ const { screenData } = useRoute();
211
208
  const { plugins } = usePickFromState(["plugins"]);
212
209
 
213
210
  const screenContextData = useScreenContext();
@@ -289,17 +286,6 @@ export function zappPipesDataConnector(
289
286
  componentIndex
290
287
  );
291
288
 
292
- useEffect(() => {
293
- if (!(dataSourceUrl?.includes("pipesv2://") && reloadData)) {
294
- return subscribeForUrlScreenKeyChanges(
295
- dataSourceUrl,
296
- pathname,
297
- {},
298
- reloadData
299
- );
300
- }
301
- }, [dataSourceUrl, reloadData]);
302
-
303
289
  useEffect(() => {
304
290
  if (dataSourceUrl?.includes("pipesv2://") && reloadData) {
305
291
  const addListener = getListenerFromPlugin(dataSourceUrl, plugins);
package/index.d.ts CHANGED
@@ -24,7 +24,6 @@ type GeneralContentScreenProps = {
24
24
  } & Record<string, any>;
25
25
  focused?: boolean;
26
26
  parentFocus?: ParentFocus;
27
- extraOffset?: number;
28
27
  containerHeight?: number;
29
28
  };
30
29
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@applicaster/zapp-react-native-ui-components",
3
- "version": "14.0.0-alpha.1661204539",
3
+ "version": "14.0.0-alpha.2175196485",
4
4
  "description": "Applicaster Zapp React Native ui components for the Quick Brick App",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",
@@ -27,14 +27,11 @@
27
27
  "url": "https://github.com/applicaster/quickbrick/issues"
28
28
  },
29
29
  "homepage": "https://github.com/applicaster/quickbrick#readme",
30
- "devDependencies": {
31
- "redux-mock-store": "^1.5.3"
32
- },
33
30
  "dependencies": {
34
- "@applicaster/applicaster-types": "14.0.0-alpha.1661204539",
35
- "@applicaster/zapp-react-native-bridge": "14.0.0-alpha.1661204539",
36
- "@applicaster/zapp-react-native-redux": "14.0.0-alpha.1661204539",
37
- "@applicaster/zapp-react-native-utils": "14.0.0-alpha.1661204539",
31
+ "@applicaster/applicaster-types": "14.0.0-alpha.2175196485",
32
+ "@applicaster/zapp-react-native-bridge": "14.0.0-alpha.2175196485",
33
+ "@applicaster/zapp-react-native-redux": "14.0.0-alpha.2175196485",
34
+ "@applicaster/zapp-react-native-utils": "14.0.0-alpha.2175196485",
38
35
  "promise": "^8.3.0",
39
36
  "url": "^0.11.0",
40
37
  "uuid": "^3.3.2"
@@ -45,7 +42,6 @@
45
42
  "immer": "*",
46
43
  "react": "*",
47
44
  "react-native": "*",
48
- "react-native-safe-area-context": "*",
49
45
  "react-native-svg": "*",
50
46
  "uglify-js": "*",
51
47
  "validate-color": "*",
@@ -1,35 +0,0 @@
1
- import React from "react";
2
- import { View, Image } from "react-native";
3
-
4
- type Props = {
5
- srcImage: string;
6
- config?: {
7
- titleColor: string;
8
- summaryColor: string;
9
- backgroundColor: string;
10
- backgroundImage: string;
11
- isRTL: boolean;
12
- };
13
- };
14
-
15
- const containerStyles = {
16
- marginHorizontal: 24,
17
- };
18
-
19
- const imageStyles = {
20
- width: 400,
21
- height: 400,
22
- };
23
-
24
- export function Artwork({ srcImage }: Props) {
25
- return (
26
- <View style={containerStyles}>
27
- <Image
28
- fadeDuration={0}
29
- source={{ uri: srcImage }}
30
- style={imageStyles}
31
- resizeMode="cover"
32
- />
33
- </View>
34
- );
35
- }