@applicaster/zapp-react-native-ui-components 15.0.0-alpha.5740530237 → 15.0.0-alpha.6141436051
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 +69 -26
- package/Components/Cell/FocusableWrapper.tsx +44 -0
- package/Components/Cell/TvOSCellComponent.tsx +80 -14
- package/Components/HandlePlayable/HandlePlayable.tsx +14 -65
- package/Components/HandlePlayable/const.ts +3 -0
- package/Components/HandlePlayable/utils.ts +74 -0
- package/Components/PlayerContainer/PlayerContainer.tsx +1 -16
- package/Components/PlayerImageBackground/index.tsx +1 -11
- package/Components/Screen/TV/hooks/useInitialFocus.ts +14 -4
- package/Components/Screen/__tests__/__snapshots__/Screen.test.tsx.snap +2 -0
- package/Components/Screen/index.tsx +22 -5
- package/Components/ScreenRevealManager/utils/index.ts +23 -0
- package/Components/ScreenRevealManager/withScreenRevealManager.tsx +54 -24
- package/Components/VideoLive/__tests__/__snapshots__/PlayerLiveImageComponent.test.tsx.snap +1 -0
- package/Components/VideoModal/ModalAnimation/AnimationComponent.tsx +4 -487
- package/Components/VideoModal/ModalAnimation/index.ts +0 -6
- package/Components/VideoModal/ModalAnimation/utils.ts +0 -315
- package/Components/VideoModal/PlayerWrapper.tsx +23 -59
- package/Components/VideoModal/hooks/useModalSize.ts +5 -4
- package/Components/VideoModal/playerWrapperUtils.ts +87 -0
- package/package.json +5 -5
- package/Components/VideoModal/ModalAnimation/AnimatedPlayerModalWrapper.tsx +0 -60
- package/Components/VideoModal/ModalAnimation/AnimatedScrollModal.tsx +0 -417
- package/Components/VideoModal/ModalAnimation/AnimatedScrollModal.web.tsx +0 -294
- package/Components/VideoModal/ModalAnimation/AnimatedVideoPlayerComponent.tsx +0 -176
- package/Components/VideoModal/ModalAnimation/AnimatedVideoPlayerComponent.web.tsx +0 -93
- package/Components/VideoModal/ModalAnimation/__tests__/getMoveUpValue.test.ts +0 -108
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
/* eslint-disable padding-line-between-statements */
|
|
2
2
|
|
|
3
|
-
import { PlayerAnimationStateEnum } from "@applicaster/zapp-react-native-ui-components/Components/VideoModal/ModalAnimation";
|
|
4
|
-
import { toNumberWithDefaultZero } from "@applicaster/zapp-react-native-utils/numberUtils";
|
|
5
|
-
|
|
6
3
|
export enum ComponentAnimationType {
|
|
7
4
|
bottomBar = "bottomBar",
|
|
8
5
|
player = "player",
|
|
@@ -18,315 +15,3 @@ export const PROGRESS_BAR_HEIGHT = 3;
|
|
|
18
15
|
|
|
19
16
|
export const defaultAspectRatioWidth = (height: number): number =>
|
|
20
17
|
(height / 9) * 16;
|
|
21
|
-
|
|
22
|
-
export const getAnimationStyle = (component, animatedValue) => {
|
|
23
|
-
switch (component) {
|
|
24
|
-
case ComponentAnimationType.bottomBar: {
|
|
25
|
-
return { zIndex: 99, transform: [{ translateY: animatedValue }] };
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
case ComponentAnimationType.player: {
|
|
29
|
-
return { width: animatedValue.x, height: animatedValue.y };
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
case ComponentAnimationType.componentFade:
|
|
33
|
-
case ComponentAnimationType.componentAppears: {
|
|
34
|
-
return { opacity: animatedValue };
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
case ComponentAnimationType.moveUpComponent: {
|
|
38
|
-
return { transform: [{ translateY: animatedValue }] };
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
case ComponentAnimationType.audioPlayerPaddingHorizontal:
|
|
42
|
-
case ComponentAnimationType.moveComponentHorizontal: {
|
|
43
|
-
return { transform: [{ translateX: animatedValue }] };
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
default:
|
|
47
|
-
return null;
|
|
48
|
-
}
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
export const getAnimationDefaultValue = (component, bottomTabBarHeight) => {
|
|
52
|
-
switch (component) {
|
|
53
|
-
case ComponentAnimationType.bottomBar: {
|
|
54
|
-
return bottomTabBarHeight;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
case ComponentAnimationType.player: {
|
|
58
|
-
return { x: 0, y: 0 };
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
case ComponentAnimationType.componentFade: {
|
|
62
|
-
return 1;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
case ComponentAnimationType.audioPlayerPaddingHorizontal:
|
|
66
|
-
case ComponentAnimationType.moveComponentHorizontal:
|
|
67
|
-
case ComponentAnimationType.componentAppears:
|
|
68
|
-
case ComponentAnimationType.moveUpComponent: {
|
|
69
|
-
return 0;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
};
|
|
73
|
-
|
|
74
|
-
export const calculateAnimationValue = (animationType, dragPosition, data) => {
|
|
75
|
-
const {
|
|
76
|
-
isAudioItem,
|
|
77
|
-
bottomTabBarHeight,
|
|
78
|
-
minimisedHeight,
|
|
79
|
-
minimisedWidth,
|
|
80
|
-
defaultValue,
|
|
81
|
-
moveUpValue,
|
|
82
|
-
moveComponentHorizontalValue,
|
|
83
|
-
isTablet,
|
|
84
|
-
isTabletLandscape,
|
|
85
|
-
isRTL,
|
|
86
|
-
fromMiniPlayer,
|
|
87
|
-
inlineAudioPlayer,
|
|
88
|
-
} = data;
|
|
89
|
-
|
|
90
|
-
switch (animationType) {
|
|
91
|
-
case ComponentAnimationType.bottomBar: {
|
|
92
|
-
if (fromMiniPlayer) {
|
|
93
|
-
return dragPosition < bottomTabBarHeight
|
|
94
|
-
? dragPosition
|
|
95
|
-
: bottomTabBarHeight;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
return dragPosition < bottomTabBarHeight
|
|
99
|
-
? bottomTabBarHeight - dragPosition
|
|
100
|
-
: 0;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
case ComponentAnimationType.player: {
|
|
104
|
-
const value =
|
|
105
|
-
isAudioItem && !inlineAudioPlayer
|
|
106
|
-
? isTabletLandscape
|
|
107
|
-
? fromMiniPlayer
|
|
108
|
-
? { forWidth: 4, forHeight: 4.5 }
|
|
109
|
-
: { forWidth: 3, forHeight: 3 }
|
|
110
|
-
: { forWidth: 2, forHeight: 2 }
|
|
111
|
-
: isTabletLandscape
|
|
112
|
-
? { forWidth: 8, forHeight: 6.5 }
|
|
113
|
-
: { forWidth: 3.5, forHeight: 2 };
|
|
114
|
-
|
|
115
|
-
const minWidth =
|
|
116
|
-
isAudioItem && !inlineAudioPlayer ? minimisedHeight : minimisedWidth;
|
|
117
|
-
|
|
118
|
-
if (fromMiniPlayer) {
|
|
119
|
-
const calculationWidth =
|
|
120
|
-
dragPosition * value.forWidth < minWidth
|
|
121
|
-
? minWidth
|
|
122
|
-
: dragPosition * value.forWidth;
|
|
123
|
-
const calculationHeight =
|
|
124
|
-
dragPosition * value.forHeight < minimisedHeight
|
|
125
|
-
? minimisedHeight
|
|
126
|
-
: dragPosition * value.forHeight;
|
|
127
|
-
|
|
128
|
-
return {
|
|
129
|
-
x:
|
|
130
|
-
calculationWidth < defaultValue.x
|
|
131
|
-
? calculationWidth
|
|
132
|
-
: defaultValue.x,
|
|
133
|
-
y:
|
|
134
|
-
calculationHeight < defaultValue.y
|
|
135
|
-
? calculationHeight
|
|
136
|
-
: defaultValue.y,
|
|
137
|
-
};
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
const calculationWidth = defaultValue.x - dragPosition * value.forWidth;
|
|
141
|
-
|
|
142
|
-
const calculationHeight = defaultValue.y - dragPosition * value.forHeight;
|
|
143
|
-
|
|
144
|
-
return {
|
|
145
|
-
x: calculationWidth > minWidth ? calculationWidth : minWidth,
|
|
146
|
-
y:
|
|
147
|
-
calculationHeight > minimisedHeight
|
|
148
|
-
? calculationHeight
|
|
149
|
-
: minimisedHeight,
|
|
150
|
-
};
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
case ComponentAnimationType.componentFade: {
|
|
154
|
-
if (fromMiniPlayer) {
|
|
155
|
-
const calculation = dragPosition / (isTablet ? 200 : 150);
|
|
156
|
-
|
|
157
|
-
return calculation < 1 ? calculation : 1;
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
const calculation = 1 - dragPosition / (isTablet ? 200 : 150);
|
|
161
|
-
|
|
162
|
-
return calculation > 0 ? calculation : 0;
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
case ComponentAnimationType.componentAppears: {
|
|
166
|
-
if (fromMiniPlayer) {
|
|
167
|
-
const calculation = 1 - dragPosition / (isTablet ? 200 : 150);
|
|
168
|
-
|
|
169
|
-
return calculation > 0 ? calculation : 0;
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
const calculation = dragPosition / (isTablet ? 200 : 150);
|
|
173
|
-
|
|
174
|
-
return calculation < 1 ? calculation : 1;
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
case ComponentAnimationType.moveUpComponent: {
|
|
178
|
-
if (fromMiniPlayer) {
|
|
179
|
-
const calculation =
|
|
180
|
-
moveUpValue + dragPosition / (isTabletLandscape ? 1 : 4);
|
|
181
|
-
|
|
182
|
-
return calculation < 0 ? calculation : 0;
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
const calculation = 0 - dragPosition / (isTabletLandscape ? 1 : 2);
|
|
186
|
-
|
|
187
|
-
return calculation > moveUpValue ? calculation : moveUpValue;
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
case ComponentAnimationType.moveComponentHorizontal: {
|
|
191
|
-
if (fromMiniPlayer) {
|
|
192
|
-
const calculation = isRTL
|
|
193
|
-
? moveComponentHorizontalValue - dragPosition * 2
|
|
194
|
-
: moveComponentHorizontalValue + dragPosition * 2;
|
|
195
|
-
const condition = isRTL ? calculation > 0 : calculation < 0;
|
|
196
|
-
|
|
197
|
-
return condition ? calculation : 0;
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
const calculation = isRTL ? dragPosition * 2 : -(dragPosition * 2);
|
|
201
|
-
const condition = isRTL
|
|
202
|
-
? calculation < moveComponentHorizontalValue
|
|
203
|
-
: calculation > moveComponentHorizontalValue;
|
|
204
|
-
|
|
205
|
-
return condition ? calculation : moveComponentHorizontalValue;
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
case ComponentAnimationType.audioPlayerPaddingHorizontal: {
|
|
209
|
-
const padding = isRTL
|
|
210
|
-
? AUDIO_PLAYER_HORIZONTAL_PADDING
|
|
211
|
-
: -AUDIO_PLAYER_HORIZONTAL_PADDING;
|
|
212
|
-
|
|
213
|
-
if (fromMiniPlayer) {
|
|
214
|
-
const calculation = isRTL
|
|
215
|
-
? padding - dragPosition / 5
|
|
216
|
-
: padding + dragPosition / 5;
|
|
217
|
-
const condition = isRTL ? calculation > 0 : calculation < 0;
|
|
218
|
-
|
|
219
|
-
return condition ? calculation : 0;
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
const calculation = isRTL ? dragPosition / 5 : -(dragPosition / 5);
|
|
223
|
-
const condition = isRTL ? calculation < padding : calculation > padding;
|
|
224
|
-
|
|
225
|
-
return condition ? calculation : padding;
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
};
|
|
229
|
-
|
|
230
|
-
export const gestureListenerHelper = (data) => {
|
|
231
|
-
const {
|
|
232
|
-
listenerValue,
|
|
233
|
-
preparedValue,
|
|
234
|
-
animationType,
|
|
235
|
-
animatedValue,
|
|
236
|
-
calculationData,
|
|
237
|
-
modalSnapPoint,
|
|
238
|
-
startComponentsAnimationDistance,
|
|
239
|
-
startComponentsAnimation,
|
|
240
|
-
setStartComponentsAnimation,
|
|
241
|
-
getAnimationValue,
|
|
242
|
-
} = data;
|
|
243
|
-
|
|
244
|
-
if (calculationData.fromMiniPlayer) {
|
|
245
|
-
if (listenerValue <= 0) {
|
|
246
|
-
if (
|
|
247
|
-
preparedValue >= 0 &&
|
|
248
|
-
preparedValue <= modalSnapPoint - startComponentsAnimationDistance
|
|
249
|
-
) {
|
|
250
|
-
!startComponentsAnimation && setStartComponentsAnimation(true);
|
|
251
|
-
|
|
252
|
-
animatedValue.setValue(
|
|
253
|
-
calculateAnimationValue(animationType, preparedValue, calculationData)
|
|
254
|
-
);
|
|
255
|
-
} else {
|
|
256
|
-
animatedValue.setValue(calculationData.defaultValue);
|
|
257
|
-
startComponentsAnimation && setStartComponentsAnimation(false);
|
|
258
|
-
}
|
|
259
|
-
} else {
|
|
260
|
-
const value = getAnimationValue(
|
|
261
|
-
animationType,
|
|
262
|
-
PlayerAnimationStateEnum.minimize
|
|
263
|
-
).toValue;
|
|
264
|
-
|
|
265
|
-
animatedValue.setValue(value);
|
|
266
|
-
}
|
|
267
|
-
} else {
|
|
268
|
-
if (preparedValue >= startComponentsAnimationDistance) {
|
|
269
|
-
!startComponentsAnimation && setStartComponentsAnimation(true);
|
|
270
|
-
const value = Math.round(
|
|
271
|
-
preparedValue - startComponentsAnimationDistance
|
|
272
|
-
);
|
|
273
|
-
|
|
274
|
-
animatedValue.setValue(
|
|
275
|
-
calculateAnimationValue(animationType, value, calculationData)
|
|
276
|
-
);
|
|
277
|
-
} else {
|
|
278
|
-
animatedValue.setValue(calculationData.defaultValue);
|
|
279
|
-
startComponentsAnimation && setStartComponentsAnimation(false);
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
};
|
|
283
|
-
|
|
284
|
-
export const setScrollModalAnimatedValue = (
|
|
285
|
-
animatedValue,
|
|
286
|
-
value,
|
|
287
|
-
setLastSnap
|
|
288
|
-
) => {
|
|
289
|
-
setLastSnap(value);
|
|
290
|
-
animatedValue.setValue(value);
|
|
291
|
-
};
|
|
292
|
-
|
|
293
|
-
export const resetScrollAnimatedValues = (
|
|
294
|
-
lastScrollY,
|
|
295
|
-
lastScrollYValue,
|
|
296
|
-
dragScrollY,
|
|
297
|
-
dragVideoPlayerY
|
|
298
|
-
) => {
|
|
299
|
-
lastScrollY.setValue(0);
|
|
300
|
-
lastScrollYValue.current = 0;
|
|
301
|
-
dragScrollY.setValue(0);
|
|
302
|
-
dragVideoPlayerY.setValue(0);
|
|
303
|
-
};
|
|
304
|
-
|
|
305
|
-
export const getMoveUpValue = ({
|
|
306
|
-
additionalData,
|
|
307
|
-
insets,
|
|
308
|
-
isAudioItem,
|
|
309
|
-
progressBarHeight,
|
|
310
|
-
isTablet,
|
|
311
|
-
isTabletLandscape,
|
|
312
|
-
tabletLandscapePlayerTopPosition,
|
|
313
|
-
}) => {
|
|
314
|
-
if (additionalData.saveArea) {
|
|
315
|
-
return -insets.top + (isAudioItem ? 0 : progressBarHeight);
|
|
316
|
-
}
|
|
317
|
-
|
|
318
|
-
if (isAudioItem) {
|
|
319
|
-
// for any layouts in audioPlayer
|
|
320
|
-
return -1 * toNumberWithDefaultZero(additionalData?.marginTop);
|
|
321
|
-
}
|
|
322
|
-
|
|
323
|
-
if (isTablet) {
|
|
324
|
-
if (isTabletLandscape) {
|
|
325
|
-
return -tabletLandscapePlayerTopPosition + progressBarHeight;
|
|
326
|
-
} else {
|
|
327
|
-
return -130;
|
|
328
|
-
}
|
|
329
|
-
}
|
|
330
|
-
|
|
331
|
-
return -50 + progressBarHeight;
|
|
332
|
-
};
|
|
@@ -1,30 +1,19 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
-
import {
|
|
3
|
-
Dimensions,
|
|
4
|
-
Platform,
|
|
5
|
-
StyleSheet,
|
|
6
|
-
View,
|
|
7
|
-
ViewStyle,
|
|
8
|
-
} from "react-native";
|
|
2
|
+
import { StyleSheet, View, ViewStyle } from "react-native";
|
|
9
3
|
import { Edge, SafeAreaView } from "react-native-safe-area-context";
|
|
10
4
|
import { isTV } from "@applicaster/zapp-react-native-utils/reactUtils";
|
|
11
5
|
import { useIsTablet } from "@applicaster/zapp-react-native-utils/reactHooks";
|
|
12
6
|
import { playerDimensionsHack } from "./utils";
|
|
13
7
|
import { getTabletWidth } from "@applicaster/zapp-react-native-utils/playerUtils";
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
type Configuration = {
|
|
24
|
-
[key: string]: any;
|
|
25
|
-
tablet_landscape_sidebar_width?: string;
|
|
26
|
-
tablet_landscape_player_container_background_color?: string;
|
|
27
|
-
};
|
|
8
|
+
import {
|
|
9
|
+
DimensionsT,
|
|
10
|
+
Configuration,
|
|
11
|
+
getEdges,
|
|
12
|
+
getBaseDimensions,
|
|
13
|
+
calculateAspectRatio,
|
|
14
|
+
getPlayerDimensions,
|
|
15
|
+
getContainerDimensions,
|
|
16
|
+
} from "./playerWrapperUtils";
|
|
28
17
|
|
|
29
18
|
type Props = {
|
|
30
19
|
entry: ZappEntry;
|
|
@@ -45,32 +34,12 @@ const defaultStyles = StyleSheet.create({
|
|
|
45
34
|
playerContainer: { position: "relative", alignSelf: "center", zIndex: 200 },
|
|
46
35
|
});
|
|
47
36
|
|
|
48
|
-
const getScreenAspectRatio = () => {
|
|
49
|
-
const longEdge = Math.max(SCREEN_WIDTH, SCREEN_HEIGHT);
|
|
50
|
-
const shortEdge = Math.min(SCREEN_WIDTH, SCREEN_HEIGHT);
|
|
51
|
-
|
|
52
|
-
return longEdge / shortEdge;
|
|
53
|
-
};
|
|
54
|
-
|
|
55
|
-
const getEdges = (isTablet: boolean, isInlineModal: boolean) => {
|
|
56
|
-
if (isTablet) {
|
|
57
|
-
return ["top"];
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
if (!isInlineModal && Platform.OS === "android") {
|
|
61
|
-
return [];
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
return ["top"];
|
|
65
|
-
};
|
|
66
|
-
|
|
67
37
|
const PlayerWrapperComponent = (props: Props) => {
|
|
68
38
|
const {
|
|
69
39
|
entry,
|
|
70
40
|
style,
|
|
71
41
|
containerStyle,
|
|
72
42
|
inline,
|
|
73
|
-
docked,
|
|
74
43
|
isModal,
|
|
75
44
|
isTabletPortrait,
|
|
76
45
|
configuration,
|
|
@@ -90,28 +59,23 @@ const PlayerWrapperComponent = (props: Props) => {
|
|
|
90
59
|
);
|
|
91
60
|
|
|
92
61
|
const baseDimensions: DimensionsT = React.useMemo(
|
|
93
|
-
() => (
|
|
94
|
-
|
|
95
|
-
height: undefined,
|
|
96
|
-
}),
|
|
97
|
-
[isInlineModal, tabletWidth, docked]
|
|
62
|
+
() => getBaseDimensions(isInlineModal, isTabletLandscape, tabletWidth),
|
|
63
|
+
[isInlineModal, isTabletLandscape, tabletWidth]
|
|
98
64
|
);
|
|
99
65
|
|
|
100
|
-
const
|
|
101
|
-
() => (
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
66
|
+
const aspectRatio = React.useMemo(
|
|
67
|
+
() => calculateAspectRatio(isInlineModal, pip),
|
|
68
|
+
[isInlineModal, pip]
|
|
69
|
+
);
|
|
70
|
+
|
|
71
|
+
const playerDimensions = React.useMemo(
|
|
72
|
+
() => getPlayerDimensions(baseDimensions, aspectRatio),
|
|
73
|
+
[baseDimensions, aspectRatio]
|
|
107
74
|
);
|
|
108
75
|
|
|
109
76
|
const containerDimensions: DimensionsT = React.useMemo(
|
|
110
|
-
() => (
|
|
111
|
-
|
|
112
|
-
aspectRatio: playerDimensions.aspectRatio,
|
|
113
|
-
}),
|
|
114
|
-
[baseDimensions, isInlineModal, docked, playerDimensions.aspectRatio]
|
|
77
|
+
() => getContainerDimensions(baseDimensions, playerDimensions.aspectRatio),
|
|
78
|
+
[baseDimensions, playerDimensions.aspectRatio]
|
|
115
79
|
);
|
|
116
80
|
|
|
117
81
|
const WrapperView = React.useMemo(() => (isTV() ? View : SafeAreaView), []);
|
|
@@ -121,7 +85,7 @@ const PlayerWrapperComponent = (props: Props) => {
|
|
|
121
85
|
...playerDimensions,
|
|
122
86
|
...playerDimensionsHack,
|
|
123
87
|
}),
|
|
124
|
-
[
|
|
88
|
+
[playerDimensions]
|
|
125
89
|
);
|
|
126
90
|
|
|
127
91
|
return (
|
|
@@ -42,7 +42,7 @@ export const useModalSize = (): Size => {
|
|
|
42
42
|
const [modalSize, setModalSize] = React.useState<Size>({
|
|
43
43
|
width: frame.width,
|
|
44
44
|
height: isOldAndroidDevice
|
|
45
|
-
? frame.height + StatusBar.currentHeight
|
|
45
|
+
? frame.height + (StatusBar.currentHeight ?? 0)
|
|
46
46
|
: frame.height,
|
|
47
47
|
});
|
|
48
48
|
|
|
@@ -57,9 +57,10 @@ export const useModalSize = (): Size => {
|
|
|
57
57
|
|
|
58
58
|
return {
|
|
59
59
|
width: newSize.width,
|
|
60
|
-
height:
|
|
61
|
-
|
|
62
|
-
|
|
60
|
+
height:
|
|
61
|
+
isOldAndroidDevice && newSize.height !== "100%"
|
|
62
|
+
? newSize.height + (StatusBar.currentHeight ?? 0)
|
|
63
|
+
: newSize.height,
|
|
63
64
|
};
|
|
64
65
|
});
|
|
65
66
|
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { Dimensions, Platform } from "react-native";
|
|
2
|
+
import { Edge } from "react-native-safe-area-context";
|
|
3
|
+
|
|
4
|
+
export type DimensionsT = {
|
|
5
|
+
width: number | string;
|
|
6
|
+
height: number | string | undefined;
|
|
7
|
+
aspectRatio?: number;
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export type Configuration = {
|
|
11
|
+
[key: string]: any;
|
|
12
|
+
tablet_landscape_sidebar_width?: string;
|
|
13
|
+
tablet_landscape_player_container_background_color?: string;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
export const getWindowDimensions = () => {
|
|
17
|
+
const { width, height } = Dimensions.get("window");
|
|
18
|
+
|
|
19
|
+
return { width, height };
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export const getMaxWindowDimension = () => {
|
|
23
|
+
const { width, height } = getWindowDimensions();
|
|
24
|
+
|
|
25
|
+
return Math.max(width, height);
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
export const getMinWindowDimension = () => {
|
|
29
|
+
const { width, height } = getWindowDimensions();
|
|
30
|
+
|
|
31
|
+
return Math.min(width, height);
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
export const getScreenAspectRatio = () => {
|
|
35
|
+
const longEdge = getMaxWindowDimension();
|
|
36
|
+
const shortEdge = getMinWindowDimension();
|
|
37
|
+
|
|
38
|
+
return longEdge / shortEdge;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
export const getEdges = (
|
|
42
|
+
isTablet: boolean,
|
|
43
|
+
isInlineModal: boolean
|
|
44
|
+
): readonly Edge[] => {
|
|
45
|
+
if (isTablet) {
|
|
46
|
+
return ["top"];
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
if (!isInlineModal && Platform.OS === "android") {
|
|
50
|
+
return [];
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
return ["top"];
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
export const getBaseDimensions = (
|
|
57
|
+
isInlineModal: boolean,
|
|
58
|
+
isTabletLandscape: boolean,
|
|
59
|
+
tabletWidth: number | string
|
|
60
|
+
): DimensionsT => ({
|
|
61
|
+
width: isInlineModal && isTabletLandscape ? tabletWidth : "100%",
|
|
62
|
+
height: undefined,
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
export const calculateAspectRatio = (
|
|
66
|
+
isInlineModal: boolean,
|
|
67
|
+
pip?: boolean
|
|
68
|
+
): number => {
|
|
69
|
+
return !isInlineModal && !pip ? getScreenAspectRatio() : 16 / 9;
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
export const getPlayerDimensions = (
|
|
73
|
+
baseDimensions: DimensionsT,
|
|
74
|
+
aspectRatio: number
|
|
75
|
+
): DimensionsT => ({
|
|
76
|
+
...baseDimensions,
|
|
77
|
+
width: baseDimensions.width,
|
|
78
|
+
aspectRatio,
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
export const getContainerDimensions = (
|
|
82
|
+
baseDimensions: DimensionsT,
|
|
83
|
+
playerAspectRatio?: number
|
|
84
|
+
): DimensionsT => ({
|
|
85
|
+
...baseDimensions,
|
|
86
|
+
aspectRatio: playerAspectRatio,
|
|
87
|
+
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@applicaster/zapp-react-native-ui-components",
|
|
3
|
-
"version": "15.0.0-alpha.
|
|
3
|
+
"version": "15.0.0-alpha.6141436051",
|
|
4
4
|
"description": "Applicaster Zapp React Native ui components for the Quick Brick App",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"types": "index.d.ts",
|
|
@@ -28,10 +28,10 @@
|
|
|
28
28
|
},
|
|
29
29
|
"homepage": "https://github.com/applicaster/quickbrick#readme",
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@applicaster/applicaster-types": "15.0.0-alpha.
|
|
32
|
-
"@applicaster/zapp-react-native-bridge": "15.0.0-alpha.
|
|
33
|
-
"@applicaster/zapp-react-native-redux": "15.0.0-alpha.
|
|
34
|
-
"@applicaster/zapp-react-native-utils": "15.0.0-alpha.
|
|
31
|
+
"@applicaster/applicaster-types": "15.0.0-alpha.6141436051",
|
|
32
|
+
"@applicaster/zapp-react-native-bridge": "15.0.0-alpha.6141436051",
|
|
33
|
+
"@applicaster/zapp-react-native-redux": "15.0.0-alpha.6141436051",
|
|
34
|
+
"@applicaster/zapp-react-native-utils": "15.0.0-alpha.6141436051",
|
|
35
35
|
"promise": "^8.3.0",
|
|
36
36
|
"url": "^0.11.0",
|
|
37
37
|
"uuid": "^3.3.2"
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import { Animated, ViewStyle } from "react-native";
|
|
3
|
-
|
|
4
|
-
import {
|
|
5
|
-
useModalAnimationContext,
|
|
6
|
-
PlayerAnimationStateEnum,
|
|
7
|
-
} from "@applicaster/zapp-react-native-ui-components/Components/VideoModal/ModalAnimation";
|
|
8
|
-
|
|
9
|
-
type Props = {
|
|
10
|
-
style: ViewStyle[];
|
|
11
|
-
children: React.ReactNode;
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
export const AnimatedPlayerModalWrapper = (props: Props) => {
|
|
15
|
-
const {
|
|
16
|
-
playerAnimationState,
|
|
17
|
-
animatedValues: { lastScrollY, dragScrollY, translateYOffset },
|
|
18
|
-
modalSnapPoints,
|
|
19
|
-
setStartComponentsAnimation,
|
|
20
|
-
} = useModalAnimationContext();
|
|
21
|
-
|
|
22
|
-
const interpolateConfig: Animated.InterpolationConfigType = React.useMemo(
|
|
23
|
-
() => ({
|
|
24
|
-
inputRange: modalSnapPoints,
|
|
25
|
-
outputRange: modalSnapPoints,
|
|
26
|
-
extrapolate: "clamp",
|
|
27
|
-
}),
|
|
28
|
-
[modalSnapPoints]
|
|
29
|
-
);
|
|
30
|
-
|
|
31
|
-
let translateY;
|
|
32
|
-
|
|
33
|
-
if (playerAnimationState === PlayerAnimationStateEnum.drag_player) {
|
|
34
|
-
translateY = translateYOffset.interpolate(interpolateConfig);
|
|
35
|
-
} else {
|
|
36
|
-
const reverseLastScrollY = Animated.multiply(
|
|
37
|
-
new Animated.Value(-1),
|
|
38
|
-
lastScrollY
|
|
39
|
-
);
|
|
40
|
-
|
|
41
|
-
translateY = Animated.add(
|
|
42
|
-
translateYOffset,
|
|
43
|
-
Animated.add(dragScrollY, reverseLastScrollY)
|
|
44
|
-
).interpolate(interpolateConfig);
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
React.useEffect(() => {
|
|
48
|
-
(playerAnimationState === PlayerAnimationStateEnum.minimize ||
|
|
49
|
-
playerAnimationState === PlayerAnimationStateEnum.maximize) &&
|
|
50
|
-
setStartComponentsAnimation(true);
|
|
51
|
-
}, [playerAnimationState]);
|
|
52
|
-
|
|
53
|
-
return (
|
|
54
|
-
<Animated.View
|
|
55
|
-
style={[props.style, { transform: [{ translateY: translateY }] }]}
|
|
56
|
-
>
|
|
57
|
-
{props.children}
|
|
58
|
-
</Animated.View>
|
|
59
|
-
);
|
|
60
|
-
};
|