@applicaster/zapp-react-native-ui-components 12.0.0-rc.3 → 12.0.0-rc.31
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.
- package/Components/AnimatedInOut/index.tsx +18 -10
- package/Components/AudioPlayer/AudioPlayer.tsx +9 -1
- package/Components/AudioPlayer/__tests__/__snapshots__/audioPlayer.test.js.snap +5 -0
- package/Components/AudioPlayer/helpers.tsx +1 -0
- package/Components/ErrorScreen/index.tsx +1 -1
- package/Components/FocusableList/FocusableChild.ts +24 -14
- package/Components/FocusableList/FocusableItem.tsx +1 -1
- package/Components/FocusableList/FocusableListItemWrapper.tsx +76 -0
- package/Components/FocusableList/hooks/useCellState.android.ts +3 -1
- package/Components/FocusableList/index.tsx +26 -25
- package/Components/GeneralContentScreen/GeneralContentScreen.tsx +11 -8
- package/Components/HandlePlayable/HandlePlayable.tsx +1 -1
- package/Components/HookRenderer/index.tsx +1 -4
- package/Components/Image/Image.android.tsx +11 -2
- package/Components/Image/Image.tsx +18 -2
- package/Components/Image/utils/index.ts +29 -0
- package/Components/Layout/TV/__tests__/index.test.tsx +0 -21
- package/Components/Layout/TV/index.tsx +20 -36
- package/Components/MasterCell/DefaultComponents/BorderContainerView/index.tsx +0 -1
- package/Components/MasterCell/DefaultComponents/CellBadge/index.tsx +21 -8
- package/Components/MasterCell/DefaultComponents/Image/Image.android.tsx +9 -26
- package/Components/MasterCell/DefaultComponents/Image/hooks/useImageSize.ts +65 -0
- package/Components/MasterCell/DefaultComponents/LiveImage/index.tsx +3 -1
- package/Components/MasterCell/DefaultComponents/SecondaryImage/Image.tsx +3 -2
- package/Components/MasterCell/SharedUI/CollapsibleTextContainer/index.ts +8 -10
- package/Components/MasterCell/utils/index.ts +2 -2
- package/Components/ModalComponent/BottomSheetModalContent.tsx +121 -0
- package/Components/ModalComponent/Button/Item.tsx +82 -0
- package/Components/ModalComponent/Button/ItemIcon.tsx +60 -0
- package/Components/ModalComponent/Button/ItemLabel.tsx +101 -0
- package/Components/ModalComponent/Button/assets.ts +4 -0
- package/Components/ModalComponent/Button/index.tsx +111 -0
- package/Components/ModalComponent/Header/CloseButton.tsx +59 -0
- package/Components/ModalComponent/Header/Title.tsx +70 -0
- package/Components/ModalComponent/Header/assets.ts +4 -0
- package/Components/ModalComponent/Header/index.tsx +71 -0
- package/Components/ModalComponent/Header/utils.ts +79 -0
- package/Components/ModalComponent/index.tsx +38 -0
- package/Components/ModalComponent/utils.ts +126 -0
- package/Components/PlayerContainer/ErrorDisplay/ErrorDisplay.tsx +4 -7
- package/Components/PlayerContainer/ProgramInfo/index.tsx +3 -1
- package/Components/River/ComponentsMap/ComponentsMap.tsx +25 -0
- package/Components/River/River.tsx +8 -5
- package/Components/River/TV/River.tsx +2 -2
- package/Components/River/__tests__/__snapshots__/componentsMap.test.js.snap +1 -1
- package/Components/River/useScreenConfiguration.ts +5 -6
- package/Components/RouteManager/__tests__/__snapshots__/routeManager.test.js.snap +1 -0
- package/Components/RouteManager/__tests__/routeManager.test.js +9 -2
- package/Components/RouteManager/index.tsx +5 -3
- package/Components/Screen/__tests__/Screen.test.tsx +43 -35
- package/Components/Screen/__tests__/__snapshots__/Screen.test.tsx.snap +10 -4
- package/Components/Screen/__tests__/navigationHandler.test.ts +1 -178
- package/Components/Screen/index.tsx +92 -46
- package/Components/Screen/navigationHandler.ts +0 -82
- package/Components/Screen/orientationHandler.ts +1 -1
- package/Components/ScreenResolver/index.tsx +1 -1
- package/Components/TrackedView/index.tsx +6 -3
- package/Components/VideoLive/LiveImageManager.ts +42 -13
- package/Components/VideoLive/PlayerLiveImageComponent.tsx +81 -72
- package/Components/VideoLive/__tests__/PlayerLiveImageComponent.test.tsx +25 -3
- package/Components/VideoLive/__tests__/__snapshots__/PlayerLiveImageComponent.test.tsx.snap +22 -27
- package/Components/VideoModal/PlayerDetails.tsx +3 -0
- package/Components/VideoModal/PlayerWrapper.tsx +66 -63
- package/Components/VideoModal/__tests__/PlayerDetails.test.tsx +0 -2
- package/Components/VideoModal/__tests__/PlayerWrapper.test.tsx +4 -4
- package/Components/VideoModal/__tests__/__snapshots__/PlayerWrapper.test.tsx.snap +10 -18
- package/Components/VideoModal/hooks/useModalSize.ts +13 -4
- package/Components/Viewport/ViewportAware/__tests__/viewportAware.test.js +26 -21
- package/Components/Viewport/ViewportTracker/__tests__/viewportTracker.test.js +4 -5
- package/Components/ZappUIComponent/index.tsx +22 -12
- package/Components/index.js +2 -0
- package/Contexts/ScreenContext/index.tsx +1 -4
- package/Decorators/RiverResolver/index.tsx +0 -4
- package/Decorators/index.tsx +0 -4
- package/package.json +5 -6
|
@@ -4,7 +4,6 @@ import { Text, TextStyle, View, ViewStyle } from "react-native";
|
|
|
4
4
|
|
|
5
5
|
import { getLocalizations } from "@applicaster/zapp-react-native-utils/localizationUtils";
|
|
6
6
|
import { getAppStylesColor } from "@applicaster/zapp-react-native-utils/stylesUtils";
|
|
7
|
-
import { useDimensions } from "@applicaster/zapp-react-native-utils/reactHooks/layout";
|
|
8
7
|
import { useTheme } from "@applicaster/zapp-react-native-utils/theme";
|
|
9
8
|
import { styleKeys } from "@applicaster/zapp-react-native-utils/styleKeysUtils";
|
|
10
9
|
|
|
@@ -26,10 +25,10 @@ const textStyles = (appStyles = defaultAppStyles): TextStyle => ({
|
|
|
26
25
|
textAlign: "center",
|
|
27
26
|
});
|
|
28
27
|
|
|
29
|
-
const errorStyles = ({
|
|
28
|
+
const errorStyles = ({ backgroundColor }): ViewStyle => ({
|
|
30
29
|
flex: 1,
|
|
31
|
-
width,
|
|
32
|
-
height,
|
|
30
|
+
width: "100%",
|
|
31
|
+
height: "100%",
|
|
33
32
|
justifyContent: "center",
|
|
34
33
|
alignItems: "center",
|
|
35
34
|
position: "absolute",
|
|
@@ -41,8 +40,6 @@ export function ErrorDisplayComponent({
|
|
|
41
40
|
styles,
|
|
42
41
|
remoteConfigurations: { localizations },
|
|
43
42
|
}: Props) {
|
|
44
|
-
const { width, height } = useDimensions("window");
|
|
45
|
-
|
|
46
43
|
const theme = useTheme();
|
|
47
44
|
const backgroundColor = theme?.app_background_color;
|
|
48
45
|
|
|
@@ -53,7 +50,7 @@ export function ErrorDisplayComponent({
|
|
|
53
50
|
const appStyles = R.prop(styleKeys.style_namespace, styles);
|
|
54
51
|
|
|
55
52
|
return (
|
|
56
|
-
<View style={errorStyles({
|
|
53
|
+
<View style={errorStyles({ backgroundColor })}>
|
|
57
54
|
<Text style={textStyles(appStyles)}>{stream_error_message}</Text>
|
|
58
55
|
</View>
|
|
59
56
|
);
|
|
@@ -4,7 +4,9 @@ import { styleKeys } from "@applicaster/zapp-react-native-utils/styleKeysUtils";
|
|
|
4
4
|
import { transformColorCode as fixColorHexCode } from "@applicaster/zapp-react-native-utils/transform";
|
|
5
5
|
import * as R from "ramda";
|
|
6
6
|
import * as React from "react";
|
|
7
|
-
import {
|
|
7
|
+
import { Text, TextStyle, View, ViewStyle } from "react-native";
|
|
8
|
+
import { QBImage as Image } from "@applicaster/zapp-react-native-ui-components/Components/Image";
|
|
9
|
+
|
|
8
10
|
import * as programStyles from "./styles";
|
|
9
11
|
|
|
10
12
|
type Props = {
|
|
@@ -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>
|
|
@@ -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
|
|
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={
|
|
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 {
|
|
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
|
|
50
|
-
const
|
|
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}`;
|
|
@@ -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(
|
|
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
|
-
|
|
26
|
-
{
|
|
27
|
+
{...props}
|
|
28
|
+
screenData={props.screenData}
|
|
27
29
|
/>
|
|
28
30
|
</TestId>
|
|
29
31
|
);
|
|
@@ -2,12 +2,18 @@ import * as React from "react";
|
|
|
2
2
|
import { View } from "react-native";
|
|
3
3
|
import { create, act } from "react-test-renderer";
|
|
4
4
|
|
|
5
|
-
import { ORIENTATIONS } from "@applicaster/zapp-react-native-utils/appUtils/orientationHelper";
|
|
6
|
-
|
|
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,51 +31,42 @@ 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
|
-
|
|
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
|
-
|
|
57
|
-
|
|
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",
|
|
75
72
|
})),
|
|
@@ -95,9 +92,26 @@ jest.mock("@applicaster/zapp-react-native-redux/hooks", () => ({
|
|
|
95
92
|
}),
|
|
96
93
|
}));
|
|
97
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
|
+
|
|
98
113
|
const screenProps = {
|
|
99
114
|
pathname: "/foo/path",
|
|
100
|
-
NavBar,
|
|
101
115
|
navigator,
|
|
102
116
|
navBarProps,
|
|
103
117
|
screenData,
|
|
@@ -111,7 +125,6 @@ describe("<Screen Component />", () => {
|
|
|
111
125
|
beforeEach(() => {
|
|
112
126
|
allowedOrientationsForScreen.mockClear();
|
|
113
127
|
getOrientation.mockClear();
|
|
114
|
-
isNavBarVisible.mockClear();
|
|
115
128
|
useGetScreenOrientation.mockClear();
|
|
116
129
|
});
|
|
117
130
|
|
|
@@ -127,14 +140,9 @@ describe("<Screen Component />", () => {
|
|
|
127
140
|
|
|
128
141
|
describe("when the navbar should be hidden", () => {
|
|
129
142
|
beforeEach(() => {
|
|
130
|
-
mock_navBarVisibleFlag = false;
|
|
131
143
|
wrapper = create(<Screen {...screenProps} />);
|
|
132
144
|
});
|
|
133
145
|
|
|
134
|
-
afterEach(() => {
|
|
135
|
-
mock_navBarVisibleFlag = true;
|
|
136
|
-
});
|
|
137
|
-
|
|
138
146
|
it("renders correctly", () => {
|
|
139
147
|
act(() => {
|
|
140
148
|
wrapper = create(<Screen {...screenProps} />);
|
|
@@ -6,16 +6,19 @@ 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
|
-
|
|
14
|
+
id="/river/testId"
|
|
15
|
+
selected="testId"
|
|
14
16
|
testID="navBar"
|
|
17
|
+
title=""
|
|
15
18
|
/>
|
|
16
19
|
<View>
|
|
17
20
|
<View
|
|
18
|
-
pathname="/
|
|
21
|
+
pathname="/river/testId"
|
|
19
22
|
screenData={Object {}}
|
|
20
23
|
testID="routeManager"
|
|
21
24
|
/>
|
|
@@ -29,16 +32,19 @@ exports[`<Screen Component /> when the navbar should show renders correctly 1`]
|
|
|
29
32
|
Object {
|
|
30
33
|
"backgroundColor": "blue",
|
|
31
34
|
"flex": 1,
|
|
35
|
+
"paddingTop": 0,
|
|
32
36
|
}
|
|
33
37
|
}
|
|
34
38
|
>
|
|
35
39
|
<View
|
|
36
|
-
|
|
40
|
+
id="/river/testId"
|
|
41
|
+
selected="testId"
|
|
37
42
|
testID="navBar"
|
|
43
|
+
title=""
|
|
38
44
|
/>
|
|
39
45
|
<View>
|
|
40
46
|
<View
|
|
41
|
-
pathname="/
|
|
47
|
+
pathname="/river/testId"
|
|
42
48
|
screenData={Object {}}
|
|
43
49
|
testID="routeManager"
|
|
44
50
|
/>
|
|
@@ -1,183 +1,6 @@
|
|
|
1
|
-
import {
|
|
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", {});
|