@zezosoft/zezo-ott-react-native-ui-kit 1.1.1 → 1.1.3

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 (437) hide show
  1. package/lib/module/Styles/globalStyles.js +0 -5
  2. package/lib/module/Styles/globalStyles.js.map +1 -1
  3. package/lib/module/components/Auth/AuthProvider/AuthProvider.js +64 -40
  4. package/lib/module/components/Auth/AuthProvider/AuthProvider.js.map +1 -1
  5. package/lib/module/components/Auth/ForgotPassword/ForgotPassword.js +5 -2
  6. package/lib/module/components/Auth/ForgotPassword/ForgotPassword.js.map +1 -1
  7. package/lib/module/components/Auth/Login/LoginWithEmail.js +17 -11
  8. package/lib/module/components/Auth/Login/LoginWithEmail.js.map +1 -1
  9. package/lib/module/components/Auth/Login/LoginWithPhone.js +12 -6
  10. package/lib/module/components/Auth/Login/LoginWithPhone.js.map +1 -1
  11. package/lib/module/components/Auth/OTP/OTP.js +7 -4
  12. package/lib/module/components/Auth/OTP/OTP.js.map +1 -1
  13. package/lib/module/components/Auth/QrLogin/QrLogin.js +357 -144
  14. package/lib/module/components/Auth/QrLogin/QrLogin.js.map +1 -1
  15. package/lib/module/components/Auth/QrLogin/components/QrViewArea.js +227 -110
  16. package/lib/module/components/Auth/QrLogin/components/QrViewArea.js.map +1 -1
  17. package/lib/module/components/Auth/SignUp/SignUp.js +19 -13
  18. package/lib/module/components/Auth/SignUp/SignUp.js.map +1 -1
  19. package/lib/module/components/Auth/SplashScreen/SplashScreen.js +54 -36
  20. package/lib/module/components/Auth/SplashScreen/SplashScreen.js.map +1 -1
  21. package/lib/module/components/Auth/SplashScreen/components/SplashImage/SplashImage.js +29 -11
  22. package/lib/module/components/Auth/SplashScreen/components/SplashImage/SplashImage.js.map +1 -1
  23. package/lib/module/components/Auth/SplashScreen/components/SplashLottie/SplashLottie.js +13 -7
  24. package/lib/module/components/Auth/SplashScreen/components/SplashLottie/SplashLottie.js.map +1 -1
  25. package/lib/module/components/Auth/SplashScreen/components/SplashVideo/SplashVideo.js +33 -21
  26. package/lib/module/components/Auth/SplashScreen/components/SplashVideo/SplashVideo.js.map +1 -1
  27. package/lib/module/components/BackgroundLayout/BackgroundLayout.js +26 -20
  28. package/lib/module/components/BackgroundLayout/BackgroundLayout.js.map +1 -1
  29. package/lib/module/components/BlogView/BlogView.js +36 -20
  30. package/lib/module/components/BlogView/BlogView.js.map +1 -1
  31. package/lib/module/components/Button/BackBtn.js +24 -20
  32. package/lib/module/components/Button/BackBtn.js.map +1 -1
  33. package/lib/module/components/Button/PrimaryBtn.js +19 -13
  34. package/lib/module/components/Button/PrimaryBtn.js.map +1 -1
  35. package/lib/module/components/Button/SecondaryBtn.js +19 -13
  36. package/lib/module/components/Button/SecondaryBtn.js.map +1 -1
  37. package/lib/module/components/Button/TextButton.js +19 -13
  38. package/lib/module/components/Button/TextButton.js.map +1 -1
  39. package/lib/module/components/Content/Card/Category/Category.js +151 -46
  40. package/lib/module/components/Content/Card/Category/Category.js.map +1 -1
  41. package/lib/module/components/Content/Card/NowWatching/NowWatching.js +237 -108
  42. package/lib/module/components/Content/Card/NowWatching/NowWatching.js.map +1 -1
  43. package/lib/module/components/Content/Card/Sliders/Styles/One.js +200 -133
  44. package/lib/module/components/Content/Card/Sliders/Styles/One.js.map +1 -1
  45. package/lib/module/components/Content/Card/Sliders/Styles/Two.js +192 -84
  46. package/lib/module/components/Content/Card/Sliders/Styles/Two.js.map +1 -1
  47. package/lib/module/components/Content/Card/Styles/Five.js +131 -48
  48. package/lib/module/components/Content/Card/Styles/Five.js.map +1 -1
  49. package/lib/module/components/Content/Card/Styles/Four.js +126 -59
  50. package/lib/module/components/Content/Card/Styles/Four.js.map +1 -1
  51. package/lib/module/components/Content/Card/Styles/One.js +125 -50
  52. package/lib/module/components/Content/Card/Styles/One.js.map +1 -1
  53. package/lib/module/components/Content/Card/Styles/RotateInOut.js +143 -65
  54. package/lib/module/components/Content/Card/Styles/RotateInOut.js.map +1 -1
  55. package/lib/module/components/Content/Card/Styles/Six.js +207 -115
  56. package/lib/module/components/Content/Card/Styles/Six.js.map +1 -1
  57. package/lib/module/components/Content/Card/Styles/Three.js +134 -79
  58. package/lib/module/components/Content/Card/Styles/Three.js.map +1 -1
  59. package/lib/module/components/Content/Card/Styles/TopTen.js +186 -171
  60. package/lib/module/components/Content/Card/Styles/TopTen.js.map +1 -1
  61. package/lib/module/components/Content/Card/Styles/Two.js +144 -64
  62. package/lib/module/components/Content/Card/Styles/Two.js.map +1 -1
  63. package/lib/module/components/Content/Card/components/AdsPoster.js +162 -0
  64. package/lib/module/components/Content/Card/components/AdsPoster.js.map +1 -0
  65. package/lib/module/components/Content/Card/components/CardPoster.js +139 -93
  66. package/lib/module/components/Content/Card/components/CardPoster.js.map +1 -1
  67. package/lib/module/components/Content/Card/components/RentOrBuyIcon.js +18 -17
  68. package/lib/module/components/Content/Card/components/RentOrBuyIcon.js.map +1 -1
  69. package/lib/module/components/Content/Card/components/ThumbnailCard.js +78 -28
  70. package/lib/module/components/Content/Card/components/ThumbnailCard.js.map +1 -1
  71. package/lib/module/components/Content/Card/components/index.js +4 -0
  72. package/lib/module/components/Content/Card/components/index.js.map +1 -0
  73. package/lib/module/components/Content/Content.js +99 -40
  74. package/lib/module/components/Content/Content.js.map +1 -1
  75. package/lib/module/components/Content/Sections.js +63 -34
  76. package/lib/module/components/Content/Sections.js.map +1 -1
  77. package/lib/module/components/ContentView/ContentView.js +70 -41
  78. package/lib/module/components/ContentView/ContentView.js.map +1 -1
  79. package/lib/module/components/ContentView/MoreContentList.js +74 -40
  80. package/lib/module/components/ContentView/MoreContentList.js.map +1 -1
  81. package/lib/module/components/ContentView/components/AboutSection.js +40 -19
  82. package/lib/module/components/ContentView/components/AboutSection.js.map +1 -1
  83. package/lib/module/components/ContentView/components/CastCard.js +6 -7
  84. package/lib/module/components/ContentView/components/CastCard.js.map +1 -1
  85. package/lib/module/components/ContentView/components/EpisodeCard.js +2 -2
  86. package/lib/module/components/ContentView/components/EpisodeCard.js.map +1 -1
  87. package/lib/module/components/ContentView/components/GenreTags.js +25 -13
  88. package/lib/module/components/ContentView/components/GenreTags.js.map +1 -1
  89. package/lib/module/components/ContentView/components/HeroBanner.js +39 -11
  90. package/lib/module/components/ContentView/components/HeroBanner.js.map +1 -1
  91. package/lib/module/components/ContentView/components/MiniInfo.js +84 -77
  92. package/lib/module/components/ContentView/components/MiniInfo.js.map +1 -1
  93. package/lib/module/components/ContentView/components/PlayButton.js +11 -7
  94. package/lib/module/components/ContentView/components/PlayButton.js.map +1 -1
  95. package/lib/module/components/ContentView/components/Title.js +12 -12
  96. package/lib/module/components/ContentView/components/Title.js.map +1 -1
  97. package/lib/module/components/ContentView/components/TrailerButton.js +12 -7
  98. package/lib/module/components/ContentView/components/TrailerButton.js.map +1 -1
  99. package/lib/module/components/Fallbacks/NoContentFallback.js +27 -22
  100. package/lib/module/components/Fallbacks/NoContentFallback.js.map +1 -1
  101. package/lib/module/components/Fallbacks/NotFoundFallback.js +6 -4
  102. package/lib/module/components/Fallbacks/NotFoundFallback.js.map +1 -1
  103. package/lib/module/components/Headers/AppHeader.js +22 -13
  104. package/lib/module/components/Headers/AppHeader.js.map +1 -1
  105. package/lib/module/components/Headers/Three.js +6 -5
  106. package/lib/module/components/Headers/Three.js.map +1 -1
  107. package/lib/module/components/Headers/Two.js +19 -14
  108. package/lib/module/components/Headers/Two.js.map +1 -1
  109. package/lib/module/components/Input/InputOne.js +46 -31
  110. package/lib/module/components/Input/InputOne.js.map +1 -1
  111. package/lib/module/components/Loader/Loader.js +2 -2
  112. package/lib/module/components/Loader/Loader.js.map +1 -1
  113. package/lib/module/components/Logo/Logo.js +17 -14
  114. package/lib/module/components/Logo/Logo.js.map +1 -1
  115. package/lib/module/components/Search/One.js +2 -1
  116. package/lib/module/components/Search/One.js.map +1 -1
  117. package/lib/module/components/Search/components/SearchCard.js +15 -19
  118. package/lib/module/components/Search/components/SearchCard.js.map +1 -1
  119. package/lib/module/components/Settings/AppSettings.js +97 -62
  120. package/lib/module/components/Settings/AppSettings.js.map +1 -1
  121. package/lib/module/components/Subscription/SubOne.js +313 -254
  122. package/lib/module/components/Subscription/SubOne.js.map +1 -1
  123. package/lib/module/components/Text/Text.js +15 -12
  124. package/lib/module/components/Text/Text.js.map +1 -1
  125. package/lib/module/components/User/DeviceSessions/DeviceSessions.js +25 -23
  126. package/lib/module/components/User/DeviceSessions/DeviceSessions.js.map +1 -1
  127. package/lib/module/components/User/ProfileUpdate/ProfileUpdate.js +23 -18
  128. package/lib/module/components/User/ProfileUpdate/ProfileUpdate.js.map +1 -1
  129. package/lib/module/components/User/PurchaseHistory/PurchaseHistory.js +38 -24
  130. package/lib/module/components/User/PurchaseHistory/PurchaseHistory.js.map +1 -1
  131. package/lib/module/components/User/WatchHistory/WatchHistory.js +21 -14
  132. package/lib/module/components/User/WatchHistory/WatchHistory.js.map +1 -1
  133. package/lib/module/components/User/WatchLater/WatchLater.js +30 -21
  134. package/lib/module/components/User/WatchLater/WatchLater.js.map +1 -1
  135. package/lib/module/components/User/components/UserAvatar.js +38 -19
  136. package/lib/module/components/User/components/UserAvatar.js.map +1 -1
  137. package/lib/module/components/User/components/UserSection.js +37 -17
  138. package/lib/module/components/User/components/UserSection.js.map +1 -1
  139. package/lib/module/components/View/View.js +7 -4
  140. package/lib/module/components/View/View.js.map +1 -1
  141. package/lib/module/components/index.js +0 -1
  142. package/lib/module/components/index.js.map +1 -1
  143. package/lib/module/constants/dummySections.js +44 -4
  144. package/lib/module/constants/dummySections.js.map +1 -1
  145. package/lib/module/hooks/Images/index.js +5 -0
  146. package/lib/module/hooks/Images/index.js.map +1 -0
  147. package/lib/module/hooks/Images/useImageLoader.js +168 -0
  148. package/lib/module/hooks/Images/useImageLoader.js.map +1 -0
  149. package/lib/module/hooks/Images/useImageValidation.js +36 -0
  150. package/lib/module/hooks/Images/useImageValidation.js.map +1 -0
  151. package/lib/module/hooks/index.js +20 -0
  152. package/lib/module/hooks/index.js.map +1 -0
  153. package/lib/module/hooks/useAdTracking.js +270 -0
  154. package/lib/module/hooks/useAdTracking.js.map +1 -0
  155. package/lib/module/hooks/useCards.js +164 -0
  156. package/lib/module/hooks/useCards.js.map +1 -0
  157. package/lib/module/hooks/useDebounce.js +25 -6
  158. package/lib/module/hooks/useDebounce.js.map +1 -1
  159. package/lib/module/hooks/useKeyboard.js +7 -4
  160. package/lib/module/hooks/useKeyboard.js.map +1 -1
  161. package/lib/module/hooks/useNavigationMode.js +10 -4
  162. package/lib/module/hooks/useNavigationMode.js.map +1 -1
  163. package/lib/module/hooks/usePaginatedSection.js +12 -7
  164. package/lib/module/hooks/usePaginatedSection.js.map +1 -1
  165. package/lib/module/hooks/usePrevious.js +30 -0
  166. package/lib/module/hooks/usePrevious.js.map +1 -0
  167. package/lib/module/hooks/useSafeCallback.js +33 -0
  168. package/lib/module/hooks/useSafeCallback.js.map +1 -0
  169. package/lib/module/hooks/useSkeletonItems.js +33 -0
  170. package/lib/module/hooks/useSkeletonItems.js.map +1 -0
  171. package/lib/module/hooks/useSplashCache.js +2 -1
  172. package/lib/module/hooks/useSplashCache.js.map +1 -1
  173. package/lib/module/hooks/useThemeColors.js +33 -0
  174. package/lib/module/hooks/useThemeColors.js.map +1 -0
  175. package/lib/module/theme/ThemeProvider.js +17 -11
  176. package/lib/module/theme/ThemeProvider.js.map +1 -1
  177. package/lib/module/theme/hook/useInternalTheme.js +18 -11
  178. package/lib/module/theme/hook/useInternalTheme.js.map +1 -1
  179. package/lib/module/theme/hook/useThemeStatusBar.js +10 -4
  180. package/lib/module/theme/hook/useThemeStatusBar.js.map +1 -1
  181. package/lib/typescript/src/Styles/globalStyles.d.ts +0 -5
  182. package/lib/typescript/src/Styles/globalStyles.d.ts.map +1 -1
  183. package/lib/typescript/src/components/Auth/AuthProvider/AuthProvider.d.ts.map +1 -1
  184. package/lib/typescript/src/components/Auth/ForgotPassword/ForgotPassword.d.ts.map +1 -1
  185. package/lib/typescript/src/components/Auth/Login/LoginWithEmail.d.ts.map +1 -1
  186. package/lib/typescript/src/components/Auth/Login/LoginWithPhone.d.ts.map +1 -1
  187. package/lib/typescript/src/components/Auth/OTP/OTP.d.ts.map +1 -1
  188. package/lib/typescript/src/components/Auth/QrLogin/QrLogin.d.ts +2 -15
  189. package/lib/typescript/src/components/Auth/QrLogin/QrLogin.d.ts.map +1 -1
  190. package/lib/typescript/src/components/Auth/QrLogin/components/QrViewArea.d.ts +0 -1
  191. package/lib/typescript/src/components/Auth/QrLogin/components/QrViewArea.d.ts.map +1 -1
  192. package/lib/typescript/src/components/Auth/SignUp/SignUp.d.ts.map +1 -1
  193. package/lib/typescript/src/components/Auth/SplashScreen/SplashScreen.d.ts.map +1 -1
  194. package/lib/typescript/src/components/Auth/SplashScreen/components/SplashImage/SplashImage.d.ts.map +1 -1
  195. package/lib/typescript/src/components/Auth/SplashScreen/components/SplashLottie/SplashLottie.d.ts.map +1 -1
  196. package/lib/typescript/src/components/Auth/SplashScreen/components/SplashVideo/SplashVideo.d.ts.map +1 -1
  197. package/lib/typescript/src/components/Auth/index.d.ts.map +1 -1
  198. package/lib/typescript/src/components/BackgroundLayout/BackgroundLayout.d.ts +1 -1
  199. package/lib/typescript/src/components/BackgroundLayout/BackgroundLayout.d.ts.map +1 -1
  200. package/lib/typescript/src/components/BlogView/BlogView.d.ts +2 -1
  201. package/lib/typescript/src/components/BlogView/BlogView.d.ts.map +1 -1
  202. package/lib/typescript/src/components/Button/BackBtn.d.ts +2 -2
  203. package/lib/typescript/src/components/Button/BackBtn.d.ts.map +1 -1
  204. package/lib/typescript/src/components/Button/PrimaryBtn.d.ts +2 -1
  205. package/lib/typescript/src/components/Button/PrimaryBtn.d.ts.map +1 -1
  206. package/lib/typescript/src/components/Button/SecondaryBtn.d.ts +2 -1
  207. package/lib/typescript/src/components/Button/SecondaryBtn.d.ts.map +1 -1
  208. package/lib/typescript/src/components/Button/TextButton.d.ts +2 -2
  209. package/lib/typescript/src/components/Button/TextButton.d.ts.map +1 -1
  210. package/lib/typescript/src/components/Button/index.d.ts +2 -2
  211. package/lib/typescript/src/components/Content/Card/Category/Category.d.ts.map +1 -1
  212. package/lib/typescript/src/components/Content/Card/NowWatching/NowWatching.d.ts.map +1 -1
  213. package/lib/typescript/src/components/Content/Card/Sliders/Styles/One.d.ts.map +1 -1
  214. package/lib/typescript/src/components/Content/Card/Sliders/Styles/Two.d.ts.map +1 -1
  215. package/lib/typescript/src/components/Content/Card/Styles/Five.d.ts +13 -1
  216. package/lib/typescript/src/components/Content/Card/Styles/Five.d.ts.map +1 -1
  217. package/lib/typescript/src/components/Content/Card/Styles/Four.d.ts +13 -1
  218. package/lib/typescript/src/components/Content/Card/Styles/Four.d.ts.map +1 -1
  219. package/lib/typescript/src/components/Content/Card/Styles/One.d.ts +15 -3
  220. package/lib/typescript/src/components/Content/Card/Styles/One.d.ts.map +1 -1
  221. package/lib/typescript/src/components/Content/Card/Styles/RotateInOut.d.ts +13 -1
  222. package/lib/typescript/src/components/Content/Card/Styles/RotateInOut.d.ts.map +1 -1
  223. package/lib/typescript/src/components/Content/Card/Styles/Six.d.ts +1 -0
  224. package/lib/typescript/src/components/Content/Card/Styles/Six.d.ts.map +1 -1
  225. package/lib/typescript/src/components/Content/Card/Styles/Three.d.ts +13 -5
  226. package/lib/typescript/src/components/Content/Card/Styles/Three.d.ts.map +1 -1
  227. package/lib/typescript/src/components/Content/Card/Styles/TopTen.d.ts +1 -0
  228. package/lib/typescript/src/components/Content/Card/Styles/TopTen.d.ts.map +1 -1
  229. package/lib/typescript/src/components/Content/Card/Styles/Two.d.ts +13 -1
  230. package/lib/typescript/src/components/Content/Card/Styles/Two.d.ts.map +1 -1
  231. package/lib/typescript/src/components/Content/Card/components/AdsPoster.d.ts +26 -0
  232. package/lib/typescript/src/components/Content/Card/components/AdsPoster.d.ts.map +1 -0
  233. package/lib/typescript/src/components/Content/Card/components/CardPoster.d.ts +3 -1
  234. package/lib/typescript/src/components/Content/Card/components/CardPoster.d.ts.map +1 -1
  235. package/lib/typescript/src/components/Content/Card/components/RentOrBuyIcon.d.ts +2 -2
  236. package/lib/typescript/src/components/Content/Card/components/RentOrBuyIcon.d.ts.map +1 -1
  237. package/lib/typescript/src/components/Content/Card/components/ThumbnailCard.d.ts +2 -0
  238. package/lib/typescript/src/components/Content/Card/components/ThumbnailCard.d.ts.map +1 -1
  239. package/lib/typescript/src/components/Content/Card/components/index.d.ts +2 -0
  240. package/lib/typescript/src/components/Content/Card/components/index.d.ts.map +1 -0
  241. package/lib/typescript/src/components/Content/Card/index.d.ts +76 -6
  242. package/lib/typescript/src/components/Content/Card/index.d.ts.map +1 -1
  243. package/lib/typescript/src/components/Content/Content.d.ts +6 -3
  244. package/lib/typescript/src/components/Content/Content.d.ts.map +1 -1
  245. package/lib/typescript/src/components/Content/Sections.d.ts +22 -8
  246. package/lib/typescript/src/components/Content/Sections.d.ts.map +1 -1
  247. package/lib/typescript/src/components/ContentView/ContentView.d.ts +6 -1
  248. package/lib/typescript/src/components/ContentView/ContentView.d.ts.map +1 -1
  249. package/lib/typescript/src/components/ContentView/MoreContentList.d.ts.map +1 -1
  250. package/lib/typescript/src/components/ContentView/components/AboutSection.d.ts +2 -1
  251. package/lib/typescript/src/components/ContentView/components/AboutSection.d.ts.map +1 -1
  252. package/lib/typescript/src/components/ContentView/components/CastCard.d.ts +6 -1
  253. package/lib/typescript/src/components/ContentView/components/CastCard.d.ts.map +1 -1
  254. package/lib/typescript/src/components/ContentView/components/EpisodeCard.d.ts +2 -1
  255. package/lib/typescript/src/components/ContentView/components/EpisodeCard.d.ts.map +1 -1
  256. package/lib/typescript/src/components/ContentView/components/GenreTags.d.ts +1 -1
  257. package/lib/typescript/src/components/ContentView/components/GenreTags.d.ts.map +1 -1
  258. package/lib/typescript/src/components/ContentView/components/HeroBanner.d.ts +2 -1
  259. package/lib/typescript/src/components/ContentView/components/HeroBanner.d.ts.map +1 -1
  260. package/lib/typescript/src/components/ContentView/components/MiniInfo.d.ts +1 -1
  261. package/lib/typescript/src/components/ContentView/components/MiniInfo.d.ts.map +1 -1
  262. package/lib/typescript/src/components/ContentView/components/PlayButton.d.ts +2 -1
  263. package/lib/typescript/src/components/ContentView/components/PlayButton.d.ts.map +1 -1
  264. package/lib/typescript/src/components/ContentView/components/Title.d.ts +1 -1
  265. package/lib/typescript/src/components/ContentView/components/Title.d.ts.map +1 -1
  266. package/lib/typescript/src/components/ContentView/components/TrailerButton.d.ts +2 -1
  267. package/lib/typescript/src/components/ContentView/components/TrailerButton.d.ts.map +1 -1
  268. package/lib/typescript/src/components/Fallbacks/NoContentFallback.d.ts +2 -1
  269. package/lib/typescript/src/components/Fallbacks/NoContentFallback.d.ts.map +1 -1
  270. package/lib/typescript/src/components/Fallbacks/NotFoundFallback.d.ts +1 -1
  271. package/lib/typescript/src/components/Fallbacks/NotFoundFallback.d.ts.map +1 -1
  272. package/lib/typescript/src/components/Headers/AppHeader.d.ts +2 -2
  273. package/lib/typescript/src/components/Headers/AppHeader.d.ts.map +1 -1
  274. package/lib/typescript/src/components/Headers/Three.d.ts +2 -2
  275. package/lib/typescript/src/components/Headers/Three.d.ts.map +1 -1
  276. package/lib/typescript/src/components/Headers/Two.d.ts +2 -2
  277. package/lib/typescript/src/components/Headers/Two.d.ts.map +1 -1
  278. package/lib/typescript/src/components/Headers/index.d.ts +2 -2
  279. package/lib/typescript/src/components/Input/Input.d.ts +1 -1
  280. package/lib/typescript/src/components/Input/InputOne.d.ts +2 -2
  281. package/lib/typescript/src/components/Input/InputOne.d.ts.map +1 -1
  282. package/lib/typescript/src/components/Loader/Loader.d.ts.map +1 -1
  283. package/lib/typescript/src/components/Logo/Logo.d.ts +2 -1
  284. package/lib/typescript/src/components/Logo/Logo.d.ts.map +1 -1
  285. package/lib/typescript/src/components/Search/One.d.ts.map +1 -1
  286. package/lib/typescript/src/components/Search/components/SearchCard.d.ts +2 -5
  287. package/lib/typescript/src/components/Search/components/SearchCard.d.ts.map +1 -1
  288. package/lib/typescript/src/components/Search/index.d.ts +1 -1
  289. package/lib/typescript/src/components/Settings/AppSettings.d.ts +2 -2
  290. package/lib/typescript/src/components/Settings/AppSettings.d.ts.map +1 -1
  291. package/lib/typescript/src/components/Subscription/SubOne.d.ts.map +1 -1
  292. package/lib/typescript/src/components/Subscription/index.d.ts.map +1 -1
  293. package/lib/typescript/src/components/Text/Text.d.ts +2 -2
  294. package/lib/typescript/src/components/Text/Text.d.ts.map +1 -1
  295. package/lib/typescript/src/components/User/DeviceSessions/DeviceSessions.d.ts +1 -1
  296. package/lib/typescript/src/components/User/DeviceSessions/DeviceSessions.d.ts.map +1 -1
  297. package/lib/typescript/src/components/User/ProfileUpdate/ProfileUpdate.d.ts +1 -1
  298. package/lib/typescript/src/components/User/ProfileUpdate/ProfileUpdate.d.ts.map +1 -1
  299. package/lib/typescript/src/components/User/PurchaseHistory/PurchaseHistory.d.ts +1 -1
  300. package/lib/typescript/src/components/User/PurchaseHistory/PurchaseHistory.d.ts.map +1 -1
  301. package/lib/typescript/src/components/User/WatchHistory/WatchHistory.d.ts +1 -1
  302. package/lib/typescript/src/components/User/WatchHistory/WatchHistory.d.ts.map +1 -1
  303. package/lib/typescript/src/components/User/WatchLater/WatchLater.d.ts +1 -1
  304. package/lib/typescript/src/components/User/WatchLater/WatchLater.d.ts.map +1 -1
  305. package/lib/typescript/src/components/User/components/UserAvatar.d.ts +1 -1
  306. package/lib/typescript/src/components/User/components/UserAvatar.d.ts.map +1 -1
  307. package/lib/typescript/src/components/User/components/UserSection.d.ts +1 -1
  308. package/lib/typescript/src/components/User/components/UserSection.d.ts.map +1 -1
  309. package/lib/typescript/src/components/View/View.d.ts +2 -0
  310. package/lib/typescript/src/components/View/View.d.ts.map +1 -1
  311. package/lib/typescript/src/components/index.d.ts +0 -1
  312. package/lib/typescript/src/components/index.d.ts.map +1 -1
  313. package/lib/typescript/src/constants/dummySections.d.ts +5 -0
  314. package/lib/typescript/src/constants/dummySections.d.ts.map +1 -1
  315. package/lib/typescript/src/hooks/Images/index.d.ts +3 -0
  316. package/lib/typescript/src/hooks/Images/index.d.ts.map +1 -0
  317. package/lib/typescript/src/hooks/Images/useImageLoader.d.ts +36 -0
  318. package/lib/typescript/src/hooks/Images/useImageLoader.d.ts.map +1 -0
  319. package/lib/typescript/src/hooks/Images/useImageValidation.d.ts +17 -0
  320. package/lib/typescript/src/hooks/Images/useImageValidation.d.ts.map +1 -0
  321. package/lib/typescript/src/hooks/index.d.ts +17 -0
  322. package/lib/typescript/src/hooks/index.d.ts.map +1 -0
  323. package/lib/typescript/src/hooks/useAdTracking.d.ts +39 -0
  324. package/lib/typescript/src/hooks/useAdTracking.d.ts.map +1 -0
  325. package/lib/typescript/src/hooks/useCards.d.ts +36 -0
  326. package/lib/typescript/src/hooks/useCards.d.ts.map +1 -0
  327. package/lib/typescript/src/hooks/useDebounce.d.ts.map +1 -1
  328. package/lib/typescript/src/hooks/useKeyboard.d.ts.map +1 -1
  329. package/lib/typescript/src/hooks/useNavigationMode.d.ts.map +1 -1
  330. package/lib/typescript/src/hooks/usePaginatedSection.d.ts +12 -2
  331. package/lib/typescript/src/hooks/usePaginatedSection.d.ts.map +1 -1
  332. package/lib/typescript/src/hooks/usePrevious.d.ts +12 -0
  333. package/lib/typescript/src/hooks/usePrevious.d.ts.map +1 -0
  334. package/lib/typescript/src/hooks/useSafeCallback.d.ts +15 -0
  335. package/lib/typescript/src/hooks/useSafeCallback.d.ts.map +1 -0
  336. package/lib/typescript/src/hooks/useSkeletonItems.d.ts +11 -0
  337. package/lib/typescript/src/hooks/useSkeletonItems.d.ts.map +1 -0
  338. package/lib/typescript/src/hooks/useSplashCache.d.ts.map +1 -1
  339. package/lib/typescript/src/hooks/useThemeColors.d.ts +27 -0
  340. package/lib/typescript/src/hooks/useThemeColors.d.ts.map +1 -0
  341. package/lib/typescript/src/theme/ThemeProvider.d.ts.map +1 -1
  342. package/lib/typescript/src/theme/hook/useInternalTheme.d.ts.map +1 -1
  343. package/lib/typescript/src/theme/hook/useThemeStatusBar.d.ts.map +1 -1
  344. package/lib/typescript/src/types/sections/index.d.ts +7 -4
  345. package/lib/typescript/src/types/sections/index.d.ts.map +1 -1
  346. package/package.json +6 -3
  347. package/src/Styles/globalStyles.ts +0 -5
  348. package/src/components/Auth/AuthProvider/AuthProvider.tsx +288 -212
  349. package/src/components/Auth/ForgotPassword/ForgotPassword.tsx +11 -4
  350. package/src/components/Auth/Login/LoginWithEmail.tsx +266 -238
  351. package/src/components/Auth/Login/LoginWithPhone.tsx +18 -6
  352. package/src/components/Auth/OTP/OTP.tsx +21 -5
  353. package/src/components/Auth/QrLogin/QrLogin.tsx +477 -177
  354. package/src/components/Auth/QrLogin/components/QrViewArea.tsx +349 -139
  355. package/src/components/Auth/SignUp/SignUp.tsx +312 -293
  356. package/src/components/Auth/SplashScreen/SplashScreen.tsx +186 -131
  357. package/src/components/Auth/SplashScreen/components/SplashImage/SplashImage.tsx +32 -15
  358. package/src/components/Auth/SplashScreen/components/SplashLottie/SplashLottie.tsx +11 -5
  359. package/src/components/Auth/SplashScreen/components/SplashVideo/SplashVideo.tsx +34 -18
  360. package/src/components/BackgroundLayout/BackgroundLayout.tsx +43 -37
  361. package/src/components/BlogView/BlogView.tsx +66 -30
  362. package/src/components/Button/BackBtn.tsx +64 -34
  363. package/src/components/Button/PrimaryBtn.tsx +42 -25
  364. package/src/components/Button/SecondaryBtn.tsx +41 -25
  365. package/src/components/Button/TextButton.tsx +54 -32
  366. package/src/components/Content/Card/Category/Category.tsx +189 -64
  367. package/src/components/Content/Card/NowWatching/NowWatching.tsx +281 -136
  368. package/src/components/Content/Card/Sliders/Styles/One.tsx +270 -158
  369. package/src/components/Content/Card/Sliders/Styles/Two.tsx +239 -90
  370. package/src/components/Content/Card/Styles/Five.tsx +161 -62
  371. package/src/components/Content/Card/Styles/Four.tsx +164 -85
  372. package/src/components/Content/Card/Styles/One.tsx +161 -71
  373. package/src/components/Content/Card/Styles/RotateInOut.tsx +162 -67
  374. package/src/components/Content/Card/Styles/Six.tsx +242 -142
  375. package/src/components/Content/Card/Styles/Three.tsx +166 -133
  376. package/src/components/Content/Card/Styles/TopTen.tsx +230 -191
  377. package/src/components/Content/Card/Styles/Two.tsx +182 -79
  378. package/src/components/Content/Card/components/AdsPoster.tsx +202 -0
  379. package/src/components/Content/Card/components/CardPoster.tsx +166 -105
  380. package/src/components/Content/Card/components/RentOrBuyIcon.tsx +58 -38
  381. package/src/components/Content/Card/components/ThumbnailCard.tsx +122 -47
  382. package/src/components/Content/Card/components/index.ts +1 -0
  383. package/src/components/Content/Content.tsx +211 -106
  384. package/src/components/Content/Sections.tsx +148 -51
  385. package/src/components/ContentView/ContentView.tsx +194 -128
  386. package/src/components/ContentView/MoreContentList.tsx +215 -151
  387. package/src/components/ContentView/components/AboutSection.tsx +132 -93
  388. package/src/components/ContentView/components/CastCard.tsx +148 -138
  389. package/src/components/ContentView/components/EpisodeCard.tsx +160 -155
  390. package/src/components/ContentView/components/GenreTags.tsx +68 -53
  391. package/src/components/ContentView/components/HeroBanner.tsx +326 -284
  392. package/src/components/ContentView/components/MiniInfo.tsx +181 -159
  393. package/src/components/ContentView/components/PlayButton.tsx +27 -16
  394. package/src/components/ContentView/components/Title.tsx +89 -72
  395. package/src/components/ContentView/components/TrailerButton.tsx +35 -22
  396. package/src/components/Fallbacks/NoContentFallback.tsx +107 -103
  397. package/src/components/Fallbacks/NotFoundFallback.tsx +12 -4
  398. package/src/components/Headers/AppHeader.tsx +42 -26
  399. package/src/components/Headers/Three.tsx +12 -8
  400. package/src/components/Headers/Two.tsx +31 -10
  401. package/src/components/Input/InputOne.tsx +136 -108
  402. package/src/components/Loader/Loader.tsx +2 -2
  403. package/src/components/Logo/Logo.tsx +43 -27
  404. package/src/components/Search/One.tsx +2 -4
  405. package/src/components/Search/components/SearchCard.tsx +19 -13
  406. package/src/components/Settings/AppSettings.tsx +217 -128
  407. package/src/components/Subscription/SubOne.tsx +394 -317
  408. package/src/components/Text/Text.tsx +33 -22
  409. package/src/components/User/DeviceSessions/DeviceSessions.tsx +129 -102
  410. package/src/components/User/ProfileUpdate/ProfileUpdate.tsx +36 -17
  411. package/src/components/User/PurchaseHistory/PurchaseHistory.tsx +194 -140
  412. package/src/components/User/WatchHistory/WatchHistory.tsx +63 -36
  413. package/src/components/User/WatchLater/WatchLater.tsx +119 -81
  414. package/src/components/User/components/UserAvatar.tsx +49 -15
  415. package/src/components/User/components/UserSection.tsx +71 -37
  416. package/src/components/View/View.tsx +10 -2
  417. package/src/components/index.ts +0 -1
  418. package/src/constants/dummySections.ts +48 -1
  419. package/src/hooks/Images/index.ts +2 -0
  420. package/src/hooks/Images/useImageLoader.ts +206 -0
  421. package/src/hooks/Images/useImageValidation.ts +36 -0
  422. package/src/hooks/index.ts +17 -0
  423. package/src/hooks/useAdTracking.ts +349 -0
  424. package/src/hooks/useCards.ts +228 -0
  425. package/src/hooks/useDebounce.ts +25 -6
  426. package/src/hooks/useKeyboard.ts +12 -5
  427. package/src/hooks/useNavigationMode.ts +16 -5
  428. package/src/hooks/usePaginatedSection.ts +27 -8
  429. package/src/hooks/usePrevious.ts +28 -0
  430. package/src/hooks/useSafeCallback.ts +43 -0
  431. package/src/hooks/useSkeletonItems.ts +30 -0
  432. package/src/hooks/useSplashCache.ts +2 -1
  433. package/src/hooks/useThemeColors.ts +51 -0
  434. package/src/theme/ThemeProvider.tsx +25 -9
  435. package/src/theme/hook/useInternalTheme.ts +19 -13
  436. package/src/theme/hook/useThemeStatusBar.ts +14 -5
  437. package/src/types/sections/index.ts +7 -4
