@applicaster/zapp-react-native-ui-components 12.0.0-alpha.3510522252 → 12.0.0-alpha.3977160850

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 (52) hide show
  1. package/Components/AudioPlayer/AudioPlayer.tsx +9 -1
  2. package/Components/AudioPlayer/__tests__/__snapshots__/audioPlayer.test.js.snap +5 -0
  3. package/Components/AudioPlayer/helpers.tsx +1 -0
  4. package/Components/FocusableList/FocusableChild.ts +24 -14
  5. package/Components/FocusableList/FocusableItem.tsx +1 -1
  6. package/Components/FocusableList/FocusableListItemWrapper.tsx +76 -0
  7. package/Components/FocusableList/hooks/useCellState.android.ts +3 -1
  8. package/Components/FocusableList/index.tsx +26 -25
  9. package/Components/GeneralContentScreen/GeneralContentScreen.tsx +6 -3
  10. package/Components/HookRenderer/index.tsx +1 -4
  11. package/Components/Layout/TV/__tests__/__snapshots__/index.test.tsx.snap +1 -41
  12. package/Components/Layout/TV/__tests__/index.test.tsx +0 -21
  13. package/Components/Layout/TV/index.tsx +20 -36
  14. package/Components/MasterCell/SharedUI/CollapsibleTextContainer/index.ts +8 -14
  15. package/Components/MasterCell/utils/index.ts +2 -2
  16. package/Components/ModalComponent/BottomSheetModalContent.tsx +121 -0
  17. package/Components/ModalComponent/Button/Item.tsx +82 -0
  18. package/Components/ModalComponent/Button/ItemIcon.tsx +60 -0
  19. package/Components/ModalComponent/Button/ItemLabel.tsx +101 -0
  20. package/Components/ModalComponent/Button/assets.ts +4 -0
  21. package/Components/ModalComponent/Button/index.tsx +111 -0
  22. package/Components/ModalComponent/Header/CloseButton.tsx +59 -0
  23. package/Components/ModalComponent/Header/Title.tsx +70 -0
  24. package/Components/ModalComponent/Header/assets.ts +4 -0
  25. package/Components/ModalComponent/Header/index.tsx +71 -0
  26. package/Components/ModalComponent/Header/utils.ts +79 -0
  27. package/Components/ModalComponent/index.tsx +38 -0
  28. package/Components/ModalComponent/utils.ts +126 -0
  29. package/Components/PlayerContainer/PlayerContainer.tsx +1 -3
  30. package/Components/River/ComponentsMap/ComponentsMap.tsx +25 -0
  31. package/Components/River/TV/River.tsx +2 -2
  32. package/Components/River/__tests__/__snapshots__/componentsMap.test.js.snap +1 -1
  33. package/Components/River/useScreenConfiguration.ts +2 -2
  34. package/Components/RouteManager/__tests__/__snapshots__/routeManager.test.js.snap +1 -0
  35. package/Components/RouteManager/__tests__/routeManager.test.js +9 -2
  36. package/Components/RouteManager/index.tsx +4 -2
  37. package/Components/Screen/__tests__/Screen.test.tsx +83 -73
  38. package/Components/Screen/__tests__/__snapshots__/Screen.test.tsx.snap +10 -6
  39. package/Components/Screen/__tests__/navigationHandler.test.ts +1 -178
  40. package/Components/Screen/index.tsx +84 -44
  41. package/Components/Screen/navigationHandler.ts +0 -82
  42. package/Components/ScreenResolver/index.tsx +1 -1
  43. package/Components/VideoLive/LiveImageManager.ts +2 -2
  44. package/Components/VideoModal/PlayerDetails.tsx +3 -0
  45. package/Components/VideoModal/__tests__/PlayerDetails.test.tsx +0 -2
  46. package/Components/VideoModal/__tests__/PlayerWrapper.test.tsx +1 -2
  47. package/Components/Viewport/ViewportAware/__tests__/viewportAware.test.js +26 -21
  48. package/Components/Viewport/ViewportTracker/__tests__/viewportTracker.test.js +4 -5
  49. package/Components/ZappUIComponent/index.tsx +22 -12
  50. package/Components/index.js +2 -0
  51. package/Contexts/ScreenContext/index.tsx +1 -4
  52. package/package.json +5 -5
