@applicaster/zapp-react-native-ui-components 12.0.0-rc.6 → 12.0.0-rc.61

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 (111) 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/Cell/Cell.tsx +2 -2
  5. package/Components/Cell/CellWithFocusable.tsx +21 -14
  6. package/Components/Cell/TvOSCellComponent.tsx +2 -2
  7. package/Components/ErrorScreen/index.tsx +1 -1
  8. package/Components/FocusableCell/index.tsx +7 -7
  9. package/Components/FocusableList/FocusableChild.ts +24 -14
  10. package/Components/FocusableList/FocusableItem.tsx +1 -1
  11. package/Components/FocusableList/FocusableListItemWrapper.tsx +76 -0
  12. package/Components/FocusableList/hooks/useCellState.android.ts +3 -1
  13. package/Components/FocusableList/index.tsx +26 -25
  14. package/Components/GeneralContentScreen/GeneralContentScreen.tsx +11 -8
  15. package/Components/GeneralContentScreen/utils/__tests__/useCurationAPI.test.js +13 -6
  16. package/Components/GeneralContentScreen/utils/useCurationAPI.ts +1 -1
  17. package/Components/HandlePlayable/HandlePlayable.tsx +1 -1
  18. package/Components/HookRenderer/index.tsx +1 -6
  19. package/Components/Image/Image.android.tsx +3 -26
  20. package/Components/Image/Image.tsx +18 -2
  21. package/Components/Image/utils/index.ts +39 -0
  22. package/Components/Layout/TV/__tests__/index.test.tsx +1 -34
  23. package/Components/Layout/TV/index.tsx +20 -36
  24. package/Components/MasterCell/DefaultComponents/BorderContainerView/index.tsx +0 -1
  25. package/Components/MasterCell/DefaultComponents/CellBadge/index.tsx +21 -8
  26. package/Components/MasterCell/DefaultComponents/Image/Image.android.tsx +9 -26
  27. package/Components/MasterCell/DefaultComponents/Image/Image.ios.tsx +5 -3
  28. package/Components/MasterCell/DefaultComponents/Image/hooks/useImageSize.ts +65 -0
  29. package/Components/MasterCell/DefaultComponents/ImageContainer/index.tsx +5 -1
  30. package/Components/MasterCell/DefaultComponents/LiveImage/index.tsx +17 -2
  31. package/Components/MasterCell/DefaultComponents/SecondaryImage/Image.tsx +3 -2
  32. package/Components/MasterCell/DefaultComponents/Text/index.tsx +14 -2
  33. package/Components/MasterCell/DefaultComponents/Toggle.tsx +5 -1
  34. package/Components/MasterCell/DefaultComponents/__tests__/image.test.js +1 -1
  35. package/Components/MasterCell/SharedUI/CollapsibleTextContainer/index.ts +6 -10
  36. package/Components/MasterCell/hooks/useAsyncRendering/index.ts +1 -1
  37. package/Components/MasterCell/utils/index.ts +16 -5
  38. package/Components/MeasurmentsPortal/BasicMeasurementsPortal.tsx +11 -7
  39. package/Components/MeasurmentsPortal/MeasurementsPortal.tsx +10 -1
  40. package/Components/ModalComponent/BottomSheetModalContent.tsx +121 -0
  41. package/Components/ModalComponent/Button/Item.tsx +82 -0
  42. package/Components/ModalComponent/Button/ItemIcon.tsx +60 -0
  43. package/Components/ModalComponent/Button/ItemLabel.tsx +101 -0
  44. package/Components/ModalComponent/Button/assets.ts +4 -0
  45. package/Components/ModalComponent/Button/index.tsx +111 -0
  46. package/Components/ModalComponent/Header/CloseButton.tsx +59 -0
  47. package/Components/ModalComponent/Header/Title.tsx +70 -0
  48. package/Components/ModalComponent/Header/assets.ts +4 -0
  49. package/Components/ModalComponent/Header/index.tsx +71 -0
  50. package/Components/ModalComponent/Header/utils.ts +79 -0
  51. package/Components/ModalComponent/index.tsx +38 -0
  52. package/Components/ModalComponent/utils.ts +126 -0
  53. package/Components/PlayerContainer/PlayerContainer.tsx +61 -30
  54. package/Components/PlayerContainer/ProgramInfo/index.tsx +3 -1
  55. package/Components/PlayerImageBackground/index.tsx +34 -8
  56. package/Components/River/ComponentsMap/ComponentsMap.tsx +91 -2
  57. package/Components/River/RefreshControl.tsx +55 -1
  58. package/Components/River/River.tsx +8 -5
  59. package/Components/River/TV/River.tsx +2 -2
  60. package/Components/River/__tests__/__snapshots__/componentsMap.test.js.snap +1 -1
  61. package/Components/River/__tests__/componentsMap.test.js +7 -0
  62. package/Components/River/useScreenConfiguration.ts +5 -6
  63. package/Components/RouteManager/__tests__/__snapshots__/routeManager.test.js.snap +1 -0
  64. package/Components/RouteManager/__tests__/routeManager.test.js +9 -2
  65. package/Components/RouteManager/index.tsx +5 -3
  66. package/Components/Screen/__tests__/Screen.test.tsx +48 -36
  67. package/Components/Screen/__tests__/__snapshots__/Screen.test.tsx.snap +24 -6
  68. package/Components/Screen/__tests__/navigationHandler.test.ts +1 -178
  69. package/Components/Screen/index.tsx +103 -44
  70. package/Components/Screen/navigationHandler.ts +0 -82
  71. package/Components/Screen/orientationHandler.ts +1 -1
  72. package/Components/ScreenResolver/index.tsx +1 -1
  73. package/Components/Tabs/TV/styles.ts +1 -1
  74. package/Components/TrackedView/index.tsx +6 -3
  75. package/Components/VideoLive/LiveImageManager.ts +42 -13
  76. package/Components/VideoLive/PlayerLiveImageComponent.tsx +81 -72
  77. package/Components/VideoLive/__tests__/PlayerLiveImageComponent.test.tsx +45 -3
  78. package/Components/VideoLive/__tests__/__snapshots__/PlayerLiveImageComponent.test.tsx.snap +18 -28
  79. package/Components/VideoModal/ModalAnimation/AnimatedPlayerModalWrapper.tsx +78 -0
  80. package/Components/VideoModal/ModalAnimation/AnimatedScrollModal.tsx +342 -0
  81. package/Components/VideoModal/ModalAnimation/AnimatedVideoPlayerComponent.tsx +151 -0
  82. package/Components/VideoModal/ModalAnimation/AnimationComponent.tsx +438 -0
  83. package/Components/VideoModal/ModalAnimation/ModalAnimationContext.tsx +154 -0
  84. package/Components/VideoModal/ModalAnimation/index.ts +15 -0
  85. package/Components/VideoModal/ModalAnimation/utils.ts +299 -0
  86. package/Components/VideoModal/PlayerDetails.tsx +3 -0
  87. package/Components/VideoModal/PlayerWrapper.tsx +69 -44
  88. package/Components/VideoModal/VideoModal.tsx +25 -42
  89. package/Components/VideoModal/__tests__/PlayerDetails.test.tsx +0 -2
  90. package/Components/VideoModal/__tests__/PlayerWrapper.test.tsx +5 -1
  91. package/Components/VideoModal/__tests__/__snapshots__/PlayerWrapper.test.tsx.snap +246 -166
  92. package/Components/VideoModal/hooks/useModalSize.ts +13 -4
  93. package/Components/VideoModal/utils.ts +3 -3
  94. package/Components/Viewport/ViewportAware/__tests__/viewportAware.test.js +26 -21
  95. package/Components/Viewport/ViewportTracker/ViewportTracker.tsx +1 -1
  96. package/Components/Viewport/ViewportTracker/__tests__/viewportTracker.test.js +4 -5
  97. package/Components/Viewport/ViewportTracker/index.tsx +1 -0
  98. package/Components/Viewport/utils.js +1 -1
  99. package/Components/ZappUIComponent/index.tsx +22 -12
  100. package/Components/index.js +2 -0
  101. package/Contexts/MenuToggleContext/{index.js → index.ts} +16 -0
  102. package/Contexts/ScreenContext/__tests__/__snapshots__/index.test.tsx.snap +3 -0
  103. package/Contexts/ScreenContext/__tests__/index.test.tsx +27 -0
  104. package/Contexts/ScreenContext/index.tsx +95 -29
  105. package/Decorators/ComponentsMapWrapper/withComponentsMapProvider.tsx +7 -2
  106. package/Decorators/RiverResolver/index.tsx +0 -4
  107. package/Decorators/index.tsx +0 -4
  108. package/events/index.ts +1 -0
  109. package/package.json +5 -6
  110. package/Components/VideoModal/hooks/usePosition.ts +0 -50
  111. /package/Contexts/{index.js → index.ts} +0 -0
