@applicaster/zapp-react-native-ui-components 14.0.0-alpha.5521273514 → 14.0.0-alpha.5594607030

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.
Files changed (120) hide show
  1. package/Components/AnimatedInOut/index.tsx +5 -3
  2. package/Components/AudioPlayer/index.tsx +15 -0
  3. package/Components/AudioPlayer/mobile/Layout.tsx +66 -0
  4. package/Components/AudioPlayer/{__tests__/__snapshots__/audioPlayer.test.js.snap → mobile/__tests__/__snapshots__/audioPlayerMobileLayout.test.js.snap} +2 -2
  5. package/Components/AudioPlayer/mobile/__tests__/audioPlayerMobileLayout.test.js +18 -0
  6. package/Components/AudioPlayer/mobile/index.tsx +18 -0
  7. package/Components/AudioPlayer/tv/Artwork.tsx +41 -0
  8. package/Components/AudioPlayer/{Channel.tsx → tv/Channel.tsx} +7 -7
  9. package/Components/AudioPlayer/tv/Layout.tsx +168 -0
  10. package/Components/AudioPlayer/{Runtime.tsx → tv/Runtime.tsx} +9 -2
  11. package/Components/AudioPlayer/{Summary.tsx → tv/Summary.tsx} +17 -10
  12. package/Components/AudioPlayer/tv/Title.tsx +46 -0
  13. package/Components/AudioPlayer/{__tests__ → tv/__tests__}/__snapshots__/Runtime.test.js.snap +4 -4
  14. package/Components/AudioPlayer/{__tests__ → tv/__tests__}/__snapshots__/artWork.test.js.snap +9 -4
  15. package/Components/AudioPlayer/tv/__tests__/__snapshots__/audioPlayer.test.js.snap +164 -0
  16. package/Components/AudioPlayer/tv/__tests__/__snapshots__/channel.test.js.snap +19 -0
  17. package/Components/AudioPlayer/{__tests__ → tv/__tests__}/__snapshots__/summary.test.js.snap +2 -3
  18. package/Components/AudioPlayer/{__tests__ → tv/__tests__}/__snapshots__/title.test.js.snap +2 -3
  19. package/Components/AudioPlayer/{__tests__ → tv/__tests__}/audioPlayer.test.js +7 -3
  20. package/Components/AudioPlayer/{helpers.tsx → tv/helpers.tsx} +13 -7
  21. package/Components/AudioPlayer/{AudioPlayer.tsx → tv/index.tsx} +18 -57
  22. package/Components/AudioPlayer/types.ts +40 -0
  23. package/Components/Cell/index.js +1 -1
  24. package/Components/ComponentResolver/index.ts +1 -1
  25. package/Components/FeedLoader/index.js +1 -1
  26. package/Components/Focusable/Focusable.tsx +5 -3
  27. package/Components/Focusable/FocusableTvOS.tsx +3 -3
  28. package/Components/Focusable/FocusableiOS.tsx +2 -2
  29. package/Components/Focusable/__tests__/index.android.test.tsx +3 -0
  30. package/Components/Focusable/index.android.tsx +12 -8
  31. package/Components/Focusable/index.tsx +1 -1
  32. package/Components/FocusableList/index.tsx +4 -0
  33. package/Components/GeneralContentScreen/GeneralContentScreen.tsx +0 -2
  34. package/Components/GeneralContentScreen/utils/__tests__/useCurationAPI.test.js +42 -59
  35. package/Components/GeneralContentScreen/utils/useCurationAPI.ts +12 -8
  36. package/Components/HandlePlayable/HandlePlayable.tsx +25 -9
  37. package/Components/Layout/TV/LayoutBackground.tsx +1 -1
  38. package/Components/MasterCell/DefaultComponents/Button.tsx +1 -1
  39. package/Components/MasterCell/DefaultComponents/FocusableView/index.tsx +4 -27
  40. package/Components/MasterCell/DefaultComponents/Image/hoc/withDimensions.tsx +1 -1
  41. package/Components/MasterCell/DefaultComponents/ImageContainer/index.tsx +1 -1
  42. package/Components/MasterCell/DefaultComponents/Text/index.tsx +1 -0
  43. package/Components/MasterCell/elementMapper.tsx +1 -2
  44. package/Components/MasterCell/index.tsx +1 -1
  45. package/Components/MasterCell/utils/behaviorProvider.ts +82 -14
  46. package/Components/MasterCell/utils/index.ts +23 -3
  47. package/Components/OfflineHandler/NotificationView/__tests__/index.test.tsx +13 -18
  48. package/Components/OfflineHandler/__tests__/__snapshots__/index.test.tsx.snap +9 -0
  49. package/Components/OfflineHandler/__tests__/index.test.tsx +20 -22
  50. package/Components/PlayerContainer/ErrorDisplay/index.ts +1 -1
  51. package/Components/PlayerContainer/PlayerContainer.tsx +43 -30
  52. package/Components/PlayerContainer/ProgramInfo/index.tsx +1 -1
  53. package/Components/PlayerContainer/index.ts +1 -1
  54. package/Components/PlayerImageBackground/index.tsx +1 -1
  55. package/Components/River/ComponentsMap/ComponentsMap.tsx +1 -6
  56. package/Components/River/RefreshControl.tsx +6 -4
  57. package/Components/River/RiverItem.tsx +8 -8
  58. package/Components/River/TV/River.tsx +2 -20
  59. package/Components/River/TV/index.tsx +3 -1
  60. package/Components/River/TV/withPipesV1DataLoader.tsx +43 -0
  61. package/Components/River/TV/withRiverDataLoader.tsx +17 -0
  62. package/Components/River/TV/withTVEventHandler.tsx +1 -1
  63. package/Components/River/__tests__/__snapshots__/componentsMap.test.js.snap +2 -6
  64. package/Components/River/index.tsx +1 -1
  65. package/Components/Screen/__tests__/Screen.test.tsx +23 -12
  66. package/Components/ScreenRevealManager/ScreenRevealManager.ts +76 -0
  67. package/Components/ScreenRevealManager/__tests__/ScreenRevealManager.test.ts +107 -0
  68. package/Components/ScreenRevealManager/__tests__/withScreenRevealManager.test.tsx +96 -0
  69. package/Components/ScreenRevealManager/index.ts +1 -0
  70. package/Components/ScreenRevealManager/withScreenRevealManager.tsx +79 -0
  71. package/Components/Tabs/TV/Tabs.android.tsx +0 -2
  72. package/Components/TopMarginApplicator/TopMarginApplicator.tsx +16 -15
  73. package/Components/Touchable/__tests__/__snapshots__/touchable.test.tsx.snap +34 -0
  74. package/Components/Transitioner/Scene.tsx +1 -0
  75. package/Components/Transitioner/__tests__/__snapshots__/Scene.test.js.snap +15 -9
  76. package/Components/VideoLive/animationUtils.ts +3 -3
  77. package/Components/VideoModal/ModalAnimation/ModalAnimationContext.tsx +32 -8
  78. package/Components/VideoModal/PlayerDetails.tsx +24 -2
  79. package/Components/VideoModal/PlayerWrapper.tsx +26 -142
  80. package/Components/VideoModal/VideoModal.tsx +3 -17
  81. package/Components/VideoModal/__tests__/PlayerWrapper.test.tsx +1 -7
  82. package/Components/VideoModal/__tests__/__snapshots__/PlayerWrapper.test.tsx.snap +44 -180
  83. package/Components/VideoModal/hooks/__tests__/useDelayedPlayerDetails.test.ts +17 -55
  84. package/Components/VideoModal/hooks/index.ts +0 -2
  85. package/Components/VideoModal/hooks/useDelayedPlayerDetails.ts +15 -26
  86. package/Components/VideoModal/hooks/useModalSize.ts +18 -2
  87. package/Components/VideoModal/utils.ts +6 -0
  88. package/Components/Viewport/ViewportAware/__tests__/viewportAware.test.js +12 -16
  89. package/Components/Viewport/ViewportTracker/__tests__/viewportTracker.test.js +84 -24
  90. package/Decorators/ConfigurationWrapper/withConfigurationProvider.tsx +2 -2
  91. package/Decorators/RiverFeedLoader/index.tsx +8 -2
  92. package/Decorators/RiverFeedLoader/utils/index.ts +7 -2
  93. package/Decorators/RiverResolver/__tests__/riverResolver.test.tsx +3 -6
  94. package/Decorators/ZappPipesDataConnector/ResolverSelector.tsx +25 -0
  95. package/Decorators/ZappPipesDataConnector/__tests__/NullFeedResolver.test.tsx +78 -0
  96. package/Decorators/ZappPipesDataConnector/__tests__/ResolverSelector.test.tsx +205 -0
  97. package/Decorators/ZappPipesDataConnector/__tests__/StaticFeedResolver.test.tsx +251 -0
  98. package/Decorators/ZappPipesDataConnector/__tests__/UrlFeedResolver.test.tsx +368 -0
  99. package/Decorators/ZappPipesDataConnector/__tests__/utils.test.ts +39 -0
  100. package/Decorators/ZappPipesDataConnector/index.tsx +26 -293
  101. package/Decorators/ZappPipesDataConnector/resolvers/NullFeedResolver.tsx +25 -0
  102. package/Decorators/ZappPipesDataConnector/resolvers/StaticFeedResolver.tsx +87 -0
  103. package/Decorators/ZappPipesDataConnector/resolvers/UrlFeedResolver.tsx +255 -0
  104. package/Decorators/ZappPipesDataConnector/types.ts +29 -0
  105. package/Decorators/ZappPipesDataConnector/utils/index.ts +40 -0
  106. package/index.d.ts +0 -1
  107. package/package.json +5 -9
  108. package/Components/AudioPlayer/Artwork.tsx +0 -35
  109. package/Components/AudioPlayer/AudioPlayerLayout.tsx +0 -202
  110. package/Components/AudioPlayer/Title.tsx +0 -39
  111. package/Components/AudioPlayer/__tests__/__snapshots__/audioPlayerLayout.test.js.snap +0 -66
  112. package/Components/AudioPlayer/__tests__/__snapshots__/channel.test.js.snap +0 -28
  113. package/Components/AudioPlayer/__tests__/audioPlayerLayout.test.js +0 -26
  114. package/Components/AudioPlayer/index.ts +0 -1
  115. package/Components/VideoModal/hooks/useBackgroundColor.ts +0 -10
  116. /package/Components/AudioPlayer/{__tests__ → tv/__tests__}/Runtime.test.js +0 -0
  117. /package/Components/AudioPlayer/{__tests__ → tv/__tests__}/artWork.test.js +0 -0
  118. /package/Components/AudioPlayer/{__tests__ → tv/__tests__}/channel.test.js +0 -0
  119. /package/Components/AudioPlayer/{__tests__ → tv/__tests__}/summary.test.js +0 -0
  120. /package/Components/AudioPlayer/{__tests__ → tv/__tests__}/title.test.js +0 -0