@@ -0,0 +1,79 @@
1
+ import * as R from "ramda";
2
+ import { platformSelect } from "@applicaster/zapp-react-native-utils/reactUtils";
3
+ import { PluginConfiguration } from "../index";
4
+
5
+ export function getCloseButtonProps(config: PluginConfiguration) {
6
+ const {
7
+ modal_bottom_sheet_close_asset,
8
+ modal_bottom_sheet_close_focus_asset,
9
+ modal_bottom_sheet_close_height,
10
+ modal_bottom_sheet_close_width,
11
+ modal_bottom_sheet_close_switch,
12
+ modal_bottom_sheet_close_margin_bottom,
13
+ modal_bottom_sheet_close_margin_left,
14
+ modal_bottom_sheet_close_margin_right,
15
+ modal_bottom_sheet_close_margin_top,
16
+ } = config;
17
+
18
+ return {
19
+ asset: modal_bottom_sheet_close_asset,
20
+ assetFocused: modal_bottom_sheet_close_focus_asset,
21
+ enabled: modal_bottom_sheet_close_switch,
22
+ width: modal_bottom_sheet_close_width,
23
+ height: modal_bottom_sheet_close_height,
24
+ marginTop: modal_bottom_sheet_close_margin_top,
25
+ marginBottom: modal_bottom_sheet_close_margin_bottom,
26
+ marginLeft: modal_bottom_sheet_close_margin_left,
27
+ marginRight: modal_bottom_sheet_close_margin_right,
28
+ };
29
+ }
30
+
31
+ export function getTextValue(
32
+ config: PluginConfiguration,
33
+ entry: ZappEntry,
34
+ key: string
35
+ ): string {
36
+ const keyValue = config[key];
37
+
38
+ if (entry) {
39
+ const keyPath = R.split(".", keyValue);
40
+
41
+ return R.path(keyPath, entry);
42
+ } else {
43
+ return keyValue;
44
+ }
45
+ }
46
+
47
+ function getConfigKey(
48
+ config: PluginConfiguration,
49
+ suffix: string,
50
+ key: "title" | "summary"
51
+ ) {
52
+ return config?.[`modal_bottom_sheet_${key}_${suffix}`];
53
+ }
54
+
55
+ export function getTitleProps(
56
+ config: PluginConfiguration,
57
+ key: "title" | "summary"
58
+ ) {
59
+ return {
60
+ enabled: getConfigKey(config, "switch", key),
61
+ letterSpacing: platformSelect({
62
+ ios: getConfigKey(config, "ios_letter_spacing", key),
63
+ android: getConfigKey(config, "android_letter_spacing", key),
64
+ }),
65
+ fontFamily: platformSelect({
66
+ ios: getConfigKey(config, "family_ios_font_selector", key),
67
+ android: getConfigKey(config, "family_android_font_selector", key),
68
+ }),
69
+ lineHeight: getConfigKey(config, "line_height", key),
70
+ fontSize: getConfigKey(config, "font_size", key),
71
+ color: getConfigKey(config, "font_color", key),
72
+ marginTop: getConfigKey(config, "margin_top", key),
73
+ marginBottom: getConfigKey(config, "margin_bottom", key),
74
+ marginLeft: getConfigKey(config, "margin_left", key),
75
+ marginRight: getConfigKey(config, "margin_right", key),
76
+ numberOfLines: getConfigKey(config, "number_of_lines", key),
77
+ transform: getConfigKey(config, "transform", key),
78
+ };
79
+ }
@@ -0,0 +1,38 @@
1
+ import React, { useCallback, useState } from "react";
2
+
3
+ import { BasicMeasurementsPortal as MeasurementsPortal } from "@applicaster/zapp-react-native-ui-components/Components/MeasurmentsPortal";
4
+ import { BottomSheetModalContent } from "./BottomSheetModalContent";
5
+
6
+ export type PluginConfiguration = {
7
+ [key: string]: any;
8
+ };
9
+
10
+ type Props = {
11
+ actionPlugins?: [QuickBrickPlugin];
12
+ configuration?: PluginConfiguration;
13
+ };
14
+
15
+ export function ModalComponent(props: ModalBottomSheetContentProps & Props) {
16
+ const [height, setHeight] = useState(0);
17
+
18
+ const onLayout = useCallback(
19
+ ({ nativeEvent }) => {
20
+ if (height === 0) {
21
+ setHeight(nativeEvent.layout.height);
22
+ }
23
+ },
24
+ [height]
25
+ );
26
+
27
+ if (height === 0) {
28
+ return (
29
+ <MeasurementsPortal
30
+ Component={BottomSheetModalContent}
31
+ componentProps={props}
32
+ onLayout={onLayout}
33
+ />
34
+ );
35
+ }
36
+
37
+ return <BottomSheetModalContent {...props} />;
38
+ }
@@ -0,0 +1,126 @@
1
+ import { platformSelect } from "@applicaster/zapp-react-native-utils/reactUtils";
2
+ import { PluginConfiguration } from "./index";
3
+
4
+ export function defaultItemProps(
5
+ config: PluginConfiguration,
6
+ maxWidth: number
7
+ ) {
8
+ const {
9
+ modal_bottom_sheet_item_background_color,
10
+ modal_bottom_sheet_item_focus_background_color,
11
+ modal_bottom_sheet_item_selected_background_color,
12
+ modal_bottom_sheet_item_focusected_background_color,
13
+ modal_bottom_sheet_item_corner_radius,
14
+ modal_bottom_sheet_item_margin_bottom,
15
+ modal_bottom_sheet_item_margin_left,
16
+ modal_bottom_sheet_item_margin_right,
17
+ modal_bottom_sheet_item_margin_top,
18
+ modal_bottom_sheet_item_padding_bottom,
19
+ modal_bottom_sheet_item_padding_left,
20
+ modal_bottom_sheet_item_padding_right,
21
+ modal_bottom_sheet_item_padding_top,
22
+ } = config;
23
+
24
+ return {
25
+ backgroundColor: modal_bottom_sheet_item_background_color,
26
+ focusedBackgroundColor: modal_bottom_sheet_item_focus_background_color,
27
+ selectedBackgroundColor: modal_bottom_sheet_item_selected_background_color,
28
+ focusectedBackgroundColor:
29
+ modal_bottom_sheet_item_focusected_background_color,
30
+ borderRadius: modal_bottom_sheet_item_corner_radius,
31
+ marginBottom: modal_bottom_sheet_item_margin_bottom,
32
+ marginTop: modal_bottom_sheet_item_margin_top,
33
+ marginLeft: modal_bottom_sheet_item_margin_left,
34
+ marginRight: modal_bottom_sheet_item_margin_right,
35
+ paddingTop: modal_bottom_sheet_item_padding_top,
36
+ paddingBottom: modal_bottom_sheet_item_padding_bottom,
37
+ paddingRight: modal_bottom_sheet_item_padding_right,
38
+ paddingLeft: modal_bottom_sheet_item_padding_left,
39
+ maxWidth,
40
+ };
41
+ }
42
+
43
+ export function defaultItemLabelProps(
44
+ config: PluginConfiguration,
45
+ sheetWidth: number
46
+ ) {
47
+ const {
48
+ modal_bottom_sheet_item_label_android_letter_spacing,
49
+ modal_bottom_sheet_item_label_ios_letter_spacing,
50
+ modal_bottom_sheet_item_label_family_ios_font_selector,
51
+ modal_bottom_sheet_item_label_family_android_font_selector,
52
+ modal_bottom_sheet_item_label_focus_font_color,
53
+ modal_bottom_sheet_item_label_font_color,
54
+ modal_bottom_sheet_item_label_selected_font_color,
55
+ modal_bottom_sheet_item_label_hover_selected_font_color,
56
+ modal_bottom_sheet_item_label_font_size,
57
+ modal_bottom_sheet_item_label_line_height,
58
+ modal_bottom_sheet_item_label_margin_bottom,
59
+ modal_bottom_sheet_item_label_margin_top,
60
+ modal_bottom_sheet_item_label_margin_left,
61
+ modal_bottom_sheet_item_label_margin_right,
62
+ modal_bottom_sheet_item_label_transform,
63
+ modal_bottom_sheet_item_icon_width,
64
+ modal_bottom_sheet_item_icon_margin_left,
65
+ modal_bottom_sheet_item_icon_margin_right,
66
+ modal_bottom_sheet_item_margin_left,
67
+ modal_bottom_sheet_item_margin_right,
68
+ modal_bottom_sheet_item_padding_left,
69
+ modal_bottom_sheet_item_padding_right,
70
+ } = config;
71
+
72
+ const maxWidth =
73
+ sheetWidth -
74
+ (modal_bottom_sheet_item_icon_width +
75
+ modal_bottom_sheet_item_icon_margin_left +
76
+ modal_bottom_sheet_item_icon_margin_right +
77
+ modal_bottom_sheet_item_margin_left +
78
+ modal_bottom_sheet_item_margin_right +
79
+ modal_bottom_sheet_item_padding_left +
80
+ modal_bottom_sheet_item_padding_right);
81
+
82
+ return {
83
+ fontFamily: platformSelect({
84
+ ios: modal_bottom_sheet_item_label_family_ios_font_selector,
85
+ android: modal_bottom_sheet_item_label_family_android_font_selector,
86
+ }),
87
+ letterSpacing: platformSelect({
88
+ ios: modal_bottom_sheet_item_label_ios_letter_spacing,
89
+ android: modal_bottom_sheet_item_label_android_letter_spacing,
90
+ }),
91
+ fontSize: modal_bottom_sheet_item_label_font_size,
92
+ color: modal_bottom_sheet_item_label_font_color,
93
+ focusColor: modal_bottom_sheet_item_label_focus_font_color,
94
+ hoverSelectedColor: modal_bottom_sheet_item_label_hover_selected_font_color,
95
+ selectedColor: modal_bottom_sheet_item_label_selected_font_color,
96
+ lineHeight: modal_bottom_sheet_item_label_line_height,
97
+ marginBottom: modal_bottom_sheet_item_label_margin_bottom,
98
+ marginTop: modal_bottom_sheet_item_label_margin_top,
99
+ marginLeft: modal_bottom_sheet_item_label_margin_left,
100
+ marginRight: modal_bottom_sheet_item_label_margin_right,
101
+ transform: modal_bottom_sheet_item_label_transform,
102
+ maxWidth,
103
+ };
104
+ }
105
+
106
+ export function defaultItemIconProps(config: PluginConfiguration) {
107
+ const {
108
+ modal_bottom_sheet_item_icon_height,
109
+ modal_bottom_sheet_item_icon_width,
110
+ modal_bottom_sheet_item_icon_margin_bottom,
111
+ modal_bottom_sheet_item_icon_margin_left,
112
+ modal_bottom_sheet_item_icon_margin_right,
113
+ modal_bottom_sheet_item_icon_margin_top,
114
+ modal_bottom_sheet_item_icon_flavour,
115
+ } = config;
116
+
117
+ return {
118
+ width: modal_bottom_sheet_item_icon_width,
119
+ height: modal_bottom_sheet_item_icon_height,
120
+ flavour: modal_bottom_sheet_item_icon_flavour,
121
+ marginTop: modal_bottom_sheet_item_icon_margin_top,
122
+ marginBottom: modal_bottom_sheet_item_icon_margin_bottom,
123
+ marginLeft: modal_bottom_sheet_item_icon_margin_left,
124
+ marginRight: modal_bottom_sheet_item_icon_margin_right,
125
+ };
126
+ }
@@ -580,8 +580,6 @@ const PlayerContainerComponent = (props: Props) => {
580
580
  pluginConfiguration,
581
581
  };
