@applicaster/zapp-react-native-ui-components 14.0.0-rc.9 → 15.0.0-alpha.1089439460

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 (183) hide show
  1. package/Components/AnimatedInOut/index.tsx +68 -23
  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/{Artwork.tsx → tv/Artwork.tsx} +3 -2
  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} +7 -1
  11. package/Components/AudioPlayer/{Summary.tsx → tv/Summary.tsx} +6 -2
  12. package/Components/AudioPlayer/{Title.tsx → tv/Title.tsx} +6 -2
  13. package/Components/AudioPlayer/{__tests__ → tv/__tests__}/__snapshots__/Runtime.test.js.snap +2 -2
  14. package/Components/AudioPlayer/tv/__tests__/__snapshots__/audioPlayer.test.js.snap +164 -0
  15. package/Components/AudioPlayer/tv/__tests__/__snapshots__/channel.test.js.snap +19 -0
  16. package/Components/AudioPlayer/{__tests__ → tv/__tests__}/__snapshots__/summary.test.js.snap +1 -2
  17. package/Components/AudioPlayer/{__tests__ → tv/__tests__}/__snapshots__/title.test.js.snap +1 -2
  18. package/Components/AudioPlayer/{__tests__ → tv/__tests__}/audioPlayer.test.js +7 -3
  19. package/Components/AudioPlayer/{helpers.tsx → tv/helpers.tsx} +11 -5
  20. package/Components/AudioPlayer/{AudioPlayer.tsx → tv/index.tsx} +17 -58
  21. package/Components/AudioPlayer/types.ts +40 -0
  22. package/Components/BaseFocusable/index.tsx +23 -12
  23. package/Components/Cell/Cell.tsx +91 -64
  24. package/Components/Cell/CellWithFocusable.tsx +3 -0
  25. package/Components/Cell/FocusableWrapper.tsx +44 -0
  26. package/Components/Cell/TvOSCellComponent.tsx +92 -17
  27. package/Components/Cell/__tests__/CellWIthFocusable.test.js +3 -2
  28. package/Components/Cell/index.js +7 -3
  29. package/Components/ComponentResolver/index.ts +1 -1
  30. package/Components/FeedLoader/FeedLoader.tsx +7 -16
  31. package/Components/FeedLoader/FeedLoaderHOC.tsx +21 -0
  32. package/Components/FeedLoader/index.js +2 -8
  33. package/Components/Focusable/Focusable.tsx +12 -3
  34. package/Components/Focusable/FocusableTvOS.tsx +5 -5
  35. package/Components/Focusable/FocusableiOS.tsx +2 -2
  36. package/Components/Focusable/Touchable.tsx +5 -3
  37. package/Components/Focusable/__tests__/index.android.test.tsx +3 -0
  38. package/Components/Focusable/index.android.tsx +19 -11
  39. package/Components/Focusable/index.tsx +1 -1
  40. package/Components/FocusableGroup/FocusableTvOS.tsx +1 -1
  41. package/Components/FocusableList/FocusableItem.tsx +4 -3
  42. package/Components/FocusableList/FocusableListItemWrapper.tsx +2 -1
  43. package/Components/FocusableList/hooks/useCellState.android.ts +13 -3
  44. package/Components/FocusableList/index.tsx +20 -9
  45. package/Components/FreezeWithCallback/__tests__/index.test.tsx +67 -43
  46. package/Components/GeneralContentScreen/utils/__tests__/useCurationAPI.test.js +42 -59
  47. package/Components/GeneralContentScreen/utils/useCurationAPI.ts +22 -21
  48. package/Components/HandlePlayable/HandlePlayable.tsx +39 -74
  49. package/Components/HandlePlayable/const.ts +3 -0
  50. package/Components/HandlePlayable/utils.ts +74 -0
  51. package/Components/HookRenderer/HookRenderer.tsx +5 -1
  52. package/Components/Layout/TV/LayoutBackground.tsx +1 -1
  53. package/Components/Layout/TV/__tests__/index.test.tsx +0 -1
  54. package/Components/MasterCell/DefaultComponents/ActionButton.tsx +6 -2
  55. package/Components/MasterCell/DefaultComponents/Button.tsx +1 -1
  56. package/Components/MasterCell/DefaultComponents/FocusableView/index.tsx +4 -39
  57. package/Components/MasterCell/DefaultComponents/Image/hoc/withDimensions.tsx +1 -1
  58. package/Components/MasterCell/DefaultComponents/ImageContainer/index.tsx +1 -1
  59. package/Components/MasterCell/DefaultComponents/SecondaryImage/Image.tsx +65 -17
  60. package/Components/MasterCell/DefaultComponents/SecondaryImage/__tests__/Image.test.tsx +21 -3
  61. package/Components/MasterCell/DefaultComponents/SecondaryImage/__tests__/__snapshots__/Image.test.tsx.snap +6 -3
  62. package/Components/MasterCell/DefaultComponents/Text/index.tsx +26 -6
  63. package/Components/MasterCell/DefaultComponents/__tests__/image.test.js +10 -10
  64. package/Components/MasterCell/DefaultComponents/__tests__/text.test.tsx +18 -18
  65. package/Components/MasterCell/SharedUI/CollapsibleTextContainer/__tests__/index.test.tsx +10 -10
  66. package/Components/MasterCell/elementMapper.tsx +1 -2
  67. package/Components/MasterCell/index.tsx +1 -1
  68. package/Components/MasterCell/utils/behaviorProvider.ts +82 -14
  69. package/Components/MasterCell/utils/index.ts +11 -5
  70. package/Components/OfflineHandler/NotificationView/__tests__/index.test.tsx +13 -18
  71. package/Components/OfflineHandler/__tests__/__snapshots__/index.test.tsx.snap +9 -0
  72. package/Components/OfflineHandler/__tests__/index.test.tsx +26 -35
  73. package/Components/PlayerContainer/ErrorDisplay/index.ts +1 -1
  74. package/Components/PlayerContainer/PlayerContainer.tsx +45 -47
  75. package/Components/PlayerContainer/ProgramInfo/index.tsx +1 -1
  76. package/Components/PlayerContainer/index.ts +1 -1
  77. package/Components/PlayerImageBackground/index.tsx +4 -23
  78. package/Components/River/ComponentsMap/ComponentsMap.tsx +49 -43
  79. package/Components/River/ComponentsMap/ContextProviders/ComponentsMapHeightContext.ts +8 -0
  80. package/Components/River/ComponentsMap/ContextProviders/ComponentsMapRefContext.ts +8 -0
  81. package/Components/River/ComponentsMap/hooks/__tests__/useLoadingState.test.ts +378 -0
  82. package/Components/River/ComponentsMap/hooks/useLoadingState.ts +2 -2
  83. package/Components/River/RefreshControl.tsx +11 -17
  84. package/Components/River/RiverItem.tsx +3 -0
  85. package/Components/River/TV/River.tsx +2 -17
  86. package/Components/River/TV/index.tsx +3 -1
  87. package/Components/River/TV/withPipesV1DataLoader.tsx +43 -0
  88. package/Components/River/TV/withRiverDataLoader.tsx +17 -0
  89. package/Components/River/TV/withTVEventHandler.tsx +1 -1
  90. package/Components/River/__tests__/__snapshots__/componentsMap.test.js.snap +2 -0
  91. package/Components/River/__tests__/river.test.js +12 -26
  92. package/Components/River/index.tsx +1 -1
  93. package/Components/Screen/TV/hooks/useInitialFocus.ts +14 -4
  94. package/Components/Screen/__tests__/Screen.test.tsx +28 -29
  95. package/Components/Screen/__tests__/__snapshots__/Screen.test.tsx.snap +2 -0
  96. package/Components/Screen/__tests__/navigationHandler.test.ts +133 -22
  97. package/Components/Screen/index.tsx +22 -5
  98. package/Components/Screen/navigationHandler.ts +20 -2
  99. package/Components/ScreenResolver/index.tsx +22 -1
  100. package/Components/ScreenRevealManager/ScreenRevealManager.ts +76 -0
  101. package/Components/ScreenRevealManager/__tests__/ScreenRevealManager.test.ts +107 -0
  102. package/Components/ScreenRevealManager/__tests__/withScreenRevealManager.test.tsx +96 -0
  103. package/Components/ScreenRevealManager/index.ts +1 -0
  104. package/Components/ScreenRevealManager/utils/index.ts +23 -0
  105. package/Components/ScreenRevealManager/withScreenRevealManager.tsx +109 -0
  106. package/Components/Tabs/TV/Tabs.android.tsx +1 -3
  107. package/Components/Tabs/Tabs.tsx +2 -3
  108. package/Components/TextInputTv/__tests__/__snapshots__/TextInputTv.test.js.snap +13 -0
  109. package/Components/TextInputTv/index.tsx +11 -0
  110. package/Components/Touchable/__tests__/__snapshots__/touchable.test.tsx.snap +34 -0
  111. package/Components/Touchable/__tests__/touchable.test.tsx +12 -17
  112. package/Components/Transitioner/__tests__/__snapshots__/Scene.test.js.snap +15 -9
  113. package/Components/VideoLive/__tests__/__snapshots__/PlayerLiveImageComponent.test.tsx.snap +1 -0
  114. package/Components/VideoLive/animationUtils.ts +3 -3
  115. package/Components/VideoModal/ModalAnimation/ModalAnimationContext.tsx +120 -133
  116. package/Components/VideoModal/ModalAnimation/index.ts +2 -13
  117. package/Components/VideoModal/ModalAnimation/utils.ts +1 -327
  118. package/Components/VideoModal/PlayerDetails.tsx +29 -7
  119. package/Components/VideoModal/PlayerWrapper.tsx +25 -215
  120. package/Components/VideoModal/VideoModal.tsx +4 -22
  121. package/Components/VideoModal/__tests__/PlayerDetails.test.tsx +5 -5
  122. package/Components/VideoModal/__tests__/PlayerWrapper.test.tsx +2 -7
  123. package/Components/VideoModal/__tests__/__snapshots__/PlayerWrapper.test.tsx.snap +44 -240
  124. package/Components/VideoModal/hooks/__tests__/useDelayedPlayerDetails.test.ts +9 -1
  125. package/Components/VideoModal/hooks/index.ts +0 -2
  126. package/Components/VideoModal/hooks/useDelayedPlayerDetails.ts +40 -15
  127. package/Components/VideoModal/hooks/useModalSize.ts +23 -2
  128. package/Components/VideoModal/hooks/utils/__tests__/showDetails.test.ts +2 -2
  129. package/Components/VideoModal/hooks/utils/index.ts +4 -0
  130. package/Components/VideoModal/playerWrapperStyle.ts +70 -0
  131. package/Components/VideoModal/playerWrapperUtils.ts +91 -0
  132. package/Components/VideoModal/utils.ts +13 -0
  133. package/Components/Viewport/ViewportAware/__tests__/viewportAware.test.js +12 -16
  134. package/Components/Viewport/ViewportTracker/__tests__/viewportTracker.test.js +84 -24
  135. package/Components/Viewport/VisibilitySensor/VisibilitySensor.tsx +3 -3
  136. package/Components/ZappFrameworkComponents/BarView/BarView.tsx +4 -6
  137. package/Components/ZappFrameworkComponents/BarView/__tests__/BarView.test.tsx +2 -2
  138. package/Components/default-cell-renderer/viewTrees/tv/DefaultCell/index.ts +3 -3
  139. package/Contexts/CellFocusedStateContext/index.tsx +27 -0
  140. package/Contexts/ConfigutaionContext/__tests__/ConfigurationProvider.test.tsx +3 -3
  141. package/Contexts/ScreenContext/index.tsx +46 -6
  142. package/Decorators/ConfigurationWrapper/__tests__/withConfigurationProvider.test.tsx +3 -3
  143. package/Decorators/ConfigurationWrapper/withConfigurationProvider.tsx +2 -2
  144. package/Decorators/RiverFeedLoader/__tests__/__snapshots__/riverFeedLoader.test.tsx.snap +221 -209
  145. package/Decorators/RiverFeedLoader/__tests__/riverFeedLoader.test.tsx +14 -16
  146. package/Decorators/RiverFeedLoader/__tests__/utils.test.ts +0 -20
  147. package/Decorators/RiverFeedLoader/index.tsx +22 -4
  148. package/Decorators/RiverFeedLoader/utils/getDatasourceUrl.ts +6 -10
  149. package/Decorators/RiverFeedLoader/utils/index.ts +0 -18
  150. package/Decorators/RiverResolver/__tests__/riverResolver.test.tsx +3 -6
  151. package/Decorators/ZappPipesDataConnector/ResolverSelector.tsx +25 -0
  152. package/Decorators/ZappPipesDataConnector/__tests__/NullFeedResolver.test.tsx +78 -0
  153. package/Decorators/ZappPipesDataConnector/__tests__/ResolverSelector.test.tsx +205 -0
  154. package/Decorators/ZappPipesDataConnector/__tests__/StaticFeedResolver.test.tsx +251 -0
  155. package/Decorators/ZappPipesDataConnector/__tests__/UrlFeedResolver.test.tsx +368 -0
  156. package/Decorators/ZappPipesDataConnector/__tests__/utils.test.ts +39 -0
  157. package/Decorators/ZappPipesDataConnector/index.tsx +26 -293
  158. package/Decorators/ZappPipesDataConnector/resolvers/NullFeedResolver.tsx +25 -0
  159. package/Decorators/ZappPipesDataConnector/resolvers/StaticFeedResolver.tsx +87 -0
  160. package/Decorators/ZappPipesDataConnector/resolvers/UrlFeedResolver.tsx +266 -0
  161. package/Decorators/ZappPipesDataConnector/types.ts +29 -0
  162. package/Decorators/ZappPipesDataConnector/utils/mongoFilter.ts +738 -0
  163. package/Decorators/ZappPipesDataConnector/utils/useFilter.tsx +157 -0
  164. package/events/index.ts +3 -0
  165. package/package.json +5 -10
  166. package/Components/AudioPlayer/AudioPlayerLayout.tsx +0 -202
  167. package/Components/AudioPlayer/__tests__/__snapshots__/audioPlayerLayout.test.js.snap +0 -66
  168. package/Components/AudioPlayer/__tests__/__snapshots__/channel.test.js.snap +0 -28
  169. package/Components/AudioPlayer/__tests__/audioPlayerLayout.test.js +0 -26
  170. package/Components/AudioPlayer/index.ts +0 -1
  171. package/Components/River/__tests__/__snapshots__/river.test.js.snap +0 -27
  172. package/Components/VideoModal/ModalAnimation/AnimatedPlayerModalWrapper.tsx +0 -60
  173. package/Components/VideoModal/ModalAnimation/AnimatedScrollModal.tsx +0 -421
  174. package/Components/VideoModal/ModalAnimation/AnimatedVideoPlayerComponent.tsx +0 -176
  175. package/Components/VideoModal/ModalAnimation/AnimationComponent.tsx +0 -500
  176. package/Components/VideoModal/ModalAnimation/__tests__/getMoveUpValue.test.ts +0 -108
  177. package/Components/VideoModal/hooks/useBackgroundColor.ts +0 -10
  178. /package/Components/AudioPlayer/{__tests__ → tv/__tests__}/Runtime.test.js +0 -0
  179. /package/Components/AudioPlayer/{__tests__ → tv/__tests__}/__snapshots__/artWork.test.js.snap +0 -0
  180. /package/Components/AudioPlayer/{__tests__ → tv/__tests__}/artWork.test.js +0 -0
  181. /package/Components/AudioPlayer/{__tests__ → tv/__tests__}/channel.test.js +0 -0
  182. /package/Components/AudioPlayer/{__tests__ → tv/__tests__}/summary.test.js +0 -0
  183. /package/Components/AudioPlayer/{__tests__ → tv/__tests__}/title.test.js +0 -0
