@applicaster/quick-brick-player 14.0.0-alpha.3552323332 → 14.0.0-alpha.3652810444

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@applicaster/quick-brick-player",
3
- "version": "14.0.0-alpha.3552323332",
3
+ "version": "14.0.0-alpha.3652810444",
4
4
  "description": "Quick Brick Player",
5
5
  "main": "./src/index.ts",
6
6
  "types": "index.d.ts",
@@ -35,13 +35,12 @@
35
35
  },
36
36
  "homepage": "https://github.com/applicaster/quickbrick#readme",
37
37
  "dependencies": {
38
- "@applicaster/quick-brick-mobile-transport-controls": "14.0.0-alpha.3552323332",
39
- "@applicaster/quick-brick-tv-transport-controls": "14.0.0-rc.7",
40
- "@applicaster/zapp-react-native-tvos-app": "14.0.0-alpha.3552323332",
41
- "@applicaster/zapp-react-native-ui-components": "14.0.0-alpha.3552323332",
42
- "@applicaster/zapp-react-native-utils": "14.0.0-alpha.3552323332",
38
+ "@applicaster/quick-brick-mobile-transport-controls": "14.0.0-rc.56",
39
+ "@applicaster/quick-brick-tv-transport-controls": "14.0.0-rc.58",
40
+ "@applicaster/zapp-react-native-tvos-app": "14.0.0-alpha.3652810444",
41
+ "@applicaster/zapp-react-native-ui-components": "14.0.0-alpha.3652810444",
42
+ "@applicaster/zapp-react-native-utils": "14.0.0-alpha.3652810444",
43
43
  "query-string": "7.1.3",
44
- "react-native-web-linear-gradient": "1.1.2",
45
44
  "shaka-player": "4.3.5",
46
45
  "typeface-montserrat": "^0.0.54",
47
46
  "video.js": "7.14.3",
@@ -58,15 +57,11 @@
58
57
  "@applicaster/zapp-react-native-tvos-ui-components": "*",
59
58
  "@babel/runtime": "*",
60
59
  "@react-native-community/netinfo": "*",
61
- "immer": "*",
62
60
  "react": "*",
63
61
  "react-native": "*",
64
62
  "react-native-fs": "*",
65
- "react-native-gesture-handler": "*",
66
63
  "react-native-linear-gradient": "*",
67
- "react-native-safe-area-context": "*",
68
64
  "react-native-svg": "*",
69
- "react-native-web": "*",
70
65
  "react-native-webview": "*",
71
66
  "uglify-js": "*",
72
67
  "validate-color": "*",
@@ -1,5 +1,5 @@
1
1
  import * as React from "react";
2
- import { StyleSheet } from "react-native";
2
+ import { StyleSheet, View } from "react-native";
3
3
 
4
4
  import { dayjs } from "@applicaster/zapp-react-native-utils/dateUtils";
5
5
  import {
@@ -12,11 +12,6 @@ import {
12
12
  } from "@applicaster/quick-brick-mobile-transport-controls";
13
13
  import { playerManager } from "@applicaster/zapp-react-native-utils/appUtils";
14
14
 
15
- import {
16
- AnimationComponent,
17
- ComponentAnimationType,
18
- } from "@applicaster/zapp-react-native-ui-components/Components/VideoModal/ModalAnimation";
19
-
20
15
  import { AudioDescription } from "../../AudioDescription";
21
16
  import { isValidDate } from "../../../Utils";
22
17
  import { VerticalGutter } from "./VerticalGutter";
@@ -103,8 +98,6 @@ export const Controls = (props: Props) => {
103
98
  onSkipLive,
104
99
  onSpeedButtonPress,
105
100
  maxWidth = 320,
106
-
107
- docked,
108
101
  } = props;
109
102
 
110
103
  const configuration = useZStore("playerConfiguration");
@@ -229,15 +222,8 @@ export const Controls = (props: Props) => {
229
222
  isLiveShowFullControls,
230
223
  ]);
231
224
 
232
- if (docked) {
233
- return null;
234
- }
235
-
236
225
  return (
237
- <AnimationComponent
238
- animationType={ComponentAnimationType.componentFade}
239
- style={isTablet ? styles.nonFlex : styles.flex}
240
- >
226
+ <View style={isTablet ? styles.nonFlex : styles.flex}>
241
227
  <VerticalGutter />
242
228
 
243
229
  <AudioDescription
@@ -257,7 +243,11 @@ export const Controls = (props: Props) => {
257
243
  content={entry}
258
244
  value={value}
259
245
  visible
260
- layoutState={layoutState}
246
+ layoutState={{
247
+ ...layoutState,
248
+ docked: false, // always use non-docked layout for audio (to show time labels
249
+ inline: true, // always use inline layout for audio (to show time labels)
250
+ }}
261
251
  onPlayerSeek={onPlayerSeek}
262
252
  playerState={playerState}
263
253
  disableFullscreen
@@ -286,6 +276,6 @@ export const Controls = (props: Props) => {
286
276
  }}
287
277
  playerState={playerState}
288
278
  />
289
- </AnimationComponent>
279
+ </View>
290
280
  );
291
281
  };