582
582
 
583
- console.log("Anton player container", {result: {isAppleTV: isAppleTV(), notInlineTv: !isInlineTV}});
584
-
585
583
  return (
586
584
  <PlayerStateContext.Provider value={value}>
587
585
  <PlayerContainerContextProvider
@@ -623,7 +621,7 @@ const PlayerContainerComponent = (props: Props) => {
623
621
  }}
624
622
  focused={isInlineTV ? true : undefined}
625
623
  autoplay={true}
626
- controls={false}
624
+ controls={isAppleTV() && !isInlineTV}
627
625
  disableCastAction={disableCastAction}
628
626
  docked={navigator.isVideoModalDocked()}
629
627
  entry={item}
@@ -21,6 +21,7 @@ import {
21
21
  import { useScreenData } from "@applicaster/zapp-react-native-utils/reactHooks/screen/useScreenData";
22
22
  import { isLast } from "@applicaster/zapp-react-native-utils/arrayUtils";
23
23
  import { withComponentsMapProvider } from "@applicaster/zapp-react-native-ui-components/Decorators/ComponentsMapWrapper";
24
+ import { useScreenScrollStore } from "@applicaster/zapp-react-native-utils/screenState";
24
25
 
25
26
  type Props = {
26
27
  feed: ZappFeed;
@@ -193,6 +194,27 @@ function ComponentsMapComponent(props: Props) {
193
194
  []
194
195
  );
195
196
 
197
+ const onScrollFlatList = React.useCallback(
198
+ ({ nativeEvent }, isScrollingDone = false) => {
199
+ const {
200
+ contentOffset: { y },
201
+ } = nativeEvent;
202
+
203
+ useScreenScrollStore.setState({
204
+ scrollingVelocity: isScrollingDone ? 0 : 1,
205
+ scrollPosition: y,
206
+ });
207
+ },
208
+ []
209
+ );
210
+
211
+ const onMomentumScrollEnd = React.useCallback(
212
+ ({ nativeEvent }) => {
213
+ onScrollFlatList({ nativeEvent }, true);
214
+ },
215
+ [onScrollFlatList]
216
+ );
217
+
196
218
  if (shouldShowLoadingError) {
197
219
  return <RiverError />;
198
220
  }
@@ -227,6 +249,9 @@ function ComponentsMapComponent(props: Props) {
227
249
  }
228
250
  ListFooterComponent={renderFooter}
229
251
  refreshControl={refreshControl}
252
+ onScroll={onScrollFlatList}
253
+ onMomentumScrollEnd={onMomentumScrollEnd}
254
+ scrollEventThrottle={16}
230
255
  {...scrollViewExtraProps}
231
256
  />
232
257
  </ViewportTracker>
@@ -4,7 +4,6 @@ import * as React from "react";
4
4
  import { Text } from "react-native";
5
5
  import * as R from "ramda";
6
6
 
7
- import { usePickFromState } from "@applicaster/zapp-react-native-redux/hooks";
8
7
  import {
9
8
  useFeedLoader,
10
9
  useLayoutVersion,
@@ -20,6 +19,7 @@ import {
20
19
  useNavbarState,
21
20
  useSetNavbarState,
22
21
  } from "@applicaster/zapp-react-native-utils/reactHooks/screen/useScreenContext";
22
+ import { useRivers } from "@applicaster/zapp-react-native-utils/reactHooks/state";
23
23
 
24
24
  type Props = {
25
25
  screenId: string;
@@ -53,7 +53,7 @@ export const River = (props: Props) => {
53
53
 
54
54
  const navigationPluginData = useNavigationPluginData();
55
55
 
56
- const { rivers } = usePickFromState(["rivers"]);
56
+ const rivers = useRivers();
57
57
  const isV2 = useLayoutVersion({ isV2: true });
58
58
 
59
59
  const river = React.useMemo(() => rivers?.[screenId], [screenId]);
@@ -64,7 +64,7 @@ exports[`componentsMap renders renders components map correctly 1`] = `
64
64
  refreshControl={null}
65
65
  removeClippedSubviews={true}
66
66
  renderItem={[Function]}
67
- scrollEventThrottle={50}
67
+ scrollEventThrottle={16}
68
68
  scrollIndicatorInsets={
69
69
  Object {
70
70
  "right": 1,
@@ -1,10 +1,10 @@
1
1
  import * as R from "ramda";
2
2
 
3
- import { usePickFromState } from "@applicaster/zapp-react-native-redux/hooks";
4
3
  import { useIsTablet } from "@applicaster/zapp-react-native-utils/reactHooks";
5
4
  import { toCamelCase } from "@applicaster/zapp-react-native-utils/stringUtils";
6
5
  import { useMemo } from "react";
7
6
  import { isNilOrEmpty } from "@applicaster/zapp-react-native-utils/reactUtils/helpers";
7
+ import { useRivers } from "@applicaster/zapp-react-native-utils/reactHooks/state";
8
8
 
9
9
  type GeneralContentScreen = ZappRiver & {
10
10
  styles: {
@@ -46,7 +46,7 @@ const stylingKeys = [
46
46
  ];
47
47
 
48
48
  export function useScreenConfiguration(screenId: string): ScreenConfiguration {
49
- const { rivers } = usePickFromState(["rivers"]);
49
+ const rivers = useRivers();
50
50
  const isTablet = useIsTablet();
51
51
 
52
52
  return useMemo(() => {
@@ -5,6 +5,7 @@ exports[`<RouteManager /> renders correctly 1`] = `
5
5
  screenId="A1234"
6
6
  >
7
7
  <WithProvider
8
+ pathname="/river/A1234"
8
9
  screenData={
9
10
  Object {
10
11
  "id": "A1234",
@@ -2,11 +2,17 @@ import React from "react";
2
2
  import { shallow } from "enzyme";
3
3
  import { shallowToJson } from "enzyme-to-json";
4
4
 
5
- import { ScreenResolver } from "@applicaster/zapp-react-native-ui-components/Components/ScreenResolver";
6
-
7
5
  const pathname = "/river/A1234";
8
6
  const screenData = { id: "A1234" };
9
7
 
8
+ jest.mock("@applicaster/zapp-react-native-utils/reactHooks/navigation", () => ({
9
+ useRoute: jest.fn(() => ({ pathname: pathname, screenData: screenData })),
10
+ }));
11
+
12
+ const {
13
+ ScreenResolver,
14
+ } = require("@applicaster/zapp-react-native-ui-components/Components/ScreenResolver");
15
+
10
16
  const { RouteManager } = require("../index");
11
17
 
12
18
  describe("<RouteManager />", () => {
@@ -20,6 +26,7 @@ describe("<RouteManager />", () => {
20
26
 
21
27
  it("passes the correct props to ScreenResolver", () => {
22
28
  expect(wrapper.find(ScreenResolver).props()).toEqual({
29
+ pathname: "/river/A1234",
23
30
  screenType: "river",
24
31
  screenId: "A1234",
25
32
  screenData: { id: "A1234" },
@@ -2,6 +2,7 @@ import * as React from "react";
2
2
  import * as R from "ramda";
3
3
 
4
4
  import { getPathAttributes } from "@applicaster/zapp-react-native-utils/navigationUtils";
5
+ import { useRoute } from "@applicaster/zapp-react-native-utils/reactHooks";
5
6
  import { ScreenResolver } from "../ScreenResolver";
6
7
  import { TestId } from "./TestId";
7
8
 
@@ -12,7 +13,8 @@ type Props = { pathname: string; screenData: Record<string, any> };
12
13
  * and reconciles data returned from hook plugins if needed
13
14
  * @param {Props}: see props above
14
15
  */
15
- export function RouteManager({ pathname, screenData, ...otherProps }: Props) {
16
+ export function RouteManager(props: Props) {
17
+ const { pathname, screenData } = useRoute();
16
18
  const pathAttributes = getPathAttributes({ pathname });
17
19
 
18
20
  const { screenType, screenId } = R.last(pathAttributes);
@@ -22,8 +24,8 @@ export function RouteManager({ pathname, screenData, ...otherProps }: Props) {
22
24
  <ScreenResolver
23
25
  screenType={screenType}
24
26
  screenId={screenId}
27
+ {...props}
25
28
  screenData={screenData}
26
- {...otherProps}
27
29
  />
28
30
  </TestId>
29
31
  );
@@ -6,6 +6,14 @@ const Mocked_RouteManager = jest.fn((props) => (
6
6
  <View testID="routeManager" {...props} />
7
7
  ));
8
8
 
9
+ const mock_navBarVisibleFlag = true;
10
+
11
+ const mockIsNavBarVisible = jest.fn(() => mock_navBarVisibleFlag);
12
+
13
+ jest.mock("react-native-safe-area-context", () => ({
14
+ useSafeAreaInsets: () => ({ top: 44 }),
15
+ }));
16
+
9
17
  jest.mock("../../RouteManager", () => ({
10
18
  RouteManager: Mocked_RouteManager,
11
19
  }));
@@ -23,51 +31,42 @@ jest.mock(
23
31
  })
24
32
  );
25
33
 
26
- let mock_navBarVisibleFlag = true;
27
-
28
- jest.mock("../navigationHandler.ts", () => ({
29
- isNavBarVisible: jest.fn(() => mock_navBarVisibleFlag),
30
- }));
31
-
32
34
  jest.mock("@applicaster/zapp-react-native-utils/analyticsUtils", () => ({
33
35
  useAnalytics: jest.fn(() => ({
34
36
  sendScreenEvent: jest.fn(),
35
37
  })),
36
38
  }));
37
39
 
38
- const {
39
- allowedOrientationsForScreen,
40
- getOrientation,
41
- useGetScreenOrientation,
42
- } = require("@applicaster/zapp-react-native-utils/appUtils/orientationHelper");
43
-
44
40
  jest.mock("@applicaster/zapp-react-native-utils/theme", () => ({
45
41
  useTheme: jest.fn(() => ({
46
42
  app_background_color: "blue",
47
43
  })),
48
44
  }));
49
45
 
46
+ const NavBar = jest.fn((props) => <View testID="navBar" {...props} />);
47
+
48
+ jest.mock(
49
+ "@applicaster/zapp-react-native-app/App/Layout/layoutHelpers",
50
+ () => ({
51
+ getNavigationPluginModule: () => NavBar,
52
+ })
53
+ );
54
+
50
55
  jest.mock("@applicaster/zapp-react-native-utils/reactHooks/screen", () => ({
51
- useCurrentScreenData: jest.fn(() => ({
56
+ ...(jest.requireActual(
57
+ "@applicaster/zapp-react-native-utils/reactHooks/screen"
58
+ ) as any),
59
+ useScreenData: jest.fn(() => ({
52
60
  id: "testId",
61
+ navigations: [{ id: "testId", category: "nav_bar" }],
53
62
  })),
54
- useNavbarState: jest.fn(() => ({
55
- visible: jest.fn(() => mock_navBarVisibleFlag),
63
+ useCurrentScreenData: jest.fn(() => ({
64
+ id: "testId",
56
65
  })),
57
66
  }));
58
67
 
59
- const {
60
- useCurrentScreenData,
61
- } = require("@applicaster/zapp-react-native-utils/reactHooks/screen");
62
-
63
- const { isNavBarVisible } = require("../navigationHandler");
64
-
65
- const NavBar = jest.fn((props) => <View testID="navBar" {...props} />);
66
- const navigator = {};
67
- const navBarProps = { nav_items: [] };
68
- const screenData = {};
69
-
70
68
  jest.mock("@applicaster/zapp-react-native-utils/reactHooks/navigation", () => ({
69
+ isNavBarVisible: mockIsNavBarVisible,
71
70
  useRoute: jest.fn(() => ({
72
71
  pathname: "/river/testId",
73
72
  })),
@@ -93,9 +92,26 @@ jest.mock("@applicaster/zapp-react-native-redux/hooks", () => ({
93
92
  }),
94
93
  }));
95
94
 
95
+ const {
96
+ ORIENTATIONS,
97
+ } = require("@applicaster/zapp-react-native-utils/appUtils/orientationHelper");
98
+
99
+ const {
100
+ useCurrentScreenData,
101
+ } = require("@applicaster/zapp-react-native-utils/reactHooks/screen");
102
+
103
+ const {
104
+ allowedOrientationsForScreen,
105
+ getOrientation,
106
+ useGetScreenOrientation,
107
+ } = require("@applicaster/zapp-react-native-utils/appUtils/orientationHelper");
108
+
109
+ const navigator = {};
110
+ const navBarProps = { nav_items: [] };
111
+ const screenData = {};
112
+
96
113
  const screenProps = {
97
114
  pathname: "/foo/path",
98
- NavBar,
99
115
  navigator,
100
116
  navBarProps,
101
117
  screenData,
@@ -109,7 +125,6 @@ describe("<Screen Component />", () => {
109
125
  beforeEach(() => {
110
126
  allowedOrientationsForScreen.mockClear();
111
127
  getOrientation.mockClear();
112
- isNavBarVisible.mockClear();
113
128
  useGetScreenOrientation.mockClear();
114
129
  });
115
130
 
@@ -125,14 +140,9 @@ describe("<Screen Component />", () => {
125
140
 
126
141
  describe("when the navbar should be hidden", () => {
127
142
  beforeEach(() => {
128
- mock_navBarVisibleFlag = false;
129
143
  wrapper = create(<Screen {...screenProps} />);
130
144
  });
131
145
 
132
- afterEach(() => {
133
- mock_navBarVisibleFlag = true;
134
- });
135
-
136
146
  it("renders correctly", () => {
137
147
  act(() => {
138
148
  wrapper = create(<Screen {...screenProps} />);
@@ -142,44 +152,44 @@ describe("<Screen Component />", () => {
142
152
  });
143
153
  });
144
154
 
145
- // it("invokes the orientation hook when the route changes", () => {
146
- // act(() => {
147
- // wrapper = create(<Screen {...screenProps} />);
148
- // });
149
-
150
- // // @ts-ignore
151
- // useCurrentScreenData.mockReturnValue({
152
- // id: "player-testId",
153
- // general: { screen_orientation: ORIENTATIONS.landscapeSensor },
154
- // plugin_type: "player",
155
- // });
156
-
157
- // act(() => {
158
- // wrapper.update(
159
- // <Screen
160
- // {...screenProps}
161
- // pathname="/playable"
162
- // screenData={{
163
- // id: "player-testId",
164
- // general: { screen_orientation: ORIENTATIONS.landscapeSensor },
165
- // plugin_type: "player",
166
- // }}
167
- // />
168
- // );
169
- // });
170
-
171
- // useCurrentScreenData.mockReturnValue({
172
- // id: "player-testId",
173
- // general: { screen_orientation: ORIENTATIONS.landscapeSensor },
174
- // });
175
-
176
- // act(() => {
177
- // wrapper.update(<Screen {...screenProps} />);
178
- // });
179
-
180
- // expect(allowedOrientationsForScreen).toHaveBeenNthCalledWith(
181
- // 1,
182
- // ORIENTATIONS.landscapeSensor
183
- // );
184
- // });
155
+ it("invokes the orientation hook when the route changes", () => {
156
+ act(() => {
157
+ wrapper = create(<Screen {...screenProps} />);
158
+ });
159
+
160
+ // @ts-ignore
161
+ useCurrentScreenData.mockReturnValue({
162
+ id: "player-testId",
163
+ general: { screen_orientation: ORIENTATIONS.landscapeSensor },
164
+ plugin_type: "player",
165
+ });
166
+
167
+ act(() => {
168
+ wrapper.update(
169
+ <Screen
170
+ {...screenProps}
171
+ pathname="/playable"
172
+ screenData={{
173
+ id: "player-testId",
174
+ general: { screen_orientation: ORIENTATIONS.landscapeSensor },
175
+ plugin_type: "player",
176
+ }}
177
+ />
178
+ );
179
+ });
180
+
181
+ useCurrentScreenData.mockReturnValue({
182
+ id: "player-testId",
183
+ general: { screen_orientation: ORIENTATIONS.landscapeSensor },
184
+ });
185
+
186
+ act(() => {
187
+ wrapper.update(<Screen {...screenProps} />);
188
+ });
189
+
190
+ expect(allowedOrientationsForScreen).toHaveBeenNthCalledWith(
191
+ 1,
192
+ ORIENTATIONS.landscapeSensor
193
+ );
194
+ });
185
195
  });