@@ -0,0 +1,164 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`<AudioPlayerTV /> renders correctly 1`] = `
4
+ <View
5
+ accessibilityIgnoresInvertColors={true}
6
+ >
7
+ <Image
8
+ resizeMode="cover"
9
+ source={
10
+ {
11
+ "uri": "https://example.com",
12
+ }
13
+ }
14
+ style={
15
+ [
16
+ {
17
+ "bottom": 0,
18
+ "left": 0,
19
+ "position": "absolute",
20
+ "right": 0,
21
+ "top": 0,
22
+ },
23
+ {
24
+ "height": undefined,
25
+ "width": undefined,
26
+ },
27
+ undefined,
28
+ ]
29
+ }
30
+ />
31
+ <View
32
+ style={
33
+ [
34
+ {
35
+ "backgroundColor": "transparent",
36
+ "overflow": "hidden",
37
+ },
38
+ {
39
+ "backgroundColor": undefined,
40
+ },
41
+ ]
42
+ }
43
+ >
44
+ <View
45
+ style={
46
+ {
47
+ "marginHorizontal": 24,
48
+ }
49
+ }
50
+ >
51
+ <Image
52
+ fadeDuration={0}
53
+ resizeMode="cover"
54
+ source={
55
+ {
56
+ "uri": "artwork_url",
57
+ }
58
+ }
59
+ style={
60
+ [
61
+ {
62
+ "height": 400,
63
+ "width": 400,
64
+ },
65
+ {
66
+ "borderRadius": 0,
67
+ },
68
+ ]
69
+ }
70
+ />
71
+ </View>
72
+ <View>
73
+ <Image
74
+ fadeDuration={0}
75
+ source={
76
+ {
77
+ "uri": "https://example.com",
78
+ }
79
+ }
80
+ style={
81
+ {
82
+ "height": 72,
83
+ "marginBottom": 30,
84
+ "width": 128,
85
+ }
86
+ }
87
+ />
88
+ <View
89
+ style={
90
+ {
91
+ "marginBottom": 12,
92
+ "width": 600,
93
+ }
94
+ }
95
+ >
96
+ <Text
97
+ numberOfLines={3}
98
+ style={
99
+ {
100
+ "color": "white",
101
+ "fontFamily": null,
102
+ "fontSize": 38,
103
+ "fontWeight": "600",
104
+ "textAlign": "right",
105
+ }
106
+ }
107
+ >
108
+ tittle
109
+ </Text>
110
+ </View>
111
+ <View
112
+ style={
113
+ {
114
+ "marginBottom": 30,
115
+ "width": 600,
116
+ }
117
+ }
118
+ >
119
+ <Text
120
+ numberOfLines={3}
121
+ style={
122
+ {
123
+ "color": "white",
124
+ "fontFamily": null,
125
+ "fontSize": 20,
126
+ "fontWeight": "600",
127
+ "opacity": 0.8,
128
+ "textAlign": "right",
129
+ }
130
+ }
131
+ >
132
+ Summary
133
+ </Text>
134
+ </View>
135
+ <View
136
+ style={
137
+ {
138
+ "justifyContent": "flex-end",
139
+ "width": 600,
140
+ }
141
+ }
142
+ >
143
+ <Text
144
+ numberOfLines={1}
145
+ style={
146
+ {
147
+ "alignItems": "flex-start",
148
+ "color": "white",
149
+ "flexDirection": "row-reverse",
150
+ "fontFamily": null,
151
+ "fontSize": 20,
152
+ "justifyContent": "flex-end",
153
+ "opacity": 0.8,
154
+ "textAlign": "right",
155
+ }
156
+ }
157
+ >
158
+ 10:10 - 11:11
159
+ </Text>
160
+ </View>
161
+ </View>
162
+ </View>
163
+ </View>
164
+ `;
@@ -0,0 +1,19 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`<Channel /> renders correctly 1`] = `
4
+ <Image
5
+ fadeDuration={0}
6
+ source={
7
+ {
8
+ "uri": "https://example.com",
9
+ }
10
+ }
11
+ style={
12
+ {
13
+ "height": 72,
14
+ "marginBottom": 30,
15
+ "width": 128,
16
+ }
17
+ }
18
+ />
19
+ `;
@@ -4,14 +4,13 @@ exports[`<Summary /> renders correctly 1`] = `
4
4
  <View
5
5
  style={
6
6
  {
7
- "height": 80,
8
7
  "marginBottom": 30,
9
8
  "width": 600,
10
9
  }
11
10
  }
12
11
  >
13
12
  <Text
14
- numberOfLines={2}
13
+ numberOfLines={3}
15
14
  style={
16
15
  {
17
16
  "color": "white",
@@ -4,14 +4,13 @@ exports[`<Title /> renders correctly 1`] = `
4
4
  <View
