@zezosoft/zezo-ott-react-native-ui-kit 1.0.3 → 1.0.5

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 (265) hide show
  1. package/README.md +1 -1
  2. package/lib/module/assets/animations/Failed.json +2103 -0
  3. package/lib/module/assets/animations/Pending.json +522 -0
  4. package/lib/module/assets/animations/Successful.json +2289 -0
  5. package/lib/module/assets/animations/heart.json +788 -0
  6. package/lib/module/components/Alert/AlertDialog.js +208 -0
  7. package/lib/module/components/Alert/AlertDialog.js.map +1 -0
  8. package/lib/module/components/Alert/index.js +1 -0
  9. package/lib/module/components/Alert/index.js.map +1 -1
  10. package/lib/module/components/Auth/AuthProvider/AuthProvider.js +270 -0
  11. package/lib/module/components/Auth/AuthProvider/AuthProvider.js.map +1 -0
  12. package/lib/module/components/Auth/QrLogin/QrLogin.js +267 -0
  13. package/lib/module/components/Auth/QrLogin/QrLogin.js.map +1 -0
  14. package/lib/module/components/Auth/QrLogin/components/QrViewArea.js +178 -0
  15. package/lib/module/components/Auth/QrLogin/components/QrViewArea.js.map +1 -0
  16. package/lib/module/components/Auth/SplashScreen/SplashScreen.js +63 -65
  17. package/lib/module/components/Auth/SplashScreen/SplashScreen.js.map +1 -1
  18. package/lib/module/components/Auth/SplashScreen/components/SplashVideo/SplashVideo.js +82 -41
  19. package/lib/module/components/Auth/SplashScreen/components/SplashVideo/SplashVideo.js.map +1 -1
  20. package/lib/module/components/Auth/index.js +5 -1
  21. package/lib/module/components/Auth/index.js.map +1 -1
  22. package/lib/module/components/BackgroundLayout/BackgroundLayout.js +3 -3
  23. package/lib/module/components/BackgroundLayout/BackgroundLayout.js.map +1 -1
  24. package/lib/module/components/Button/SecondaryBtn.js +91 -0
  25. package/lib/module/components/Button/SecondaryBtn.js.map +1 -0
  26. package/lib/module/components/Button/index.js +2 -0
  27. package/lib/module/components/Button/index.js.map +1 -1
  28. package/lib/module/components/Content/Card/NowWatching/NowWatching.js +6 -3
  29. package/lib/module/components/Content/Card/NowWatching/NowWatching.js.map +1 -1
  30. package/lib/module/components/Content/Card/Sliders/Styles/One.js +4 -1
  31. package/lib/module/components/Content/Card/Sliders/Styles/One.js.map +1 -1
  32. package/lib/module/components/Content/Card/Sliders/Styles/Two.js +4 -1
  33. package/lib/module/components/Content/Card/Sliders/Styles/Two.js.map +1 -1
  34. package/lib/module/components/Content/Card/Styles/Five.js +1 -0
  35. package/lib/module/components/Content/Card/Styles/Five.js.map +1 -1
  36. package/lib/module/components/Content/Card/Styles/Four.js +1 -0
  37. package/lib/module/components/Content/Card/Styles/Four.js.map +1 -1
  38. package/lib/module/components/Content/Card/Styles/One.js +7 -3
  39. package/lib/module/components/Content/Card/Styles/One.js.map +1 -1
  40. package/lib/module/components/Content/Card/Styles/RotateInOut.js +1 -0
  41. package/lib/module/components/Content/Card/Styles/RotateInOut.js.map +1 -1
  42. package/lib/module/components/Content/Card/Styles/Six.js +4 -1
  43. package/lib/module/components/Content/Card/Styles/Six.js.map +1 -1
  44. package/lib/module/components/Content/Card/Styles/Three.js +1 -0
  45. package/lib/module/components/Content/Card/Styles/Three.js.map +1 -1
  46. package/lib/module/components/Content/Card/Styles/TopTen.js +1 -0
  47. package/lib/module/components/Content/Card/Styles/TopTen.js.map +1 -1
  48. package/lib/module/components/Content/Card/Styles/Two.js +1 -0
  49. package/lib/module/components/Content/Card/Styles/Two.js.map +1 -1
  50. package/lib/module/components/Content/Card/components/CardPoster.js +12 -28
  51. package/lib/module/components/Content/Card/components/CardPoster.js.map +1 -1
  52. package/lib/module/components/Content/Card/components/RentOrBuyIcon.js +116 -0
  53. package/lib/module/components/Content/Card/components/RentOrBuyIcon.js.map +1 -0
  54. package/lib/module/components/Content/Card/components/ThumbnailCard.js +1 -2
  55. package/lib/module/components/Content/Card/components/ThumbnailCard.js.map +1 -1
  56. package/lib/module/components/ContentView/ContentView.js +1 -0
  57. package/lib/module/components/ContentView/ContentView.js.map +1 -1
  58. package/lib/module/components/ContentView/MoreContentList.js +1 -0
  59. package/lib/module/components/ContentView/MoreContentList.js.map +1 -1
  60. package/lib/module/components/ContentView/components/EpisodeCard.js +6 -10
  61. package/lib/module/components/ContentView/components/EpisodeCard.js.map +1 -1
  62. package/lib/module/components/ContentView/components/HeroBanner.js +17 -5
  63. package/lib/module/components/ContentView/components/HeroBanner.js.map +1 -1
  64. package/lib/module/components/Headers/AppHeader.js +1 -1
  65. package/lib/module/components/Headers/AppHeader.js.map +1 -1
  66. package/lib/module/components/Headers/One.js +1 -1
  67. package/lib/module/components/Headers/One.js.map +1 -1
  68. package/lib/module/components/Headers/Two.js +1 -1
  69. package/lib/module/components/Headers/Two.js.map +1 -1
  70. package/lib/module/components/Logo/Logo.js +5 -5
  71. package/lib/module/components/Logo/Logo.js.map +1 -1
  72. package/lib/module/components/Reels/ReelsSeries/Model/Episodes.js +110 -0
  73. package/lib/module/components/Reels/ReelsSeries/Model/Episodes.js.map +1 -0
  74. package/lib/module/components/Reels/ReelsSeries/Model/Synopsis.js +212 -0
  75. package/lib/module/components/Reels/ReelsSeries/Model/Synopsis.js.map +1 -0
  76. package/lib/module/components/Reels/ReelsSeries/ReelSeriesDetailsModal.js +182 -0
  77. package/lib/module/components/Reels/ReelsSeries/ReelSeriesDetailsModal.js.map +1 -0
  78. package/lib/module/components/Reels/ReelsSeries/ReelSeriesOverlay.js +203 -0
  79. package/lib/module/components/Reels/ReelsSeries/ReelSeriesOverlay.js.map +1 -0
  80. package/lib/module/components/Reels/ReelsSeries/ReelsSeries.js +121 -0
  81. package/lib/module/components/Reels/ReelsSeries/ReelsSeries.js.map +1 -0
  82. package/lib/module/components/Reels/ReelsSeries/ReelsSeriesItem.js +290 -0
  83. package/lib/module/components/Reels/ReelsSeries/ReelsSeriesItem.js.map +1 -0
  84. package/lib/module/components/Reels/ReelsSeries/types.js +2 -0
  85. package/lib/module/components/Reels/ReelsSeries/types.js.map +1 -0
  86. package/lib/module/components/Reels/index.js +11 -0
  87. package/lib/module/components/Reels/index.js.map +1 -0
  88. package/lib/module/components/Subscription/SubOne.js +2 -2
  89. package/lib/module/components/Subscription/SubOne.js.map +1 -1
  90. package/lib/module/components/User/DeviceSessions/DeviceSessions.js +8 -0
  91. package/lib/module/components/User/DeviceSessions/DeviceSessions.js.map +1 -1
  92. package/lib/module/components/User/ProfileUpdate/ProfileUpdate.js +255 -0
  93. package/lib/module/components/User/ProfileUpdate/ProfileUpdate.js.map +1 -0
  94. package/lib/module/components/User/WatchHistory/WatchHistory.js +1 -0
  95. package/lib/module/components/User/WatchHistory/WatchHistory.js.map +1 -1
  96. package/lib/module/components/User/WatchLater/WatchLater.js +1 -0
  97. package/lib/module/components/User/WatchLater/WatchLater.js.map +1 -1
  98. package/lib/module/components/User/components/UserAvatar.js +35 -8
  99. package/lib/module/components/User/components/UserAvatar.js.map +1 -1
  100. package/lib/module/components/User/components/UserSection.js +8 -13
  101. package/lib/module/components/User/components/UserSection.js.map +1 -1
  102. package/lib/module/components/User/index.js +2 -1
  103. package/lib/module/components/User/index.js.map +1 -1
  104. package/lib/module/components/index.js +1 -0
  105. package/lib/module/components/index.js.map +1 -1
  106. package/lib/module/hooks/useSplashCache.js +117 -0
  107. package/lib/module/hooks/useSplashCache.js.map +1 -0
  108. package/lib/module/store/RecentSearchesStore.js +0 -1
  109. package/lib/module/store/RecentSearchesStore.js.map +1 -1
  110. package/lib/module/theme/ThemeProvider.js +13 -10
  111. package/lib/module/theme/ThemeProvider.js.map +1 -1
  112. package/lib/module/theme/themes.js +2 -0
  113. package/lib/module/theme/themes.js.map +1 -1
  114. package/lib/module/utils/Formater.js +17 -0
  115. package/lib/module/utils/Formater.js.map +1 -0
  116. package/lib/typescript/src/components/Alert/AlertDialog.d.ts +18 -0
  117. package/lib/typescript/src/components/Alert/AlertDialog.d.ts.map +1 -0
  118. package/lib/typescript/src/components/Alert/index.d.ts +1 -0
  119. package/lib/typescript/src/components/Alert/index.d.ts.map +1 -1
  120. package/lib/typescript/src/components/Auth/AuthProvider/AuthProvider.d.ts +35 -0
  121. package/lib/typescript/src/components/Auth/AuthProvider/AuthProvider.d.ts.map +1 -0
  122. package/lib/typescript/src/components/Auth/QrLogin/QrLogin.d.ts +32 -0
  123. package/lib/typescript/src/components/Auth/QrLogin/QrLogin.d.ts.map +1 -0
  124. package/lib/typescript/src/components/Auth/QrLogin/components/QrViewArea.d.ts +15 -0
  125. package/lib/typescript/src/components/Auth/QrLogin/components/QrViewArea.d.ts.map +1 -0
  126. package/lib/typescript/src/components/Auth/SplashScreen/SplashScreen.d.ts +4 -3
  127. package/lib/typescript/src/components/Auth/SplashScreen/SplashScreen.d.ts.map +1 -1
  128. package/lib/typescript/src/components/Auth/SplashScreen/components/SplashVideo/SplashVideo.d.ts +1 -1
  129. package/lib/typescript/src/components/Auth/SplashScreen/components/SplashVideo/SplashVideo.d.ts.map +1 -1
  130. package/lib/typescript/src/components/Auth/index.d.ts +3 -0
  131. package/lib/typescript/src/components/Auth/index.d.ts.map +1 -1
  132. package/lib/typescript/src/components/BackgroundLayout/BackgroundLayout.d.ts.map +1 -1
  133. package/lib/typescript/src/components/Button/SecondaryBtn.d.ts +21 -0
  134. package/lib/typescript/src/components/Button/SecondaryBtn.d.ts.map +1 -0
  135. package/lib/typescript/src/components/Button/index.d.ts +11 -0
  136. package/lib/typescript/src/components/Button/index.d.ts.map +1 -1
  137. package/lib/typescript/src/components/Content/Card/NowWatching/NowWatching.d.ts.map +1 -1
  138. package/lib/typescript/src/components/Content/Card/Sliders/Styles/One.d.ts.map +1 -1
  139. package/lib/typescript/src/components/Content/Card/Sliders/Styles/Two.d.ts.map +1 -1
  140. package/lib/typescript/src/components/Content/Card/Styles/Five.d.ts.map +1 -1
  141. package/lib/typescript/src/components/Content/Card/Styles/Four.d.ts.map +1 -1
  142. package/lib/typescript/src/components/Content/Card/Styles/One.d.ts.map +1 -1
  143. package/lib/typescript/src/components/Content/Card/Styles/RotateInOut.d.ts.map +1 -1
  144. package/lib/typescript/src/components/Content/Card/Styles/Six.d.ts.map +1 -1
  145. package/lib/typescript/src/components/Content/Card/Styles/Three.d.ts.map +1 -1
  146. package/lib/typescript/src/components/Content/Card/Styles/TopTen.d.ts.map +1 -1
  147. package/lib/typescript/src/components/Content/Card/Styles/Two.d.ts.map +1 -1
  148. package/lib/typescript/src/components/Content/Card/components/CardPoster.d.ts +4 -2
  149. package/lib/typescript/src/components/Content/Card/components/CardPoster.d.ts.map +1 -1
  150. package/lib/typescript/src/components/Content/Card/components/RentOrBuyIcon.d.ts +14 -0
  151. package/lib/typescript/src/components/Content/Card/components/RentOrBuyIcon.d.ts.map +1 -0
  152. package/lib/typescript/src/components/ContentView/ContentView.d.ts.map +1 -1
  153. package/lib/typescript/src/components/ContentView/MoreContentList.d.ts.map +1 -1
  154. package/lib/typescript/src/components/ContentView/components/EpisodeCard.d.ts.map +1 -1
  155. package/lib/typescript/src/components/ContentView/components/HeroBanner.d.ts +1 -1
  156. package/lib/typescript/src/components/ContentView/components/HeroBanner.d.ts.map +1 -1
  157. package/lib/typescript/src/components/Logo/Logo.d.ts.map +1 -1
  158. package/lib/typescript/src/components/Reels/ReelsSeries/Model/Episodes.d.ts +12 -0
  159. package/lib/typescript/src/components/Reels/ReelsSeries/Model/Episodes.d.ts.map +1 -0
  160. package/lib/typescript/src/components/Reels/ReelsSeries/Model/Synopsis.d.ts +9 -0
  161. package/lib/typescript/src/components/Reels/ReelsSeries/Model/Synopsis.d.ts.map +1 -0
  162. package/lib/typescript/src/components/Reels/ReelsSeries/ReelSeriesDetailsModal.d.ts +13 -0
  163. package/lib/typescript/src/components/Reels/ReelsSeries/ReelSeriesDetailsModal.d.ts.map +1 -0
  164. package/lib/typescript/src/components/Reels/ReelsSeries/ReelSeriesOverlay.d.ts +18 -0
  165. package/lib/typescript/src/components/Reels/ReelsSeries/ReelSeriesOverlay.d.ts.map +1 -0
  166. package/lib/typescript/src/components/Reels/ReelsSeries/ReelsSeries.d.ts +15 -0
  167. package/lib/typescript/src/components/Reels/ReelsSeries/ReelsSeries.d.ts.map +1 -0
  168. package/lib/typescript/src/components/Reels/ReelsSeries/ReelsSeriesItem.d.ts +18 -0
  169. package/lib/typescript/src/components/Reels/ReelsSeries/ReelsSeriesItem.d.ts.map +1 -0
  170. package/lib/typescript/src/components/Reels/ReelsSeries/types.d.ts +24 -0
  171. package/lib/typescript/src/components/Reels/ReelsSeries/types.d.ts.map +1 -0
  172. package/lib/typescript/src/components/Reels/index.d.ts +8 -0
  173. package/lib/typescript/src/components/Reels/index.d.ts.map +1 -0
  174. package/lib/typescript/src/components/Subscription/SubOne.d.ts.map +1 -1
  175. package/lib/typescript/src/components/User/DeviceSessions/DeviceSessions.d.ts +1 -0
  176. package/lib/typescript/src/components/User/DeviceSessions/DeviceSessions.d.ts.map +1 -1
  177. package/lib/typescript/src/components/User/ProfileUpdate/ProfileUpdate.d.ts +27 -0
  178. package/lib/typescript/src/components/User/ProfileUpdate/ProfileUpdate.d.ts.map +1 -0
  179. package/lib/typescript/src/components/User/WatchHistory/WatchHistory.d.ts.map +1 -1
  180. package/lib/typescript/src/components/User/WatchLater/WatchLater.d.ts.map +1 -1
  181. package/lib/typescript/src/components/User/components/UserAvatar.d.ts +4 -0
  182. package/lib/typescript/src/components/User/components/UserAvatar.d.ts.map +1 -1
  183. package/lib/typescript/src/components/User/components/UserSection.d.ts.map +1 -1
  184. package/lib/typescript/src/components/User/index.d.ts +2 -1
  185. package/lib/typescript/src/components/User/index.d.ts.map +1 -1
  186. package/lib/typescript/src/components/index.d.ts +1 -0
  187. package/lib/typescript/src/components/index.d.ts.map +1 -1
  188. package/lib/typescript/src/hooks/useSplashCache.d.ts +22 -0
  189. package/lib/typescript/src/hooks/useSplashCache.d.ts.map +1 -0
  190. package/lib/typescript/src/store/RecentSearchesStore.d.ts.map +1 -1
  191. package/lib/typescript/src/theme/ThemeProvider.d.ts.map +1 -1
  192. package/lib/typescript/src/theme/themes.d.ts +1 -0
  193. package/lib/typescript/src/theme/themes.d.ts.map +1 -1
  194. package/lib/typescript/src/types/content/content-view.types.d.ts +1 -0
  195. package/lib/typescript/src/types/content/content-view.types.d.ts.map +1 -1
  196. package/lib/typescript/src/utils/Formater.d.ts +2 -0
  197. package/lib/typescript/src/utils/Formater.d.ts.map +1 -0
  198. package/package.json +13 -5
  199. package/src/assets/animations/Failed.json +2103 -0
  200. package/src/assets/animations/Pending.json +522 -0
  201. package/src/assets/animations/Successful.json +2289 -0
  202. package/src/assets/animations/heart.json +788 -0
  203. package/src/components/Alert/AlertDialog.tsx +247 -0
  204. package/src/components/Alert/index.ts +1 -0
  205. package/src/components/Auth/AuthProvider/AuthProvider.tsx +344 -0
  206. package/src/components/Auth/QrLogin/QrLogin.tsx +306 -0
  207. package/src/components/Auth/QrLogin/components/QrViewArea.tsx +213 -0
  208. package/src/components/Auth/SplashScreen/SplashScreen.tsx +89 -80
  209. package/src/components/Auth/SplashScreen/components/SplashVideo/SplashVideo.tsx +90 -40
  210. package/src/components/Auth/index.ts +4 -0
  211. package/src/components/BackgroundLayout/BackgroundLayout.tsx +3 -3
  212. package/src/components/Button/SecondaryBtn.tsx +116 -0
  213. package/src/components/Button/index.ts +2 -0
  214. package/src/components/Content/Card/NowWatching/NowWatching.tsx +4 -0
  215. package/src/components/Content/Card/Sliders/Styles/One.tsx +2 -0
  216. package/src/components/Content/Card/Sliders/Styles/Two.tsx +2 -0
  217. package/src/components/Content/Card/Styles/Five.tsx +1 -0
  218. package/src/components/Content/Card/Styles/Four.tsx +1 -0
  219. package/src/components/Content/Card/Styles/One.tsx +7 -1
  220. package/src/components/Content/Card/Styles/RotateInOut.tsx +1 -0
  221. package/src/components/Content/Card/Styles/Six.tsx +2 -0
  222. package/src/components/Content/Card/Styles/Three.tsx +1 -0
  223. package/src/components/Content/Card/Styles/TopTen.tsx +1 -0
  224. package/src/components/Content/Card/Styles/Two.tsx +1 -0
  225. package/src/components/Content/Card/components/CardPoster.tsx +23 -51
  226. package/src/components/Content/Card/components/RentOrBuyIcon.tsx +109 -0
  227. package/src/components/Content/Card/components/ThumbnailCard.tsx +1 -2
  228. package/src/components/ContentView/ContentView.tsx +1 -0
  229. package/src/components/ContentView/MoreContentList.tsx +1 -0
  230. package/src/components/ContentView/components/EpisodeCard.tsx +4 -9
  231. package/src/components/ContentView/components/HeroBanner.tsx +16 -0
  232. package/src/components/Headers/AppHeader.tsx +1 -1
  233. package/src/components/Headers/One.tsx +1 -1
  234. package/src/components/Headers/Two.tsx +1 -1
  235. package/src/components/Logo/Logo.tsx +5 -7
  236. package/src/components/Reels/ReelsSeries/Model/Episodes.tsx +133 -0
  237. package/src/components/Reels/ReelsSeries/Model/Synopsis.tsx +242 -0
  238. package/src/components/Reels/ReelsSeries/ReelSeriesDetailsModal.tsx +209 -0
  239. package/src/components/Reels/ReelsSeries/ReelSeriesOverlay.tsx +185 -0
  240. package/src/components/Reels/ReelsSeries/ReelsSeries.tsx +163 -0
  241. package/src/components/Reels/ReelsSeries/ReelsSeriesItem.tsx +333 -0
  242. package/src/components/Reels/ReelsSeries/types.ts +27 -0
  243. package/src/components/Reels/index.ts +8 -0
  244. package/src/components/Subscription/SubOne.tsx +4 -2
  245. package/src/components/User/DeviceSessions/DeviceSessions.tsx +11 -0
  246. package/src/components/User/ProfileUpdate/ProfileUpdate.tsx +263 -0
  247. package/src/components/User/WatchHistory/WatchHistory.tsx +1 -0
  248. package/src/components/User/WatchLater/WatchLater.tsx +1 -0
  249. package/src/components/User/components/UserAvatar.tsx +36 -3
  250. package/src/components/User/components/UserSection.tsx +10 -13
  251. package/src/components/User/index.ts +3 -1
  252. package/src/components/index.ts +1 -0
  253. package/src/hooks/useSplashCache.ts +166 -0
  254. package/src/store/RecentSearchesStore.ts +0 -1
  255. package/src/theme/ThemeProvider.tsx +12 -9
  256. package/src/theme/themes.ts +3 -0
  257. package/src/types/content/content-view.types.ts +1 -0
  258. package/src/utils/Formater.ts +14 -0
  259. package/lib/module/hooks/useInitSplashCacheSync.js +0 -116
  260. package/lib/module/hooks/useInitSplashCacheSync.js.map +0 -1
  261. package/lib/typescript/src/hooks/useInitSplashCacheSync.d.ts +0 -22
  262. package/lib/typescript/src/hooks/useInitSplashCacheSync.d.ts.map +0 -1
  263. package/src/hooks/useInitSplashCacheSync.ts +0 -174
  264. /package/lib/module/assets/{img → svg}/h.svg +0 -0
  265. /package/src/assets/{img → svg}/h.svg +0 -0
