@applicaster/zapp-react-native-ui-components 14.0.0-alpha.1216545755 → 14.0.0-alpha.1308901965
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Components/AudioPlayer/tv/Artwork.tsx +3 -2
- package/Components/AudioPlayer/tv/Channel.tsx +7 -7
- package/Components/AudioPlayer/tv/Layout.tsx +100 -93
- package/Components/AudioPlayer/tv/Runtime.tsx +7 -1
- package/Components/AudioPlayer/tv/Summary.tsx +6 -2
- package/Components/AudioPlayer/tv/Title.tsx +6 -2
- package/Components/AudioPlayer/tv/__tests__/__snapshots__/Runtime.test.js.snap +2 -2
- package/Components/AudioPlayer/tv/__tests__/__snapshots__/audioPlayer.test.js.snap +20 -26
- package/Components/AudioPlayer/tv/__tests__/__snapshots__/channel.test.js.snap +8 -17
- package/Components/AudioPlayer/tv/__tests__/__snapshots__/summary.test.js.snap +1 -2
- package/Components/AudioPlayer/tv/__tests__/__snapshots__/title.test.js.snap +1 -2
- package/Components/AudioPlayer/tv/index.tsx +6 -0
- package/Components/Cell/index.js +6 -2
- package/Components/Focusable/__tests__/index.android.test.tsx +3 -0
- package/Components/Focusable/index.android.tsx +12 -8
- package/Components/MasterCell/index.tsx +1 -1
- package/Components/Viewport/VisibilitySensor/VisibilitySensor.tsx +3 -3
- package/Components/default-cell-renderer/viewTrees/tv/DefaultCell/index.ts +3 -3
- package/package.json +5 -5
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import { View,
|
|
2
|
+
import { View, StyleSheet } from "react-native";
|
|
3
|
+
import { QBImage } from "@applicaster/zapp-react-native-ui-components/Components/Image";
|
|
3
4
|
import { toNumberWithDefaultZero } from "@applicaster/zapp-react-native-utils/numberUtils";
|
|
4
5
|
|
|
5
6
|
const styles = StyleSheet.create({
|
|
@@ -29,7 +30,7 @@ export function Artwork({ srcImage, config }: Props) {
|
|
|
29
30
|
|
|
30
31
|
return (
|
|
31
32
|
<View style={styles.container}>
|
|
32
|
-
<
|
|
33
|
+
<QBImage
|
|
33
34
|
fadeDuration={0}
|
|
34
35
|
source={{ uri: srcImage }}
|
|
35
36
|
style={[styles.image, { borderRadius }]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import {
|
|
2
|
+
import { Image } from "react-native";
|
|
3
|
+
import { isNilOrEmpty } from "@applicaster/zapp-react-native-utils/reactUtils/helpers";
|
|
3
4
|
|
|
4
5
|
type Props = {
|
|
5
6
|
srcImage: string;
|
|
@@ -15,17 +16,16 @@ type Props = {
|
|
|
15
16
|
const imageStyles = {
|
|
16
17
|
width: 128,
|
|
17
18
|
height: 72,
|
|
18
|
-
};
|
|
19
19
|
|
|
20
|
-
const containerStyles = {
|
|
21
|
-
...imageStyles,
|
|
22
20
|
marginBottom: 30,
|
|
23
21
|
};
|
|
24
22
|
|
|
25
23
|
export function Channel({ srcImage }: Props) {
|
|
24
|
+
if (isNilOrEmpty(srcImage)) {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
|
|
26
28
|
return (
|
|
27
|
-
<
|
|
28
|
-
<Image fadeDuration={0} source={{ uri: srcImage }} style={imageStyles} />
|
|
29
|
-
</View>
|
|
29
|
+
<Image fadeDuration={0} source={{ uri: srcImage }} style={imageStyles} />
|
|
30
30
|
);
|
|
31
31
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
-
import {
|
|
2
|
+
import { ImageBackground, View, ViewStyle } from "react-native";
|
|
3
3
|
|
|
4
4
|
import { platformSelect } from "@applicaster/zapp-react-native-utils/reactUtils";
|
|
5
5
|
|
|
@@ -11,6 +11,7 @@ type Props = {
|
|
|
11
11
|
config: {
|
|
12
12
|
titleColor: string;
|
|
13
13
|
summaryColor: string;
|
|
14
|
+
backgroundImageOverlay?: string;
|
|
14
15
|
backgroundColor: string;
|
|
15
16
|
backgroundImage: Option<string>;
|
|
16
17
|
isRTL: boolean;
|
|
@@ -20,13 +21,40 @@ type Props = {
|
|
|
20
21
|
style: ViewStyle;
|
|
21
22
|
};
|
|
22
23
|
|
|
24
|
+
const backgroundImgStyles = platformSelect({
|
|
25
|
+
tvos: {
|
|
26
|
+
width: "100%",
|
|
27
|
+
height: "100%",
|
|
28
|
+
alignItems: "center",
|
|
29
|
+
justifyContent: "center",
|
|
30
|
+
},
|
|
31
|
+
android_tv: {
|
|
32
|
+
width: "100%",
|
|
33
|
+
height: "100%",
|
|
34
|
+
alignItems: "center",
|
|
35
|
+
justifyContent: "center",
|
|
36
|
+
},
|
|
37
|
+
web: {
|
|
38
|
+
position: "absolute",
|
|
39
|
+
margin: "auto",
|
|
40
|
+
display: "flex",
|
|
41
|
+
flexWrap: "wrap",
|
|
42
|
+
width: "100%",
|
|
43
|
+
height: "100%",
|
|
44
|
+
flex: 1,
|
|
45
|
+
alignItems: "center",
|
|
46
|
+
justifyContent: "center",
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
|
|
23
50
|
export function AudioPlayerTVLayout({
|
|
24
51
|
artwork,
|
|
25
52
|
config,
|
|
26
53
|
children,
|
|
27
54
|
style,
|
|
28
55
|
}: Props) {
|
|
29
|
-
const {
|
|
56
|
+
const { backgroundColor, backgroundImage, backgroundImageOverlay, isRTL } =
|
|
57
|
+
config;
|
|
30
58
|
|
|
31
59
|
const backgroundImageSource = { uri: backgroundImage };
|
|
32
60
|
|
|
@@ -34,108 +62,87 @@ export function AudioPlayerTVLayout({
|
|
|
34
62
|
? "transparent"
|
|
35
63
|
: backgroundColor;
|
|
36
64
|
|
|
37
|
-
const
|
|
65
|
+
const textContainerStyles = platformSelect({
|
|
38
66
|
tvos: {
|
|
39
|
-
width: "100%",
|
|
40
|
-
height: "100%",
|
|
41
|
-
alignItems: "center",
|
|
42
67
|
justifyContent: "center",
|
|
43
|
-
|
|
44
|
-
backgroundColor: backgroundColorStyle,
|
|
68
|
+
alignItems: directionStyles(isRTL).justifyContent,
|
|
45
69
|
},
|
|
46
70
|
android_tv: {
|
|
47
|
-
width: "100%",
|
|
48
|
-
height: "100%",
|
|
49
|
-
alignItems: "center",
|
|
50
71
|
justifyContent: "center",
|
|
51
|
-
|
|
52
|
-
backgroundColor: backgroundColorStyle,
|
|
72
|
+
alignItems: directionStyles(isRTL).justifyContent,
|
|
53
73
|
},
|
|
54
74
|
web: {
|
|
55
|
-
width: 1920,
|
|
56
|
-
height: 1080,
|
|
57
|
-
alignItems: "center",
|
|
58
|
-
justifyContent: "center",
|
|
59
|
-
flexDirection: directionStyles(isRTL).flexDirection,
|
|
60
|
-
backgroundColor: backgroundColorStyle,
|
|
61
|
-
},
|
|
62
|
-
native: {
|
|
63
|
-
backgroundColor: backgroundColorStyle,
|
|
64
|
-
overflow: "hidden",
|
|
65
|
-
...style,
|
|
66
|
-
},
|
|
67
|
-
samsung_tv: {
|
|
68
|
-
position: "absolute",
|
|
69
|
-
margin: "auto",
|
|
70
|
-
display: "flex",
|
|
71
|
-
flexWrap: "wrap",
|
|
72
|
-
width: "100vw",
|
|
73
|
-
flex: 1,
|
|
74
|
-
alignItems: "center",
|
|
75
|
-
justifyContent: "center",
|
|
76
|
-
flexDirection: directionStyles(isRTL).flexDirection,
|
|
77
|
-
backgroundColor: backgroundColorStyle,
|
|
78
|
-
},
|
|
79
|
-
lg_tv: {
|
|
80
|
-
position: "absolute",
|
|
81
|
-
margin: "auto",
|
|
82
|
-
display: "flex",
|
|
83
|
-
flexWrap: "wrap",
|
|
84
|
-
width: "100vw",
|
|
85
|
-
flex: 1,
|
|
86
|
-
alignItems: "center",
|
|
87
75
|
justifyContent: "center",
|
|
88
|
-
|
|
89
|
-
backgroundColor: backgroundColorStyle,
|
|
76
|
+
alignItems: directionStyles(isRTL).justifyContent,
|
|
90
77
|
},
|
|
91
78
|
});
|
|
92
79
|
|
|
93
|
-
const
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
80
|
+
const mainContainerStyles = React.useMemo(
|
|
81
|
+
() =>
|
|
82
|
+
platformSelect({
|
|
83
|
+
tvos: {
|
|
84
|
+
width: "100%",
|
|
85
|
+
height: "100%",
|
|
86
|
+
alignItems: "center",
|
|
87
|
+
justifyContent: "center",
|
|
88
|
+
flexDirection: directionStyles(isRTL).flexDirection,
|
|
89
|
+
backgroundColor: backgroundColorStyle,
|
|
90
|
+
},
|
|
91
|
+
android_tv: {
|
|
92
|
+
width: "100%",
|
|
93
|
+
height: "100%",
|
|
94
|
+
alignItems: "center",
|
|
95
|
+
justifyContent: "center",
|
|
96
|
+
flexDirection: directionStyles(isRTL).flexDirection,
|
|
97
|
+
backgroundColor: backgroundColorStyle,
|
|
98
|
+
},
|
|
99
|
+
web: {
|
|
100
|
+
width: 1920,
|
|
101
|
+
height: 1080,
|
|
102
|
+
alignItems: "center",
|
|
103
|
+
justifyContent: "center",
|
|
104
|
+
flexDirection: directionStyles(isRTL).flexDirection,
|
|
105
|
+
backgroundColor: backgroundColorStyle,
|
|
106
|
+
},
|
|
107
|
+
native: {
|
|
108
|
+
backgroundColor: backgroundColorStyle,
|
|
109
|
+
overflow: "hidden",
|
|
110
|
+
...style,
|
|
111
|
+
},
|
|
112
|
+
samsung_tv: {
|
|
113
|
+
position: "absolute",
|
|
114
|
+
margin: "auto",
|
|
115
|
+
display: "flex",
|
|
116
|
+
flexWrap: "wrap",
|
|
117
|
+
height: "100vh",
|
|
118
|
+
width: "100vw",
|
|
119
|
+
alignItems: "center",
|
|
120
|
+
justifyContent: "center",
|
|
121
|
+
flexDirection: directionStyles(isRTL).flexDirection,
|
|
122
|
+
backgroundColor: backgroundColorStyle,
|
|
123
|
+
},
|
|
124
|
+
lg_tv: {
|
|
125
|
+
position: "absolute",
|
|
126
|
+
margin: "auto",
|
|
127
|
+
display: "flex",
|
|
128
|
+
flexWrap: "wrap",
|
|
129
|
+
height: "100vh",
|
|
130
|
+
width: "100vw",
|
|
131
|
+
alignItems: "center",
|
|
132
|
+
justifyContent: "center",
|
|
133
|
+
flexDirection: directionStyles(isRTL).flexDirection,
|
|
134
|
+
backgroundColor: backgroundColorStyle,
|
|
135
|
+
},
|
|
136
|
+
}),
|
|
137
|
+
[backgroundColorStyle, isRTL, style]
|
|
138
|
+
);
|
|
118
139
|
|
|
119
|
-
const
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
},
|
|
126
|
-
android_tv: {
|
|
127
|
-
width: 600,
|
|
128
|
-
height: 362,
|
|
129
|
-
marginHorizontal: 24,
|
|
130
|
-
alignItems: directionStyles(isRTL).justifyContent,
|
|
131
|
-
},
|
|
132
|
-
web: {
|
|
133
|
-
margin: 10,
|
|
134
|
-
height: "100vh",
|
|
135
|
-
alignItems: directionStyles(isRTL).justifyContent,
|
|
136
|
-
justifyContent: "center",
|
|
137
|
-
},
|
|
138
|
-
});
|
|
140
|
+
const backgroundOverlayStyles = React.useMemo(
|
|
141
|
+
() => ({
|
|
142
|
+
backgroundColor: backgroundImageOverlay,
|
|
143
|
+
}),
|
|
144
|
+
[backgroundImageOverlay]
|
|
145
|
+
);
|
|
139
146
|
|
|
140
147
|
if (backgroundImage) {
|
|
141
148
|
return (
|
|
@@ -144,7 +151,7 @@ export function AudioPlayerTVLayout({
|
|
|
144
151
|
style={backgroundImgStyles}
|
|
145
152
|
resizeMode="cover"
|
|
146
153
|
>
|
|
147
|
-
<View style={mainContainerStyles}>
|
|
154
|
+
<View style={[mainContainerStyles, backgroundOverlayStyles]}>
|
|
148
155
|
<Artwork srcImage={artwork} config={config} />
|
|
149
156
|
<View style={textContainerStyles}>{children}</View>
|
|
150
157
|
</View>
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { View, Text, ViewStyle, TextStyle } from "react-native";
|
|
3
3
|
import { toNumberWithDefault } from "@applicaster/zapp-react-native-utils/numberUtils";
|
|
4
|
+
import { isNilOrEmpty } from "@applicaster/zapp-react-native-utils/reactUtils/helpers";
|
|
5
|
+
|
|
4
6
|
import { directionStyles } from "./helpers";
|
|
5
7
|
|
|
6
8
|
type Props = {
|
|
@@ -19,7 +21,6 @@ type Props = {
|
|
|
19
21
|
|
|
20
22
|
const containerStyles = ({ isRTL }) => ({
|
|
21
23
|
width: 600,
|
|
22
|
-
height: 40,
|
|
23
24
|
justifyContent: directionStyles(isRTL)
|
|
24
25
|
.justifyContent as ViewStyle["justifyContent"],
|
|
25
26
|
});
|
|
@@ -38,11 +39,16 @@ const textStyles = ({
|
|
|
38
39
|
});
|
|
39
40
|
|
|
40
41
|
export function Runtime({ start_time, end_time, config }: Props) {
|
|
42
|
+
if (isNilOrEmpty(start_time) && isNilOrEmpty(end_time)) {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
|
|
41
46
|
return (
|
|
42
47
|
<View style={containerStyles({ isRTL: config.isRTL })}>
|
|
43
48
|
{!!start_time && !!end_time && (
|
|
44
49
|
<Text
|
|
45
50
|
style={textStyles(config) as TextStyle}
|
|
51
|
+
numberOfLines={1}
|
|
46
52
|
>{`${start_time} - ${end_time}`}</Text>
|
|
47
53
|
)}
|
|
48
54
|
</View>
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { View, Text, TextStyle, StyleSheet } from "react-native";
|
|
3
3
|
import { toNumberWithDefault } from "@applicaster/zapp-react-native-utils/numberUtils";
|
|
4
|
+
import { isNilOrEmpty } from "@applicaster/zapp-react-native-utils/reactUtils/helpers";
|
|
4
5
|
|
|
5
6
|
type Props = {
|
|
6
7
|
config: {
|
|
@@ -18,7 +19,6 @@ type Props = {
|
|
|
18
19
|
const styles = StyleSheet.create({
|
|
19
20
|
container: {
|
|
20
21
|
width: 600,
|
|
21
|
-
height: 80,
|
|
22
22
|
marginBottom: 30,
|
|
23
23
|
},
|
|
24
24
|
});
|
|
@@ -38,9 +38,13 @@ const textStyles = ({
|
|
|
38
38
|
});
|
|
39
39
|
|
|
40
40
|
export function Summary({ summary, config }: Props) {
|
|
41
|
+
if (isNilOrEmpty(summary)) {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
|
|
41
45
|
return (
|
|
42
46
|
<View style={styles.container}>
|
|
43
|
-
<Text style={textStyles(config)} numberOfLines={
|
|
47
|
+
<Text style={textStyles(config)} numberOfLines={3}>
|
|
44
48
|
{summary}
|
|
45
49
|
</Text>
|
|
46
50
|
</View>
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { View, Text, TextStyle, StyleSheet } from "react-native";
|
|
3
3
|
import { toNumberWithDefault } from "@applicaster/zapp-react-native-utils/numberUtils";
|
|
4
|
+
import { isNilOrEmpty } from "@applicaster/zapp-react-native-utils/reactUtils/helpers";
|
|
4
5
|
|
|
5
6
|
type Props = {
|
|
6
7
|
config: {
|
|
@@ -18,7 +19,6 @@ type Props = {
|
|
|
18
19
|
const styles = StyleSheet.create({
|
|
19
20
|
container: {
|
|
20
21
|
width: 600,
|
|
21
|
-
height: 100,
|
|
22
22
|
marginBottom: 12,
|
|
23
23
|
},
|
|
24
24
|
});
|
|
@@ -32,9 +32,13 @@ const textStyles = ({ titleColor, isRTL, titleFontFamily, titleFontSize }) => ({
|
|
|
32
32
|
});
|
|
33
33
|
|
|
34
34
|
export function Title({ title, config }: Props) {
|
|
35
|
+
if (isNilOrEmpty(title)) {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
|
|
35
39
|
return (
|
|
36
40
|
<View style={styles.container}>
|
|
37
|
-
<Text style={textStyles(config)} numberOfLines={
|
|
41
|
+
<Text style={textStyles(config)} numberOfLines={3}>
|
|
38
42
|
{title}
|
|
39
43
|
</Text>
|
|
40
44
|
</View>
|
|
@@ -4,13 +4,13 @@ exports[`<Runtime /> LTR renders correctly 1`] = `
|
|
|
4
4
|
<View
|
|
5
5
|
style={
|
|
6
6
|
{
|
|
7
|
-
"height": 40,
|
|
8
7
|
"justifyContent": "flex-start",
|
|
9
8
|
"width": 600,
|
|
10
9
|
}
|
|
11
10
|
}
|
|
12
11
|
>
|
|
13
12
|
<Text
|
|
13
|
+
numberOfLines={1}
|
|
14
14
|
style={
|
|
15
15
|
{
|
|
16
16
|
"alignItems": "flex-end",
|
|
@@ -33,13 +33,13 @@ exports[`<Runtime /> RTL renders correctly 1`] = `
|
|
|
33
33
|
<View
|
|
34
34
|
style={
|
|
35
35
|
{
|
|
36
|
-
"height": 40,
|
|
37
36
|
"justifyContent": "flex-end",
|
|
38
37
|
"width": 600,
|
|
39
38
|
}
|
|
40
39
|
}
|
|
41
40
|
>
|
|
42
41
|
<Text
|
|
42
|
+
numberOfLines={1}
|
|
43
43
|
style={
|
|
44
44
|
{
|
|
45
45
|
"alignItems": "flex-start",
|
|
@@ -30,10 +30,15 @@ exports[`<AudioPlayerTV /> renders correctly 1`] = `
|
|
|
30
30
|
/>
|
|
31
31
|
<View
|
|
32
32
|
style={
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
33
|
+
[
|
|
34
|
+
{
|
|
35
|
+
"backgroundColor": "transparent",
|
|
36
|
+
"overflow": "hidden",
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"backgroundColor": undefined,
|
|
40
|
+
},
|
|
41
|
+
]
|
|
37
42
|
}
|
|
38
43
|
>
|
|
39
44
|
<View
|
|
@@ -65,7 +70,13 @@ exports[`<AudioPlayerTV /> renders correctly 1`] = `
|
|
|
65
70
|
/>
|
|
66
71
|
</View>
|
|
67
72
|
<View>
|
|
68
|
-
<
|
|
73
|
+
<Image
|
|
74
|
+
fadeDuration={0}
|
|
75
|
+
source={
|
|
76
|
+
{
|
|
77
|
+
"uri": "https://example.com",
|
|
78
|
+
}
|
|
79
|
+
}
|
|
69
80
|
style={
|
|
70
81
|
{
|
|
71
82
|
"height": 72,
|
|
@@ -73,33 +84,17 @@ exports[`<AudioPlayerTV /> renders correctly 1`] = `
|
|
|
73
84
|
"width": 128,
|
|
74
85
|
}
|
|
75
86
|
}
|
|
76
|
-
|
|
77
|
-
<Image
|
|
78
|
-
fadeDuration={0}
|
|
79
|
-
source={
|
|
80
|
-
{
|
|
81
|
-
"uri": "https://example.com",
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
style={
|
|
85
|
-
{
|
|
86
|
-
"height": 72,
|
|
87
|
-
"width": 128,
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
/>
|
|
91
|
-
</View>
|
|
87
|
+
/>
|
|
92
88
|
<View
|
|
93
89
|
style={
|
|
94
90
|
{
|
|
95
|
-
"height": 100,
|
|
96
91
|
"marginBottom": 12,
|
|
97
92
|
"width": 600,
|
|
98
93
|
}
|
|
99
94
|
}
|
|
100
95
|
>
|
|
101
96
|
<Text
|
|
102
|
-
numberOfLines={
|
|
97
|
+
numberOfLines={3}
|
|
103
98
|
style={
|
|
104
99
|
{
|
|
105
100
|
"color": "white",
|
|
@@ -116,14 +111,13 @@ exports[`<AudioPlayerTV /> renders correctly 1`] = `
|
|
|
116
111
|
<View
|
|
117
112
|
style={
|
|
118
113
|
{
|
|
119
|
-
"height": 80,
|
|
120
114
|
"marginBottom": 30,
|
|
121
115
|
"width": 600,
|
|
122
116
|
}
|
|
123
117
|
}
|
|
124
118
|
>
|
|
125
119
|
<Text
|
|
126
|
-
numberOfLines={
|
|
120
|
+
numberOfLines={3}
|
|
127
121
|
style={
|
|
128
122
|
{
|
|
129
123
|
"color": "white",
|
|
@@ -141,13 +135,13 @@ exports[`<AudioPlayerTV /> renders correctly 1`] = `
|
|
|
141
135
|
<View
|
|
142
136
|
style={
|
|
143
137
|
{
|
|
144
|
-
"height": 40,
|
|
145
138
|
"justifyContent": "flex-end",
|
|
146
139
|
"width": 600,
|
|
147
140
|
}
|
|
148
141
|
}
|
|
149
142
|
>
|
|
150
143
|
<Text
|
|
144
|
+
numberOfLines={1}
|
|
151
145
|
style={
|
|
152
146
|
{
|
|
153
147
|
"alignItems": "flex-start",
|
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
2
2
|
|
|
3
3
|
exports[`<Channel /> renders correctly 1`] = `
|
|
4
|
-
<
|
|
4
|
+
<Image
|
|
5
|
+
fadeDuration={0}
|
|
6
|
+
source={
|
|
7
|
+
{
|
|
8
|
+
"uri": "https://example.com",
|
|
9
|
+
}
|
|
10
|
+
}
|
|
5
11
|
style={
|
|
6
12
|
{
|
|
7
13
|
"height": 72,
|
|
@@ -9,20 +15,5 @@ exports[`<Channel /> renders correctly 1`] = `
|
|
|
9
15
|
"width": 128,
|
|
10
16
|
}
|
|
11
17
|
}
|
|
12
|
-
|
|
13
|
-
<Image
|
|
14
|
-
fadeDuration={0}
|
|
15
|
-
source={
|
|
16
|
-
{
|
|
17
|
-
"uri": "https://example.com",
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
style={
|
|
21
|
-
{
|
|
22
|
-
"height": 72,
|
|
23
|
-
"width": 128,
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
/>
|
|
27
|
-
</View>
|
|
18
|
+
/>
|
|
28
19
|
`;
|
|
@@ -35,6 +35,11 @@ export function AudioPlayerTV(props: Props) {
|
|
|
35
35
|
const backgroundImage = getProp("audio_player_background_image");
|
|
36
36
|
const channelIcon = getProp("audio_player_channel_icon");
|
|
37
37
|
const rtlFlag = getProp("audio_player_rtl");
|
|
38
|
+
|
|
39
|
+
const backgroundImageOverlay = getProp(
|
|
40
|
+
"audio_player_background_image_overlay"
|
|
41
|
+
);
|
|
42
|
+
|
|
38
43
|
const artworkBorderRadius = getProp("audio_player_artwork_border_radius");
|
|
39
44
|
|
|
40
45
|
const isRTL = rtlFlag === "1" || rtlFlag === "true" || rtlFlag === true;
|
|
@@ -113,6 +118,7 @@ export function AudioPlayerTV(props: Props) {
|
|
|
113
118
|
runTimeFontSize,
|
|
114
119
|
channelIcon,
|
|
115
120
|
artworkBorderRadius,
|
|
121
|
+
backgroundImageOverlay,
|
|
116
122
|
};
|
|
117
123
|
}, [getProp]);
|
|
118
124
|
|
package/Components/Cell/index.js
CHANGED
|
@@ -3,11 +3,15 @@ import * as R from "ramda";
|
|
|
3
3
|
import { connectToStore } from "@applicaster/zapp-react-native-redux";
|
|
4
4
|
import { platformSelect } from "@applicaster/zapp-react-native-utils/reactUtils";
|
|
5
5
|
|
|
6
|
-
import {
|
|
6
|
+
import {
|
|
7
|
+
HorizontalScrollContext,
|
|
8
|
+
RiverOffsetContext,
|
|
9
|
+
ScreenScrollingContext,
|
|
10
|
+
} from "../../Contexts";
|
|
11
|
+
|
|
7
12
|
import { CellComponent } from "./Cell";
|
|
8
13
|
import { TvOSCellComponent } from "./TvOSCellComponent";
|
|
9
14
|
import { withConsumer } from "../../Contexts/HeaderOffsetContext";
|
|
10
|
-
import { ScreenScrollingContext } from "../../Contexts/ScreenScrollingContext";
|
|
11
15
|
|
|
12
16
|
import { ScreenLayoutContextConsumer } from "../../Contexts/ScreenLayoutContext";
|
|
13
17
|
import { createContext } from "@applicaster/zapp-react-native-utils/reactUtils/createContext";
|
|
@@ -38,6 +38,9 @@ describe("Focusable", () => {
|
|
|
38
38
|
});
|
|
39
39
|
|
|
40
40
|
it("updates disableFocus state when disableFocus prop changes", () => {
|
|
41
|
+
const unregister = jest.fn();
|
|
42
|
+
mockFocusManager.registerFocusable.mockReturnValue(unregister);
|
|
43
|
+
|
|
41
44
|
const { rerender } = render(
|
|
42
45
|
<Focusable id="test-id" disableFocus={false}>
|
|
43
46
|
<Touchable testID="touchable" />
|
|
@@ -43,11 +43,13 @@ export const FocusableContext = React.createContext<
|
|
|
43
43
|
// eslint-disable-next-line
|
|
44
44
|
setIsFocusable: (enableFocus: boolean) => void;
|
|
45
45
|
ref: FocusManager.FocusableRef;
|
|
46
|
+
parentFocusableId: Option<string>;
|
|
46
47
|
} & ParentFocus
|
|
47
48
|
>({
|
|
48
49
|
focused: false,
|
|
49
50
|
setIsFocusable: () => {},
|
|
50
51
|
ref: { current: null },
|
|
52
|
+
parentFocusableId: undefined,
|
|
51
53
|
});
|
|
52
54
|
|
|
53
55
|
export const useFocusable = () => React.useContext(FocusableContext);
|
|
@@ -74,7 +76,7 @@ function FocusableComponent(props: Props, forwardedRef) {
|
|
|
74
76
|
|
|
75
77
|
const isRTL = useIsRTL();
|
|
76
78
|
const focusManager = useFocusManager();
|
|
77
|
-
const { ref:
|
|
79
|
+
const { ref: parentFocusableRef, parentFocusableId } = useFocusable();
|
|
78
80
|
const touchableRef = React.useRef(null);
|
|
79
81
|
|
|
80
82
|
const [focused, setFocused] = React.useState(() =>
|
|
@@ -98,13 +100,14 @@ function FocusableComponent(props: Props, forwardedRef) {
|
|
|
98
100
|
}
|
|
99
101
|
}, [disableFocus]);
|
|
100
102
|
|
|
101
|
-
React.
|
|
103
|
+
React.useLayoutEffect(() => {
|
|
102
104
|
if (id) {
|
|
103
|
-
const unregister = focusManager.registerFocusable(
|
|
105
|
+
const unregister = focusManager.registerFocusable({
|
|
104
106
|
touchableRef,
|
|
105
|
-
|
|
106
|
-
isFocusableCell
|
|
107
|
-
|
|
107
|
+
parentFocusableRef,
|
|
108
|
+
isFocusableCell,
|
|
109
|
+
parentFocusableId,
|
|
110
|
+
});
|
|
108
111
|
|
|
109
112
|
onRegister();
|
|
110
113
|
|
|
@@ -112,7 +115,7 @@ function FocusableComponent(props: Props, forwardedRef) {
|
|
|
112
115
|
unregister();
|
|
113
116
|
};
|
|
114
117
|
}
|
|
115
|
-
}, [id, onRegister, isFocusableCell]);
|
|
118
|
+
}, [id, onRegister, isFocusableCell, parentFocusableId]);
|
|
116
119
|
|
|
117
120
|
if (R.isNil(id)) {
|
|
118
121
|
// eslint-disable-next-line no-console
|
|
@@ -164,8 +167,9 @@ function FocusableComponent(props: Props, forwardedRef) {
|
|
|
164
167
|
...parentFocus,
|
|
165
168
|
ref: touchableRef,
|
|
166
169
|
setIsFocusable,
|
|
170
|
+
parentFocusableId: id,
|
|
167
171
|
};
|
|
168
|
-
}, [parentFocus, focused]);
|
|
172
|
+
}, [parentFocus, focused, id]);
|
|
169
173
|
|
|
170
174
|
return (
|
|
171
175
|
<Touchable
|
|
@@ -86,7 +86,7 @@ export function masterCellBuilder({
|
|
|
86
86
|
entry: item,
|
|
87
87
|
state: getEntryState(state, entryIsSelected),
|
|
88
88
|
}),
|
|
89
|
-
[state, item
|
|
89
|
+
[state, item, entryIsSelected] // Assuming that item won't mutate
|
|
90
90
|
);
|
|
91
91
|
|
|
92
92
|
const wrapperRef = React.useRef(null);
|
|
@@ -4,8 +4,8 @@ which helps in detecting whether a given component is visible within the viewpor
|
|
|
4
4
|
It is useful for implementing lazy loading or triggering specific actions when a component comes into view.
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import React, {
|
|
8
|
-
import {
|
|
7
|
+
import React, { FC, ReactNode, useEffect, useRef, useState } from "react";
|
|
8
|
+
import { Dimensions, View } from "react-native";
|
|
9
9
|
import { useIsRTL } from "@applicaster/zapp-react-native-utils/localizationUtils";
|
|
10
10
|
import { isTV } from "@applicaster/zapp-react-native-utils/reactUtils";
|
|
11
11
|
|
|
@@ -78,7 +78,7 @@ const VisibilitySensorComponent: FC<Props> = ({
|
|
|
78
78
|
};
|
|
79
79
|
|
|
80
80
|
const stopWatching = () => {
|
|
81
|
-
|
|
81
|
+
clearInterval(interval);
|
|
82
82
|
};
|
|
83
83
|
|
|
84
84
|
const isInViewPort = () => {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@applicaster/zapp-react-native-ui-components",
|
|
3
|
-
"version": "14.0.0-alpha.
|
|
3
|
+
"version": "14.0.0-alpha.1308901965",
|
|
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",
|
|
@@ -31,10 +31,10 @@
|
|
|
31
31
|
"redux-mock-store": "^1.5.3"
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@applicaster/applicaster-types": "14.0.0-alpha.
|
|
35
|
-
"@applicaster/zapp-react-native-bridge": "14.0.0-alpha.
|
|
36
|
-
"@applicaster/zapp-react-native-redux": "14.0.0-alpha.
|
|
37
|
-
"@applicaster/zapp-react-native-utils": "14.0.0-alpha.
|
|
34
|
+
"@applicaster/applicaster-types": "14.0.0-alpha.1308901965",
|
|
35
|
+
"@applicaster/zapp-react-native-bridge": "14.0.0-alpha.1308901965",
|
|
36
|
+
"@applicaster/zapp-react-native-redux": "14.0.0-alpha.1308901965",
|
|
37
|
+
"@applicaster/zapp-react-native-utils": "14.0.0-alpha.1308901965",
|
|
38
38
|
"promise": "^8.3.0",
|
|
39
39
|
"url": "^0.11.0",
|
|
40
40
|
"uuid": "^3.3.2"
|