@@ -1,5 +1,9 @@
1
1
  import * as React from "react";
2
- import { RefreshControl as RNRefreshControl } from "react-native";
2
+ import {
3
+ Platform,
4
+ RefreshControl as RNRefreshControl,
5
+ StyleSheet,
6
+ } from "react-native";
3
7
  import * as R from "ramda";
4
8
  import { useTheme } from "@applicaster/zapp-react-native-utils/theme";
5
9
  import { useLocalizedStrings } from "@applicaster/zapp-react-native-utils/localizationUtils";
@@ -8,10 +12,30 @@ import { useSendAnalyticsEventWithFunction } from "@applicaster/zapp-react-nativ
8
12
  import { useCurrentScreenData } from "@applicaster/zapp-react-native-utils/reactHooks/screen";
9
13
  import { loadPipesData } from "@applicaster/zapp-react-native-redux/ZappPipes";
10
14
  import { useDispatch } from "react-redux";
15
+ import { useShallow } from "zustand/react/shallow";
16
+ import { useScreenContextV2 } from "@applicaster/zapp-react-native-utils/reactHooks/screen/useScreenContext";
17
+ import { useSafeAreaInsets } from "react-native-safe-area-context";
11
18
 
12
19
  const BRIGHTNESS_THRESHOLD = 160;