@@ -4,9 +4,11 @@ import { usePrevious } from "@applicaster/zapp-react-native-utils/reactHooks/uti
4
4
  import { toBooleanWithDefaultFalse } from "@applicaster/zapp-react-native-utils/booleanUtils";
5
5
  import { noop } from "@applicaster/zapp-react-native-utils/functionUtils";
6
6
 
7
- type AnimatedInterpolatedStyle =
8
- | Animated.AnimatedInterpolation
9
- | [{ [Key: string]: Animated.AnimatedInterpolation }];
7
+ type AnimatedInterpolatedStyle = any;
8
+
9
+ // type AnimatedInterpolatedStyle =
10
+ // | Animated.AnimatedInterpolation
11
+ // | [{ [Key: string]: Animated.AnimatedInterpolation }];
10
12
 
11
13
  type AnimationConfig = {
12
14
  duration: number;
@@ -0,0 +1,15 @@
1
+ import * as React from "react";
2
+ import { isTV } from "@applicaster/zapp-react-native-utils/reactUtils";
3
+
4
+ import { AudioPlayerTV } from "./tv";
5
+ import { AudioPlayerMobile } from "./mobile";
6
+
7
+ import { Props } from "./types";
8
+
9
+ export function AudioPlayer(props: Props) {
10
+ if (isTV()) {
11
+ return <AudioPlayerTV {...props} />;
12
+ }
13
+
14
+ return <AudioPlayerMobile {...props} />;
15
+ }
@@ -0,0 +1,66 @@
1
+ import React, { useRef } from "react";
2
+ import {
3
+ View,
4
+ ImageBackground,
5
+ Animated,
6
+ ViewStyle,
7
+ StyleSheet,
8
+ } from "react-native";
9
+ import { platformSelect } from "@applicaster/zapp-react-native-utils/reactUtils";
10
+
11
+ const THREE_SECONDS = 3000;
12
+
13
+ const styles = StyleSheet.create({
14
+ flex: {
15
+ flex: 1,
16
+ },
17
+ });
18
+
19
+ type Props = {
20
+ backgroundImageSource: { uri: string };
21
+ style: ViewStyle;
22
+ };
23
+
24
+ export function AudioPlayerMobileLayout({
25
+ backgroundImageSource,
26
+ style,
27
+ }: Props) {
28
+ const fadeAnimation = useRef(new Animated.Value(0)).current;
29
+
30
+ const mainContainerStyles: ViewStyle = platformSelect({
31
+ native: {
32
+ backgroundColor: "transparent",
33
+ overflow: "hidden",
34
+ ...style,
35
+ },
36
+ });
37
+
38
+ React.useEffect(() => {
39
+ Animated.timing(fadeAnimation, {
40
+ toValue: 1,
41
+ duration: THREE_SECONDS,
42
+ useNativeDriver: true,
43
+ }).start();
44
+ }, []);
45
+
46
+ return (
47
+ <View style={mainContainerStyles} pointerEvents="none">
48
+ <Animated.View
49
+ style={[
50
+ mainContainerStyles,
51
+ {
52
+ opacity: fadeAnimation,
53
+ },
54
+ ]}
55
+ >
56
+ <ImageBackground
57
+ source={backgroundImageSource}
58
+ style={styles.flex}
59
+ resizeMode="cover"
60
+ >
61
+ <View style={mainContainerStyles} />
62
+ </ImageBackground>
63
+ </Animated.View>
64
+ </View>
65
+ );
66
+ }
@@ -1,6 +1,6 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
- exports[`<AudioPlayer /> renders correctly 1`] = `
3
+ exports[`<AudioPlayerMobileLayout /> renders correctly 1`] = `
4
4
  <View
5
5
  pointerEvents="none"
6
6
  style={
@@ -32,7 +32,7 @@ exports[`<AudioPlayer /> renders correctly 1`] = `
32
32
  resizeMode="cover"
33
33
  source={
34
34
  {
35
- "uri": "https://example.com",
35
+ "uri": "background_image_url",
36
36
  }
37
37
  }
38
38
  style={
@@ -0,0 +1,18 @@
1
+ import React from "react";
2
+ import { render } from "@testing-library/react-native";
3
+
4
+ import { AudioPlayerMobileLayout } from "../Layout";
5
+
6
+ const audioPlayerLayoutProps = {
7
+ backgroundImageSource: { uri: "background_image_url" },
8
+ };
9
+
10
+ describe("<AudioPlayerMobileLayout />", () => {
11
+ it("renders correctly", () => {
12
+ const { toJSON } = render(
13
+ <AudioPlayerMobileLayout {...audioPlayerLayoutProps} />
14
+ );
15
+
16
+ expect(toJSON()).toMatchSnapshot();
17
+ });
18
+ });
@@ -0,0 +1,18 @@
1
+ import * as React from "react";
2
+ import { useBackgroundImage } from "@applicaster/zapp-react-native-utils/audioPlayerUtils";
3
+
4
+ import { AudioPlayerMobileLayout } from "./Layout";
5
+ import { Props } from "../types";
6
+
7
+ export function AudioPlayerMobile(props: Props) {
8
+ const { audio_item, style = {} } = props;
9
+
10
+ const backgroundImageSource = useBackgroundImage(audio_item);
11
+
12
+ return (
13
+ <AudioPlayerMobileLayout
14
+ backgroundImageSource={backgroundImageSource}
15
+ style={style}
16
+ />
17
+ );
18
+ }
@@ -0,0 +1,41 @@
1
+ import React from "react";
2
+ import { View, StyleSheet } from "react-native";
3
+ import { QBImage } from "@applicaster/zapp-react-native-ui-components/Components/Image";
4
+ import { toNumberWithDefaultZero } from "@applicaster/zapp-react-native-utils/numberUtils";
5
+
6
+ const styles = StyleSheet.create({
7
+ container: {
8
+ marginHorizontal: 24,
9
+ },
10
+ image: {
11
+ width: 400,
12
+ height: 400,
13
+ },
14
+ });
15
+
16
+ type Props = {
17
+ srcImage: string;
18
+ config?: {
19
+ titleColor: string;
20
+ summaryColor: string;
21
+ backgroundColor: string;
22
+ backgroundImage: string;
23
+ isRTL: boolean;
24
+ artworkBorderRadius: Option<number>;
25
+ };
26
+ };
27
+
28
+ export function Artwork({ srcImage, config }: Props) {
29
+ const borderRadius = toNumberWithDefaultZero(config.artworkBorderRadius);
30
+
31
+ return (
32
+ <View style={styles.container}>
33
+ <QBImage
34
+ fadeDuration={0}
35
+ source={{ uri: srcImage }}
36
+ style={[styles.image, { borderRadius }]}
37
+ resizeMode="cover"
38
+ />
39
+ </View>
40
+ );
41
+ }
@@ -1,5 +1,6 @@
1
1
  import React from "react";
2
- import { View, Image } from "react-native";
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
- <View style={containerStyles}>
28
- <Image fadeDuration={0} source={{ uri: srcImage }} style={imageStyles} />
29
- </View>
29
+ <Image fadeDuration={0} source={{ uri: srcImage }} style={imageStyles} />
30
30
  );
31
31
  }
@@ -0,0 +1,168 @@
1
+ import * as React from "react";
2
+ import { ImageBackground, View, ViewStyle } from "react-native";
3
+
4
+ import { platformSelect } from "@applicaster/zapp-react-native-utils/reactUtils";
5
+
6
+ import { Artwork } from "./Artwork";
7
+ import { directionStyles } from "./helpers";
8
+
9
+ type Props = {
10
+ artwork: string;
11
+ config: {
12
+ titleColor: string;
13
+ summaryColor: string;
14
+ backgroundImageOverlay?: string;
15
+ backgroundColor: string;
16
+ backgroundImage: Option<string>;
17
+ isRTL: boolean;
18
+ artworkBorderRadius: Option<number>;
19
+ };
20
+ children: React.ReactNode;
21
+ style: ViewStyle;
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
+
50
+ export function AudioPlayerTVLayout({
51
+ artwork,
52
+ config,
53
+ children,
54
+ style,
55
+ }: Props) {
56
+ const { backgroundColor, backgroundImage, backgroundImageOverlay, isRTL } =
57
+ config;
58
+
59
+ const backgroundImageSource = { uri: backgroundImage };
60
+
61
+ const backgroundColorStyle = backgroundImage
62
+ ? "transparent"
63
+ : backgroundColor;
64
+
65
+ const textContainerStyles = platformSelect({
66
+ tvos: {
67
+ justifyContent: "center",
68
+ alignItems: directionStyles(isRTL).justifyContent,
69
+ },
70
+ android_tv: {
71
+ justifyContent: "center",
72
+ alignItems: directionStyles(isRTL).justifyContent,
73
+ },
74
+ web: {
75
+ justifyContent: "center",
76
+ alignItems: directionStyles(isRTL).justifyContent,
77
+ },
78
+ });
79
+
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
+ );
139
+
140
+ const backgroundOverlayStyles = React.useMemo(
141
+ () => ({
142
+ backgroundColor: backgroundImageOverlay,
143
+ }),
144
+ [backgroundImageOverlay]
145
+ );
146
+
147
+ if (backgroundImage) {
148
+ return (
149
+ <ImageBackground
150
+ source={backgroundImageSource}
151
+ style={backgroundImgStyles}
152
+ resizeMode="cover"
153
+ >
154
+ <View style={[mainContainerStyles, backgroundOverlayStyles]}>
155
+ <Artwork srcImage={artwork} config={config} />
156
+ <View style={textContainerStyles}>{children}</View>
157
+ </View>
158
+ </ImageBackground>
159
+ );
160
+ }
161
+
162
+ return (
163
+ <View style={mainContainerStyles}>
164
+ <Artwork srcImage={artwork} config={config} />
165
+ <View style={textContainerStyles}>{children}</View>
166
+ </View>
167
+ );
168
+ }
@@ -1,5 +1,8 @@
1
1
  import React from "react";
2
2
  import { View, Text, ViewStyle, TextStyle } from "react-native";
3
+ import { toNumberWithDefault } from "@applicaster/zapp-react-native-utils/numberUtils";
4
+ import { isNilOrEmpty } from "@applicaster/zapp-react-native-utils/reactUtils/helpers";
5
+
3
6
  import { directionStyles } from "./helpers";
4
7
 
5
8
  type Props = {
@@ -18,7 +21,6 @@ type Props = {
18
21
 
19
22
  const containerStyles = ({ isRTL }) => ({
20
23
  width: 600,
21
- height: 40,
22
24
  justifyContent: directionStyles(isRTL)
23
25
  .justifyContent as ViewStyle["justifyContent"],
24
26
  });
@@ -31,17 +33,22 @@ const textStyles = ({
31
33
  }) => ({
32
34
  color: summaryColor,
33
35
  opacity: 0.8,
34
- fontSize: runTimeFontSize ? Number(runTimeFontSize) : 20,
36
+ fontSize: toNumberWithDefault(20, runTimeFontSize),
35
37
  fontFamily: runTimeFontFamily || null,
36
38
  ...directionStyles(isRTL),
37
39
  });
38
40
 
39
41
  export function Runtime({ start_time, end_time, config }: Props) {
42
+ if (isNilOrEmpty(start_time) && isNilOrEmpty(end_time)) {
43
+ return null;
44
+ }
45
+
40
46
  return (
41
47
  <View style={containerStyles({ isRTL: config.isRTL })}>
42
48
  {!!start_time && !!end_time && (
43
49
  <Text
44
50
  style={textStyles(config) as TextStyle}
51
+ numberOfLines={1}
45
52
  >{`${start_time} - ${end_time}`}</Text>
46
53
  )}
47
54
  </View>
@@ -1,5 +1,7 @@
1
1
  import React from "react";
2
- import { View, Text, TextStyle } from "react-native";
2
+ import { View, Text, TextStyle, StyleSheet } from "react-native";
3
+ import { toNumberWithDefault } from "@applicaster/zapp-react-native-utils/numberUtils";
4
+ import { isNilOrEmpty } from "@applicaster/zapp-react-native-utils/reactUtils/helpers";
3
5
 
4
6
  type Props = {
5
7
  config: {
@@ -14,11 +16,12 @@ type Props = {
14
16
  summary: string | number;
15
17
  };
16
18
 
17
- const containerStyles = {
18
- width: 600,
19
- height: 80,
20
- marginBottom: 30,
21
- };
19
+ const styles = StyleSheet.create({
20
+ container: {
21
+ width: 600,
22
+ marginBottom: 30,
23
+ },
24
+ });
22
25
 
23
26
  const textStyles = ({
24
27
  summaryColor,
@@ -26,8 +29,8 @@ const textStyles = ({
26
29
  summaryFontFamily,
27
30
  summaryFontSize,
28
31
  }) => ({
29
- textAlign: (isRTL ? "left" : "right") as TextStyle["textAlign"],
30
- fontSize: summaryFontSize ? Number(summaryFontSize) : 20,
32
+ textAlign: (isRTL ? "right" : "left") as TextStyle["textAlign"],
33
+ fontSize: toNumberWithDefault(20, summaryFontSize),
31
34
  color: summaryColor,
32
35
  fontWeight: "600" as TextStyle["fontWeight"],
33
36
  opacity: 0.8,
@@ -35,9 +38,13 @@ const textStyles = ({
35
38
  });
36
39
 
37
40
  export function Summary({ summary, config }: Props) {
41
+ if (isNilOrEmpty(summary)) {
42
+ return null;
43
+ }
44
+
38
45
  return (
39
- <View style={containerStyles}>
40
- <Text style={textStyles(config)} numberOfLines={2}>
46
+ <View style={styles.container}>
47
+ <Text style={textStyles(config)} numberOfLines={3}>
41
48
  {summary}
42
49
  </Text>
43
50
  </View>
@@ -0,0 +1,46 @@
1
+ import React from "react";
2
+ import { View, Text, TextStyle, StyleSheet } from "react-native";
3
+ import { toNumberWithDefault } from "@applicaster/zapp-react-native-utils/numberUtils";
4
+ import { isNilOrEmpty } from "@applicaster/zapp-react-native-utils/reactUtils/helpers";
5
+
6
+ type Props = {
7
+ config: {
8
+ titleColor: string;
9
+ summaryColor: string;
10
+ backgroundColor: string;
11
+ backgroundImage: string;
12
+ isRTL: boolean;
13
+ titleFontFamily: string;
14
+ titleFontSize: number;
15
+ };
16
+ title: string | number;
17
+ };
18
+
19
+ const styles = StyleSheet.create({
20
+ container: {
21
+ width: 600,
22
+ marginBottom: 12,
23
+ },
24
+ });
25
+
26
+ const textStyles = ({ titleColor, isRTL, titleFontFamily, titleFontSize }) => ({
27
+ textAlign: (isRTL ? "right" : "left") as TextStyle["textAlign"],
28
+ fontSize: toNumberWithDefault(38, titleFontSize),
29
+ fontWeight: "600" as TextStyle["fontWeight"],
30
+ color: titleColor,
31
+ fontFamily: titleFontFamily || null,
32
+ });
33
+
34
+ export function Title({ title, config }: Props) {
35
+ if (isNilOrEmpty(title)) {
36
+ return null;
37
+ }
38
+
39
+ return (
40
+ <View style={styles.container}>
41
+ <Text style={textStyles(config)} numberOfLines={3}>
42
+ {title}
43
+ </Text>
44
+ </View>
45
+ );
46
+ }
@@ -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",
@@ -20,7 +20,7 @@ exports[`<Runtime /> LTR renders correctly 1`] = `
20
20
  "fontSize": 20,
21
21
  "justifyContent": "flex-start",
22
22
  "opacity": 0.8,
23
- "textAlign": "right",
23
+ "textAlign": "left",
24
24
  }
25
25
  }
26
26
  >
@@ -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",
@@ -49,7 +49,7 @@ exports[`<Runtime /> RTL renders correctly 1`] = `
49
49
  "fontSize": 20,
50
50
  "justifyContent": "flex-end",
51
51
  "opacity": 0.8,
52
- "textAlign": "left",
52
+ "textAlign": "right",
53
53
  }
54
54
  }
55
55
  >
@@ -17,10 +17,15 @@ exports[`<Artwork /> renders correctly 1`] = `
17
17
  }
18
18
  }
19
19
  style={
20
- {
21
- "height": 400,
22
- "width": 400,
23
- }
20
+ [
21
+ {
22
+ "height": 400,
23
+ "width": 400,
24
+ },
25
+ {
26
+ "borderRadius": 0,
27
+ },
28
+ ]
24
29
  }
25
30
  />
26
31
  </View>