5
5
  style={
6
6
  {
7
- "height": 100,
8
7
  "marginBottom": 12,
9
8
  "width": 600,
10
9
  }
11
10
  }
12
11
  >
13
12
  <Text
14
- numberOfLines={2}
13
+ numberOfLines={3}
15
14
  style={
16
15
  {
17
16
  "color": "white",
@@ -1,7 +1,11 @@
1
1
  import React from "react";
2
2
  import { render } from "@testing-library/react-native";
3
3
 
4
- import { AudioPlayer } from "../AudioPlayer";
4
+ import { AudioPlayerTV } from "..";
5
+
6
+ jest.mock("@applicaster/zapp-react-native-utils/audioPlayerUtils", () => ({
7
+ useArtworkImage: jest.fn(() => "artwork_url"),
8
+ }));
5
9
 
6
10
  const audioPlayerProps = {
7
11
  audio_item: {
@@ -45,9 +49,9 @@ const audioPlayerProps = {
45
49
  styles: {},
46
50
  };
47
51
 
48
- describe("<AudioPlayer />", () => {
52
+ describe("<AudioPlayerTV />", () => {
49
53
  it("renders correctly", () => {
50
- const { toJSON } = render(<AudioPlayer {...audioPlayerProps} />);
54
+ const { toJSON } = render(<AudioPlayerTV {...audioPlayerProps} />);
51
55
  expect(toJSON()).toMatchSnapshot();
52
56
  });
53
57
  });
@@ -2,9 +2,8 @@ const defaults = {
2
2
  audio_player_title_color: "white",
3
3
  audio_player_summary_color: "white",
4
4
  audio_player_background_color: "black",
5
- audio_player_artwork_aspect_ratio: "1:1",
5
+ audio_player_background_image: undefined,
6
6
  audio_player_rtl: false,
7
- audio_player_background_image_default_color: "",
8
7
  };
9
8
 
10
9
  export function getPropertyFromEntryOrConfig({ entry, plugin_configuration }) {
@@ -28,13 +27,20 @@ const LTR = {
28
27
  justifyContent: "flex-start",
29
28
  textAlign: "left",
30
29
  alignItems: "flex-end",
31
- };
30
+ } as const;
32
31
 
33
32
  const RTL = {
34
33
  flexDirection: "row-reverse",
35
34
  justifyContent: "flex-end",
36
35
  textAlign: "right",
37
36
  alignItems: "flex-start",
38
- };
37
+ } as const;
39
38
 
40
- export const directionStyles = (isRTL) => (isRTL ? RTL : LTR);
39
+ export const directionStyles = (
40
+ isRTL: boolean
41
+ ): {
42
+ flexDirection: "row" | "row-reverse";
43
+ justifyContent: "flex-start" | "flex-end";
44
+ textAlign: "left" | "right";
45
+ alignItems: "flex-end" | "flex-start";
46
+ } => (isRTL ? RTL : LTR);
@@ -1,60 +1,24 @@
1
1
  import React, { useCallback, useMemo } from "react";
2
2
 
3
3
  import { platformSelect } from "@applicaster/zapp-react-native-utils/reactUtils";
4
+ import { useArtworkImage } from "@applicaster/zapp-react-native-utils/audioPlayerUtils";
4
5
 
5
- import { imageSrcFromMediaItem } from "@applicaster/zapp-react-native-utils/configurationUtils";
6
+ import { AudioPlayerTVLayout } from "./Layout";
6
7
 
7
- import { AudioPlayerLayout } from "./AudioPlayerLayout";
8
8
  import { Channel } from "./Channel";
9
9
  import { Title } from "./Title";
10
10
  import { Summary } from "./Summary";
11
11
  import { Runtime } from "./Runtime";
12
12
  import { getPropertyFromEntryOrConfig } from "./helpers";
13
- import { ViewStyle } from "react-native";
14
-
15
- type Props = {
16
- audio_item: ZappEntry & {
17
- extensions?: {
18
- audio_player_artwork_aspect_ratio?: string;
19
- audio_player_background_image?: string;
20
- audio_player_background_color?: string;
21
- audio_player_channel_icon?: string;
22
- audio_player_title_color?: string;
23
- audio_player_summary_color?: string;
24
- audio_player_rtl?: boolean;
25
- audio_player_background_image_default_color?: string;
26
- start_time?: string;
27
- end_time?: string;
28
- };
29
- };
30
- plugin_configuration: {
31
- audio_player_background_color?: string;
32
- audio_player_title_color?: string;
33
- audio_player_summary_color?: string;
34
- audio_player_rtl?: string;
35
- audio_player_background_image_default_color?: string;
36
- audio_player_background_image?: string;
37
- audio_player_artwork_aspect_ratio?: string;
38
- lg_tv_audio_player_title_font_family?: string;
39
- lg_tv_audio_player_title_font_size?: number;
40
- lg_tv_audio_player_summary_font_family?: string;
41
- lg_tv_audio_player_summary_font_size?: number;
42
- samsung_tv_audio_player_title_font_family?: string;
43
- samsung_tv_audio_player_title_font_size?: number;
44
- samsung_tv_audio_player_summary_font_family?: string;
45
- samsung_tv_audio_player_summary_font_size?: number;
46
- tv_os_audio_player_title_font_family?: string;
47
- tv_os_audio_player_title_font_size?: number;
48
- tv_os_audio_player_summary_font_family?: string;
49
- tv_os_audio_player_summary_font_size?: number;
50
- };
51
- style?: ViewStyle;
52
- };
53
-
54
- export function AudioPlayer(props: Props) {
55
- const { audio_item, plugin_configuration, style } = props;
13
+
14
+ import { Props } from "../types";
15
+
16
+ export function AudioPlayerTV(props: Props) {
17
+ const { audio_item, plugin_configuration, style = {} } = props;
56
18
  const { extensions, title, summary } = audio_item;
57
19
 
20
+ const artwork = useArtworkImage(audio_item);
21
+
58
22
  const getProp = useCallback(
59
23
  getPropertyFromEntryOrConfig({
60
24
  entry: audio_item,
@@ -64,20 +28,20 @@ export function AudioPlayer(props: Props) {
64
28
  );
65
29
 
66
30
  const config = useMemo(() => {
67
- // Checking if we are recieving items from the DSP
31
+ // Checking if we are receiving items from the DSP
68
32
  const titleColor = getProp("audio_player_title_color");
69
33
  const summaryColor = getProp("audio_player_summary_color");
70
34
  const backgroundColor = getProp("audio_player_background_color");
71
35
  const backgroundImage = getProp("audio_player_background_image");
72
- const artworkAspectRatio = getProp("audio_player_artwork_aspect_ratio");
73
36
  const channelIcon = getProp("audio_player_channel_icon");
74
37
  const rtlFlag = getProp("audio_player_rtl");
75
- const artworkBorderRadius = getProp("audio_player_artwork_border_radius");
76
38
 
77
- const audioPlayerBackgroundImageDefaultColor = getProp(
78
- "audio_player_background_image_default_color"
39
+ const backgroundImageOverlay = getProp(
40
+ "audio_player_background_image_overlay"
79
41
  );
80
42
 
43
+ const artworkBorderRadius = getProp("audio_player_artwork_border_radius");
44
+
81
45
  const isRTL = rtlFlag === "1" || rtlFlag === "true" || rtlFlag === true;
82
46
 
83
47
  const titleFontFamily = getProp(
@@ -152,23 +116,18 @@ export function AudioPlayer(props: Props) {
152
116
  summaryFontSize,
153
117
  runTimeFontFamily,
154
118
  runTimeFontSize,
155
- artworkAspectRatio,
156
119
  channelIcon,
157
- audioPlayerBackgroundImageDefaultColor,
158
120
  artworkBorderRadius,
121
+ backgroundImageOverlay,
159
122
  };
160
123
  }, [getProp]);
161
124
 
162
- const artwork = imageSrcFromMediaItem(audio_item, [
163
- config?.artworkAspectRatio,
164
- ]);
165
-
166
125
  return (
167
- <AudioPlayerLayout artwork={artwork} config={config} style={style || {}}>
126
+ <AudioPlayerTVLayout artwork={artwork} config={config} style={style}>
168
127
  <Channel srcImage={config?.channelIcon} config={config} />
169
128
  <Title title={title} config={config} />
170
129
  <Summary summary={summary} config={config} />
171
130
  <Runtime {...extensions} config={config} />
172
- </AudioPlayerLayout>
131
+ </AudioPlayerTVLayout>
173
132
  );
174
133
  }
@@ -0,0 +1,40 @@
1
+ import { ViewStyle } from "react-native";
2
+
3
+ export type Props = {
4
+ audio_item: ZappEntry & {
5
+ extensions?: {
6
+ audio_player_artwork_aspect_ratio?: string;
7
+ audio_player_background_image?: string;
8
+ audio_player_background_color?: string;
9
+ audio_player_channel_icon?: string;
10
+ audio_player_title_color?: string;
11
+ audio_player_summary_color?: string;
12
+ audio_player_rtl?: boolean;
13
+ audio_player_background_image_default_color?: string;
14
+ start_time?: string;
15
+ end_time?: string;
16
+ };
17
+ };
18
+ plugin_configuration: {
19
+ audio_player_background_color?: string;
20
+ audio_player_title_color?: string;
21
+ audio_player_summary_color?: string;
22
+ audio_player_rtl?: string;
23
+ audio_player_background_image_default_color?: string;
24
+ audio_player_background_image?: string;
25
+ audio_player_artwork_aspect_ratio?: string;
26
+ lg_tv_audio_player_title_font_family?: string;
27
+ lg_tv_audio_player_title_font_size?: number;
28
+ lg_tv_audio_player_summary_font_family?: string;
29
+ lg_tv_audio_player_summary_font_size?: number;
30
+ samsung_tv_audio_player_title_font_family?: string;
31
+ samsung_tv_audio_player_title_font_size?: number;
32
+ samsung_tv_audio_player_summary_font_family?: string;
33
+ samsung_tv_audio_player_summary_font_size?: number;
34
+ tv_os_audio_player_title_font_family?: string;
35
+ tv_os_audio_player_title_font_size?: number;
36
+ tv_os_audio_player_summary_font_family?: string;
37
+ tv_os_audio_player_summary_font_size?: number;
38
+ };
39
+ style?: ViewStyle;
40
+ };
@@ -146,10 +146,14 @@ export class BaseFocusable<
146
146
  * @param {Object} scrollDirection
147
147
  * @returns {Promise}
148
148
  */
149
- onFocus: FocusManager.FocusEventCB = (focusable, scrollDirection) => {
149
+ onFocus: FocusManager.FocusEventCB = (
150
+ focusable,
151
+ scrollDirection,
152
+ context
153
+ ) => {
150
154
  const { onFocus = noop } = this.props;
151
155
  this.setFocusedState(true);
152
- onFocus(focusable, scrollDirection);
156
+ onFocus(focusable, scrollDirection, context);
153
157
  };
154
158
 
155
159
  /**
@@ -247,8 +251,8 @@ export class BaseFocusable<
247
251
  * @param {Object} scrollDirection
248
252
  * @returns {Promise}
249
253
  */
250
- focus(_, scrollDirection) {
251
- return this.onFocus(this, scrollDirection); // invokeComponentMethod(this, "onFocus", scrollDirection);
254
+ focus(_, scrollDirection, context?: FocusManager.FocusContext) {
255
+ return this.onFocus(this, scrollDirection, context); // invokeComponentMethod(this, "onFocus", scrollDirection, context);
252
256
  }
253
257
 
254
258
  /**
@@ -258,9 +262,10 @@ export class BaseFocusable<
258
262
  */
259
263
  blur(
260
264
  _,
261
- scrollDirection?: FocusManager.Web.Direction | FocusManager.IOS.Direction
265
+ scrollDirection?: FocusManager.Web.Direction | FocusManager.IOS.Direction,
266
+ context?: FocusManager.FocusContext
262
267
  ) {
263
- return this.onBlur(this, scrollDirection);
268
+ return this.onBlur(this, scrollDirection, context);
264
269
  }
265
270
 
266
271
  /**
@@ -272,7 +277,7 @@ export class BaseFocusable<
272
277
  * @param {string} scrollDirection string representation of the direction of the navigation which landed
273
278
  * to this item being focused
274
279
  */
275
- _executeFocusSequence(methodNames, scrollDirection) {
280
+ _executeFocusSequence(methodNames, scrollDirection, context) {
276
281
  return R.reduce(
277
282
  (sequence, methodName) => {
278
283
  const method = this[methodName]; // Access the method by name
@@ -284,7 +289,7 @@ export class BaseFocusable<
284
289
  }
285
290
 
286
291
  return sequence
287
- .then(() => method.call(this, scrollDirection))
292
+ .then(() => method.call(this, this, scrollDirection, context))
288
293
  .catch((e) => {
289
294
  throw e; // Re-throw for consistent error handling
290
295
  });
@@ -294,15 +299,21 @@ export class BaseFocusable<
294
299
  );
295
300
  }
296
301
 
297
- setFocus(scrollDirection) {
302
+ setFocus(
303
+ scrollDirection?: ScrollDirection,
304
+ context?: FocusManager.FocusContext
305
+ ) {
298
306
  const focusMethods = ["willReceiveFocus", "focus", "hasReceivedFocus"];
299
307
 
300
- return this._executeFocusSequence(focusMethods, scrollDirection);
308
+ return this._executeFocusSequence(focusMethods, scrollDirection, context);
301
309
  }
302
310
 
303
- setBlur(scrollDirection) {
311
+ setBlur(
312
+ scrollDirection?: ScrollDirection,
313
+ context?: FocusManager.FocusContext
314
+ ) {
304
315
  const blurMethods = ["willLoseFocus", "blur", "hasLostFocus"];
305
316
 
306
- return this._executeFocusSequence(blurMethods, scrollDirection);
317
+ return this._executeFocusSequence(blurMethods, scrollDirection, context);
307
318
  }
308
319
  }