@applicaster/zapp-react-native-ui-components 13.0.0-alpha.5033140607 → 13.0.0-alpha.5304771702
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__/__snapshots__/AppContainer.test.js.snap +1 -1
- package/Components/AudioPlayer/__tests__/__snapshots__/Runtime.test.js.snap +4 -4
- package/Components/AudioPlayer/__tests__/__snapshots__/artWork.test.js.snap +3 -3
- package/Components/AudioPlayer/__tests__/__snapshots__/audioPlayer.test.js.snap +6 -6
- package/Components/AudioPlayer/__tests__/__snapshots__/audioPlayerLayout.test.js.snap +7 -7
- package/Components/AudioPlayer/__tests__/__snapshots__/channel.test.js.snap +3 -3
- package/Components/AudioPlayer/__tests__/__snapshots__/summary.test.js.snap +2 -2
- package/Components/AudioPlayer/__tests__/__snapshots__/title.test.js.snap +2 -2
- package/Components/BaseFocusable/index.ios.ts +1 -1
- package/Components/BaseFocusable/index.tsx +66 -29
- package/Components/Cell/Cell.tsx +14 -9
- package/Components/Cell/CellWithFocusable.tsx +1 -1
- package/Components/Cell/TvOSCellComponent.tsx +3 -8
- package/Components/CellRendererResolver/__tests__/__snapshots__/cellRendererResolver.test.js.snap +20 -20
- package/Components/CellRendererResolver/__tests__/cellRendererResolver.test.js +5 -3
- package/Components/ComponentResolver/__tests__/__snapshots__/componentResolver.test.js.snap +5 -5
- package/Components/ComponentResolver/__tests__/componentResolver.test.js +11 -9
- package/Components/DisplayState/__tests__/__snapshots__/displayState.test.js.snap +2 -2
- package/Components/Focusable/Focusable.tsx +0 -54
- package/Components/Focusable/FocusableTvOS.tsx +1 -1
- package/Components/Focusable/Touchable.tsx +19 -20
- package/Components/FocusableList/index.tsx +0 -1
- package/Components/GeneralContentScreen/utils/__tests__/useCurationAPI.test.js +76 -7
- package/Components/GeneralContentScreen/utils/useCurationAPI.ts +53 -9
- package/Components/Layout/TV/__tests__/ScreenContainer.test.tsx +1 -0
- package/Components/Layout/TV/__tests__/__snapshots__/LayoutContainer.test.tsx.snap +1 -1
- package/Components/Layout/TV/__tests__/__snapshots__/NavBarContainer.test.tsx.snap +3 -3
- package/Components/Layout/TV/__tests__/__snapshots__/ScreenContainer.test.tsx.snap +9 -9
- package/Components/Layout/TV/__tests__/__snapshots__/index.test.tsx.snap +1 -1
- package/Components/Layout/TV/__tests__/index.test.tsx +7 -3
- package/Components/MasterCell/DefaultComponents/BorderContainerView/__tests__/index.test.tsx +66 -0
- package/Components/MasterCell/DefaultComponents/BorderContainerView/index.tsx +4 -1
- package/Components/MasterCell/DefaultComponents/Image/Image.ios.tsx +6 -12
- package/Components/MasterCell/DefaultComponents/ImageBorderContainer/__tests__/index.test.ts +93 -0
- package/Components/MasterCell/DefaultComponents/SecondaryImage/__tests__/__snapshots__/Image.test.tsx.snap +3 -3
- package/Components/MasterCell/DefaultComponents/SecondaryImage/utils.ts +1 -1
- package/Components/MasterCell/DefaultComponents/__tests__/image.test.js +1 -1
- package/Components/MasterCell/SharedUI/CollapsibleTextContainer/__tests__/__snapshots__/index.test.tsx.snap +1 -1
- package/Components/MasterCell/__tests__/__snapshots__/dataAdapter.test.js.snap +180 -180
- package/Components/MasterCell/__tests__/__snapshots__/elementMapper.test.js.snap +7 -7
- package/Components/MasterCell/__tests__/__snapshots__/masterCell.test.js.snap +34 -34
- package/Components/MasterCell/hooks/useAsyncRendering/MasterCellAsyncRenderManager.ts +2 -2
- package/Components/MasterCell/hooks/useAsyncRendering/index.ts +2 -2
- package/Components/MasterCell/utils/index.ts +1 -1
- package/Components/ModalComponent/Header/index.tsx +3 -3
- package/Components/NativeFocusables/{index.js → index.ts} +4 -2
- package/Components/OfflineHandler/__tests__/__snapshots__/index.test.tsx.snap +7 -7
- package/Components/OfflineHandler/__tests__/index.test.tsx +28 -25
- package/Components/PlayerContainer/PlayerContainer.tsx +5 -11
- package/Components/PlayerContainer/PlayerContainerContext.tsx +9 -0
- package/Components/River/ComponentsMap/ComponentsMap.tsx +39 -65
- package/Components/River/ComponentsMap/hooks/useLoadingState.ts +78 -51
- package/Components/River/RefreshControl.tsx +1 -1
- package/Components/River/RiverFooter.tsx +39 -9
- package/Components/River/RiverItem.tsx +37 -2
- package/Components/River/__tests__/__snapshots__/componentsMap.test.js.snap +114 -45
- package/Components/River/__tests__/__snapshots__/river.test.js.snap +12 -12
- package/Components/River/__tests__/componentsMap.test.js +64 -17
- package/Components/RouteManager/__tests__/__snapshots__/routeManager.test.js.snap +1 -1
- package/Components/RouteManager/__tests__/__snapshots__/testId.test.js.snap +1 -1
- package/Components/Screen/__tests__/Screen.test.tsx +41 -27
- package/Components/Screen/__tests__/__snapshots__/Screen.test.tsx.snap +4 -4
- package/Components/Screen/index.tsx +1 -0
- package/Components/ScreenResolver/__tests__/__snapshots__/screenResolver.test.js.snap +2 -2
- package/Components/ScreenResolver/__tests__/screenResolver.test.js +31 -27
- package/Components/Tabs/Tab.tsx +7 -6
- package/Components/TextInputTv/__tests__/TextInputTv.test.js +42 -42
- package/Components/TextInputTv/__tests__/__snapshots__/TextInputTv.test.js.snap +7 -0
- package/Components/TextInputTv/index.tsx +4 -4
- package/Components/Touchable/__tests__/__snapshots__/touchable.test.tsx.snap +2 -2
- package/Components/Transitioner/AnimationManager.js +8 -8
- package/Components/Transitioner/Scene.tsx +52 -23
- package/Components/Transitioner/__tests__/__snapshots__/AnimationManager.test.js.snap +26 -26
- package/Components/Transitioner/__tests__/__snapshots__/Scene.test.js.snap +62 -46
- package/Components/Transitioner/__tests__/__snapshots__/config.test.js.snap +20 -20
- package/Components/Transitioner/__tests__/__snapshots__/transitioner.test.js.snap +4 -4
- package/Components/Transitioner/index.js +8 -4
- package/Components/VideoLive/LiveImageManager.ts +27 -1
- package/Components/VideoLive/PlayerLiveImageComponent.tsx +29 -21
- package/Components/VideoLive/__tests__/PlayerLiveImageComponent.test.tsx +63 -8
- package/Components/VideoLive/__tests__/__snapshots__/PlayerLiveImageComponent.test.tsx.snap +5 -10
- package/Components/VideoModal/ModalAnimation/AnimatedScrollModal.tsx +5 -1
- package/Components/VideoModal/ModalAnimation/AnimatedVideoPlayerComponent.tsx +5 -1
- package/Components/VideoModal/ModalAnimation/AnimationComponent.tsx +8 -7
- package/Components/VideoModal/ModalAnimation/ModalAnimationContext.tsx +4 -10
- package/Components/VideoModal/ModalAnimation/index.ts +2 -1
- package/Components/VideoModal/ModalAnimation/useModalAnimationContext.ts +6 -0
- package/Components/VideoModal/ModalAnimation/utils.ts +2 -2
- package/Components/VideoModal/OpaqueLayer.tsx +33 -0
- package/Components/VideoModal/PlayerWrapper.tsx +16 -35
- package/Components/VideoModal/VideoModal.tsx +14 -23
- package/Components/VideoModal/__tests__/PlayerDetails.test.tsx +5 -2
- package/Components/VideoModal/__tests__/PlayerWrapper.test.tsx +13 -10
- package/Components/VideoModal/__tests__/__snapshots__/PlayerDetails.test.tsx.snap +4 -4
- package/Components/VideoModal/__tests__/__snapshots__/PlayerWrapper.test.tsx.snap +66 -156
- package/Components/VideoModal/hooks/__tests__/useDelayedPlayerDetails.test.ts +89 -0
- package/Components/VideoModal/hooks/index.ts +7 -0
- package/Components/VideoModal/hooks/useDelayedPlayerDetails.ts +49 -0
- package/Components/VideoModal/hooks/utils/__tests__/showDetails.test.ts +91 -0
- package/Components/VideoModal/hooks/utils/index.ts +33 -0
- package/Components/VideoModal/utils.ts +3 -5
- package/Components/Viewport/ViewportAware/__tests__/__snapshots__/viewportAware.test.js.snap +2 -2
- package/Components/Viewport/ViewportTracker/__tests__/__snapshots__/viewportTracker.test.js.snap +1 -1
- package/Components/ZappUIComponent/__tests__/__snapshots__/ZappUIComponent.test.js.snap +11 -11
- package/Components/default-cell-renderer/__tests__/__snapshots__/defaultCellRenderer.test.tsx.snap +30 -30
- package/Contexts/ConfigutaionContext/__tests__/__snapshots__/ConfigurationProvider.test.tsx.snap +1 -1
- package/Contexts/ScreenContext/index.tsx +3 -2
- package/Decorators/Analytics/{index.js → index.tsx} +11 -11
- package/Decorators/Navigator/__tests__/__snapshots__/navigator.test.js.snap +2 -2
- package/Decorators/RiverFeedLoader/__tests__/__snapshots__/riverFeedLoader.test.tsx.snap +77 -77
- package/Decorators/RiverFeedLoader/__tests__/riverFeedLoader.test.tsx +34 -39
- package/Decorators/RiverFeedLoader/__tests__/utils.test.ts +0 -9
- package/Decorators/RiverFeedLoader/index.tsx +1 -1
- package/Decorators/RiverFeedLoader/utils/getDatasourceUrl.ts +39 -0
- package/Decorators/RiverFeedLoader/utils/index.ts +29 -0
- package/Decorators/RiverFeedLoader/utils/usePipesContexts.ts +40 -0
- package/Decorators/RiverResolver/__tests__/__snapshots__/riverResolver.test.tsx.snap +5 -5
- package/Decorators/RiverResolver/__tests__/riverResolver.test.tsx +16 -10
- package/Decorators/ZappPipesDataConnector/__tests__/Hero.js +1 -1
- package/Decorators/ZappPipesDataConnector/index.tsx +32 -2
- package/package.json +12 -6
- package/Decorators/RiverFeedLoader/utils.ts +0 -100
|
@@ -1,63 +1,79 @@
|
|
|
1
1
|
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
2
2
|
|
|
3
3
|
exports[`<Scene /> renders correctly 1`] = `
|
|
4
|
-
<
|
|
5
|
-
|
|
4
|
+
<CurrentScreenContextProvider
|
|
5
|
+
contentStyle={
|
|
6
|
+
{
|
|
7
|
+
"paddingBottom": 49,
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
overlayStyle={
|
|
11
|
+
{
|
|
12
|
+
"opacity": 1,
|
|
13
|
+
}
|
|
14
|
+
}
|
|
6
15
|
style={
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
},
|
|
11
|
-
Object {
|
|
12
|
-
"paddingBottom": 49,
|
|
13
|
-
},
|
|
14
|
-
Object {
|
|
15
|
-
"fontScale": 2,
|
|
16
|
-
"height": 1334,
|
|
17
|
-
"scale": 2,
|
|
18
|
-
"statusBarHeight": null,
|
|
19
|
-
"width": 750,
|
|
20
|
-
},
|
|
21
|
-
]
|
|
16
|
+
{
|
|
17
|
+
"flex": 1,
|
|
18
|
+
}
|
|
22
19
|
}
|
|
23
20
|
>
|
|
24
|
-
<
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
21
|
+
<SceneComponent
|
|
22
|
+
contentStyle={
|
|
23
|
+
{
|
|
24
|
+
"paddingBottom": 49,
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
overlayStyle={
|
|
28
|
+
{
|
|
29
|
+
"opacity": 1,
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
style={
|
|
33
|
+
{
|
|
34
|
+
"flex": 1,
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/>
|
|
38
|
+
</CurrentScreenContextProvider>
|
|
30
39
|
`;
|
|
31
40
|
|
|
32
41
|
exports[`<Scene /> renders the overlay while animating 1`] = `
|
|
33
|
-
<
|
|
34
|
-
|
|
42
|
+
<CurrentScreenContextProvider
|
|
43
|
+
animating={true}
|
|
44
|
+
contentStyle={
|
|
45
|
+
{
|
|
46
|
+
"paddingBottom": 49,
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
overlayStyle={
|
|
50
|
+
{
|
|
51
|
+
"opacity": 1,
|
|
52
|
+
}
|
|
53
|
+
}
|
|
35
54
|
style={
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
},
|
|
40
|
-
Object {
|
|
41
|
-
"paddingBottom": 49,
|
|
42
|
-
},
|
|
43
|
-
Object {
|
|
44
|
-
"height": "100%",
|
|
45
|
-
"width": "100%",
|
|
46
|
-
},
|
|
47
|
-
]
|
|
55
|
+
{
|
|
56
|
+
"flex": 1,
|
|
57
|
+
}
|
|
48
58
|
}
|
|
49
59
|
>
|
|
50
|
-
<
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
60
|
+
<SceneComponent
|
|
61
|
+
animating={true}
|
|
62
|
+
contentStyle={
|
|
63
|
+
{
|
|
64
|
+
"paddingBottom": 49,
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
overlayStyle={
|
|
68
|
+
{
|
|
58
69
|
"opacity": 1,
|
|
59
70
|
}
|
|
60
71
|
}
|
|
72
|
+
style={
|
|
73
|
+
{
|
|
74
|
+
"flex": 1,
|
|
75
|
+
}
|
|
76
|
+
}
|
|
61
77
|
/>
|
|
62
|
-
</
|
|
78
|
+
</CurrentScreenContextProvider>
|
|
63
79
|
`;
|
|
@@ -5,34 +5,34 @@ exports[`transitionConfig accepts an Animated.Value as a parameter 1`] = `"Canno
|
|
|
5
5
|
exports[`transitionConfig accepts an Animated.Value as a parameter 2`] = `[Function]`;
|
|
6
6
|
|
|
7
7
|
exports[`transitionConfig returns a back object is valid 1`] = `
|
|
8
|
-
|
|
8
|
+
{
|
|
9
9
|
"duration": 350,
|
|
10
10
|
"easing": [Function],
|
|
11
|
-
"from":
|
|
12
|
-
"style":
|
|
11
|
+
"from": {
|
|
12
|
+
"style": {
|
|
13
13
|
"height": 1334,
|
|
14
14
|
"position": "absolute",
|
|
15
|
-
"transform":
|
|
16
|
-
|
|
15
|
+
"transform": [
|
|
16
|
+
{
|
|
17
17
|
"translateX": 0,
|
|
18
18
|
},
|
|
19
19
|
],
|
|
20
20
|
"width": 750,
|
|
21
21
|
},
|
|
22
22
|
},
|
|
23
|
-
"to":
|
|
24
|
-
"overlayStyle":
|
|
23
|
+
"to": {
|
|
24
|
+
"overlayStyle": {
|
|
25
25
|
"backgroundColor": "black",
|
|
26
26
|
"height": 1334,
|
|
27
27
|
"opacity": 0.35,
|
|
28
28
|
"position": "absolute",
|
|
29
29
|
"width": 750,
|
|
30
30
|
},
|
|
31
|
-
"style":
|
|
31
|
+
"style": {
|
|
32
32
|
"height": 1334,
|
|
33
33
|
"position": "absolute",
|
|
34
|
-
"transform":
|
|
35
|
-
|
|
34
|
+
"transform": [
|
|
35
|
+
{
|
|
36
36
|
"translateX": -1,
|
|
37
37
|
},
|
|
38
38
|
],
|
|
@@ -43,34 +43,34 @@ Object {
|
|
|
43
43
|
`;
|
|
44
44
|
|
|
45
45
|
exports[`transitionConfig returns a push object is valid 1`] = `
|
|
46
|
-
|
|
46
|
+
{
|
|
47
47
|
"duration": 350,
|
|
48
48
|
"easing": [Function],
|
|
49
|
-
"from":
|
|
50
|
-
"overlayStyle":
|
|
49
|
+
"from": {
|
|
50
|
+
"overlayStyle": {
|
|
51
51
|
"backgroundColor": "black",
|
|
52
52
|
"height": 1334,
|
|
53
53
|
"opacity": 0,
|
|
54
54
|
"position": "absolute",
|
|
55
55
|
"width": 750,
|
|
56
56
|
},
|
|
57
|
-
"style":
|
|
57
|
+
"style": {
|
|
58
58
|
"height": 1334,
|
|
59
59
|
"position": "absolute",
|
|
60
|
-
"transform":
|
|
61
|
-
|
|
60
|
+
"transform": [
|
|
61
|
+
{
|
|
62
62
|
"translateX": 0,
|
|
63
63
|
},
|
|
64
64
|
],
|
|
65
65
|
"width": 750,
|
|
66
66
|
},
|
|
67
67
|
},
|
|
68
|
-
"to":
|
|
69
|
-
"style":
|
|
68
|
+
"to": {
|
|
69
|
+
"style": {
|
|
70
70
|
"height": 1334,
|
|
71
71
|
"position": "absolute",
|
|
72
|
-
"transform":
|
|
73
|
-
|
|
72
|
+
"transform": [
|
|
73
|
+
{
|
|
74
74
|
"translateX": 750,
|
|
75
75
|
},
|
|
76
76
|
],
|
|
@@ -3,16 +3,16 @@
|
|
|
3
3
|
exports[`<TransitionerComponent /> renders correctly 1`] = `
|
|
4
4
|
<View
|
|
5
5
|
style={
|
|
6
|
-
|
|
6
|
+
{
|
|
7
7
|
"flex": 1,
|
|
8
8
|
"overflow": "hidden",
|
|
9
9
|
}
|
|
10
10
|
}
|
|
11
11
|
>
|
|
12
|
-
<
|
|
12
|
+
<SceneComponent
|
|
13
13
|
isActive={true}
|
|
14
14
|
screenUniqueId="mocked-uuid"
|
|
15
|
-
style={
|
|
15
|
+
style={{}}
|
|
16
16
|
>
|
|
17
17
|
<View
|
|
18
18
|
foo="bar"
|
|
@@ -23,6 +23,6 @@ exports[`<TransitionerComponent /> renders correctly 1`] = `
|
|
|
23
23
|
children
|
|
24
24
|
</Text>
|
|
25
25
|
</View>
|
|
26
|
-
</
|
|
26
|
+
</SceneComponent>
|
|
27
27
|
</View>
|
|
28
28
|
`;
|
|
@@ -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;
|
|
@@ -8,6 +8,8 @@ import { loggerLiveImageManager } from "./loggerHelper";
|
|
|
8
8
|
import { isTV } from "@applicaster/zapp-react-native-utils/reactUtils";
|
|
9
9
|
import { Component } from "react";
|
|
10
10
|
|
|
11
|
+
const TIMEOUT_FOR_DELAY_CHECK_PLAYER_POSITION = 500; // ms
|
|
12
|
+
|
|
11
13
|
const { log_debug, log_info, log_error } = loggerLiveImageManager;
|
|
12
14
|
|
|
13
15
|
export type LiveImageManagerEvent =
|
|
@@ -62,6 +64,9 @@ export class LiveImageManager implements PlayerLifecycleListener {
|
|
|
62
64
|
protected currentlyPlaying: LiveImage | null = null;
|
|
63
65
|
protected primaryPlayer: Player | null = null;
|
|
64
66
|
|
|
67
|
+
private checkPlayerPositionTimeout: ReturnType<typeof setTimeout> | null =
|
|
68
|
+
null;
|
|
69
|
+
|
|
65
70
|
protected listeners: Record<
|
|
66
71
|
string,
|
|
67
72
|
Record<LiveImageManagerEvent, (event?: Record<string, any>) => void>
|
|
@@ -118,6 +123,11 @@ export class LiveImageManager implements PlayerLifecycleListener {
|
|
|
118
123
|
});
|
|
119
124
|
};
|
|
120
125
|
|
|
126
|
+
private cancelCheckPlayerPositionTimeout = () => {
|
|
127
|
+
clearTimeout(this.checkPlayerPositionTimeout);
|
|
128
|
+
this.checkPlayerPositionTimeout = null;
|
|
129
|
+
};
|
|
130
|
+
|
|
121
131
|
public onViewportEnter = (item: LiveImage) => {
|
|
122
132
|
log_debug(
|
|
123
133
|
`onViewportEnter: live-image ${playerInfo(
|
|
@@ -125,7 +135,21 @@ export class LiveImageManager implements PlayerLifecycleListener {
|
|
|
125
135
|
)}, primary ${playerInfo(this.primaryPlayer)}`
|
|
126
136
|
);
|
|
127
137
|
|
|
128
|
-
|
|
138
|
+
if (!isTV()) {
|
|
139
|
+
// mobile only
|
|
140
|
+
// we have to delay running checkPlayerPosition, because sometimes on fast scrolling we get wrong order onEnter, then onLeave.
|
|
141
|
+
// which could cause select wrong item to play
|
|
142
|
+
|
|
143
|
+
this.cancelCheckPlayerPositionTimeout();
|
|
144
|
+
|
|
145
|
+
this.checkPlayerPositionTimeout = setTimeout(() => {
|
|
146
|
+
this.cancelCheckPlayerPositionTimeout();
|
|
147
|
+
|
|
148
|
+
this.checkPlayerPosition(item);
|
|
149
|
+
}, TIMEOUT_FOR_DELAY_CHECK_PLAYER_POSITION);
|
|
150
|
+
} else {
|
|
151
|
+
this.checkPlayerPosition(item);
|
|
152
|
+
}
|
|
129
153
|
};
|
|
130
154
|
|
|
131
155
|
public onViewportLeave = (item: LiveImage) => {
|
|
@@ -246,6 +270,8 @@ export class LiveImageManager implements PlayerLifecycleListener {
|
|
|
246
270
|
};
|
|
247
271
|
|
|
248
272
|
public checkPlayerPosition = (item: LiveImage) => {
|
|
273
|
+
this.cancelCheckPlayerPositionTimeout();
|
|
274
|
+
|
|
249
275
|
log_debug(
|
|
250
276
|
`checkPlayerPosition: live-image playerId: ${playerInfo(
|
|
251
277
|
item.player
|
|
@@ -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) {
|
|
@@ -244,25 +250,27 @@ const PlayerLiveImageComponent = (props: Props) => {
|
|
|
244
250
|
}, [item.id]);
|
|
245
251
|
|
|
246
252
|
React.useEffect(() => {
|
|
247
|
-
if (playerManager) {
|
|
248
|
-
|
|
253
|
+
if (isMeasurement(item) || !playerManager) {
|
|
254
|
+
return;
|
|
255
|
+
}
|
|
249
256
|
|
|
250
|
-
|
|
251
|
-
log_error(
|
|
252
|
-
`PlayerLiveImageComponent: player ${playerId} already registered`
|
|
253
|
-
);
|
|
254
|
-
} else {
|
|
255
|
-
playerManager.registerPlayer({
|
|
256
|
-
id: playerId,
|
|
257
|
-
playerController: controller,
|
|
258
|
-
});
|
|
257
|
+
const isPlayerRegistered = playerManager.isPlayerRegistered(playerId);
|
|
259
258
|
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
}
|
|
263
|
-
|
|
259
|
+
if (isPlayerRegistered) {
|
|
260
|
+
log_error(
|
|
261
|
+
`PlayerLiveImageComponent: player ${playerId} already registered`
|
|
262
|
+
);
|
|
263
|
+
} else {
|
|
264
|
+
playerManager.registerPlayer({
|
|
265
|
+
id: playerId,
|
|
266
|
+
playerController: controller,
|
|
267
|
+
});
|
|
268
|
+
|
|
269
|
+
return () => {
|
|
270
|
+
playerManager.unregisterPlayer(playerId);
|
|
271
|
+
};
|
|
264
272
|
}
|
|
265
|
-
}, [liveImageItem, playerId, controller]);
|
|
273
|
+
}, [liveImageItem, playerId, controller, item.id]);
|
|
266
274
|
|
|
267
275
|
const onPositionUpdated = React.useCallback(
|
|
268
276
|
(data) => {
|
|
@@ -302,7 +310,7 @@ const PlayerLiveImageComponent = (props: Props) => {
|
|
|
302
310
|
LiveImageManager.instance.checkPlayerPosition(liveImageItem);
|
|
303
311
|
}
|
|
304
312
|
},
|
|
305
|
-
[liveImageItem, dimensions]
|
|
313
|
+
[liveImageItem, dimensions.height, dimensions.width]
|
|
306
314
|
);
|
|
307
315
|
|
|
308
316
|
const platformSpecificProps = isApplePlatform()
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
import * as React from "react";
|
|
3
3
|
import { render } from "@testing-library/react-native";
|
|
4
4
|
import * as PlayerFactory from "@applicaster/zapp-react-native-utils/appUtils/playerManager/playerFactory";
|
|
5
|
-
import { Player } from "@applicaster/zapp-react-native-utils/appUtils/playerManager/player";
|
|
6
5
|
import { ThemeContext } from "@applicaster/zapp-react-native-utils/theme";
|
|
7
6
|
import * as navigationHooks from "@applicaster/zapp-react-native-utils/reactHooks/navigation";
|
|
7
|
+
import { playerManager } from "@applicaster/zapp-react-native-utils/appUtils/playerManager";
|
|
8
8
|
|
|
9
9
|
import { PlayerLiveImage } from "../PlayerLiveImageComponent";
|
|
10
10
|
import * as useNavigationHooks from "@applicaster/zapp-react-native-utils/reactHooks/navigation/useNavigation";
|
|
@@ -12,13 +12,13 @@ import * as useNavigationHooks from "@applicaster/zapp-react-native-utils/reactH
|
|
|
12
12
|
import { Provider } from "react-redux";
|
|
13
13
|
import configureStore from "redux-mock-store";
|
|
14
14
|
|
|
15
|
-
const
|
|
15
|
+
const mock_seekTo = jest.fn();
|
|
16
16
|
|
|
17
17
|
jest.mock(
|
|
18
18
|
"@applicaster/zapp-react-native-utils/appUtils/playerManager/player",
|
|
19
19
|
() => ({
|
|
20
20
|
Player: {
|
|
21
|
-
seekTo,
|
|
21
|
+
seekTo: mock_seekTo,
|
|
22
22
|
},
|
|
23
23
|
})
|
|
24
24
|
);
|
|
@@ -33,7 +33,7 @@ const mockStore = configureStore();
|
|
|
33
33
|
|
|
34
34
|
const store = mockStore({ appData: {} });
|
|
35
35
|
|
|
36
|
-
const Wrapper = ({ children }: { children: React.
|
|
36
|
+
const Wrapper = ({ children }: { children: React.ReactNode }) => (
|
|
37
37
|
/* @ts-ignore */
|
|
38
38
|
<Provider store={store}>
|
|
39
39
|
<ThemeContext.Provider
|
|
@@ -60,10 +60,16 @@ describe("PlayerLiveImageComponent", () => {
|
|
|
60
60
|
};
|
|
61
61
|
|
|
62
62
|
beforeAll(() => {
|
|
63
|
-
jest.spyOn(PlayerFactory, "playerFactory").mockImplementation(() =>
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
63
|
+
jest.spyOn(PlayerFactory, "playerFactory").mockImplementation(() => {
|
|
64
|
+
const Player = jest.requireActual(
|
|
65
|
+
"@applicaster/zapp-react-native-utils/appUtils/playerManager/player"
|
|
66
|
+
).Player;
|
|
67
|
+
|
|
68
|
+
return {
|
|
69
|
+
controller: new Player({}),
|
|
70
|
+
Component: () => null,
|
|
71
|
+
};
|
|
72
|
+
});
|
|
67
73
|
|
|
68
74
|
jest.spyOn(navigationHooks, "useIsScreenActive").mockReturnValue(true);
|
|
69
75
|
});
|
|
@@ -113,4 +119,53 @@ describe("PlayerLiveImageComponent", () => {
|
|
|
113
119
|
|
|
114
120
|
// TODO: implement this test
|
|
115
121
|
});
|
|
122
|
+
|
|
123
|
+
it("should register the player for normal item", () => {
|
|
124
|
+
render(
|
|
125
|
+
<Wrapper>
|
|
126
|
+
<PlayerLiveImage {...defaultProps} />
|
|
127
|
+
</Wrapper>
|
|
128
|
+
);
|
|
129
|
+
|
|
130
|
+
const isPlayerRegistered = playerManager.isPlayerRegistered(
|
|
131
|
+
defaultProps.playerId
|
|
132
|
+
);
|
|
133
|
+
|
|
134
|
+
expect(isPlayerRegistered).toBe(true);
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
it("should unregister the player for normal item", () => {
|
|
138
|
+
const component = render(
|
|
139
|
+
<Wrapper>
|
|
140
|
+
<PlayerLiveImage {...defaultProps} />
|
|
141
|
+
</Wrapper>
|
|
142
|
+
);
|
|
143
|
+
|
|
144
|
+
component.unmount();
|
|
145
|
+
|
|
146
|
+
const isPlayerRegistered = playerManager.isPlayerRegistered(
|
|
147
|
+
defaultProps.playerId
|
|
148
|
+
);
|
|
149
|
+
|
|
150
|
+
expect(isPlayerRegistered).toBe(false);
|
|
151
|
+
});
|
|
152
|
+
|
|
153
|
+
it("should not register the player for 'pre-measurement' item", () => {
|
|
154
|
+
const props = {
|
|
155
|
+
...defaultProps,
|
|
156
|
+
item: {
|
|
157
|
+
...defaultProps.item,
|
|
158
|
+
id: "pre-measurement-1",
|
|
159
|
+
},
|
|
160
|
+
};
|
|
161
|
+
|
|
162
|
+
render(
|
|
163
|
+
<Wrapper>
|
|
164
|
+
<PlayerLiveImage {...props} />
|
|
165
|
+
</Wrapper>
|
|
166
|
+
);
|
|
167
|
+
|
|
168
|
+
const isPlayerRegistered = playerManager.isPlayerRegistered(props.playerId);
|
|
169
|
+
expect(isPlayerRegistered).toBe(false);
|
|
170
|
+
});
|
|
116
171
|
});
|
|
@@ -9,7 +9,7 @@ exports[`PlayerLiveImageComponent should render correctly with default props 1`]
|
|
|
9
9
|
<View
|
|
10
10
|
collapsable={false}
|
|
11
11
|
style={
|
|
12
|
-
|
|
12
|
+
{
|
|
13
13
|
"opacity": 1,
|
|
14
14
|
}
|
|
15
15
|
}
|
|
@@ -19,10 +19,10 @@ exports[`PlayerLiveImageComponent should render correctly with default props 1`]
|
|
|
19
19
|
audioMutedByDefault={false}
|
|
20
20
|
imageKey="image1"
|
|
21
21
|
item={
|
|
22
|
-
|
|
22
|
+
{
|
|
23
23
|
"id": "1",
|
|
24
24
|
"title": "Test",
|
|
25
|
-
"type":
|
|
25
|
+
"type": {
|
|
26
26
|
"value": "",
|
|
27
27
|
},
|
|
28
28
|
}
|
|
@@ -30,13 +30,8 @@ exports[`PlayerLiveImageComponent should render correctly with default props 1`]
|
|
|
30
30
|
onError={[Function]}
|
|
31
31
|
playerId="player1"
|
|
32
32
|
resizeMode="cover"
|
|
33
|
-
screenConfig={
|
|
34
|
-
|
|
35
|
-
Object {
|
|
36
|
-
"uri": "",
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
style={Object {}}
|
|
33
|
+
screenConfig={{}}
|
|
34
|
+
style={{}}
|
|
40
35
|
/>
|
|
41
36
|
</View>
|
|
42
37
|
</View>
|
|
@@ -62,7 +62,10 @@ export const AnimatedScrollModalComponent = ({ children }: Props) => {
|
|
|
62
62
|
} = useModalAnimationContext();
|
|
63
63
|
|
|
64
64
|
const [enableGesture, setIEnableGesture] = React.useState<boolean>(true);
|
|
65
|
-
|
|
65
|
+
|
|
66
|
+
const { isLanguageOverlayVisible, isSeekBarTouch } = React.useContext(
|
|
67
|
+
PlayerContainerContext
|
|
68
|
+
);
|
|
66
69
|
|
|
67
70
|
const { maximiseVideoModal, minimiseVideoModal, videoModalState } =
|
|
68
71
|
useNavigation();
|
|
@@ -80,6 +83,7 @@ export const AnimatedScrollModalComponent = ({ children }: Props) => {
|
|
|
80
83
|
enableGesture &&
|
|
81
84
|
!isLanguageOverlayVisible &&
|
|
82
85
|
isNotMinimizeMaximazeAnimation &&
|
|
86
|
+
!isSeekBarTouch &&
|
|
83
87
|
(isMaximazedModal || isMinimizedModal);
|
|
84
88
|
|
|
85
89
|
const isAudioItem = React.useMemo(
|
|
@@ -41,7 +41,10 @@ export const AnimatedVideoPlayer = ({ children }: Props) => {
|
|
|
41
41
|
videoModalState: { mode: videoModalMode },
|
|
42
42
|
} = useNavigation();
|
|
43
43
|
|
|
44
|
-
const { isLanguageOverlayVisible } = React.useContext(
|
|
44
|
+
const { isLanguageOverlayVisible, isSeekBarTouch } = React.useContext(
|
|
45
|
+
PlayerContainerContext
|
|
46
|
+
);
|
|
47
|
+
|
|
45
48
|
const isMaximazedModal = videoModalMode === "MAXIMIZED";
|
|
46
49
|
const isMinimizedModal = videoModalMode === "MINIMIZED";
|
|
47
50
|
|
|
@@ -52,6 +55,7 @@ export const AnimatedVideoPlayer = ({ children }: Props) => {
|
|
|
52
55
|
const isEnablePanGesture =
|
|
53
56
|
!isLanguageOverlayVisible &&
|
|
54
57
|
isNotMinimizeMaximazeAnimation &&
|
|
58
|
+
!isSeekBarTouch &&
|
|
55
59
|
(isMaximazedModal || isMinimizedModal);
|
|
56
60
|
|
|
57
61
|
const onGestureEvent = Animated.event(
|
|
@@ -77,7 +77,7 @@ export const AnimationView = ({
|
|
|
77
77
|
const measureView = React.useCallback(() => {
|
|
78
78
|
if (isTabletLandscape && tabletLandscapePlayerTopPosition === 0) {
|
|
79
79
|
animationComponentRef.current.measure(
|
|
80
|
-
(
|
|
80
|
+
(_x, _y, _width, _height, _pageX, pageY) => {
|
|
81
81
|
setTabletLandscapePlayerTopPosition(pageY - 20);
|
|
82
82
|
}
|
|
83
83
|
);
|
|
@@ -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
|
|
@@ -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 &&
|
|
@@ -1,14 +1,12 @@
|
|
|
1
|
-
import React
|
|
1
|
+
import React from "react";
|
|
2
2
|
import { Animated } from "react-native";
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
5
|
useSafeAreaInsets,
|
|
6
6
|
useSafeAreaFrame,
|
|
7
7
|
} from "react-native-safe-area-context";
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
useNavigation,
|
|
11
|
-
} from "@applicaster/zapp-react-native-utils/reactHooks";
|
|
8
|
+
import { useGetBottomTabBarHeight } from "@applicaster/zapp-react-native-utils/reactHooks/navigation/useGetBottomTabBarHeight";
|
|
9
|
+
import { useNavigation } from "@applicaster/zapp-react-native-utils/reactHooks/navigation/useNavigation";
|
|
12
10
|
import { isLive } from "@applicaster/zapp-react-native-utils/playerUtils";
|
|
13
11
|
|
|
14
12
|
import { PROGRESS_BAR_HEIGHT } from "./utils";
|
|
@@ -48,7 +46,7 @@ export type ModalAnimationContextT = {
|
|
|
48
46
|
progressBarHeight: number;
|
|
49
47
|
};
|
|
50
48
|
|
|
51
|
-
const ReactContext = React.createContext<ModalAnimationContextT>({
|
|
49
|
+
export const ReactContext = React.createContext<ModalAnimationContextT>({
|
|
52
50
|
isActiveGesture: false,
|
|
53
51
|
playerAnimationState: null,
|
|
54
52
|
setPlayerAnimationState: () => null,
|
|
@@ -73,10 +71,6 @@ const ReactContext = React.createContext<ModalAnimationContextT>({
|
|
|
73
71
|
progressBarHeight: 0,
|
|
74
72
|
});
|
|
75
73
|
|
|
76
|
-
export function useModalAnimationContext() {
|
|
77
|
-
return useContext<ModalAnimationContextT>(ReactContext);
|
|
78
|
-
}
|
|
79
|
-
|
|
80
74
|
const Provider = ({ children }: { children: React.ReactNode }) => {
|
|
81
75
|
const [playerAnimationState, setPlayerAnimationState] =
|
|
82
76
|
React.useState<PlayerAnimationStateT>(null);
|