@@ -0,0 +1,242 @@
1
+ import React, { useCallback } from 'react';
2
+ import {
3
+ Text,
4
+ View,
5
+ Image,
6
+ StyleSheet,
7
+ TouchableOpacity,
8
+ Dimensions,
9
+ FlatList,
10
+ } from 'react-native';
11
+ import { RFValue } from 'react-native-responsive-fontsize';
12
+ import { moderateScale, scale, verticalScale } from 'react-native-size-matters';
13
+ import type { ISeriesEpisode, ISeriesItem } from '../types';
14
+ import Svg, { Path, Defs, LinearGradient, Stop } from 'react-native-svg';
15
+
16
+ const { width: SCREEN_WIDTH } = Dimensions.get('window');
17
+ const GAP = moderateScale(10);
18
+
19
+ interface SynopsisProps {
20
+ reel: ISeriesEpisode;
21
+ data: ISeriesItem;
22
+ }
23
+
24
+ interface ILikeMoreData {
25
+ id: number;
26
+ name: string;
27
+ thumbnail: string;
28
+ }
29
+
30
+ const likeMoreData: Array<ILikeMoreData> = [
31
+ {
32
+ id: 1,
33
+ name: 'Housefull 5',
34
+ thumbnail:
35
+ 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTZFKczA4mK0DoFSiKN75aAtWdhm_AZvCWGkwPl2StUpOQYq6_b',
36
+ },
37
+ {
38
+ id: 2,
39
+ name: 'Sample Episode',
40
+ thumbnail:
41
+ 'https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcTfRd3dwJUToDAbEB4afBWcic5_HCwbKbn-B7-ZgF7niTa-MTIt',
42
+ },
43
+ {
44
+ id: 3,
45
+ name: 'Tees Maar Khan',
46
+ thumbnail:
47
+ 'https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcSwz8vklTTg8YdCqRHg9aauHq9BgpVgxLUvldi-Doz_Eh7ZIiVl',
48
+ },
49
+ {
50
+ id: 4,
51
+ name: 'Aap Jaisa Koi',
52
+ thumbnail:
53
+ 'https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcQujccf3ymM7lkv83Y6TkS5BkcLYJLTu2d3rJQYxh6cGqwx8AuR',
54
+ },
55
+ {
56
+ id: 5,
57
+ name: 'Kaalidhar Laapata',
58
+ thumbnail:
59
+ 'https://upload.wikimedia.org/wikipedia/en/b/bd/Kaalidhar_Laapata.jpg',
60
+ },
61
+ {
62
+ id: 6,
63
+ name: 'Aankhon Ki Gustaakhiyan',
64
+ thumbnail:
65
+ 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSLqG-A_lUucNT4TOcY1u42ujHyPbwuJvRLbO4zjNS8iuzNQ_6X',
66
+ },
67
+ ];
68
+
69
+ const Synopsis: React.FC<SynopsisProps> = ({ data }) => {
70
+ // responsive columns
71
+ const numColumns = SCREEN_WIDTH >= 420 ? 4 : 3;
72
+ const keyExtractor = useCallback(
73
+ (item: ILikeMoreData) => item.id.toString(),
74
+ []
75
+ );
76
+
77
+ const renderItem = useCallback(
78
+ ({ item }: { item: ILikeMoreData; index: number }) => (
79
+ <TouchableOpacity style={[styles.card]} activeOpacity={0.8}>
80
+ <Image
81
+ source={{
82
+ uri:
83
+ item.thumbnail ||
84
+ 'https://via.placeholder.com/300x400?text=Episode',
85
+ }}
86
+ style={styles.thumbnail}
87
+ resizeMode="cover"
88
+ />
89
+ <Text
90
+ style={[styles.title, { color: '#fff', width: scale(90) }]}
91
+ numberOfLines={2}
92
+ >
93
+ {item.name || 'Untitled'}
94
+ </Text>
95
+ </TouchableOpacity>
96
+ ),
97
+ []
98
+ );
99
+
100
+ return (
101
+ <View style={styles.container}>
102
+ <Text
103
+ style={{
104
+ color: 'rgba(255,255,255,1)',
105
+ fontSize: RFValue(10),
106
+ lineHeight: RFValue(14),
107
+ marginBottom: verticalScale(12),
108
+ }}
109
+ >
110
+ {data.description ||
111
+ 'No synopsis available for this reel. Please check back later.'}
112
+ </Text>
113
+
114
+ {/* Header */}
115
+ <View style={styles.header}>
116
+ <Svg width={22} height={2} viewBox="0 0 22 2" fill="none">
117
+ <Path d="M21.692 1.196H.594" stroke="url(#a)" strokeWidth={1.005} />
118
+ <Defs>
119
+ <LinearGradient
120
+ id="a"
121
+ x1={0.594}
122
+ y1={1.696}
123
+ x2={21.692}
124
+ y2={1.696}
125
+ gradientUnits="userSpaceOnUse"
126
+ >
127
+ <Stop stopOpacity={0} />
128
+ <Stop offset={1} stopColor="#fff" />
129
+ </LinearGradient>
130
+ </Defs>
131
+ </Svg>
132
+ <Text
133
+ style={{
134
+ color: '#fff',
135
+ fontSize: 12,
136
+ textAlign: 'center',
137
+ marginHorizontal: scale(8),
138
+ }}
139
+ >
140
+ More Like This
141
+ </Text>
142
+ <Svg width={22} height={2} viewBox="0 0 22 2" fill="none">
143
+ <Path
144
+ d="M.312 1.196H21.41"
145
+ stroke="url(#paint0_linear_797_3114)"
146
+ strokeWidth={1.00467}
147
+ />
148
+ <Defs>
149
+ <LinearGradient
150
+ id="paint0_linear_797_3114"
151
+ x1={21.4102}
152
+ y1={1.69629}
153
+ x2={0.312025}
154
+ y2={1.69629}
155
+ gradientUnits="userSpaceOnUse"
156
+ >
157
+ <Stop stopOpacity={0} />
158
+ <Stop offset={1} stopColor="#fff" />
159
+ </LinearGradient>
160
+ </Defs>
161
+ </Svg>
162
+ </View>
163
+
164
+ {/* Episodes Grid */}
165
+ {likeMoreData.length === 0 ? (
166
+ <Text style={styles.noEpisodesText}>No recommendations available.</Text>
167
+ ) : (
168
+ <FlatList
169
+ data={likeMoreData}
170
+ keyExtractor={keyExtractor}
171
+ renderItem={renderItem}
172
+ numColumns={numColumns}
173
+ columnWrapperStyle={{
174
+ justifyContent: 'space-between',
175
+ marginBottom: GAP,
176
+ }}
177
+ showsVerticalScrollIndicator={false}
178
+ contentContainerStyle={{
179
+ paddingBottom: verticalScale(16),
180
+ }}
181
+ removeClippedSubviews={false} // Disable to prevent recycling issues
182
+ nestedScrollEnabled={true} // Allows scroll inside modal
183
+ getItemLayout={(_data, index) => ({
184
+ length: verticalScale(120) + verticalScale(6) + verticalScale(20), // thumbnail + margin + text
185
+ offset:
186
+ (verticalScale(120) + verticalScale(6) + verticalScale(20)) *
187
+ Math.floor(index / numColumns),
188
+ index,
189
+ })}
190
+ initialNumToRender={6}
191
+ maxToRenderPerBatch={6}
192
+ windowSize={5}
193
+ disableVirtualization={false}
194
+ />
195
+ )}
196
+ </View>
197
+ );
198
+ };
199
+
200
+ export default Synopsis;
201
+
202
+ const styles = StyleSheet.create({
203
+ container: { flex: 1 },
204
+ header: {
205
+ flexDirection: 'row',
206
+ alignItems: 'center',
207
+ justifyContent: 'center',
208
+ marginBottom: verticalScale(12),
209
+ },
210
+ headerLine: {
211
+ height: verticalScale(1.5),
212
+ width: moderateScale(50),
213
+ marginHorizontal: moderateScale(8),
214
+ borderRadius: 999,
215
+ },
216
+ headerLabel: {
217
+ fontSize: RFValue(12),
218
+ textAlign: 'center',
219
+ },
220
+ card: {
221
+ // alignItems: 'center',
222
+ },
223
+ thumbnail: {
224
+ width: '100%',
225
+ height: verticalScale(120),
226
+ borderRadius: moderateScale(8),
227
+ marginBottom: verticalScale(6),
228
+ backgroundColor: 'rgba(255,255,255,0.06)',
229
+ aspectRatio: 3 / 4,
230
+ },
231
+ title: {
232
+ fontSize: RFValue(10),
233
+ // textAlign: 'center',
234
+ },
235
+ noEpisodesText: {
236
+ color: 'rgba(180,180,180,1)',
237
+ fontSize: RFValue(13),
238
+ textAlign: 'center',
239
+ marginTop: verticalScale(8),
240
+ marginBottom: verticalScale(12),
241
+ },
242
+ });
@@ -0,0 +1,209 @@
1
+ import React, { useState } from 'react';
2
+ import {
3
+ View,
4
+ Text,
5
+ TouchableOpacity,
6
+ Image,
7
+ StyleSheet,
8
+ Dimensions,
9
+ } from 'react-native';
10
+ import Modal from 'react-native-modal';
11
+ import LinearGradient from 'react-native-linear-gradient';
12
+ import { X } from 'lucide-react-native';
13
+ import { moderateScale, verticalScale } from 'react-native-size-matters';
14
+ import { RFValue } from 'react-native-responsive-fontsize';
15
+ import Episodes from './Model/Episodes';
16
+ import Synopsis from './Model/Synopsis';
17
+ import type { ISeriesEpisode, ISeriesItem } from './types';
18
+ import { formatCount } from '../../../utils/Formater';
19
+
20
+ const { height } = Dimensions.get('window');
21
+
22
+ interface ReelSeriesDetailsModalProps {
23
+ visible: boolean;
24
+ onClose: () => void;
25
+ reel: ISeriesEpisode;
26
+ data: ISeriesItem;
27
+ activeEpisodeIndex: number;
28
+ onEpisodeSelect: (index: number) => void;
29
+ }
30
+
31
+ const ReelSeriesDetailsModal: React.FC<ReelSeriesDetailsModalProps> = ({
32
+ visible,
33
+ onClose,
34
+ reel,
35
+ data,
36
+ activeEpisodeIndex,
37
+ onEpisodeSelect,
38
+ }) => {
39
+ const [activeTab, setActiveTab] = useState<'synopsis' | 'episodes'>(
40
+ 'synopsis'
41
+ );
42
+ const [routes] = useState<
43
+ {
44
+ key: string;
45
+ title: string;
46
+ }[]
47
+ >([
48
+ { key: 'synopsis', title: 'Synopsis' },
49
+ { key: 'episodes', title: 'Episodes' },
50
+ ]);
51
+
52
+ return (
53
+ <Modal
54
+ isVisible={visible}
55
+ onBackdropPress={onClose}
56
+ swipeDirection="down"
57
+ onSwipeComplete={onClose}
58
+ backdropOpacity={0.5}
59
+ style={{ margin: 0, justifyContent: 'flex-end' }}
60
+ propagateSwipe
61
+ >
62
+ <LinearGradient
63
+ colors={['rgba(103,85,35,1)', 'rgba(21,21,21,1)']}
64
+ style={styles.bottomSheetContainer}
65
+ >
66
+ {/* Drag Handle */}
67
+ <View style={styles.dragHandle} />
68
+ {/* Close Button */}
69
+ <TouchableOpacity onPress={onClose} style={styles.closeButtonWrapper}>
70
+ <X size={moderateScale(16)} color={'#fff'} />
71
+ </TouchableOpacity>
72
+ {/* Creator + Title */}
73
+ <View style={styles.headerRow}>
74
+ <Image
75
+ source={{ uri: data.thumbnail }}
76
+ style={styles.reelPosterImage}
77
+ />
78
+ <View style={{ flex: 1 }}>
79
+ <Text style={styles.reelTitleText}>{data.title}</Text>
80
+ <Text style={styles.reelDescriptionText} numberOfLines={3}>
81
+ {data.description}
82
+ </Text>
83
+ <Text style={styles.reelViewsText}>
84
+ {formatCount(data.views || 0)} Views
85
+ </Text>
86
+ </View>
87
+ </View>
88
+ {/* Tab View */}
89
+ <View
90
+ style={{
91
+ flexDirection: 'row',
92
+ // justifyContent: 'space-around',
93
+ marginTop: verticalScale(10),
94
+ }}
95
+ >
96
+ {routes.map((item) => (
97
+ <TouchableOpacity
98
+ key={item.key}
99
+ style={{
100
+ borderBottomColor: 'white',
101
+ borderBottomWidth:
102
+ activeTab === routes.find((r) => r.key === item.key)?.key
103
+ ? 2
104
+ : 0,
105
+ paddingBottom: 6,
106
+ marginHorizontal: 12,
107
+ }}
108
+ onPress={() => {
109
+ const tab = routes.find((r) => r.key === item.key)?.key;
110
+ tab && setActiveTab(tab as 'synopsis' | 'episodes');
111
+ }}
112
+ >
113
+ <Text
114
+ style={{
115
+ color: 'white',
116
+ fontSize: RFValue(11),
117
+ fontWeight: '700',
118
+ opacity:
119
+ activeTab === routes.find((r) => r.key === item.key)?.key
120
+ ? 1
121
+ : 0.6,
122
+ }}
123
+ >
124
+ {item.title}
125
+ </Text>
126
+ </TouchableOpacity>
127
+ ))}
128
+ </View>
129
+ {/* Tab View Content */}
130
+ <View
131
+ style={{
132
+ flex: 1,
133
+ marginTop: verticalScale(8),
134
+ marginHorizontal: 12,
135
+ }}
136
+ >
137
+ {activeTab === 'synopsis' && <Synopsis reel={reel} data={data} />}
138
+ {activeTab === 'episodes' && (
139
+ <Episodes
140
+ reel={reel}
141
+ data={data}
142
+ currentReel={activeEpisodeIndex}
143
+ onEpisodeSelect={onEpisodeSelect}
144
+ />
145
+ )}
146
+ </View>
147
+ </LinearGradient>
148
+ </Modal>
149
+ );
150
+ };
151
+
152
+ export default ReelSeriesDetailsModal;
153
+
154
+ const styles = StyleSheet.create({
155
+ bottomSheetContainer: {
156
+ height: height * 0.9,
157
+ borderTopLeftRadius: moderateScale(20),
158
+ borderTopRightRadius: moderateScale(20),
159
+ overflow: 'hidden',
160
+ paddingTop: verticalScale(10),
161
+ },
162
+ dragHandle: {
163
+ width: moderateScale(50),
164
+ height: verticalScale(5),
165
+ borderRadius: moderateScale(3),
166
+ backgroundColor: 'rgba(255,255,255,0.5)',
167
+ alignSelf: 'center',
168
+ marginBottom: verticalScale(10),
169
+ },
170
+ closeButtonWrapper: {
171
+ position: 'absolute',
172
+ top: verticalScale(10),
173
+ right: moderateScale(14),
174
+ zIndex: 10,
175
+ borderRadius: moderateScale(18),
176
+ width: moderateScale(30),
177
+ height: moderateScale(30),
178
+ justifyContent: 'center',
179
+ alignItems: 'center',
180
+ backgroundColor: 'rgba(255,255,255,0.26)',
181
+ },
182
+ headerRow: {
183
+ flexDirection: 'row',
184
+ paddingHorizontal: moderateScale(16),
185
+ marginBottom: verticalScale(10),
186
+ },
187
+ reelPosterImage: {
188
+ width: moderateScale(80),
189
+ height: verticalScale(100),
190
+ borderRadius: moderateScale(8),
191
+ marginRight: moderateScale(12),
192
+ },
193
+ reelTitleText: {
194
+ fontSize: RFValue(14),
195
+ fontWeight: '600',
196
+ color: '#fff',
197
+ },
198
+ reelDescriptionText: {
199
+ fontSize: RFValue(10),
200
+ color: 'rgba(215,215,215,1)',
201
+ marginBottom: verticalScale(4),
202
+ marginTop: verticalScale(3.5),
203
+ },
204
+ reelViewsText: {
205
+ fontSize: RFValue(10),
206
+ color: 'rgba(215,215,215,1)',
207
+ marginTop: verticalScale(2),
208
+ },
209
+ });
@@ -0,0 +1,185 @@
1
+ import React from 'react';
2
+ import { View, Text, TouchableOpacity, StyleSheet } from 'react-native';
3
+ import { Heart, Forward, ChevronRight, ListVideo } from 'lucide-react-native';
4
+ import { moderateScale, verticalScale } from 'react-native-size-matters';
5
+ import { RFValue } from 'react-native-responsive-fontsize';
6
+ import type { ISeriesEpisode, ISeriesItem } from './types';
7
+
8
+ interface ICommenProps {
9
+ data: ISeriesItem;
10
+ currentTime: number;
11
+ duration: number;
12
+ onLikePress: () => void;
13
+ onPlayPausePress: () => void;
14
+ onEpisodesPress: () => void;
15
+ onSharePress?: () => void;
16
+ activeEpisodeIndex: number;
17
+ }
18
+
19
+ interface IReelSeriesOverlayProps extends ICommenProps {
20
+ reel: ISeriesEpisode;
21
+ }
22
+
23
+ const ReelSeriesOverlay: React.FC<IReelSeriesOverlayProps> = ({
24
+ data,
25
+ currentTime,
26
+ duration,
27
+ onLikePress,
28
+ onEpisodesPress,
29
+ onSharePress,
30
+ activeEpisodeIndex,
31
+ }) => {
32
+ return (
33
+ <View style={styles.overlay}>
34
+ {/* Right Side Actions */}
35
+ <View style={styles.rightIcons}>
36
+ <TouchableOpacity
37
+ style={styles.iconBox}
38
+ onPress={onLikePress}
39
+ activeOpacity={0.7}
40
+ >
41
+ <Heart
42
+ size={moderateScale(25)}
43
+ color={data.isLiked ? 'red' : '#fff'}
44
+ fill={data.isLiked ? 'red' : 'none'}
45
+ />
46
+ <Text style={[styles.iconLabel, { color: '#fff' }]}>
47
+ {data.likes}
48
+ </Text>
49
+ </TouchableOpacity>
50
+
51
+ <TouchableOpacity style={styles.iconBox} onPress={onEpisodesPress}>
52
+ <ListVideo color={'#fff'} size={moderateScale(25)} />
53
+ <Text style={[styles.iconLabel, { color: '#fff' }]}>Episodes</Text>
54
+ </TouchableOpacity>
55
+
56
+ <TouchableOpacity style={styles.iconBox} onPress={onSharePress}>
57
+ <Forward color={'#fff'} size={moderateScale(25)} />
58
+ <Text style={[styles.iconLabel, { color: '#fff' }]}>Share</Text>
59
+ </TouchableOpacity>
60
+ </View>
61
+
62
+ {/* Title & Description */}
63
+ <View style={styles.titleBox}>
64
+ <Text style={[styles.title, { color: '#fff' }]}>
65
+ {data.title.length <= 25
66
+ ? data.title
67
+ : data.title.slice(0, 25) + '...'}
68
+ </Text>
69
+ <Text
70
+ numberOfLines={2}
71
+ style={[
72
+ styles.description,
73
+ { color: '#fff', marginTop: 2.5, opacity: 0.9 },
74
+ ]}
75
+ >
76
+ {data.description}
77
+ </Text>
78
+ </View>
79
+
80
+ {/* Episodes Button */}
81
+
82
+ <TouchableOpacity
83
+ style={[styles.episodesRow, { backgroundColor: 'rgba(0,0,0,0.5)' }]}
84
+ onPress={onEpisodesPress}
85
+ >
86
+ <View style={styles.bottomLeft}>
87
+ <ListVideo
88
+ color={'#fff'}
89
+ width={moderateScale(20)}
90
+ height={moderateScale(20)}
91
+ />
92
+ <Text style={[styles.episodes, { color: '#fff' }]}>
93
+ {activeEpisodeIndex + 1} / {data.episodes.length} Episodes
94
+ </Text>
95
+ </View>
96
+ <ChevronRight color={'#fff'} size={moderateScale(22)} />
97
+ </TouchableOpacity>
98
+
99
+ {/* Progress Bar */}
100
+ <View style={styles.progressBar}>
101
+ <View
102
+ style={[
103
+ styles.progressFill,
104
+ {
105
+ width: duration > 0 ? `${(currentTime / duration) * 100}%` : '0%',
106
+ },
107
+ ]}
108
+ />
109
+ {duration > 0 && (
110
+ <View
111
+ style={[
112
+ styles.progressKnob,
113
+ { left: `${(currentTime / duration) * 100}%` },
114
+ ]}
115
+ />
116
+ )}
117
+ </View>
118
+ </View>
119
+ );
120
+ };
121
+
122
+ export default ReelSeriesOverlay;
123
+
124
+ const styles = StyleSheet.create({
125
+ overlay: {
126
+ flex: 1,
127
+ justifyContent: 'flex-end',
128
+ paddingBottom: verticalScale(12),
129
+ paddingHorizontal: moderateScale(12),
130
+ },
131
+ centerPlayPauseButton: {
132
+ position: 'absolute',
133
+ top: '50%',
134
+ left: '50%',
135
+ transform: [{ translateX: -25 }, { translateY: -25 }],
136
+ width: moderateScale(50),
137
+ height: moderateScale(50),
138
+ borderRadius: moderateScale(25),
139
+ justifyContent: 'center',
140
+ alignItems: 'center',
141
+ zIndex: 5,
142
+ },
143
+ rightIcons: {
144
+ position: 'absolute',
145
+ bottom: verticalScale(120),
146
+ right: moderateScale(10),
147
+ alignItems: 'center',
148
+ },
149
+ iconBox: { marginVertical: verticalScale(8), alignItems: 'center' },
150
+ iconLabel: { fontSize: RFValue(10), marginTop: verticalScale(4) },
151
+ titleBox: { marginBottom: verticalScale(10) },
152
+ following: { fontSize: RFValue(10), fontWeight: '500' },
153
+ title: { fontSize: RFValue(13), fontWeight: '500' },
154
+ description: { fontSize: RFValue(10) },
155
+ episodesRow: {
156
+ flexDirection: 'row',
157
+ justifyContent: 'space-between',
158
+ alignItems: 'center',
159
+ borderRadius: moderateScale(8),
160
+ paddingHorizontal: moderateScale(12),
161
+ paddingVertical: verticalScale(8),
162
+ marginBottom: verticalScale(6),
163
+ },
164
+ bottomLeft: { flexDirection: 'row', alignItems: 'center' },
165
+ episodes: { fontSize: RFValue(13), marginLeft: moderateScale(10) },
166
+ progressBar: {
167
+ height: verticalScale(2),
168
+ backgroundColor: 'rgba(255, 255, 255, 0.3)',
169
+ borderRadius: moderateScale(1),
170
+ },
171
+ progressFill: {
172
+ height: '100%',
173
+ backgroundColor: '#fff',
174
+ borderRadius: moderateScale(1),
175
+ },
176
+ progressKnob: {
177
+ position: 'absolute',
178
+ top: -verticalScale(2),
179
+ width: moderateScale(7),
180
+ height: moderateScale(7),
181
+ borderRadius: moderateScale(5),
182
+ backgroundColor: '#fff',
183
+ transform: [{ translateX: -5 }],
184
+ },
185
+ });