@applicaster/zapp-react-native-ui-components 12.0.0-alpha.6236157458 → 12.0.0-alpha.6437417031
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/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/Cell/Cell.tsx +2 -2
- package/Components/Cell/CellWithFocusable.tsx +21 -14
- package/Components/Cell/TvOSCellComponent.tsx +2 -2
- package/Components/ErrorScreen/index.tsx +1 -1
- package/Components/FocusableCell/index.tsx +7 -7
- 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 -6
- package/Components/Image/Image.android.tsx +3 -26
- package/Components/Image/Image.tsx +18 -2
- package/Components/Image/utils/index.ts +39 -0
- package/Components/Layout/TV/__tests__/index.test.tsx +1 -34
- 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/DefaultComponents/Toggle.tsx +5 -1
- package/Components/MasterCell/SharedUI/CollapsibleTextContainer/index.ts +8 -10
- 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/PlayerContainer.tsx +52 -28
- 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/__tests__/componentsMap.test.js +1 -0
- 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 +48 -36
- package/Components/Screen/__tests__/__snapshots__/Screen.test.tsx.snap +20 -6
- package/Components/Screen/__tests__/navigationHandler.test.ts +1 -178
- package/Components/Screen/index.tsx +91 -43
- package/Components/Screen/navigationHandler.ts +0 -82
- package/Components/Screen/orientationHandler.ts +1 -1
- package/Components/ScreenResolver/index.tsx +1 -1
- package/Components/Tabs/TV/styles.ts +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 +30 -3
- package/Components/VideoLive/__tests__/__snapshots__/PlayerLiveImageComponent.test.tsx.snap +22 -27
- package/Components/VideoModal/PlayerDetails.tsx +3 -0
- package/Components/VideoModal/PlayerWrapper.tsx +5 -3
- package/Components/VideoModal/__tests__/PlayerDetails.test.tsx +0 -2
- package/Components/VideoModal/__tests__/PlayerWrapper.test.tsx +1 -2
- package/Components/VideoModal/__tests__/__snapshots__/PlayerWrapper.test.tsx.snap +211 -163
- 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/ComponentsMapWrapper/withComponentsMapProvider.tsx +7 -2
- package/Decorators/RiverResolver/index.tsx +0 -4
- package/Decorators/index.tsx +0 -4
- package/package.json +5 -6
|
@@ -145,34 +145,36 @@ const renderApplePlayer = ({
|
|
|
145
145
|
}) => {
|
|
146
146
|
const { title, summary } = item || {};
|
|
147
147
|
|
|
148
|
-
if (!isApplePlatform()) {
|
|
148
|
+
if (!isApplePlatform() || !player) {
|
|
149
|
+
return null;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// TODO: Check if it is not breaking default player logic on tvos
|
|
153
|
+
// Also if needs to add on tvos brightcove player for QB player
|
|
154
|
+
if (player.supportsNativeControls()) {
|
|
155
|
+
return null;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
if (isAudioContent) {
|
|
159
|
+
return (
|
|
160
|
+
<AudioPlayer
|
|
161
|
+
audio_item={item}
|
|
162
|
+
plugin_configuration={pluginConfiguration}
|
|
163
|
+
/>
|
|
164
|
+
);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
if (!playNextData && player.isPaused() && player.isAd() === false) {
|
|
149
168
|
return null;
|
|
150
169
|
}
|
|
151
170
|
|
|
152
171
|
return (
|
|
153
|
-
|
|
154
|
-
{
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
<ProgramInfo
|
|
160
|
-
title={title}
|
|
161
|
-
subtitle={summary}
|
|
162
|
-
plugin_configuration={pluginConfiguration}
|
|
163
|
-
videoStyle={videoStyle}
|
|
164
|
-
/>
|
|
165
|
-
)}
|
|
166
|
-
</>
|
|
167
|
-
)}
|
|
168
|
-
|
|
169
|
-
{isAudioContent && (
|
|
170
|
-
<AudioPlayer
|
|
171
|
-
audio_item={item}
|
|
172
|
-
plugin_configuration={pluginConfiguration}
|
|
173
|
-
/>
|
|
174
|
-
)}
|
|
175
|
-
</>
|
|
172
|
+
<ProgramInfo
|
|
173
|
+
title={title}
|
|
174
|
+
subtitle={summary}
|
|
175
|
+
plugin_configuration={pluginConfiguration}
|
|
176
|
+
videoStyle={videoStyle}
|
|
177
|
+
/>
|
|
176
178
|
);
|
|
177
179
|
};
|
|
178
180
|
|
|
@@ -339,6 +341,18 @@ const PlayerContainerComponent = (props: Props) => {
|
|
|
339
341
|
}
|
|
340
342
|
}, [item?.id, item?.extensions?.resumeTime, player]);
|
|
341
343
|
|
|
344
|
+
const onVideoFullscreenPlayerWillPresent = React.useCallback(() => {
|
|
345
|
+
playerManager.invokeHandler("toggleFullscreen", {
|
|
346
|
+
fullscreen: true,
|
|
347
|
+
});
|
|
348
|
+
}, []);
|
|
349
|
+
|
|
350
|
+
const onVideoFullscreenPlayerWillDismiss = React.useCallback(() => {
|
|
351
|
+
playerManager.invokeHandler("toggleFullscreen", {
|
|
352
|
+
fullscreen: false,
|
|
353
|
+
});
|
|
354
|
+
}, []);
|
|
355
|
+
|
|
342
356
|
// Util methods
|
|
343
357
|
const toggleFullscreen = (event) => {
|
|
344
358
|
const { fullscreen = false } = event || {};
|
|
@@ -381,17 +395,27 @@ const PlayerContainerComponent = (props: Props) => {
|
|
|
381
395
|
id: playerContainerId,
|
|
382
396
|
listener: {
|
|
383
397
|
onVideoEnd,
|
|
384
|
-
onError
|
|
385
|
-
onLoad
|
|
398
|
+
onError,
|
|
399
|
+
onLoad,
|
|
386
400
|
onPlayerClose: close,
|
|
387
401
|
onPlayerDetached: close,
|
|
402
|
+
onVideoFullscreenPlayerWillDismiss,
|
|
403
|
+
onVideoFullscreenPlayerWillPresent,
|
|
388
404
|
},
|
|
389
405
|
});
|
|
390
406
|
|
|
391
407
|
return () => {
|
|
392
408
|
player.removeListener(playerContainerId);
|
|
393
409
|
};
|
|
394
|
-
}, [
|
|
410
|
+
}, [
|
|
411
|
+
player,
|
|
412
|
+
onVideoEnd,
|
|
413
|
+
onError,
|
|
414
|
+
onLoad,
|
|
415
|
+
close,
|
|
416
|
+
onVideoFullscreenPlayerWillDismiss,
|
|
417
|
+
onVideoFullscreenPlayerWillPresent,
|
|
418
|
+
]);
|
|
395
419
|
|
|
396
420
|
useEffect(() => {
|
|
397
421
|
// TODO: We should not use playerManager here to connect buttons to player container
|
|
@@ -621,7 +645,7 @@ const PlayerContainerComponent = (props: Props) => {
|
|
|
621
645
|
}}
|
|
622
646
|
focused={isInlineTV ? true : undefined}
|
|
623
647
|
autoplay={true}
|
|
624
|
-
controls={
|
|
648
|
+
controls={false}
|
|
625
649
|
disableCastAction={disableCastAction}
|
|
626
650
|
docked={navigator.isVideoModalDocked()}
|
|
627
651
|
entry={item}
|
|
@@ -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,
|
|
@@ -83,6 +83,7 @@ jest.mock("@applicaster/zapp-react-native-utils/reactHooks/navigation", () => ({
|
|
|
83
83
|
useNavigation: jest.fn(() => ({ currentRoute: "/river/A1234" })),
|
|
84
84
|
useRoute: jest.fn(() => ({ pathname: "/river/A1234", screenData })),
|
|
85
85
|
useProfilerLogging: jest.fn(),
|
|
86
|
+
useIsScreenActive: jest.fn().mockReturnValue(true),
|
|
86
87
|
}));
|
|
87
88
|
|
|
88
89
|
jest.mock("@applicaster/zapp-react-native-utils/reactHooks/screen", () => ({
|
|
@@ -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
|
);
|
|
@@ -1,13 +1,19 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import { View } from "react-native";
|
|
3
|
-
import {
|
|
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
|
-
|
|
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",
|
|
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,24 @@ 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="/
|
|
19
|
-
screenData={
|
|
21
|
+
pathname="/river/testId"
|
|
22
|
+
screenData={
|
|
23
|
+
Object {
|
|
24
|
+
"id": "testId",
|
|
25
|
+
}
|
|
26
|
+
}
|
|
20
27
|
testID="routeManager"
|
|
21
28
|
/>
|
|
22
29
|
</View>
|
|
@@ -29,17 +36,24 @@ exports[`<Screen Component /> when the navbar should show renders correctly 1`]
|
|
|
29
36
|
Object {
|
|
30
37
|
"backgroundColor": "blue",
|
|
31
38
|
"flex": 1,
|
|
39
|
+
"paddingTop": 0,
|
|
32
40
|
}
|
|
33
41
|
}
|
|
34
42
|
>
|
|
35
43
|
<View
|
|
36
|
-
|
|
44
|
+
id="/river/testId"
|
|
45
|
+
selected="testId"
|
|
37
46
|
testID="navBar"
|
|
47
|
+
title=""
|
|
38
48
|
/>
|
|
39
49
|
<View>
|
|
40
50
|
<View
|
|
41
|
-
pathname="/
|
|
42
|
-
screenData={
|
|
51
|
+
pathname="/river/testId"
|
|
52
|
+
screenData={
|
|
53
|
+
Object {
|
|
54
|
+
"id": "testId",
|
|
55
|
+
}
|
|
56
|
+
}
|
|
43
57
|
testID="routeManager"
|
|
44
58
|
/>
|
|
45
59
|
</View>
|