@@ -18,10 +18,15 @@ import { PlayNextData } from "@applicaster/zapp-react-native-ui-components/Compo
18
18
 
19
19
  import { toNumberWithDefault } from "@applicaster/zapp-react-native-utils/numberUtils";
20
20
  import { useSafeAreaInsets } from "react-native-safe-area-context";
21
+ import { useNavigation } from "@applicaster/zapp-react-native-utils/reactHooks/navigation/useNavigation";
21
22
  import { getTabBarHeight } from "@applicaster/zapp-react-native-utils/reactHooks/navigation/getTabBarHeight";
22
23
  import { useTitleSummaryOverlay } from "@applicaster/zapp-react-native-utils/appUtils/playerManager/usePlayerTitleSummaryOverlay";
23
24
  import { usePlayerState } from "@applicaster/zapp-react-native-utils/appUtils/playerManager/usePlayerState";
24
25
  import { useConfiguration } from "@applicaster/zapp-react-native-ui-components/Components/VideoModal/utils";
26
+ import { noop } from "@applicaster/zapp-react-native-utils/functionUtils";
27
+ import { PROGRESS_BAR_HEIGHT } from "@applicaster/zapp-react-native-ui-components/Components/VideoModal/ModalAnimation/utils";
28
+ import { isMenuVisible } from "@applicaster/zapp-react-native-ui-components/Components/Screen/navigationHandler";
29
+ import { usePlugins } from "@applicaster/zapp-react-native-redux";
25
30
 
26
31
  const bottomTabBarHeight = getTabBarHeight();
27
32
 
@@ -38,7 +43,6 @@ type Props = {
38
43
  ImageComponent?: React.ReactNode;
39
44
  isActiveGesture?: boolean;
40
45
  minimisedHeight: number;
41
- progressBarHeight: number;
42
46
  aspectRatio?: number;
43
47
  };
44
48
 