@@ -3,7 +3,7 @@
3
3
  * @LastModified Sat 28 Jun 2025 at 01:00 AM
4
4
  **/
5
5
 
6
- import React, { memo, useCallback, useRef } from 'react';
6
+ import React, { memo, useCallback, useMemo, useRef } from 'react';
7
7
  import {
8
8
  View,
9
9
  FlatList,
@@ -24,7 +24,6 @@ import { useInternalTheme } from '../../../../theme/hook/useInternalTheme';
24
24
  import NavigateToMore from '../components/NavigateToMore';
25
25
  import { ThumbnailCard } from '../components/ThumbnailCard';
26
26
  import { Text } from '../../../Text';
27
- import { usePaginatedSection } from '../../../../hooks/usePaginatedSection';
28
27
  import type { ThemeOverride } from '../../../../theme/themes';
29
28
  import type {
30
29
  IGetSectionData,
@@ -34,10 +33,42 @@ import type {
34
33
  import { RFValue } from 'react-native-responsive-fontsize';
35
34
  import RentOrBuyIcon from '../components/RentOrBuyIcon';
36
35
  import type { IContentData } from '@zezosoft/zezo-ott-api-client';
36
+ import { useCards } from '../../../../hooks';
37
+
38
+ // Default dimensions and styling constants
37
39
  const DEFAULT_ITEM_WIDTH = moderateScale(160);
38
40
  const DEFAULT_BORDER_RADIUS = moderateScale(5);
39
41
  const DEFAULT_SKELETON_COUNT = 3;
40
42
 
43
+ // Spacing constants
44
+ const ITEM_MARGIN_LEFT = moderateScale(10);
45
+ const ITEM_MARGIN_TOP = verticalScale(4);
46
+ const FIRST_SKELETON_MARGIN_LEFT = moderateScale(12);
47
+ const SKELETON_MARGIN_RIGHT = moderateScale(12);
48
+ const CONTAINER_PADDING_HORIZONTAL = moderateScale(10);
49
+ const CONTAINER_MARGIN_BOTTOM = verticalScale(8);
50
+ const ROOT_MARGIN_VERTICAL = verticalScale(6);
51
+ const LIST_PADDING_RIGHT = moderateScale(15);
52
+
53
+ // Skeleton styling constants
54
+ const SKELETON_TITLE_WIDTH = moderateScale(100);
55
+ const SKELETON_TITLE_HEIGHT = moderateScale(20);
56
+ const SKELETON_TITLE_BORDER_RADIUS = moderateScale(4);
57
+ const SKELETON_TITLE_MARGIN_HORIZONTAL = moderateScale(15);
58
+ const SKELETON_TITLE_MARGIN_BOTTOM = verticalScale(6);
59
+ const SKELETON_THUMBNAIL_HEIGHT_RATIO = 9 / 16;
60
+ const SKELETON_TEXT_WIDTH_RATIO = 0.8;
61
+ const SKELETON_TEXT_HEIGHT = moderateScale(13);
62
+ const SKELETON_TEXT_BORDER_RADIUS = moderateScale(3);
63
+ const SKELETON_TEXT_MARGIN_TOP = verticalScale(6);
64
+
65
+ // FlatList performance constants
66
+ const INITIAL_NUM_TO_RENDER = 5;
67
+ const ON_END_REACHED_THRESHOLD = 0.5;
68
+
69
+ // Touchable opacity constant
70
+ const ACTIVE_OPACITY = 0.8;
71
+
41
72
  type MovieCardSixProps = {
42
73
  theme?: ThemeOverride;
43
74
  title: string;
@@ -54,6 +85,7 @@ type MovieCardSixProps = {
54
85
  itemWidth?: number;
55
86
  borderRadius?: number;
56
87
  skeletonCount?: number;
88
+ paginationSkeletonCount?: number;
57
89
  containerStyle?: StyleProp<ViewStyle>;
58
90
  titleStyle?: StyleProp<TextStyle>;
59
91
  itemStyle?: StyleProp<ViewStyle>;
@@ -65,13 +97,14 @@ const MovieCardSix: React.FC<MovieCardSixProps> = ({
65
97
  title,
66
98
  section_id,
67
99
  type,
68
- data: initialData,
100
+ data: externalData,
69
101
  moreFetchData,
70
102
  onPressItem,
71
103
  onPressMore,
72
104
  itemWidth = DEFAULT_ITEM_WIDTH,
73
105
  borderRadius = DEFAULT_BORDER_RADIUS,
74
106
  skeletonCount = DEFAULT_SKELETON_COUNT,
107
+ paginationSkeletonCount,
75
108
  containerStyle,
76
109
  titleStyle,
77
110
  itemStyle,
@@ -79,22 +112,31 @@ const MovieCardSix: React.FC<MovieCardSixProps> = ({
79
112
  accessibilityLabel,
80
113
  accessibilityHint,
81
114
  }) => {
115
+ // Refs
82
116
  const flatListRef = useRef<FlatList<IContentData>>(null);
83
117
  const onEndReachedCalledDuringMomentum = useRef(false);
84
- const { theme: appliedTheme } = useInternalTheme(theme);
85
118
 
86
- const paginated = usePaginatedSection(
87
- section_id,
88
- moreFetchData,
89
- initialData?.data,
90
- isLoading
91
- );
119
+ // Theme
120
+ const { theme: appliedTheme } = useInternalTheme(theme);
92
121
 
93
- const sectionData = paginated.data;
94
- const pagination = paginated.pagination;
95
- const isPaginating = paginated.loading;
96
- const loadMoreData = paginated.loadMoreData;
122
+ // Data management using custom hook
123
+ const {
124
+ listData,
125
+ pagination,
126
+ loadMore,
127
+ isEmpty,
128
+ isPaging: isPaginating,
129
+ } = useCards({
130
+ sectionId: section_id,
131
+ data: externalData,
132
+ fetchMore: moreFetchData,
133
+ loading: isLoading,
134
+ initialSkeleton: skeletonCount,
135
+ pagingSkeleton: paginationSkeletonCount,
136
+ adsRender: false,
137
+ });
97
138
 
139
+ // Event handlers
98
140
  const handleItemPress = useCallback(
99
141
  (item: IContentData) => {
100
142
  onPressItem?.(item);
@@ -113,161 +155,219 @@ const MovieCardSix: React.FC<MovieCardSixProps> = ({
113
155
  pagination?.nextPage
114
156
  ) {
115
157
  onEndReachedCalledDuringMomentum.current = true;
116
- loadMoreData(pagination.nextPage);
158
+ loadMore(pagination.nextPage);
117
159
  }
118
- }, [pagination?.hasNextPage, pagination?.nextPage, loadMoreData]);
160
+ }, [pagination?.hasNextPage, pagination?.nextPage, loadMore]);
161
+
162
+ const handleScrollBeginDrag = useCallback(() => {
163
+ onEndReachedCalledDuringMomentum.current = false;
164
+ }, []);
119
165
 
166
+ const handleMomentumScrollBegin = useCallback(() => {
167
+ onEndReachedCalledDuringMomentum.current = false;
168
+ }, []);
169
+
170
+ // Generate key for FlatList items
171
+ const keyExtractor = useCallback(
172
+ (item: IContentData, index: number) => `${item._id}-${index}`,
173
+ []
174
+ );
175
+
176
+ // Render functions
120
177
  const renderItem = useCallback(
121
- ({ item }: ListRenderItemInfo<IContentData>) => (
122
- <TouchableOpacity
123
- style={[styles.item, itemStyle]}
124
- onPress={() => handleItemPress(item)}
125
- activeOpacity={0.8}
126
- >
127
- <RentOrBuyIcon
128
- theme={appliedTheme}
129
- content_offering_type={item.content_offering_type}
130
- />
131
- <ThumbnailCard
132
- thumbnailUri={item.thumbnail}
133
- theme={appliedTheme}
134
- isLoading={false}
135
- borderRadius={borderRadius}
136
- wrapperStyle={{ width: itemWidth }}
137
- resizeMode={FastImage.resizeMode.cover}
138
- />
139
- <View style={{ width: itemWidth, marginTop: verticalScale(4) }}>
140
- <Text
141
- style={[
142
- styles.itemTitle,
143
- { color: appliedTheme.colors.textPrimary },
144
- ]}
145
- numberOfLines={1}
146
- >
147
- {item.name}
148
- </Text>
149
- </View>
150
- </TouchableOpacity>
151
- ),
178
+ ({ item }: ListRenderItemInfo<IContentData>) => {
179
+ const thumbnailWrapperStyle = { width: itemWidth };
180
+ const titleContainerStyle = {
181
+ width: itemWidth,
182
+ marginTop: ITEM_MARGIN_TOP,
183
+ };
184
+ const titleTextStyle = {
185
+ color: appliedTheme.colors.textPrimary,
186
+ };
187
+
188
+ return (
189
+ <TouchableOpacity
190
+ style={[styles.item, itemStyle]}
191
+ onPress={() => handleItemPress(item)}
192
+ activeOpacity={ACTIVE_OPACITY}
193
+ >
194
+ <RentOrBuyIcon
195
+ theme={appliedTheme}
196
+ content_offering_type={item.content_offering_type}
197
+ />
198
+ <ThumbnailCard
199
+ thumbnailUri={item.thumbnail}
200
+ theme={appliedTheme}
201
+ isLoading={false}
202
+ borderRadius={borderRadius}
203
+ wrapperStyle={thumbnailWrapperStyle}
204
+ resizeMode={FastImage.resizeMode.cover}
205
+ />
206
+ <View style={titleContainerStyle}>
207
+ <Text style={[styles.itemTitle, titleTextStyle]} numberOfLines={1}>
208
+ {item.name}
209
+ </Text>
210
+ </View>
211
+ </TouchableOpacity>
212
+ );
213
+ },
152
214
  [handleItemPress, itemStyle, appliedTheme, borderRadius, itemWidth]
153
215
  );
154
216
 
155
217
  const renderSkeletonItem = useCallback(
156
- (index: number) => (
157
- <SkeletonPlaceholder
158
- key={`skeleton-${index}`}
159
- highlightColor={appliedTheme.colors.skeletonHighlightColor}
160
- backgroundColor={appliedTheme.colors.skeletonBaseColor}
161
- borderRadius={borderRadius}
162
- >
163
- <SkeletonPlaceholder.Item
164
- flexDirection="column"
165
- alignItems="flex-start"
166
- marginLeft={index === 0 ? moderateScale(12) : moderateScale(0)}
167
- marginRight={moderateScale(12)}
218
+ (index: number) => {
219
+ const isFirstSkeleton = index === 0;
220
+ const thumbnailHeight = itemWidth * SKELETON_THUMBNAIL_HEIGHT_RATIO;
221
+ const textWidth = itemWidth * SKELETON_TEXT_WIDTH_RATIO;
222
+
223
+ return (
224
+ <SkeletonPlaceholder
225
+ key={`skeleton-${index}`}
226
+ highlightColor={appliedTheme.colors.skeletonHighlightColor}
227
+ backgroundColor={appliedTheme.colors.skeletonBaseColor}
228
+ borderRadius={borderRadius}
168
229
  >
169
- {/* Thumbnail */}
170
230
  <SkeletonPlaceholder.Item
171
- width={itemWidth}
172
- height={(itemWidth * 9) / 16}
173
- borderRadius={borderRadius}
174
- />
231
+ flexDirection="column"
232
+ alignItems="flex-start"
233
+ marginLeft={isFirstSkeleton ? FIRST_SKELETON_MARGIN_LEFT : 0}
234
+ marginRight={SKELETON_MARGIN_RIGHT}
235
+ >
236
+ {/* Thumbnail */}
237
+ <SkeletonPlaceholder.Item
238
+ width={itemWidth}
239
+ height={thumbnailHeight}
240
+ borderRadius={borderRadius}
241
+ />
175
242
 
176
- {/* Title */}
177
- <SkeletonPlaceholder.Item
178
- width={itemWidth * 0.8}
179
- height={moderateScale(13)}
180
- borderRadius={moderateScale(3)}
181
- marginTop={verticalScale(6)}
182
- />
183
- </SkeletonPlaceholder.Item>
184
- </SkeletonPlaceholder>
185
- ),
243
+ {/* Title */}
244
+ <SkeletonPlaceholder.Item
245
+ width={textWidth}
246
+ height={SKELETON_TEXT_HEIGHT}
247
+ borderRadius={SKELETON_TEXT_BORDER_RADIUS}
248
+ marginTop={SKELETON_TEXT_MARGIN_TOP}
249
+ />
250
+ </SkeletonPlaceholder.Item>
251
+ </SkeletonPlaceholder>
252
+ );
253
+ },
186
254
  [appliedTheme.colors, itemWidth, borderRadius]
187
255
  );
188
- if (!initialData) {
256
+
257
+ // Filter out ads to ensure only IContentData items are passed to FlatList
258
+ const contentData = useMemo(
259
+ () =>
260
+ listData.filter(
261
+ (item): item is IContentData => !('type' in item && item.type === 'ads')
262
+ ),
263
+ [listData]
264
+ );
265
+
266
+ // Render pagination skeleton footer
267
+ const renderPaginationSkeleton = useCallback(() => {
268
+ if (!isPaginating) {
269
+ return null;
270
+ }
271
+ return renderSkeletonItem(0);
272
+ }, [isPaginating, renderSkeletonItem]);
273
+
274
+ // Early returns for edge cases
275
+ if (!externalData) {
276
+ return null;
277
+ }
278
+
279
+ const shouldHideSection = !isLoading && contentData.length === 0 && !isEmpty;
280
+ if (shouldHideSection) {
189
281
  return null;
190
282
  }
191
- if (!isLoading && sectionData.length === 0) return null;
192
283
 
284
+ // Loading skeleton state
285
+ if (isLoading) {
286
+ const skeletonDataLength = isPaginating ? 1 : skeletonCount;
287
+ const skeletonData = Array.from(
288
+ { length: skeletonDataLength },
289
+ (_, i) => i
290
+ );
291
+
292
+ return (
293
+ <View
294
+ style={[styles.root, containerStyle]}
295
+ accessibilityLabel={accessibilityLabel || `Movie section: ${title}`}
296
+ accessibilityHint={accessibilityHint || 'Scroll to view content'}
297
+ >
298
+ <SkeletonPlaceholder
299
+ highlightColor={appliedTheme.colors.skeletonHighlightColor}
300
+ backgroundColor={appliedTheme.colors.skeletonBaseColor}
301
+ >
302
+ <SkeletonPlaceholder.Item
303
+ width={SKELETON_TITLE_WIDTH}
304
+ height={SKELETON_TITLE_HEIGHT}
305
+ borderRadius={SKELETON_TITLE_BORDER_RADIUS}
306
+ marginHorizontal={SKELETON_TITLE_MARGIN_HORIZONTAL}
307
+ marginBottom={SKELETON_TITLE_MARGIN_BOTTOM}
308
+ />
309
+ </SkeletonPlaceholder>
310
+ <ScrollView
311
+ horizontal
312
+ showsHorizontalScrollIndicator={false}
313
+ contentContainerStyle={styles.skeletonList}
314
+ >
315
+ {skeletonData.map((index) => renderSkeletonItem(index))}
316
+ </ScrollView>
317
+ </View>
318
+ );
319
+ }
320
+
321
+ // Main content render
193
322
  return (
194
323
  <View
195
324
  style={[styles.root, containerStyle]}
196
325
  accessibilityLabel={accessibilityLabel || `Movie section: ${title}`}
197
326
  accessibilityHint={accessibilityHint || 'Scroll to view content'}
198
327
  >
199
- {isLoading ? (
200
- <>
201
- <SkeletonPlaceholder
202
- highlightColor={appliedTheme.colors.skeletonHighlightColor}
203
- backgroundColor={appliedTheme.colors.skeletonBaseColor}
204
- >
205
- <SkeletonPlaceholder.Item
206
- width={moderateScale(100)}
207
- height={moderateScale(20)}
208
- borderRadius={moderateScale(4)}
209
- marginHorizontal={moderateScale(15)}
210
- marginBottom={verticalScale(6)}
211
- />
212
- </SkeletonPlaceholder>
213
- <ScrollView
214
- horizontal
215
- showsHorizontalScrollIndicator={false}
216
- contentContainerStyle={styles.skeletonList}
217
- >
218
- {Array.from({ length: isPaginating ? 1 : skeletonCount }).map(
219
- (_, index) => renderSkeletonItem(index)
220
- )}
221
- </ScrollView>
222
- </>
223
- ) : (
224
- <>
225
- <NavigateToMore
226
- title={title}
227
- onPress={handlePressMore}
228
- titleStyle={[
229
- styles.title,
230
- { color: appliedTheme.colors.textPrimary },
231
- titleStyle,
232
- ]}
233
- containerStyle={styles.navigateToMoreContainer}
234
- showAllProps={{ iconColor: appliedTheme.colors.textPrimary, theme }}
235
- />
236
- <FlatList
237
- ref={flatListRef}
238
- data={sectionData}
239
- horizontal
240
- keyExtractor={(item, index) => `${item._id}-${index}`}
241
- renderItem={renderItem}
242
- showsHorizontalScrollIndicator={false}
243
- contentContainerStyle={styles.listContent}
244
- initialNumToRender={5}
245
- onEndReached={handleEndReached}
246
- onEndReachedThreshold={0.5}
247
- onScrollBeginDrag={() => {
248
- onEndReachedCalledDuringMomentum.current = false;
249
- }}
250
- onMomentumScrollBegin={() => {
251
- onEndReachedCalledDuringMomentum.current = false;
252
- }}
253
- ListFooterComponent={isPaginating ? renderSkeletonItem(0) : null}
254
- />
255
- </>
256
- )}
328
+ <NavigateToMore
329
+ title={title}
330
+ onPress={handlePressMore}
331
+ titleStyle={[
332
+ styles.title,
333
+ { color: appliedTheme.colors.textPrimary },
334
+ titleStyle,
335
+ ]}
336
+ containerStyle={styles.navigateToMoreContainer}
337
+ showAllProps={{
338
+ iconColor: appliedTheme.colors.textPrimary,
339
+ theme,
340
+ }}
341
+ />
342
+ <FlatList
343
+ ref={flatListRef}
344
+ data={contentData}
345
+ horizontal
346
+ keyExtractor={keyExtractor}
347
+ renderItem={renderItem}
348
+ showsHorizontalScrollIndicator={false}
349
+ contentContainerStyle={styles.listContent}
350
+ initialNumToRender={INITIAL_NUM_TO_RENDER}
351
+ onEndReached={handleEndReached}
352
+ onEndReachedThreshold={ON_END_REACHED_THRESHOLD}
353
+ onScrollBeginDrag={handleScrollBeginDrag}
354
+ onMomentumScrollBegin={handleMomentumScrollBegin}
355
+ ListFooterComponent={renderPaginationSkeleton}
356
+ />
257
357
  </View>
258
358
  );
259
359
  };
260
360
 
261
361
  const styles = StyleSheet.create({
262
362
  root: {
263
- marginVertical: verticalScale(6),
363
+ marginVertical: ROOT_MARGIN_VERTICAL,
264
364
  },
265
365
  item: {
266
- marginLeft: moderateScale(10),
366
+ marginLeft: ITEM_MARGIN_LEFT,
267
367
  },
268
368
  navigateToMoreContainer: {
269
- paddingHorizontal: moderateScale(10),
270
- marginBottom: verticalScale(8),
369
+ paddingHorizontal: CONTAINER_PADDING_HORIZONTAL,
370
+ marginBottom: CONTAINER_MARGIN_BOTTOM,
271
371
  },
272
372
  title: {
273
373
  fontSize: RFValue(13),
@@ -276,16 +376,16 @@ const styles = StyleSheet.create({
276
376
  itemTitle: {
277
377
  fontSize: RFValue(9),
278
378
  fontWeight: '500',
279
- lineHeight: moderateScale(13),
280
- height: moderateScale(13),
379
+ lineHeight: SKELETON_TEXT_HEIGHT,
380
+ height: SKELETON_TEXT_HEIGHT,
281
381
  },
282
382
  listContent: {
283
- paddingRight: moderateScale(15),
383
+ paddingRight: LIST_PADDING_RIGHT,
284
384
  },
285
385
  skeletonList: {
286
386
  flexDirection: 'row',
287
387
  alignItems: 'flex-start',
288
- paddingRight: moderateScale(15),
388
+ paddingRight: LIST_PADDING_RIGHT,
289
389
  },
290
390
  });
291
391