13
20
  const ABOVE_DEFAULT_COLOR = "gray";
14
21
  const BELOW_DEFAULT_COLOR = "white";
22
+ const BASE_INDICATOR_HEIGHT = 40;
23
+ const BASE_INDICATOR_OFFSET = 16;
24
+
25
+ /** Return spacing required to position indicator below the navbar bottom line (Android only) */
26
+ const getRefreshControlOffset = () => {
27
+ return Platform.OS === "ios"
28
+ ? 0
29
+ : BASE_INDICATOR_HEIGHT + BASE_INDICATOR_OFFSET;
30
+ };
31
+
32
+ const styles = StyleSheet.create({
33
+ // eslint-disable-next-line react-native/no-color-literals
34
+ control: {
35
+ zIndex: 1,
36
+ backgroundColor: "transparent",
37
+ },
38
+ });
15
39
 
16
40
  const getBrightness = (RGBcolor) => {
17
41
  const RGBvalues = RGBcolor.substring(
@@ -91,6 +115,34 @@ export const usePullToRefresh = (
91
115
  };
92
116
  };
93
117
 
118
+ /** Returns the offset for the progress view of the RefreshControl component
119
+ * based on navbar content position */
120
+ export const useGetProgressViewOffset = () => {
121
+ const { _navBarStore } = useScreenContextV2();
122
+ const { top } = useSafeAreaInsets();
123
+
124
+ const offset = getRefreshControlOffset();
125
+
126
+ const { height, contentPosition } = _navBarStore(
127
+ useShallow(({ contentPosition, height }) => ({ contentPosition, height }))
128
+ );
129
+
130
+ if (height === 0) {
131
+ return offset;
132
+ }
133
+
134
+ switch (contentPosition) {
135
+ case "on_bottom_status_bar":
136
+ // navbar height
137
+ return offset + height - top;
138
+ case "on_top_screen":
139
+ // navbar height + status bar height
140
+ return offset + height;
141
+ default:
142
+ return offset;
143
+ }
144
+ };
145
+
94
146
  export function RefreshControl(props: {
95
147
  pullToRefreshPipesV1RefreshingStateUpdater?: (refreshing: boolean) => void;
96
148
  refreshingPipesV1?: boolean;
@@ -211,6 +263,7 @@ export function RefreshControl(props: {
211
263
  refreshing={refreshing}
212
264
  onRefresh={onRefreshHandler}
213
265
  colors={[preparedIndicatorColor]}
266
+ progressViewOffset={useGetProgressViewOffset()}
214
267
  progressBackgroundColor={preparedIndicatorBackgroundColor}
215
268
  // @ts-ignore in RN68 this `size` became string
216
269
  size={indicatorSize}
@@ -222,6 +275,7 @@ export function RefreshControl(props: {
222
275
  : null
223
276
  }
224
277
  titleColor={preparedTitleUnderIndicatorColor}
278
+ style={styles.control}
225
279
  />
226
280
  );
227
281
  }
@@ -1,13 +1,10 @@
1
1
  import * as React from "react";
2
2
  import * as R from "ramda";
3
+ import { GeneralContentScreen } from "@applicaster/zapp-react-native-ui-components/Components/GeneralContentScreen";
3
4
 
4
5
  import { FeedLoader } from "../FeedLoader";
5
6
  import { ScreenResolver } from "../ScreenResolver";
6
7
 
7
- import type { ZappScreenProps } from "@applicaster/zapp-react-native-flow-types";
8
-
9
- import { GeneralContentScreen } from "../GeneralContentScreen";
10
-
11
8
  type Props = ZappScreenProps & {
12
9
  feedUrl?: string;
13
10
  isInsideContainer?: boolean;
@@ -18,6 +15,12 @@ type Props = ZappScreenProps & {
18
15
  | import("react-native").FlatListProps<any>
19
16
  ) &
20
17
  Record<string, any>;
18
+ appData: AppDataKeys;
19
+ screenTitle: string;
20
+ screenSummary: string;
21
+ setIsScreenWrappedInContainer: (isInsideContainer: boolean) => void;
22
+ screenContext: ZappRiver;
23
+ river: ZappRiver;
21
24
  };
22
25
 
23
26
  type State = {
@@ -27,7 +30,7 @@ type State = {
27
30
  export class RiverComponent extends React.Component<Props, State> {
28
31
  private currentScreenTitle: string;
29
32
  private currentScreenSummary: string;
30
- constructor(props) {
33
+ constructor(props: Props) {
31
34
  super(props);
32
35
 
33
36
  this.state = {
@@ -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,
@@ -6,6 +6,12 @@ import configureStore from "redux-mock-store";
6
6
 
7
7
  import * as themeUtils from "@applicaster/zapp-react-native-utils/theme";
8
8
 
9
+ // silences the errors related to React-native-gesture-handler in tests
10
+ jest.mock(
11
+ "@applicaster/zapp-react-native-ui-components/Components/VideoModal/ModalAnimation",
12
+ () => () => null
13
+ );
14
+
9
15
  jest.mock("react-native-safe-area-context", () => ({
10
16
  useSafeAreaInsets: () => ({ top: 50 }),
11
17
  }));
@@ -83,6 +89,7 @@ jest.mock("@applicaster/zapp-react-native-utils/reactHooks/navigation", () => ({
83
89
  useNavigation: jest.fn(() => ({ currentRoute: "/river/A1234" })),
84
90
  useRoute: jest.fn(() => ({ pathname: "/river/A1234", screenData })),
85
91
  useProfilerLogging: jest.fn(),
92
+ useIsScreenActive: jest.fn().mockReturnValue(true),
86
93
  }));
87
94
 
88
95
  jest.mock("@applicaster/zapp-react-native-utils/reactHooks/screen", () => ({
@@ -1,10 +1,10 @@
1
1
  import * as R from "ramda";
2
2
 
3
- import { usePickFromState } from "@applicaster/zapp-react-native-redux/hooks";
4
- import { useDimensions } from "@applicaster/zapp-react-native-utils/reactHooks";
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,8 +46,8 @@ const stylingKeys = [
46
46
  ];
47
47
 
48
48
  export function useScreenConfiguration(screenId: string): ScreenConfiguration {
49
- const { rivers } = usePickFromState(["rivers"]);
50
- const { deviceInfo } = useDimensions("screen", { deviceInfo: true });
49
+ const rivers = useRivers();
50
+ const isTablet = useIsTablet();
51
51
 
52
52
  return useMemo(() => {
53
53
  const config = {} as ScreenConfiguration;
@@ -56,8 +56,7 @@ export function useScreenConfiguration(screenId: string): ScreenConfiguration {
56
56
  if (screenData) {
57
57
  const { styles } = screenData;
58
58
 
59
- const keyPrefix =
60
- deviceInfo?.isTablet && styles?.tablet_theme ? "tablet_" : "";
59
+ const keyPrefix = isTablet && styles?.tablet_theme ? "tablet_" : "";
61
60
 
62
61
  stylingKeys.forEach(([key, castFn]) => {
63
62
  const styleKey = `${keyPrefix}${key}`;
@@ -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: _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}
25
- screenData={screenData}
26
- {...otherProps}
27
+ {...props}
28
+ screenData={props.screenData}
27
29
  />
28
30
  </TestId>
29
31
  );
@@ -1,13 +1,19 @@
1
1
  import * as React from "react";
2
2
  import { View } from "react-native";
3
- import { create, act } from "react-test-renderer";
4
-
5
- import { ORIENTATIONS } from "@applicaster/zapp-react-native-utils/appUtils/orientationHelper";
3
+ import { act, create } from "react-test-renderer";
6
4
 
7
5
  const Mocked_RouteManager = jest.fn((props) => (
8
6
  <View testID="routeManager" {...props} />
9
7
  ));
10
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
+
11
17
  jest.mock("../../RouteManager", () => ({
12
18
  RouteManager: Mocked_RouteManager,
13
19
  }));
@@ -25,59 +31,54 @@ jest.mock(
25
31
  })
26
32
  );
27
33
 
28
- let mock_navBarVisibleFlag = true;
29
-
30
- jest.mock("../navigationHandler.ts", () => ({
31
- isNavBarVisible: jest.fn(() => mock_navBarVisibleFlag),
32
- }));
33
-
34
34
  jest.mock("@applicaster/zapp-react-native-utils/analyticsUtils", () => ({
35
35
  useAnalytics: jest.fn(() => ({
36
36
  sendScreenEvent: jest.fn(),
37
37
  })),
38
38
  }));
39
39
 
40
- const {
41
- allowedOrientationsForScreen,
42
- getOrientation,
43
- useGetScreenOrientation,
44
- } = require("@applicaster/zapp-react-native-utils/appUtils/orientationHelper");
45
-
46
40
  jest.mock("@applicaster/zapp-react-native-utils/theme", () => ({
47
41
  useTheme: jest.fn(() => ({
48
42
  app_background_color: "blue",
49
43
  })),
50
44
  }));
51
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
+
52
55
  jest.mock("@applicaster/zapp-react-native-utils/reactHooks/screen", () => ({
53
- useCurrentScreenData: jest.fn(() => ({
56
+ ...(jest.requireActual(
57
+ "@applicaster/zapp-react-native-utils/reactHooks/screen"
58
+ ) as any),
59
+ useScreenData: jest.fn(() => ({
54
60
  id: "testId",
61
+ navigations: [{ id: "testId", category: "nav_bar" }],
55
62
  })),
56
- useNavbarState: jest.fn(() => ({
57
- visible: jest.fn(() => mock_navBarVisibleFlag),
63
+ useCurrentScreenData: jest.fn(() => ({
64
+ id: "testId",
58
65
  })),
59
66
  }));
60
67
 
61
- const {
62
- useCurrentScreenData,
63
- } = require("@applicaster/zapp-react-native-utils/reactHooks/screen");
64
-
65
- const { isNavBarVisible } = require("../navigationHandler");
66
-
67
- const NavBar = jest.fn((props) => <View testID="navBar" {...props} />);
68
- const navigator = {};
69
- const navBarProps = { nav_items: [] };
70
- const screenData = {};
71
-
72
68
  jest.mock("@applicaster/zapp-react-native-utils/reactHooks/navigation", () => ({
69
+ isNavBarVisible: mockIsNavBarVisible,
73
70
  useRoute: jest.fn(() => ({
74
71
  pathname: "/river/testId",
72
+ screenData: { id: "testId" },
75
73
  })),
76
74
  useNavigation: jest.fn(() => ({
77
75
  canGoBack: () => false,
78
76
  currentRoute: "/river/testId",
77
+ activeRiver: { id: "testId" },
78
+ screenData: { id: "testId" },
79
79
  data: { screen: { id: "testId" } },
80
80
  })),
81
+ useIsScreenActive: jest.fn().mockReturnValue(true),
81
82
  }));
82
83
 
83
84
  jest.mock("@applicaster/zapp-react-native-redux/hooks", () => ({
@@ -95,9 +96,26 @@ jest.mock("@applicaster/zapp-react-native-redux/hooks", () => ({
95
96
  }),
96
97
  }));
97
98
 
99
+ const {
100
+ ORIENTATIONS,
101
+ } = require("@applicaster/zapp-react-native-utils/appUtils/orientationHelper");
102
+
103
+ const {
104
+ useCurrentScreenData,
105
+ } = require("@applicaster/zapp-react-native-utils/reactHooks/screen");
106
+
107
+ const {
108
+ allowedOrientationsForScreen,
109
+ getOrientation,
110
+ useGetScreenOrientation,
111
+ } = require("@applicaster/zapp-react-native-utils/appUtils/orientationHelper");
112
+
113
+ const navigator = {};
114
+ const navBarProps = { nav_items: [] };
115
+ const screenData = {};
116
+
98
117
  const screenProps = {
99
118
  pathname: "/foo/path",
100
- NavBar,
101
119
  navigator,
102
120
  navBarProps,
103
121
  screenData,
@@ -111,7 +129,6 @@ describe("<Screen Component />", () => {
111
129
  beforeEach(() => {
112
130
  allowedOrientationsForScreen.mockClear();
113
131
  getOrientation.mockClear();
114
- isNavBarVisible.mockClear();
115
132
  useGetScreenOrientation.mockClear();
116
133
  });
117
134
 
@@ -127,14 +144,9 @@ describe("<Screen Component />", () => {
127
144
 
128
145
  describe("when the navbar should be hidden", () => {
129
146
  beforeEach(() => {
130
- mock_navBarVisibleFlag = false;
131
147
  wrapper = create(<Screen {...screenProps} />);
132
148
  });
133
149
 
134
- afterEach(() => {
135
- mock_navBarVisibleFlag = true;
136
- });
137
-
138
150
  it("renders correctly", () => {
139
151
  act(() => {
140
152
  wrapper = create(<Screen {...screenProps} />);
@@ -6,17 +6,26 @@ exports[`<Screen Component /> when the navbar should be hidden renders correctly
6
6
  Object {
7
7
  "backgroundColor": "blue",
8
8
  "flex": 1,
9
+ "paddingTop": 0,
9
10
  }
10
11
  }
11
12
  >
12
13
  <View
13
- nav_items={Array []}
14
+ hasMenu={false}
15
+ id="/river/testId"
16
+ pathname="/river/testId"
17
+ selected="testId"
14
18
  testID="navBar"
19
+ title=""
15
20
  />
16
21
  <View>
17
22
  <View
18
- pathname="/foo/path"
19
- screenData={Object {}}
23
+ pathname="/river/testId"
24
+ screenData={
25
+ Object {
26
+ "id": "testId",
27
+ }
28
+ }
20
29
  testID="routeManager"
21
30
  />
22
31
  </View>
@@ -29,17 +38,26 @@ exports[`<Screen Component /> when the navbar should show renders correctly 1`]
29
38
  Object {
30
39
  "backgroundColor": "blue",
31
40
  "flex": 1,
41
+ "paddingTop": 0,
32
42
  }
33
43
  }
34
44
  >
35
45
  <View
36
- nav_items={Array []}
46
+ hasMenu={false}
47
+ id="/river/testId"
48
+ pathname="/river/testId"
49
+ selected="testId"
37
50
  testID="navBar"
51
+ title=""
38
52
  />
39
53
  <View>
40
54
  <View
41
- pathname="/foo/path"
42
- screenData={Object {}}
55
+ pathname="/river/testId"
56
+ screenData={
57
+ Object {
58
+ "id": "testId",
59
+ }
60
+ }
43
61
  testID="routeManager"
44
62
  />
45
63
  </View>
@@ -1,183 +1,6 @@
1
- import { isNavBarVisible, isMenuVisible } from "../navigationHandler";
1
+ import { isMenuVisible } from "../navigationHandler";
2
2
 
3
3
  describe("NavigationHandler", () => {
4
- describe("isNavBarVisible", () => {
5
- it("returns false when the route is a player route", () => {
6
- const navBarVisible = isNavBarVisible(
7
- "/playable/some_vod_item",
8
- {},
9
- undefined,
10
- false
11
- );
12
-
13
- expect(navBarVisible).toBe(false);
14
- });
15
-
16
- it("returns false when the next screen is the QB search screen", () => {
17
- const navBarVisible = isNavBarVisible(
18
- "/river/A1234",
19
- {
20
- type: "qb_search_screen",
21
- },
22
- undefined,
23
- false
24
- );
25
-
26
- expect(navBarVisible).toBe(false);
27
- });
28
-
29
- describe("when screen is a hook", () => {
30
- it("returns true if the `showNavBar` flag is set to true", () => {
31
- const navBarVisible = isNavBarVisible(
32
- "",
33
- {
34
- hookPlugin: {
35
- module: {
36
- showNavBar: true,
37
- },
38
- },
39
- },
40
- undefined,
41
- false
42
- );
43
-
44
- expect(navBarVisible).toBe(true);
45
- });
46
-
47
- it("returns true if presentFullScreen flag is set to false", () => {
48
- const navBarVisible = isNavBarVisible(
49
- "",
50
- {
51
- hookPlugin: {
52
- module: {
53
- presentFullScreen: false,
54
- },
55
- },
56
- },
57
- undefined,
58
- false
59
- );
60
-
61
- expect(navBarVisible).toBe(true);
62
- });
63
-
64
- it("returns false if presentFullScreen flag is set to true", () => {
65
- const navBarVisible = isNavBarVisible(
66
- "",
67
- {
68
- hookPlugin: {
69
- module: {
70
- presentFullScreen: true,
71
- },
72
- },
73
- },
74
- undefined,
75
- false
76
- );
77
-
78
- expect(navBarVisible).toBe(false);
79
- });
80
- });
81
-
82
- it("returns false if the screen's general settings allow screen presentation", () => {
83
- const navBarVisible = isNavBarVisible(
84
- "",
85
- {
86
- general: {
87
- allow_screen_plugin_presentation: true,
88
- },
89
- },
90
- undefined,
91
- false
92
- );
93
-
94
- expect(navBarVisible).toBe(false);
95
- });
96
-
97
- it("returns false if the screen's general settings hide app nav bar", () => {
98
- const navBarVisible = isNavBarVisible(
99
- "",
100
- {
101
- general: {
102
- hide_app_nav_bar: true,
103
- },
104
- },
105
- undefined,
106
- false
107
- );
108
-
109
- expect(navBarVisible).toBe(false);
110
- });
111
-
112
- it("returns false if it's secondary nav bar and hide_secondary_level_menu is true", () => {
113
- const navBarVisible = isNavBarVisible(
114
- "",
115
- {
116
- navigations: [
117
- {
118
- styles: {
119
- hide_secondary_level_menu: true,
120
- },
121
- },
122
- ],
123
- },
124
- undefined,
125
- true
126
- );
127
-
128
- expect(navBarVisible).toBe(false);
129
- });
130
-
131
- it("returns true if it's secondary nav bar and hide_secondary_level_menu is false", () => {
132
- const navBarVisible = isNavBarVisible(
133
- "",
134
- {
135
- navigations: [
136
- {
137
- styles: {
138
- hide_secondary_level_menu: false,
139
- },
140
- },
141
- ],
142
- },
143
- undefined,
144
- true
145
- );
146
-
147
- expect(navBarVisible).toBe(true);
148
- });
149
-
150
- it("returns true if it's first level menu and hide_secondary_level_menu is true", () => {
151
- const navBarVisible = isNavBarVisible(
152
- "",
153
- {
154
- navigations: [
155
- {
156
- styles: {
157
- hide_secondary_level_menu: false,
158
- },
159
- },
160
- ],
161
- },
162
- undefined,
163
- false
164
- );
165
-
166
- expect(navBarVisible).toBe(true);
167
- });
168
-
169
- it("returns true otherwise", () => {
170
- const navBarVisible = isNavBarVisible(
171
- "",
172
- { navigations: [] },
173
- undefined,
174
- false
175
- );
176
-
177
- expect(navBarVisible).toBe(true);
178
- });
179
- });
180
-
181
4
  describe("isMenuVisible", () => {
182
5
  it("returns false when the route is a player route", () => {
183
6
  const menuVisible = isMenuVisible("/playable/some_vod_item", {});