@@ -47,7 +51,7 @@ const styles = StyleSheet.create({
47
51
  flex: 1,
48
52
  flexDirection: "column",
49
53
  alignItems: "stretch",
50
- marginTop: 3, // from plugins/mobile-transport-controls/src/ProgressBar/layouts/DockedLayout.tsx
54
+ marginTop: PROGRESS_BAR_HEIGHT,
51
55
  },
52
56
  content: {
53
57
  flex: 1,
@@ -160,7 +164,7 @@ export const DockedControls = (props: Props) => {
160
164
  const {
161
165
  entry,
162
166
  layoutState,
163
- onPlayerSeek,
167
+ onPlayerSeek = noop,
164
168
  playNextData,
165
169
  ImageComponent,
166
170
  isActiveGesture = true,
@@ -171,6 +175,11 @@ export const DockedControls = (props: Props) => {
171
175
  playerManager.close();
172
176
  }, []);
173
177
 
178
+ const { currentRoute, screenData } = useNavigation();
179
+
180
+ const plugins = usePlugins();
181
+ const menuVisible = isMenuVisible(currentRoute, screenData, plugins);
182
+
174
183
  const { minimised_height: minimisedHeight } = useConfiguration();
175
184
 
176
185
  const configuration = useZStore("playerConfiguration")();
@@ -210,8 +219,6 @@ export const DockedControls = (props: Props) => {
210
219
 
211
220
  const liveButton = Boolean(value("live_badge_enabled"));
212
221
 
213
- const startComponentsAnimation = () => {};
214
-
215
222
  const dockedBackgroundColor = value("docked_player_background_color");
216
223
 
217
224
  const insets = useSafeAreaInsets();
@@ -221,7 +228,10 @@ export const DockedControls = (props: Props) => {
221
228
  style={[
222
229
  styles.container,
223
230
  {
224
- height: minimisedHeight + bottomTabBarHeight + insets.bottom,
231
+ height:
232
+ minimisedHeight +
233
+ (menuVisible ? bottomTabBarHeight : 0) +
234
+ insets.bottom,
225
235
  },
226
236
  ]}
227
237
  >
@@ -234,7 +244,7 @@ export const DockedControls = (props: Props) => {
234
244
  layoutState={layoutState}
235
245
  onPlayerSeek={onPlayerSeek}
236
246
  playerState={playerState}
237
- startComponentsAnimation={startComponentsAnimation}
247
+ startComponentsAnimation={noop}
238
248
  docked
239
249
  />
240
250
  ) : null}
@@ -296,7 +306,7 @@ export const DockedControls = (props: Props) => {
296
306
  </View>
297
307
  <View
298
308
  style={{
299
- height: insets.bottom + bottomTabBarHeight,
309
+ height: insets.bottom + (menuVisible ? bottomTabBarHeight : 0),
300
310
  backgroundColor: dockedBackgroundColor,
301
311
  }}
302
312
  />
@@ -4,7 +4,6 @@ import {
4
4
  useSafeAreaFrame,
5
5
  useSafeAreaInsets,
6
6
  } from "react-native-safe-area-context";
7
- import { useModalAnimationContext } from "@applicaster/zapp-react-native-ui-components/Components/VideoModal/ModalAnimation";
8
7
 
9
8
  import { MOBILE, NAVBAR_HEIGHT } from "./const";
10
9
  import { TransportInfo } from "./TransportInfo";
@@ -17,7 +16,7 @@ import {
17
16
  BottomDebugSquare,
18
17
  LeftDebugSquare,
19
18
  RightDebugSquare,
20
- } from "./Debug/index";
19
+ } from "./DebugComponent";
21
20
 
22
21
  import { Props } from "./types";
23
22
 
@@ -79,8 +78,6 @@ export function MobileLayout({
79
78
  onSpeedButtonPress,
80
79
  playbackSpeedName,
81
80
  configuration,
82
- dimensions,
83
- playNextData,
84
81
  title,
85
82
  summary,
86
83
  }: Props) {
@@ -88,12 +85,10 @@ export function MobileLayout({
88
85
 
89
86
  const { bottom: bottomInset, top: topInset } = useSafeAreaInsets();
90
87
  const { height: screenHeight } = useSafeAreaFrame();
91
- const { progressBarHeight } = useModalAnimationContext();
92
88
 
93
89
  const { imageSize } = useMobileLayoutImageSize();
94
90
 
95
- const { height: transportInfoHeight, onLayout: onTransportInfoLayout } =
96
- useTransportInfoHeight();
91
+ const { onLayout: onTransportInfoLayout } = useTransportInfoHeight();
97
92
 
98
93
  const controlsContainerHeight = React.useMemo(() => {
99
94
  return (
@@ -107,10 +102,6 @@ export function MobileLayout({
107
102
  );
108
103
  }, [screenHeight, topInset, imageSize, bottomInset]);
109
104
 
110
- const verticalOffsetForImage = React.useMemo(() => {
111
- return transportInfoHeight + MOBILE.MARGIN_TOP - progressBarHeight;
112
- }, [transportInfoHeight, progressBarHeight]);
113
-
114
105
  return (
115
106
  <View
116
107
  style={[
@@ -162,18 +153,9 @@ export function MobileLayout({
162
153
  >
163
154
  <PlayerImage
164
155
  entry={entry}
165
- layoutState={layoutState}
166
- playerState={playerState}
167
- value={value}
168
- configuration={configuration}
169
- onPlayerSeek={onPlayerSeek}
170
- dimensions={dimensions}
171
- playNextData={playNextData}
172
- title={title}
173
- summary={summary}
174
- docked={docked}
156
+ docked={false}
175
157
  imageWidth={imageSize}
176
- verticalOffset={verticalOffsetForImage}
158
+ configuration={configuration}
177
159
  />
178
160
  </View>
179
161
  {/* PlayerImage */}
@@ -1,7 +1,16 @@
1
1
  import React, { PropsWithChildren } from "react";
2
2
  import { Image, Animated, StyleSheet, ImageStyle } from "react-native";
3
3
 
4
- import { imageSrcFromMediaItem } from "@applicaster/zapp-react-native-utils/configurationUtils";
4
+ import {
5
+ useModalAnimationContext,
6
+ PlayerAnimationStateEnum,
7
+ DURATION_TO_MINIMIZE,
8
+ DURATION_TO_MAXIMIZE,
9
+ } from "@applicaster/zapp-react-native-ui-components/Components/VideoModal/ModalAnimation";
10
+ import { PlayerAnimationStateT } from "@applicaster/zapp-react-native-ui-components/Components/VideoModal/ModalAnimation/ModalAnimationContext";
11
+ import { useBackgroundImage } from "@applicaster/zapp-react-native-utils/audioPlayerUtils";
12
+
13
+ import { useChangePlayerState } from "./hooks";
5
14
 
6
15
  const styles = StyleSheet.create({
7
16
  container: {
@@ -15,17 +24,48 @@ type Props = PropsWithChildren<{
15
24
  entry: ZappEntry;
16
25
  style?: ImageStyle | ImageStyle[];
17
26
  imageWidth: number;
27
+ docked: boolean;
18
28
  }>;
19
29
 
20
- export const AnimatedImage = ({ entry, style, imageWidth }: Props) => {
30
+ export const AnimatedImage = ({ entry, style, imageWidth, docked }: Props) => {
21
31
  const heightAnim = React.useRef(new Animated.Value(imageWidth)).current;
22
32
 
23
- const source = React.useMemo(
24
- () => ({ uri: imageSrcFromMediaItem(entry, undefined) }),
25
- [entry]
26
- );
33
+ const backgroundImageSource = useBackgroundImage(entry);
34
+
35
+ const { minimisedHeight } = useModalAnimationContext();
36
+
37
+ const changePlayerState$ = useChangePlayerState({ docked });
38
+
39
+ React.useEffect(() => {
40
+ const subscription = changePlayerState$.subscribe({
41
+ next: (nextPlayerState: PlayerAnimationStateT) => {
42
+ if (nextPlayerState === PlayerAnimationStateEnum.minimize) {
43
+ Animated.timing(heightAnim, {
44
+ toValue: minimisedHeight,
45
+ duration: DURATION_TO_MINIMIZE,
46
+ useNativeDriver: false, // width/height can't use native driver
47
+ }).start();
48
+ }
49
+
50
+ if (nextPlayerState === PlayerAnimationStateEnum.maximize) {
51
+ Animated.timing(heightAnim, {
52
+ toValue: imageWidth,
53
+ duration: DURATION_TO_MAXIMIZE,
54
+ useNativeDriver: false, // width/height can't use native driver
55
+ }).start();
56
+ }
57
+
58
+ if (nextPlayerState === PlayerAnimationStateEnum.appear_as_docked) {
59
+ // minimize image immediatly
60
+ heightAnim.setValue(minimisedHeight);
61
+ }
62
+ },
63
+ });
27
64
 
28
- if (!source) return null;
65
+ return () => {
66
+ subscription.unsubscribe();
67
+ };
68
+ }, [changePlayerState$, minimisedHeight, imageWidth]);
29
69
 
30
70
  return (
31
71
  <Animated.View
@@ -36,7 +76,7 @@ export const AnimatedImage = ({ entry, style, imageWidth }: Props) => {
36
76
  },
37
77
  ]}
38
78
  >
39
- <Image resizeMode="cover" style={style} source={source} />
79
+ <Image resizeMode="cover" style={style} source={backgroundImageSource} />
40
80
  </Animated.View>
41
81
  );
42
82
  };
@@ -1,7 +1,6 @@
1
1
  import * as React from "react";
2
2
  import { Image, ImageStyle } from "react-native";
3
-
4
- import { imageSrcFromMediaItem } from "@applicaster/zapp-react-native-utils/configurationUtils";
3
+ import { useBackgroundImage } from "@applicaster/zapp-react-native-utils/audioPlayerUtils";
5
4
 
6
5
  type Props = {
7
6
  entry: ZappEntry;
@@ -9,12 +8,9 @@ type Props = {
9
8
  };
10
9
 
11
10
  export const FlexImage = ({ entry, style }: Props) => {
12
- const source = React.useMemo(
13
- () => ({ uri: imageSrcFromMediaItem(entry, undefined) }),
14
- [entry]
15
- );
11
+ const backgroundImageSource = useBackgroundImage(entry);
16
12
 
17
- if (!source) return null;
18
-
19
- return <Image resizeMode="cover" style={style} source={source} />;
13
+ return (
14
+ <Image resizeMode="cover" style={style} source={backgroundImageSource} />
15
+ );
20
16
  };
@@ -53,6 +53,7 @@ export const PlayerImage = (props: Props) => {
53
53
  entry={entry}
54
54
  style={[styles.backgroundImageContainer, { borderRadius }]}
55
55
  imageWidth={imageWidth}
56
+ docked={docked}
56
57
  />
57
58
  )}
58
59
  </View>
@@ -1,11 +1,6 @@
1
1
  import * as React from "react";
2
2
  import { StyleSheet, View } from "react-native";
3
- import {
4
- useSafeAreaFrame,
5
- useSafeAreaInsets,
6
- } from "react-native-safe-area-context";
7
- import { useModalAnimationContext } from "@applicaster/zapp-react-native-ui-components/Components/VideoModal/ModalAnimation";
8
- import { isApplePlatform } from "@applicaster/zapp-react-native-utils/reactUtils";
3
+ import { useSafeAreaFrame } from "react-native-safe-area-context";
9
4
 
10
5
  import { TransportInfo } from "./TransportInfo";
11
6
  import { PlayerImage } from "./PlayerImage";
@@ -17,8 +12,6 @@ import { Props } from "./types";
17
12
  import { isSmallTabletHeight as getIsSmallTabletHeight } from "./utils";
18
13
  import { NAVBAR_HEIGHT, TABLET_LANDSCAPE } from "./const";
19
14
 
20
- const isIOS = isApplePlatform();
21
-
22
15
  const MIN_WIDTH = TABLET_LANDSCAPE.MIN_WIDTH; // Minimum width for the audio player container
23
16
  const MAX_SPACING = TABLET_LANDSCAPE.MARGIN_VERTICAL; // Maximum spacing for the audio player container
24
17
  const MIN_SPACING = TABLET_LANDSCAPE.MARGIN_VERTICAL_S; // Minimum spacing for the audio player container
@@ -68,22 +61,6 @@ const styles = StyleSheet.create({
68
61
  },
69
62
  });
70
63
 
71
- const isTabletWithHomeButton = (bottomInset: number): boolean =>
72
- bottomInset === 0;
73
-
74
- const withAdditionalOffset = ({ progressBarHeight, bottomInset }) => {
75
- if (isIOS && isTabletWithHomeButton(bottomInset)) {
76
- return progressBarHeight === 0 ? 8 : progressBarHeight + 2;
77
- }
78
-
79
- if (isIOS && !isTabletWithHomeButton(bottomInset)) {
80
- return progressBarHeight === 0 ? 4 : 1;
81
- }
82
-
83
- // android
84
- return progressBarHeight === 0 ? 4 : 0.5;
85
- };
86
-
87
64
  export function TabletLandscapeLayout({
88
65
  entry,
89
66
  layoutState,
@@ -96,21 +73,16 @@ export function TabletLandscapeLayout({
96
73
  onSkipStart,
97
74
  onSkipLive,
98
75
  onSpeedButtonPress,
99
- onCloseVideoModal,
100
76
  playbackSpeedName,
101
77
  configuration,
102
- dimensions,
103
- playNextData,
104
78
  title,
105
79
  summary,
106
80
  }: Props) {
107
81
  const [imageWidth, setImageWidth] = React.useState(0);
108
82
  const { docked } = layoutState;
109
83
 
110
- const { bottom: bottomInset } = useSafeAreaInsets();
111
84
  const { height: screenHeight } = useSafeAreaFrame();
112
85
  const isSmallScreen = getIsSmallTabletHeight(screenHeight);
113
- const { progressBarHeight } = useModalAnimationContext();
114
86
 
115
87
  const onLayoutImage = React.useCallback((e) => {
116
88
  setImageWidth(e.nativeEvent.layout.width);
@@ -149,20 +121,7 @@ export function TabletLandscapeLayout({
149
121
  <PlayerImage
150
122
  docked={false}
151
123
  entry={entry}
152
- layoutState={layoutState}
153
- playerState={playerState}
154
- value={value}
155
124
  configuration={configuration}
156
- onPlayerSeek={onPlayerSeek}
157
- onCloseVideoModal={onCloseVideoModal}
158
- dimensions={dimensions}
159
- playNextData={playNextData}
160
- title={title}
161
- summary={summary}
162
- verticalOffset={withAdditionalOffset({
163
- progressBarHeight,
164
- bottomInset,
165
- })}
166
125
  onLayoutImage={onLayoutImage}
167
126
  />
168
127
  ) : null}
@@ -4,8 +4,6 @@ import {
4
4
  useSafeAreaFrame,
5
5
  useSafeAreaInsets,
6
6
  } from "react-native-safe-area-context";
7
- import { useModalAnimationContext } from "@applicaster/zapp-react-native-ui-components/Components/VideoModal/ModalAnimation";
8
- import { toNumberWithDefaultZero } from "@applicaster/zapp-react-native-utils/numberUtils";
9
7
 
10
8
  import { withDebug } from "./debug";
11
9
  import { TABLET_PORTRAIT } from "./const";
@@ -15,7 +13,6 @@ import { PlayerImage } from "./PlayerImage";
15
13
  import { Controls } from "./Controls";
16
14
 
17
15
  import { useTabletLayoutImageSize } from "./hooks";
18
- import { DockedControls } from "./DockedControls";
19
16
  import { VerticalGutter } from "./VerticalGutter";
20
17
 
21
18
  import { Props } from "./types";
@@ -82,11 +79,8 @@ export function TabletPortraitLayout({
82
79
  onSkipStart,
83
80
  onSkipLive,
84
81
  onSpeedButtonPress,
85
- onCloseVideoModal,
86
82
  playbackSpeedName,
87
83
  configuration,
88
- dimensions,
89
- playNextData,
90
84
  title,
91
85
  summary,
92
86
  }: Props) {
@@ -94,7 +88,6 @@ export function TabletPortraitLayout({
94
88
 
95
89
  const { bottom: bottomInset, top: topInset } = useSafeAreaInsets();
96
90
  const { height: screenHeight } = useSafeAreaFrame();
97
- const { progressBarHeight } = useModalAnimationContext();
98
91
 
99
92
  const {
100
93
  imageSize,
@@ -153,21 +146,9 @@ export function TabletPortraitLayout({
153
146
  >
154
147
  <PlayerImage
155
148
  entry={entry}
156
- layoutState={layoutState}
157
- playerState={playerState}
158
- value={value}
159
149
  configuration={configuration}
160
- onPlayerSeek={onPlayerSeek}
161
- onCloseVideoModal={onCloseVideoModal}
162
- dimensions={dimensions}
163
- playNextData={playNextData}
164
- title={title}
165
- summary={summary}
166
150
  docked={docked}
167
151
  imageWidth={imageSize}
168
- verticalOffset={
169
- toNumberWithDefaultZero(topOffset) - progressBarHeight
170
- }
171
152
  />
172
153
  </View>
173
154
 
@@ -196,20 +177,6 @@ export function TabletPortraitLayout({
196
177
  </View>
197
178
  </View>
198
179
  </View>
199
- {/* PlayerImage */}
200
-
201
- <DockedControls
202
- entry={entry}
203
- layoutState={layoutState}
204
- playerState={playerState}
205
- value={value}
206
- dimensions={dimensions}
207
- onCloseVideoModal={onCloseVideoModal}
208
- onPlayerSeek={onPlayerSeek}
209
- playNextData={playNextData}
210
- title={title}
211
- summary={summary}
212
- />
213
180
  </View>
214
181
  );
215
182
  }
@@ -1,5 +1,4 @@
1
1
  import * as React from "react";
2
- import { compose, map, propOr, split, take, trim } from "ramda";
3
2
  import { LayoutChangeEvent, StyleSheet, View } from "react-native";
4
3
 
5
4
  import { TransportInfo as MobileTransportInfo } from "@applicaster/quick-brick-mobile-transport-controls";
@@ -13,6 +12,7 @@ import { NAVBAR_HEIGHT, TABLET_LANDSCAPE } from "../const";
13
12
  import { withDebug } from "../debug";
14
13
  import { useSafeAreaFrame } from "react-native-safe-area-context";
15
14
  import { isSmallTabletHeight } from "../utils";
15
+ import { getPlayerActionButtons } from "@applicaster/zapp-react-native-utils/playerUtils";
16
16
 
17
17
  const styles = StyleSheet.create({
18
18
  container: {
@@ -82,14 +82,8 @@ export const TransportInfo = ({
82
82
  );
83
83
 
84
84
  const actionButtons = React.useMemo(
85
- () =>
86
- compose(
87
- take(2),
88
- map(trim),
89
- split(","),
90
- propOr("", "player_action_buttons")
91
- )(configuration),
92
- [configuration.player_action_buttons]
85
+ () => getPlayerActionButtons(configuration),
86
+ [configuration]
93
87
  );
94
88
 
95
89
  return (
@@ -1,6 +1,6 @@
1
1
  import React from "react";
2
2
  import { ModalHeader } from "@applicaster/zapp-react-native-ui-components/Components/ModalComponent/Header";
3
- import { isNil } from "lodash";
3
+ import { isNil } from "@applicaster/zapp-react-native-utils/utils";
4
4
 
5
5
  const formatTime = (milliseconds: number) => {
6
6
  const totalSeconds = Math.floor(milliseconds / 1000);
@@ -0,0 +1,7 @@
1
+ import { Animated } from "react-native";
2
+ import { createNativeWrapper } from "react-native-gesture-handler";
3
+
4
+ export const GestureAnimatedScrollView = createNativeWrapper(
5
+ Animated.ScrollView,
6
+ {}
7
+ );
@@ -51,14 +51,15 @@ export function AnimatedModal({
51
51
  <PanGestureHandler {...gestureHandlerProps}>
52
52
  <Animated.View
53
53
  pointerEvents={"auto"}
54
- // eslint-disable-next-line react-native/no-inline-styles, react-native/no-color-literals
55
- style={{
56
- backgroundColor: "black",
57
- borderTopLeftRadius: borderTopRadiusAnimated,
58
- borderTopRightRadius: borderTopRadiusAnimated,
59
- transform: [{ translateY }],
60
- height: SCREEN_HEIGHT,
61
- }}
54
+ style={[
55
+ styles.modalWrapper,
56
+ {
57
+ borderTopLeftRadius: borderTopRadiusAnimated,
58
+ borderTopRightRadius: borderTopRadiusAnimated,
59
+ transform: [{ translateY }],
60
+ height: SCREEN_HEIGHT,
61
+ },
62
+ ]}
62
63
  >
63
64
  <Animated.View
64
65
  style={[
@@ -95,9 +96,7 @@ export function AnimatedModal({
95
96
  >
96
97
  <Pressable
97
98
  testID="collapsedBarWrapper"
98
- onPress={() => {
99
- expand();
100
- }}
99
+ onPress={expand}
101
100
  style={styles.collapsedBarWrapper}
102
101
  >
103
102
  {collapsedContent}