@applicaster/zapp-react-native-ui-components 13.0.0-alpha.1177234712 → 13.0.0-alpha.1199723621
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/AppContainer/__tests__/AppContainer.test.js +4 -6
- package/Components/AudioPlayer/__tests__/Runtime.test.js +5 -8
- package/Components/AudioPlayer/__tests__/__snapshots__/audioPlayer.test.js.snap +54 -111
- package/Components/AudioPlayer/__tests__/__snapshots__/audioPlayerLayout.test.js.snap +36 -20
- package/Components/AudioPlayer/__tests__/artWork.test.js +3 -5
- package/Components/AudioPlayer/__tests__/audioPlayer.test.js +3 -5
- package/Components/AudioPlayer/__tests__/audioPlayerLayout.test.js +7 -8
- package/Components/AudioPlayer/__tests__/channel.test.js +3 -5
- package/Components/AudioPlayer/__tests__/summary.test.js +3 -5
- package/Components/AudioPlayer/__tests__/title.test.js +3 -5
- package/Components/BaseFocusable/index.ios.ts +1 -1
- package/Components/BaseFocusable/index.tsx +2 -3
- package/Components/Cell/Cell.tsx +1 -0
- package/Components/Cell/CellWithFocusable.tsx +43 -58
- package/Components/Cell/TvOSCellComponent.tsx +20 -22
- package/Components/Cell/__tests__/CellWIthFocusable.test.js +13 -6
- package/Components/Cell/index.js +3 -1
- package/Components/CellRendererResolver/__tests__/cellRendererResolver.test.js +46 -48
- package/Components/ComponentResolver/__tests__/__snapshots__/componentResolver.test.js.snap +1 -42
- package/Components/ComponentResolver/__tests__/componentResolver.test.js +16 -22
- package/Components/ContentScreen/__tests__/contentScreen.test.js +3 -3
- package/Components/ErrorScreen/index.tsx +6 -6
- package/Components/Focusable/Focusable.tsx +1 -0
- package/Components/Focusable/FocusableTvOS.tsx +5 -1
- package/Components/Focusable/Touchable.tsx +19 -20
- package/Components/Focusable/index.android.tsx +10 -3
- package/Components/FocusableGroup/FocusableTvOS.tsx +34 -83
- package/Components/FocusableGroup/index.tsx +1 -3
- package/Components/FocusableList/index.tsx +26 -9
- package/Components/FocusableScrollView/index.tsx +43 -13
- package/Components/Layout/TV/NavBarContainer.tsx +19 -23
- package/Components/Layout/TV/__tests__/__snapshots__/NavBarContainer.test.tsx.snap +3 -2
- package/Components/Layout/TV/__tests__/__snapshots__/ScreenContainer.test.tsx.snap +3 -2
- package/Components/MasterCell/DefaultComponents/ActionButton.tsx +2 -3
- package/Components/MasterCell/DefaultComponents/BorderContainerView/__tests__/index.test.tsx +13 -7
- package/Components/MasterCell/DefaultComponents/ImageBorderContainer/__tests__/index.test.ts +0 -17
- package/Components/MasterCell/DefaultComponents/LiveImage/index.tsx +2 -2
- package/Components/MasterCell/DefaultComponents/SecondaryImage/utils.ts +1 -1
- package/Components/MasterCell/SharedUI/ProgressBar/hooks/useFillInPercent.ts +2 -8
- package/Components/MasterCell/__tests__/__snapshots__/elementMapper.test.js.snap +4 -12
- package/Components/MasterCell/__tests__/__snapshots__/masterCell.test.js.snap +0 -229
- package/Components/MasterCell/__tests__/elementMapper.test.js +18 -5
- package/Components/MasterCell/__tests__/masterCell.test.js +26 -26
- package/Components/MasterCell/hooks/useAsyncRendering/MasterCellAsyncRenderManager.ts +2 -2
- package/Components/MasterCell/utils/index.ts +1 -1
- package/Components/ModalComponent/Button/index.tsx +6 -6
- package/Components/ModalComponent/Header/index.tsx +3 -3
- package/Components/OfflineHandler/NotificationView/NotificationView.lg.tsx +2 -2
- package/Components/OfflineHandler/NotificationView/NotificationView.samsung.tsx +2 -2
- package/Components/OfflineHandler/NotificationView/__tests__/index.test.tsx +0 -5
- package/Components/PlayerContainer/PlayerContainer.tsx +8 -8
- package/Components/PlayerContainer/ProgramInfo/index.tsx +2 -2
- package/Components/PlayerImageBackground/index.tsx +23 -3
- package/Components/River/ComponentsMap/ComponentsMap.tsx +39 -65
- package/Components/River/ComponentsMap/hooks/useLoadingState.ts +78 -51
- package/Components/River/RiverFooter.tsx +39 -9
- package/Components/River/RiverItem.tsx +37 -2
- package/Components/River/TV/index.tsx +6 -1
- package/Components/River/__tests__/__snapshots__/componentsMap.test.js.snap +100 -31
- package/Components/River/__tests__/__snapshots__/river.test.js.snap +20 -82
- package/Components/River/__tests__/componentsMap.test.js +3 -4
- package/Components/River/__tests__/river.test.js +75 -40
- package/Components/RouteManager/__tests__/__snapshots__/routeManager.test.js.snap +11 -4
- package/Components/RouteManager/__tests__/routeManager.test.js +29 -14
- package/Components/RouteManager/__tests__/testId.test.js +8 -6
- package/Components/Screen/hooks.ts +56 -0
- package/Components/Screen/index.tsx +16 -42
- package/Components/ScreenResolver/__tests__/screenResolver.test.js +91 -70
- package/Components/Tabs/Tab.tsx +11 -9
- package/Components/TextInputTv/index.tsx +4 -3
- package/Components/Transitioner/AnimationManager.js +8 -8
- package/Components/Transitioner/Scene.tsx +53 -24
- package/Components/Transitioner/Transitioner.tsx +3 -3
- package/Components/Transitioner/__tests__/Scene.test.js +25 -14
- package/Components/Transitioner/__tests__/__snapshots__/Scene.test.js.snap +9 -49
- package/Components/Transitioner/__tests__/__snapshots__/transitioner.test.js.snap +2 -2
- package/Components/Transitioner/__tests__/transitioner.test.js +13 -4
- package/Components/Transitioner/index.js +8 -4
- package/Components/VideoLive/PlayerLiveImageComponent.tsx +14 -8
- package/Components/VideoModal/ModalAnimation/AnimatedScrollModal.tsx +11 -11
- package/Components/VideoModal/ModalAnimation/AnimationComponent.tsx +14 -13
- package/Components/VideoModal/ModalAnimation/ModalAnimationContext.tsx +2 -3
- package/Components/VideoModal/ModalAnimation/utils.ts +2 -2
- package/Components/VideoModal/PlayerDetails.tsx +9 -6
- package/Components/VideoModal/PlayerWrapper.tsx +2 -2
- package/Components/Viewport/ViewportAware/__tests__/__snapshots__/viewportAware.test.js.snap +24 -36
- package/Components/Viewport/ViewportAware/__tests__/viewportAware.test.js +12 -18
- package/Components/Viewport/__tests__/utils.test.js +5 -4
- package/Components/ZappUIComponent/Placeholder.tsx +3 -1
- package/Components/ZappUIComponent/__tests__/{ZappUIComponent.test.js → ZappUIComponent.test.tsx} +26 -10
- package/Components/ZappUIComponent/index.tsx +3 -16
- package/Components/default-cell-renderer/__tests__/defaultCellRenderer.test.tsx +20 -17
- package/Components/default-cell-renderer/viewTrees/tv/DefaultCell/__tests__/DefaultCell.test.tsx +15 -11
- package/Contexts/ComponentsMapOffsetContext/index.tsx +49 -0
- package/Contexts/ScreenContext/index.tsx +3 -2
- package/Decorators/Navigator/__tests__/navigator.test.js +16 -16
- package/Decorators/Navigator/index.tsx +1 -1
- package/Decorators/RiverResolver/__tests__/riverResolver.test.tsx +18 -24
- package/Decorators/RiverResolver/index.tsx +1 -1
- package/Decorators/ZappPipesDataConnector/__tests__/Hero.js +1 -1
- package/Decorators/ZappPipesDataConnector/__tests__/zappPipesDataConnector.test.js +29 -22
- package/package.json +7 -7
- package/Components/CellRendererResolver/__tests__/__snapshots__/cellRendererResolver.test.js.snap +0 -53
- package/Components/RouteManager/__tests__/__snapshots__/testId.test.js.snap +0 -17
- package/Components/ScreenResolver/__tests__/__snapshots__/screenResolver.test.js.snap +0 -17
- package/Components/ZappUIComponent/__tests__/__snapshots__/ZappUIComponent.test.js.snap +0 -91
- package/Components/default-cell-renderer/__tests__/__snapshots__/defaultCellRenderer.test.tsx.snap +0 -338
- package/Decorators/Navigator/__tests__/__snapshots__/navigator.test.js.snap +0 -18
- package/Decorators/RiverResolver/__tests__/__snapshots__/riverResolver.test.tsx.snap +0 -28
|
@@ -1,9 +1,18 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { Text, View } from "react-native";
|
|
3
|
-
import { shallow } from "enzyme";
|
|
4
|
-
import { shallowToJson } from "enzyme-to-json";
|
|
5
3
|
|
|
6
4
|
import { TransitionerComponent } from "../Transitioner";
|
|
5
|
+
import { render } from "@testing-library/react-native";
|
|
6
|
+
|
|
7
|
+
jest.mock("../Scene", () => {
|
|
8
|
+
const View = jest.requireActual("react-native").View;
|
|
9
|
+
|
|
10
|
+
return {
|
|
11
|
+
Scene(props) {
|
|
12
|
+
return <View {...props} />;
|
|
13
|
+
},
|
|
14
|
+
};
|
|
15
|
+
});
|
|
7
16
|
|
|
8
17
|
const children = (
|
|
9
18
|
<View foo="bar">
|
|
@@ -33,12 +42,12 @@ jest.mock("uuid");
|
|
|
33
42
|
|
|
34
43
|
describe("<TransitionerComponent />", () => {
|
|
35
44
|
it("renders correctly", () => {
|
|
36
|
-
const wrapper =
|
|
45
|
+
const wrapper = render(
|
|
37
46
|
<TransitionerComponent {...transitionerComponentProps}>
|
|
38
47
|
{children}
|
|
39
48
|
</TransitionerComponent>
|
|
40
49
|
);
|
|
41
50
|
|
|
42
|
-
expect(
|
|
51
|
+
expect(wrapper.toJSON()).toMatchSnapshot();
|
|
43
52
|
});
|
|
44
53
|
});
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
-
import { useWindowDimensions } from "react-native";
|
|
3
2
|
import { useNavigation } from "@applicaster/zapp-react-native-utils/reactHooks/navigation";
|
|
4
3
|
import { useDimensions } from "@applicaster/zapp-react-native-utils/reactHooks/layout";
|
|
5
4
|
import { usePickFromState } from "@applicaster/zapp-react-native-redux/hooks";
|
|
@@ -7,10 +6,15 @@ import { TransitionerComponent } from "./Transitioner";
|
|
|
7
6
|
|
|
8
7
|
export const Transitioner = (props) => {
|
|
9
8
|
const navigator = useNavigation();
|
|
10
|
-
const { height, width } = useWindowDimensions();
|
|
11
9
|
|
|
12
|
-
const
|
|
13
|
-
|
|
10
|
+
const {
|
|
11
|
+
width,
|
|
12
|
+
height,
|
|
13
|
+
deviceInfo: { isTablet },
|
|
14
|
+
} = useDimensions("window", {
|
|
15
|
+
updateForInactiveScreens: false,
|
|
16
|
+
deviceInfo: true,
|
|
17
|
+
});
|
|
14
18
|
|
|
15
19
|
const { appData } = usePickFromState(["appData"]);
|
|
16
20
|
const isTabletPortrait = appData?.isTabletPortrait;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// /// <reference types="@applicaster/applicaster-types" />
|
|
2
2
|
//
|
|
3
3
|
import * as React from "react";
|
|
4
|
+
import { useEffect } from "react";
|
|
4
5
|
|
|
5
6
|
import { AppState, AppStateStatus, View } from "react-native";
|
|
6
7
|
import { TrackedView } from "../TrackedView";
|
|
@@ -25,7 +26,6 @@ import { PlayerRole } from "@applicaster/zapp-react-native-utils/appUtils/player
|
|
|
25
26
|
import { getAutoplaySettings } from "./utils";
|
|
26
27
|
import { isString } from "@applicaster/zapp-react-native-utils/stringUtils";
|
|
27
28
|
import { BufferAnimation } from "../PlayerContainer/BufferAnimation";
|
|
28
|
-
import { useEffect } from "react";
|
|
29
29
|
|
|
30
30
|
const { log_error, log_debug } = loggerLiveImageComponent;
|
|
31
31
|
|
|
@@ -44,7 +44,10 @@ type Props = {
|
|
|
44
44
|
};
|
|
45
45
|
|
|
46
46
|
const PlayerLiveImageComponent = (props: Props) => {
|
|
47
|
-
const dimensions = useDimensions("screen", {
|
|
47
|
+
const dimensions = useDimensions("screen", {
|
|
48
|
+
fullDimensions: true,
|
|
49
|
+
updateForInactiveScreens: false,
|
|
50
|
+
});
|
|
48
51
|
|
|
49
52
|
const { item, style, playerId } = props;
|
|
50
53
|
|
|
@@ -135,13 +138,16 @@ const PlayerLiveImageComponent = (props: Props) => {
|
|
|
135
138
|
} else {
|
|
136
139
|
throw new Error("Player factory item is null");
|
|
137
140
|
}
|
|
138
|
-
}, [playerId, item, playerPluginId, screenConfig]);
|
|
141
|
+
}, [playerId, item.id, playerPluginId, screenConfig]);
|
|
139
142
|
|
|
140
143
|
React.useEffect(() => {
|
|
141
144
|
liveImageItem.setMode = setModeDebounced;
|
|
142
145
|
}, [setModeDebounced, liveImageItem]);
|
|
143
146
|
|
|
144
|
-
const { start, end } = React.useMemo(
|
|
147
|
+
const { start, end } = React.useMemo(
|
|
148
|
+
() => getAutoplaySettings(item),
|
|
149
|
+
[item.id]
|
|
150
|
+
);
|
|
145
151
|
|
|
146
152
|
const controller = liveImageItem.getPlayer();
|
|
147
153
|
const player = usePlayer(playerId);
|
|
@@ -174,7 +180,7 @@ const PlayerLiveImageComponent = (props: Props) => {
|
|
|
174
180
|
|
|
175
181
|
unregister();
|
|
176
182
|
};
|
|
177
|
-
}, [item, liveImageItem]);
|
|
183
|
+
}, [item.id, liveImageItem]);
|
|
178
184
|
|
|
179
185
|
React.useEffect(() => {
|
|
180
186
|
if (!player) {
|
|
@@ -304,7 +310,7 @@ const PlayerLiveImageComponent = (props: Props) => {
|
|
|
304
310
|
LiveImageManager.instance.checkPlayerPosition(liveImageItem);
|
|
305
311
|
}
|
|
306
312
|
},
|
|
307
|
-
[liveImageItem, dimensions]
|
|
313
|
+
[liveImageItem, dimensions.height, dimensions.width]
|
|
308
314
|
);
|
|
309
315
|
|
|
310
316
|
const platformSpecificProps = isApplePlatform()
|
|
@@ -324,7 +330,7 @@ const PlayerLiveImageComponent = (props: Props) => {
|
|
|
324
330
|
onPositionUpdated={onPositionUpdated}
|
|
325
331
|
>
|
|
326
332
|
<View ref={trackViewRef}>
|
|
327
|
-
{isVideoMode
|
|
333
|
+
{isVideoMode ? (
|
|
328
334
|
<Player
|
|
329
335
|
autoplay={false}
|
|
330
336
|
ref={_assignRoot}
|
|
@@ -336,7 +342,7 @@ const PlayerLiveImageComponent = (props: Props) => {
|
|
|
336
342
|
resizeMode={"cover"}
|
|
337
343
|
{...platformSpecificProps}
|
|
338
344
|
/>
|
|
339
|
-
)}
|
|
345
|
+
) : null}
|
|
340
346
|
{
|
|
341
347
|
<AnimatedInOut
|
|
342
348
|
visible={isBackgroundImageVisible}
|
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import { Animated, StyleSheet, View
|
|
2
|
+
import { Animated, Platform, StyleSheet, View } from "react-native";
|
|
3
3
|
|
|
4
4
|
import { useNavigation } from "@applicaster/zapp-react-native-utils/reactHooks";
|
|
5
5
|
import {
|
|
6
|
+
GestureHandlerRootView,
|
|
6
7
|
NativeViewGestureHandler,
|
|
7
8
|
PanGestureHandler,
|
|
8
9
|
State,
|
|
9
10
|
TapGestureHandler,
|
|
10
|
-
GestureHandlerRootView,
|
|
11
11
|
} from "react-native-gesture-handler";
|
|
12
12
|
|
|
13
13
|
import { PlayerContainerContext } from "@applicaster/zapp-react-native-ui-components/Components/PlayerContainer/PlayerContainerContext";
|
|
14
14
|
import {
|
|
15
|
-
useModalAnimationContext,
|
|
16
15
|
PlayerAnimationStateEnum,
|
|
16
|
+
useModalAnimationContext,
|
|
17
17
|
} from "@applicaster/zapp-react-native-ui-components/Components/VideoModal/ModalAnimation";
|
|
18
18
|
import { isTV } from "@applicaster/zapp-react-native-utils/reactUtils";
|
|
19
19
|
import { usePrevious } from "@applicaster/zapp-react-native-utils/reactHooks/utils";
|
|
20
20
|
|
|
21
21
|
import {
|
|
22
|
-
setScrollModalAnimatedValue,
|
|
23
22
|
resetScrollAnimatedValues,
|
|
23
|
+
setScrollModalAnimatedValue,
|
|
24
24
|
} from "./utils";
|
|
25
25
|
|
|
26
26
|
const getAnimatedConfig = (toValue) => {
|
|
@@ -71,8 +71,8 @@ export const AnimatedScrollModalComponent = ({ children }: Props) => {
|
|
|
71
71
|
useNavigation();
|
|
72
72
|
|
|
73
73
|
const { mode: videoModalMode, item: videoModalItem } = videoModalState;
|
|
74
|
-
const
|
|
75
|
-
const isMinimizedModal = videoModalMode === "MINIMIZED";
|
|
74
|
+
const isMaximizedModal: boolean = videoModalMode === "MAXIMIZED";
|
|
75
|
+
const isMinimizedModal: boolean = videoModalMode === "MINIMIZED";
|
|
76
76
|
const previousItemId = usePrevious(videoModalItem?.id);
|
|
77
77
|
|
|
78
78
|
const isNotMinimizeMaximazeAnimation =
|
|
@@ -84,7 +84,7 @@ export const AnimatedScrollModalComponent = ({ children }: Props) => {
|
|
|
84
84
|
!isLanguageOverlayVisible &&
|
|
85
85
|
isNotMinimizeMaximazeAnimation &&
|
|
86
86
|
!isSeekBarTouch &&
|
|
87
|
-
(
|
|
87
|
+
(isMaximizedModal || isMinimizedModal);
|
|
88
88
|
|
|
89
89
|
const isAudioItem = React.useMemo(
|
|
90
90
|
() =>
|
|
@@ -346,6 +346,8 @@ export const AnimatedScrollModalComponent = ({ children }: Props) => {
|
|
|
346
346
|
[]
|
|
347
347
|
);
|
|
348
348
|
|
|
349
|
+
const scrollEnabled = isMaximizedModal && isNotMinimizeMaximazeAnimation;
|
|
350
|
+
|
|
349
351
|
return (
|
|
350
352
|
<Wrapper style={generalStyles.container}>
|
|
351
353
|
<TapGestureHandler
|
|
@@ -359,7 +361,7 @@ export const AnimatedScrollModalComponent = ({ children }: Props) => {
|
|
|
359
361
|
enabled={isEnablePanGesture}
|
|
360
362
|
ref={panHandlerRef}
|
|
361
363
|
simultaneousHandlers={[scrollRef, tapHandlerRef]}
|
|
362
|
-
shouldCancelWhenOutside={
|
|
364
|
+
shouldCancelWhenOutside={isMaximizedModal}
|
|
363
365
|
onGestureEvent={onGestureEvent}
|
|
364
366
|
onHandlerStateChange={onHandlerStateChange}
|
|
365
367
|
activeOffsetY={[-5, 5]}
|
|
@@ -371,9 +373,7 @@ export const AnimatedScrollModalComponent = ({ children }: Props) => {
|
|
|
371
373
|
simultaneousHandlers={panHandlerRef}
|
|
372
374
|
>
|
|
373
375
|
<Animated.ScrollView
|
|
374
|
-
scrollEnabled={
|
|
375
|
-
isMaximazedModal && isNotMinimizeMaximazeAnimation
|
|
376
|
-
}
|
|
376
|
+
scrollEnabled={scrollEnabled}
|
|
377
377
|
bounces={false}
|
|
378
378
|
onScrollBeginDrag={onRegisterLastScroll}
|
|
379
379
|
onScroll={onScroll}
|
|
@@ -4,26 +4,26 @@ import { Animated, View } from "react-native";
|
|
|
4
4
|
import { useSafeAreaInsets } from "react-native-safe-area-context";
|
|
5
5
|
|
|
6
6
|
import {
|
|
7
|
-
useModalAnimationContext,
|
|
8
7
|
PlayerAnimationStateEnum,
|
|
8
|
+
useModalAnimationContext,
|
|
9
9
|
} from "@applicaster/zapp-react-native-ui-components/Components/VideoModal/ModalAnimation";
|
|
10
10
|
|
|
11
11
|
import {
|
|
12
|
+
useDimensions,
|
|
12
13
|
useGetBottomTabBarHeight,
|
|
13
14
|
useNavigation,
|
|
14
|
-
useDimensions,
|
|
15
15
|
} from "@applicaster/zapp-react-native-utils/reactHooks";
|
|
16
16
|
import { useIsRTL } from "@applicaster/zapp-react-native-utils/localizationUtils";
|
|
17
17
|
import { isTV } from "@applicaster/zapp-react-native-utils/reactUtils";
|
|
18
18
|
import { useAppState } from "@applicaster/zapp-react-native-utils/reactHooks/app";
|
|
19
19
|
|
|
20
20
|
import {
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
AUDIO_PLAYER_HORIZONTAL_PADDING,
|
|
22
|
+
ComponentAnimationType,
|
|
23
23
|
defaultAspectRatioWidth,
|
|
24
|
+
gestureListenerHelper,
|
|
24
25
|
getAnimationDefaultValue,
|
|
25
|
-
|
|
26
|
-
AUDIO_PLAYER_HORIZONTAL_PADDING,
|
|
26
|
+
getAnimationStyle,
|
|
27
27
|
} from "./utils";
|
|
28
28
|
|
|
29
29
|
type Props = {
|
|
@@ -100,10 +100,11 @@ export const AnimationView = ({
|
|
|
100
100
|
const moveUpValue = additionalData.saveArea
|
|
101
101
|
? -insets.top + (isAudioItem ? 0 : progressBarHeight)
|
|
102
102
|
: isTablet
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
103
|
+
? isTabletLandscape &&
|
|
104
|
+
(!isAudioItem || (isAudioItem && inlineAudioPlayer))
|
|
105
|
+
? -tabletLandscapePlayerTopPosition + progressBarHeight
|
|
106
|
+
: -130
|
|
107
|
+
: -50 + progressBarHeight;
|
|
107
108
|
|
|
108
109
|
const moveComponentHorizontalValue = additionalData.moveValue
|
|
109
110
|
? isRTL
|
|
@@ -404,7 +405,7 @@ export const AnimationView = ({
|
|
|
404
405
|
|
|
405
406
|
return (
|
|
406
407
|
<Animated.View
|
|
407
|
-
onLayout={additionalData.useLayoutMeasure
|
|
408
|
+
onLayout={additionalData.useLayoutMeasure ? measureView : undefined}
|
|
408
409
|
ref={animationComponentRef}
|
|
409
410
|
style={[
|
|
410
411
|
...preparedStyles,
|
|
@@ -434,8 +435,8 @@ export const AnimationComponent = (props: Props) => {
|
|
|
434
435
|
const Component = useAnimation
|
|
435
436
|
? AnimationView
|
|
436
437
|
: style
|
|
437
|
-
|
|
438
|
-
|
|
438
|
+
? View
|
|
439
|
+
: React.Fragment;
|
|
439
440
|
|
|
440
441
|
if (
|
|
441
442
|
additionalData.extraAnimation &&
|
|
@@ -118,11 +118,10 @@ const Provider = ({ children }: { children: React.ReactNode }) => {
|
|
|
118
118
|
If bottomTabBarHeight is equal 0 it means an app does not use bottomTabBar.
|
|
119
119
|
Because of this we need to minus bottom SafeArea offset.
|
|
120
120
|
*/
|
|
121
|
+
|
|
121
122
|
const minValue =
|
|
122
123
|
height -
|
|
123
|
-
minimisedHeight
|
|
124
|
-
(bottomTabBarHeight || bottomSafeArea) -
|
|
125
|
-
progressBarHeight;
|
|
124
|
+
(minimisedHeight + bottomTabBarHeight + progressBarHeight + bottomSafeArea);
|
|
126
125
|
|
|
127
126
|
const modalSnapPoints = React.useMemo(() => [0, minValue], [minValue]);
|
|
128
127
|
// Last snap state which will helps us to make smooth responder to scrollview animation
|
|
@@ -108,8 +108,8 @@ export const calculateAnimationValue = (animationType, dragPosition, data) => {
|
|
|
108
108
|
: { forWidth: 3, forHeight: 3 }
|
|
109
109
|
: { forWidth: 2, forHeight: 2 }
|
|
110
110
|
: isTabletLandscape
|
|
111
|
-
|
|
112
|
-
|
|
111
|
+
? { forWidth: 8, forHeight: 6.5 }
|
|
112
|
+
: { forWidth: 3.5, forHeight: 2 };
|
|
113
113
|
|
|
114
114
|
const minWidth =
|
|
115
115
|
isAudioItem && !inlineAudioPlayer ? minimisedHeight : minimisedWidth;
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import React, { useEffect, useRef } from "react";
|
|
2
2
|
import {
|
|
3
|
-
StyleProp,
|
|
4
|
-
ViewStyle,
|
|
5
3
|
Animated,
|
|
6
|
-
Easing,
|
|
7
4
|
Dimensions,
|
|
5
|
+
Easing,
|
|
6
|
+
StyleProp,
|
|
7
|
+
ViewStyle,
|
|
8
|
+
StyleSheet,
|
|
8
9
|
} from "react-native";
|
|
9
10
|
import { useTargetScreenData } from "@applicaster/zapp-react-native-utils/reactHooks/screen";
|
|
10
11
|
import { ComponentsMap } from "@applicaster/zapp-react-native-ui-components/Components/River/ComponentsMap";
|
|
@@ -90,17 +91,19 @@ export const PlayerDetails = ({
|
|
|
90
91
|
{
|
|
91
92
|
// workaround for avoid wrong text-height after going back to portrait rotation
|
|
92
93
|
// we don't see this view in landscape mode, so we are able to use fixed width from portrait mode
|
|
93
|
-
width: isTablet
|
|
94
|
+
width: isTablet
|
|
95
|
+
? undefined
|
|
96
|
+
: (StyleSheet.flatten(style)?.width ?? SCREEN_WIDTH),
|
|
94
97
|
},
|
|
95
98
|
]}
|
|
96
99
|
>
|
|
97
|
-
{screenData
|
|
100
|
+
{screenData ? (
|
|
98
101
|
<ComponentsMap
|
|
99
102
|
riverId={screenData.id}
|
|
100
103
|
feed={screenData?.data?.source}
|
|
101
104
|
riverComponents={screenData.ui_components}
|
|
102
105
|
/>
|
|
103
|
-
)}
|
|
106
|
+
) : null}
|
|
104
107
|
</Animated.View>
|
|
105
108
|
);
|
|
106
109
|
};
|
|
@@ -227,7 +227,7 @@ const PlayerWrapperComponent = (props: Props) => {
|
|
|
227
227
|
</View>
|
|
228
228
|
|
|
229
229
|
<AnimatedScrollModal>
|
|
230
|
-
{isShowPlayerDetails
|
|
230
|
+
{isShowPlayerDetails ? (
|
|
231
231
|
<AnimationComponent
|
|
232
232
|
animationType={ComponentAnimationType.componentFade}
|
|
233
233
|
style={defaultStyles.flex}
|
|
@@ -240,7 +240,7 @@ const PlayerWrapperComponent = (props: Props) => {
|
|
|
240
240
|
isTablet={isTablet}
|
|
241
241
|
/>
|
|
242
242
|
</AnimationComponent>
|
|
243
|
-
)}
|
|
243
|
+
) : null}
|
|
244
244
|
</AnimatedScrollModal>
|
|
245
245
|
</AnimationComponent>
|
|
246
246
|
</WrapperView>
|
package/Components/Viewport/ViewportAware/__tests__/__snapshots__/viewportAware.test.js.snap
CHANGED
|
@@ -33,45 +33,33 @@ exports[`<ViewportAware /> invokes the onViewportLeave function when leaving the
|
|
|
33
33
|
`;
|
|
34
34
|
|
|
35
35
|
exports[`<ViewportAware /> passes the correct view port flag 1`] = `
|
|
36
|
-
<
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
36
|
+
<RCTScrollView
|
|
37
|
+
onContentSizeChange={[Function]}
|
|
38
|
+
onLayout={[Function]}
|
|
39
|
+
onScroll={[Function]}
|
|
40
40
|
>
|
|
41
|
-
<
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
41
|
+
<View>
|
|
42
|
+
<RCTScrollView
|
|
43
|
+
testID="test-component-false"
|
|
44
|
+
>
|
|
45
|
+
<View />
|
|
46
|
+
</RCTScrollView>
|
|
47
|
+
</View>
|
|
48
|
+
</RCTScrollView>
|
|
45
49
|
`;
|
|
46
50
|
|
|
47
51
|
exports[`<ViewportAware /> renders its children correctly 1`] = `
|
|
48
|
-
<
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
"lastEvent": null,
|
|
53
|
-
"listeners": [],
|
|
54
|
-
"notify": [Function],
|
|
55
|
-
}
|
|
56
|
-
}
|
|
52
|
+
<RCTScrollView
|
|
53
|
+
onContentSizeChange={[Function]}
|
|
54
|
+
onLayout={[Function]}
|
|
55
|
+
onScroll={[Function]}
|
|
57
56
|
>
|
|
58
|
-
<
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
}
|
|
67
|
-
>
|
|
68
|
-
<ScrollView>
|
|
69
|
-
<TestComponent
|
|
70
|
-
onViewportEnter={[MockFunction]}
|
|
71
|
-
onViewportLeave={[MockFunction]}
|
|
72
|
-
preTriggerRatio={0.1}
|
|
73
|
-
/>
|
|
74
|
-
</ScrollView>
|
|
75
|
-
</ViewportTracker>
|
|
76
|
-
</ContextProvider>
|
|
57
|
+
<View>
|
|
58
|
+
<RCTScrollView
|
|
59
|
+
testID="test-component-false"
|
|
60
|
+
>
|
|
61
|
+
<View />
|
|
62
|
+
</RCTScrollView>
|
|
63
|
+
</View>
|
|
64
|
+
</RCTScrollView>
|
|
77
65
|
`;
|
|
@@ -2,11 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
import * as React from "react";
|
|
4
4
|
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
import {
|
|
5
|
+
import { act, create as render } from "react-test-renderer";
|
|
6
|
+
|
|
7
|
+
import { ViewportAware } from "../";
|
|
8
|
+
import { ViewportTracker } from "../../ViewportTracker";
|
|
8
9
|
|
|
9
10
|
import { ViewportEvents } from "../../ViewportEvents";
|
|
11
|
+
import ReactNative from "react-native";
|
|
10
12
|
|
|
11
13
|
jest.useFakeTimers();
|
|
12
14
|
|
|
@@ -24,17 +26,10 @@ jest.mock("react-native/Libraries/Renderer/shims/ReactNative", () => ({
|
|
|
24
26
|
findNodeHandle: () => 1234,
|
|
25
27
|
}));
|
|
26
28
|
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
const { Animated, ScrollView } = ReactNative;
|
|
30
|
-
|
|
31
|
-
Animated.timing = jest.fn(() => ({ start: jest.fn() }));
|
|
29
|
+
const { ScrollView } = ReactNative;
|
|
32
30
|
|
|
33
31
|
const viewportEventsManager = new ViewportEvents(true);
|
|
34
32
|
|
|
35
|
-
const { ViewportAware } = require("../");
|
|
36
|
-
const { ViewportTracker } = require("../../ViewportTracker");
|
|
37
|
-
|
|
38
33
|
const TestComponent = (props) => {
|
|
39
34
|
const {
|
|
40
35
|
preTriggerRatio,
|
|
@@ -90,7 +85,7 @@ describe("<ViewportAware />", () => {
|
|
|
90
85
|
});
|
|
91
86
|
|
|
92
87
|
it("renders its children correctly", () => {
|
|
93
|
-
const wrapper =
|
|
88
|
+
const wrapper = render(
|
|
94
89
|
getWrapper(() => (
|
|
95
90
|
<TestComponent
|
|
96
91
|
preTriggerRatio={0.1}
|
|
@@ -100,11 +95,11 @@ describe("<ViewportAware />", () => {
|
|
|
100
95
|
))
|
|
101
96
|
);
|
|
102
97
|
|
|
103
|
-
expect(
|
|
98
|
+
expect(wrapper.toJSON()).toMatchSnapshot();
|
|
104
99
|
});
|
|
105
100
|
|
|
106
101
|
it("passes the correct view port flag", () => {
|
|
107
|
-
const wrapper =
|
|
102
|
+
const wrapper = render(
|
|
108
103
|
getWrapper(() => (
|
|
109
104
|
<TestComponent
|
|
110
105
|
preTriggerRatio={0.1}
|
|
@@ -114,12 +109,11 @@ describe("<ViewportAware />", () => {
|
|
|
114
109
|
))
|
|
115
110
|
);
|
|
116
111
|
|
|
117
|
-
|
|
118
|
-
expect(shallowToJson(testComponentWrapper.shallow())).toMatchSnapshot();
|
|
112
|
+
expect(wrapper.toJSON()).toMatchSnapshot();
|
|
119
113
|
});
|
|
120
114
|
|
|
121
115
|
it("invokes the onViewportEnter function when entering the viewport", () => {
|
|
122
|
-
const wrapper =
|
|
116
|
+
const wrapper = render(
|
|
123
117
|
getWrapper(() => (
|
|
124
118
|
<TestComponent
|
|
125
119
|
preTriggerRatio={0.1}
|
|
@@ -156,7 +150,7 @@ describe("<ViewportAware />", () => {
|
|
|
156
150
|
});
|
|
157
151
|
|
|
158
152
|
it("invokes the onViewportLeave function when leaving the viewport", () => {
|
|
159
|
-
const wrapper =
|
|
153
|
+
const wrapper = render(
|
|
160
154
|
getWrapper(() => (
|
|
161
155
|
<TestComponent
|
|
162
156
|
preTriggerRatio={0.1}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
/* eslint-disable react/prop-types */
|
|
2
2
|
import * as React from "react";
|
|
3
3
|
import { View } from "react-native";
|
|
4
|
-
import {
|
|
4
|
+
import { render } from "@testing-library/react-native";
|
|
5
5
|
import { callOnChildren, isInViewport } from "../utils";
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
// IDK what this is doing
|
|
8
|
+
describe.skip("callOnChildren", () => {
|
|
8
9
|
const arg1 = "arg1";
|
|
9
10
|
const arg2 = "arg2";
|
|
10
11
|
|
|
@@ -28,7 +29,7 @@ describe("callOnChildren", () => {
|
|
|
28
29
|
});
|
|
29
30
|
|
|
30
31
|
it("calls the method on the child component's props if it exists", () => {
|
|
31
|
-
|
|
32
|
+
render(
|
|
32
33
|
<TestComponent
|
|
33
34
|
isMounted={() => {
|
|
34
35
|
expect(testMethod).toHaveBeenCalledWith(arg1, arg2);
|
|
@@ -40,7 +41,7 @@ describe("callOnChildren", () => {
|
|
|
40
41
|
});
|
|
41
42
|
|
|
42
43
|
it("fails silently if the child component doesn't have any prop", () => {
|
|
43
|
-
|
|
44
|
+
render(
|
|
44
45
|
<TestComponent
|
|
45
46
|
isMounted={() => {
|
|
46
47
|
expect(testMethod).not.toHaveBeenCalled();
|
|
@@ -30,5 +30,7 @@ export const Placeholder = ({ readyToBeDisplayed }: Props) => {
|
|
|
30
30
|
|
|
31
31
|
if (readyToBeDisplayed && !isTV()) return null;
|
|
32
32
|
|
|
33
|
-
return
|
|
33
|
+
return (
|
|
34
|
+
<View testID="ZappUIComponent-placeholder" style={styles.placeholder} />
|
|
35
|
+
);
|
|
34
36
|
};
|
package/Components/ZappUIComponent/__tests__/{ZappUIComponent.test.js → ZappUIComponent.test.tsx}
RENAMED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import { View } from "react-native";
|
|
3
|
-
|
|
4
|
-
import {
|
|
3
|
+
|
|
4
|
+
import { renderWithProviders } from "@applicaster/zapp-react-native-utils/testUtils";
|
|
5
5
|
|
|
6
6
|
import { ZappUIComponent } from "../index";
|
|
7
7
|
|
|
@@ -37,7 +37,13 @@ const ErrorComponent = (props) => <MockComponent name="error" {...props} />;
|
|
|
37
37
|
const LoadingComponent = (props) => <MockComponent name="loading" {...props} />;
|
|
38
38
|
|
|
39
39
|
function getProps(zappPipesData) {
|
|
40
|
-
return {
|
|
40
|
+
return {
|
|
41
|
+
component: {
|
|
42
|
+
rules: {},
|
|
43
|
+
},
|
|
44
|
+
onLoadFinished,
|
|
45
|
+
zappPipesData,
|
|
46
|
+
};
|
|
41
47
|
}
|
|
42
48
|
|
|
43
49
|
function getWrapper({ error, loading, props }) {
|
|
@@ -47,21 +53,28 @@ function getWrapper({ error, loading, props }) {
|
|
|
47
53
|
LoadingComponent: loading ? LoadingComponent : null,
|
|
48
54
|
});
|
|
49
55
|
|
|
50
|
-
return
|
|
56
|
+
return renderWithProviders(
|
|
57
|
+
<View testID="outer-test-view">
|
|
58
|
+
<WrappedComponent testID="test-view" {...props} />
|
|
59
|
+
</View>
|
|
60
|
+
);
|
|
51
61
|
}
|
|
52
62
|
|
|
53
63
|
describe("ZappUIComponent", () => {
|
|
54
64
|
describe("when zapp pipes data is loading", () => {
|
|
55
65
|
const props = getProps(zappPipesData_loading);
|
|
56
66
|
|
|
57
|
-
it("renders
|
|
67
|
+
it("renders placeholder component if no loading component is provided", () => {
|
|
58
68
|
const wrapper = getWrapper({ props });
|
|
59
|
-
|
|
69
|
+
const testView = wrapper.getByTestId("ZappUIComponent-placeholder");
|
|
70
|
+
|
|
71
|
+
expect(testView.props).toBeDefined();
|
|
60
72
|
});
|
|
61
73
|
|
|
62
74
|
it("renders correctly otherwise", () => {
|
|
63
75
|
const wrapper = getWrapper({ props, loading: true });
|
|
64
|
-
|
|
76
|
+
const testView = wrapper.getByTestId("test-view");
|
|
77
|
+
expect(testView.props.name).toBe("loading");
|
|
65
78
|
});
|
|
66
79
|
});
|
|
67
80
|
|
|
@@ -70,12 +83,14 @@ describe("ZappUIComponent", () => {
|
|
|
70
83
|
|
|
71
84
|
it("renders null if no error component is provided", () => {
|
|
72
85
|
const wrapper = getWrapper({ props });
|
|
73
|
-
|
|
86
|
+
|
|
87
|
+
expect(wrapper.queryByTestId("test-view")).toBeNull();
|
|
74
88
|
});
|
|
75
89
|
|
|
76
90
|
it("renders correctly otherwise", () => {
|
|
77
91
|
const wrapper = getWrapper({ props, error: true });
|
|
78
|
-
|
|
92
|
+
const testView = wrapper.getByTestId("test-view");
|
|
93
|
+
expect(testView.props.name).toBe("error");
|
|
79
94
|
});
|
|
80
95
|
});
|
|
81
96
|
|
|
@@ -84,7 +99,8 @@ describe("ZappUIComponent", () => {
|
|
|
84
99
|
|
|
85
100
|
it("renders correctly", () => {
|
|
86
101
|
const wrapper = getWrapper({ props });
|
|
87
|
-
|
|
102
|
+
const testView = wrapper.getByTestId("test-view");
|
|
103
|
+
expect(testView.props.name).toBe("success");
|
|
88
104
|
});
|
|
89
105
|
});
|
|
90
106
|
});
|