@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
@@ -13,13 +13,12 @@ import {
13
13
  type TextStyle,
14
14
  type ViewStyle,
15
15
  type AccessibilityProps,
16
- type ListRenderItem,
17
16
  } from 'react-native';
18
17
  import SkeletonPlaceholder from 'react-native-skeleton-placeholder';
19
18
  import { moderateScale, scale, verticalScale } from 'react-native-size-matters';
20
19
  import { useInternalTheme } from '../../../../theme/hook/useInternalTheme';
21
20
  import NavigateToMore from '../components/NavigateToMore';
22
- import { usePaginatedSection } from '../../../../hooks/usePaginatedSection';
21
+
23
22
  import type {
24
23
  IGetSectionData,
25
24
  ISectionContent,
@@ -27,17 +26,63 @@ import type {
27
26
  } from '../../../../types';
28
27
  import type { ITheme, ThemeOverride } from '../../../../theme/themes';
29
28
  import FastImage from 'react-native-fast-image';
30
- import LinearGradient from 'react-native-linear-gradient';
31
- import { Text } from '../../../Text';
32
29
  import CardPoster from '../components/CardPoster';
33
30
  import { RFValue } from 'react-native-responsive-fontsize';
34
31
  import type { IContentData } from '@zezosoft/zezo-ott-api-client';
32
+ import { useCards } from '../../../../hooks';
33
+
34
+ // ============================================
35
+ // Constants
36
+ // ============================================
35
37
 
36
38
  const DEFAULT_ITEM_WIDTH = moderateScale(120);
37
39
  const DEFAULT_ITEM_HEIGHT = moderateScale(180);
38
40
  const DEFAULT_BORDER_RADIUS = moderateScale(8);
39
41
  const DEFAULT_SKELETON_COUNT = 5;
40
42
 
43
+ // Spacing
44
+ const ITEM_MARGIN_RIGHT = moderateScale(12);
45
+ const ITEM_MARGIN_LEFT = moderateScale(10);
46
+ const FIRST_ITEM_MARGIN_LEFT = moderateScale(12);
47
+ const LIST_PADDING_RIGHT = moderateScale(20);
48
+ const CONTAINER_PADDING_HORIZONTAL = moderateScale(16);
49
+ const CONTAINER_MARGIN_BOTTOM = verticalScale(8);
50
+ const ROOT_MARGIN_VERTICAL = verticalScale(6);
51
+
52
+ // Skeleton
53
+ const SKELETON_TITLE_WIDTH = moderateScale(100);
54
+ const SKELETON_TITLE_HEIGHT = verticalScale(14);
55
+ const SKELETON_TITLE_BORDER_RADIUS = moderateScale(4);
56
+ const SKELETON_TITLE_MARGIN_LEFT = moderateScale(12);
57
+ const SKELETON_TITLE_MARGIN_BOTTOM = verticalScale(6);
58
+
59
+ // FlatList Performance
60
+ const INITIAL_NUM_TO_RENDER = 5;
61
+ const MAX_TO_RENDER_PER_BATCH = 10;
62
+ const WINDOW_SIZE = 5;
63
+ const ON_END_REACHED_THRESHOLD = 0.5;
64
+
65
+ // Interaction
66
+ const ACTIVE_OPACITY = 0.8;
67
+
68
+ // ============================================
69
+ // Helper Functions
70
+ // ============================================
71
+
72
+ /**
73
+ * Checks if an item is a skeleton placeholder
74
+ */
75
+ const isSkeletonItem = (item: IContentData): boolean => {
76
+ const hasEmptyPoster = !item.poster || item.poster.trim() === '';
77
+ const isSkeletonId =
78
+ item._id?.startsWith('sk-') || item._id?.startsWith('pagination-skeleton-');
79
+ return hasEmptyPoster || isSkeletonId;
80
+ };
81
+
82
+ // ============================================
83
+ // Types
84
+ // ============================================
85
+
41
86
  type TopTenCardProps = {
42
87
  title: string;
43
88
  section_id: string;
@@ -54,6 +99,7 @@ type TopTenCardProps = {
54
99
  itemHeight?: number;
55
100
  borderRadius?: number;
56
101
  skeletonCount?: number;
102
+ paginationSkeletonCount?: number;
57
103
  containerStyle?: StyleProp<ViewStyle>;
58
104
  titleStyle?: StyleProp<TextStyle>;
59
105
  itemStyle?: StyleProp<ViewStyle>;
@@ -64,7 +110,7 @@ type TopTenCardProps = {
64
110
  const TopTenCard: React.FC<TopTenCardProps> = ({
65
111
  title,
66
112
  section_id,
67
- data: initialData,
113
+ data: externalData,
68
114
  moreFetchData,
69
115
  onPressMore,
70
116
  type,
@@ -76,218 +122,245 @@ const TopTenCard: React.FC<TopTenCardProps> = ({
76
122
  containerStyle,
77
123
  titleStyle,
78
124
  itemStyle,
125
+ paginationSkeletonCount,
79
126
  isLoading = false,
80
127
  theme,
81
128
  accessibilityLabel,
82
129
  accessibilityHint,
83
130
  }) => {
131
+ // ============================================
132
+ // Refs
133
+ // ============================================
84
134
  const flatListRef = useRef<FlatList<IContentData>>(null);
85
135
  const onEndReachedDuringMomentum = useRef(false);
136
+
137
+ // ============================================
138
+ // Theme & Styles
139
+ // ============================================
86
140
  const { theme: appliedTheme } = useInternalTheme(theme);
87
141
  const styles = useMemo(
88
142
  () => getStyles(appliedTheme, itemWidth, itemHeight, borderRadius),
89
143
  [appliedTheme, itemWidth, itemHeight, borderRadius]
90
144
  );
91
145
 
146
+ // ============================================
147
+ // Data Management
148
+ // ============================================
92
149
  const {
93
- data,
94
- pagination: paginated,
95
- loading: isPaginating,
96
- loadMoreData,
97
- } = usePaginatedSection(
98
- section_id,
99
- moreFetchData,
100
- initialData?.data || [],
101
- isLoading
150
+ listData,
151
+ pagination,
152
+ loadMore,
153
+ isEmpty,
154
+ isPaging: isPaginating,
155
+ } = useCards({
156
+ sectionId: section_id,
157
+ data: externalData,
158
+ fetchMore: moreFetchData,
159
+ loading: isLoading,
160
+ initialSkeleton: skeletonCount,
161
+ pagingSkeleton: paginationSkeletonCount,
162
+ adsRender: false,
163
+ });
164
+ const contentData = useMemo(
165
+ () =>
166
+ listData.filter(
167
+ (item): item is IContentData => !('type' in item && item.type === 'ads')
168
+ ),
169
+ [listData]
102
170
  );
103
171
 
104
- const listData = useMemo(() => (Array.isArray(data) ? data : []), [data]);
105
-
106
- const handleEndReached = useCallback(() => {
107
- if (
108
- !onEndReachedDuringMomentum.current &&
109
- paginated?.hasNextPage &&
110
- paginated?.nextPage
111
- ) {
112
- onEndReachedDuringMomentum.current = true;
113
- loadMoreData(paginated.nextPage);
114
- }
115
- }, [loadMoreData, paginated?.hasNextPage, paginated?.nextPage]);
172
+ // ============================================
173
+ // Event Handlers
174
+ // ============================================
116
175
  const handleItemPress = useCallback(
117
176
  (item: IContentData) => {
118
177
  onPressItem?.(item);
119
178
  },
120
179
  [onPressItem]
121
180
  );
181
+
182
+ const handleMorePress = useCallback(() => {
183
+ onPressMore?.({
184
+ section_id,
185
+ name: title,
186
+ type,
187
+ });
188
+ }, [onPressMore, section_id, title, type]);
189
+
190
+ const handleEndReached = useCallback(() => {
191
+ const canLoadMore =
192
+ !onEndReachedDuringMomentum.current &&
193
+ pagination?.hasNextPage &&
194
+ pagination?.nextPage;
195
+
196
+ if (canLoadMore) {
197
+ onEndReachedDuringMomentum.current = true;
198
+ loadMore(pagination.nextPage);
199
+ }
200
+ }, [loadMore, pagination?.hasNextPage, pagination?.nextPage]);
201
+
202
+ const handleMomentumScrollBegin = useCallback(() => {
203
+ onEndReachedDuringMomentum.current = false;
204
+ }, []);
205
+
206
+ // ============================================
207
+ // Render Functions
208
+ // ============================================
209
+ const renderSkeleton = useCallback(
210
+ (isFirst: boolean) => (
211
+ <SkeletonPlaceholder
212
+ highlightColor={appliedTheme.colors.skeletonHighlightColor}
213
+ backgroundColor={appliedTheme.colors.skeletonBaseColor}
214
+ borderRadius={borderRadius}
215
+ >
216
+ <SkeletonPlaceholder.Item
217
+ width={itemWidth}
218
+ height={itemHeight}
219
+ borderRadius={borderRadius}
220
+ marginRight={ITEM_MARGIN_RIGHT}
221
+ marginLeft={isFirst ? FIRST_ITEM_MARGIN_LEFT : 0}
222
+ />
223
+ </SkeletonPlaceholder>
224
+ ),
225
+ [appliedTheme, borderRadius, itemWidth, itemHeight]
226
+ );
227
+
122
228
  const renderItem = useCallback(
123
229
  ({ item, index }: { item: IContentData; index: number }) => {
230
+ const isFirstItem = index === 0;
231
+ const rankNumber = index + 1;
232
+
233
+ if (isSkeletonItem(item)) {
234
+ return renderSkeleton(isFirstItem);
235
+ }
236
+
124
237
  return (
125
238
  <TouchableOpacity
126
- style={[styles.item, index === 0 && styles.firstItem, itemStyle]}
239
+ style={[styles.item, isFirstItem && styles.firstItem, itemStyle]}
127
240
  onPress={() => handleItemPress(item)}
128
- activeOpacity={0.8}
241
+ activeOpacity={ACTIVE_OPACITY}
129
242
  >
130
- <LinearGradient
131
- colors={['rgba(0,0,0,0)', 'rgba(0,0,0,0.8)']}
132
- style={styles.imageOverlay}
133
- >
134
- <CardPoster
135
- content_offering_type={item.content_offering_type}
136
- posterUri={item.poster}
137
- isLoading={isLoading}
138
- borderRadius={borderRadius}
139
- posterWrapperStyle={[styles.image]}
140
- resizeMode={FastImage.resizeMode.cover}
141
- theme={appliedTheme}
142
- />
143
- <View style={styles.numberContainer}>
144
- <LinearGradient
145
- colors={appliedTheme.colors.backgroundLayoutGradient}
146
- start={{ x: 1, y: 0.5 }}
147
- end={{ x: 0.5, y: 1 }}
148
- style={styles.rankNumberBox}
149
- >
150
- <Text style={styles.rankNumberText}>{index + 1}</Text>
151
- </LinearGradient>
152
- </View>
153
- </LinearGradient>
243
+ <CardPoster
244
+ content_offering_type={item.content_offering_type}
245
+ posterUri={item.poster}
246
+ isLoading={isLoading}
247
+ borderRadius={borderRadius}
248
+ posterWrapperStyle={[styles.image]}
249
+ resizeMode={FastImage.resizeMode.cover}
250
+ theme={appliedTheme}
251
+ showRankNumber={true}
252
+ rankNumber={rankNumber}
253
+ />
154
254
  </TouchableOpacity>
155
255
  );
156
256
  },
157
257
  [
158
258
  styles.item,
159
259
  styles.firstItem,
160
- styles.imageOverlay,
161
260
  styles.image,
162
- styles.numberContainer,
163
- styles.rankNumberBox,
164
- styles.rankNumberText,
165
261
  itemStyle,
166
262
  isLoading,
167
263
  borderRadius,
168
264
  appliedTheme,
169
265
  handleItemPress,
266
+ renderSkeleton,
170
267
  ]
171
268
  );
172
269
 
173
- const renderSkeletonItem: ListRenderItem<null> = useCallback(
174
- ({ index }) => (
175
- <SkeletonPlaceholder
176
- key={`skeleton-${index}`}
177
- highlightColor={appliedTheme.colors.skeletonHighlightColor}
178
- backgroundColor={appliedTheme.colors.skeletonBaseColor}
179
- borderRadius={borderRadius}
180
- >
181
- <SkeletonPlaceholder.Item
182
- width={itemWidth}
183
- height={itemHeight}
270
+ const renderPaginationSkeleton = useCallback(() => {
271
+ if (!isPaginating) return null;
272
+
273
+ return (
274
+ <View style={[styles.item, styles.skeletonItem]}>
275
+ <CardPoster
276
+ posterUri=""
277
+ theme={appliedTheme}
278
+ isLoading={true}
184
279
  borderRadius={borderRadius}
185
- marginRight={moderateScale(12)}
186
- marginLeft={index === 0 ? moderateScale(12) : 0}
280
+ showRankNumber={true}
187
281
  />
188
- </SkeletonPlaceholder>
189
- ),
190
- [appliedTheme, itemWidth, itemHeight, borderRadius]
282
+ </View>
283
+ );
284
+ }, [
285
+ isPaginating,
286
+ appliedTheme,
287
+ borderRadius,
288
+ styles.item,
289
+ styles.skeletonItem,
290
+ ]);
291
+
292
+ const keyExtractor = useCallback(
293
+ (item: IContentData, index: number) => `${item._id ?? item.name}-${index}`,
294
+ []
191
295
  );
192
- if (!initialData) {
193
- return null;
194
- }
195
- if (!isLoading && (!listData || listData.length === 0)) return null;
196
296
 
197
- if (isLoading) {
198
- return (
199
- <View
200
- style={[styles.root, containerStyle]}
201
- testID={`movie-card-skeleton-${section_id}`}
202
- >
297
+ // ============================================
298
+ // Early Returns
299
+ // ============================================
300
+ if (!externalData) return null;
301
+ if (!isLoading && contentData.length === 0 && !isEmpty) return null;
302
+
303
+ // ============================================
304
+ // Render
305
+ // ============================================
306
+ return (
307
+ <View
308
+ style={[styles.root, containerStyle]}
309
+ accessibilityLabel={accessibilityLabel || `Top Ten Section: ${title}`}
310
+ accessibilityHint={accessibilityHint || 'Scroll to view top content'}
311
+ testID={isLoading ? `movie-card-skeleton-${section_id}` : undefined}
312
+ >
313
+ {/* Title Section */}
314
+ {isLoading ? (
203
315
  <SkeletonPlaceholder
204
316
  highlightColor={appliedTheme.colors.skeletonHighlightColor}
205
317
  backgroundColor={appliedTheme.colors.skeletonBaseColor}
206
318
  >
207
319
  <SkeletonPlaceholder.Item
208
- width={moderateScale(100)}
209
- height={verticalScale(14)}
210
- borderRadius={moderateScale(4)}
211
- marginLeft={moderateScale(12)}
212
- marginBottom={verticalScale(6)}
320
+ width={SKELETON_TITLE_WIDTH}
321
+ height={SKELETON_TITLE_HEIGHT}
322
+ borderRadius={SKELETON_TITLE_BORDER_RADIUS}
323
+ marginLeft={SKELETON_TITLE_MARGIN_LEFT}
324
+ marginBottom={SKELETON_TITLE_MARGIN_BOTTOM}
213
325
  />
214
326
  </SkeletonPlaceholder>
215
- <FlatList
216
- data={Array.from({ length: skeletonCount }, () => null)}
217
- horizontal
218
- keyExtractor={(_, index) => `skeleton-${index}`}
219
- renderItem={renderSkeletonItem}
220
- showsHorizontalScrollIndicator={false}
221
- contentContainerStyle={styles.listContent}
327
+ ) : (
328
+ <NavigateToMore
329
+ title={title}
330
+ onPress={handleMorePress}
331
+ titleStyle={[styles.title, titleStyle]}
332
+ containerStyle={styles.navigateToMoreContainer}
333
+ showAllProps={{
334
+ iconColor: appliedTheme.colors.textPrimary,
335
+ theme,
336
+ }}
222
337
  />
223
- </View>
224
- );
225
- }
226
- return (
227
- <View
228
- style={[styles.root, containerStyle]}
229
- accessibilityLabel={accessibilityLabel || `Top Ten Section: ${title}`}
230
- accessibilityHint={accessibilityHint || 'Scroll to view top content'}
231
- >
232
- <NavigateToMore
233
- title={title}
234
- onPress={() =>
235
- onPressMore?.({
236
- section_id,
237
- name: title,
238
- type,
239
- })
240
- }
241
- titleStyle={[styles.title, titleStyle]}
242
- containerStyle={styles.navigateToMoreContainer}
243
- showAllProps={{ iconColor: appliedTheme.colors.textPrimary, theme }}
244
- />
338
+ )}
339
+
340
+ {/* Content List */}
245
341
  <FlatList
246
342
  ref={flatListRef}
247
- data={listData}
343
+ data={contentData}
248
344
  horizontal
249
345
  showsHorizontalScrollIndicator={false}
250
- keyExtractor={(item, index) => `${item._id ?? item.name}-${index}`}
346
+ keyExtractor={keyExtractor}
251
347
  renderItem={renderItem}
252
348
  contentContainerStyle={styles.listContent}
253
- initialNumToRender={5}
254
- maxToRenderPerBatch={10}
255
- windowSize={5}
256
- onEndReachedThreshold={0.5}
257
- onMomentumScrollBegin={() => {
258
- onEndReachedDuringMomentum.current = false;
259
- }}
349
+ initialNumToRender={INITIAL_NUM_TO_RENDER}
350
+ maxToRenderPerBatch={MAX_TO_RENDER_PER_BATCH}
351
+ windowSize={WINDOW_SIZE}
352
+ onEndReachedThreshold={ON_END_REACHED_THRESHOLD}
353
+ onMomentumScrollBegin={handleMomentumScrollBegin}
260
354
  onEndReached={handleEndReached}
261
- ListFooterComponent={
262
- isPaginating ? (
263
- <SkeletonPlaceholder
264
- highlightColor={appliedTheme.colors.skeletonHighlightColor}
265
- backgroundColor={appliedTheme.colors.skeletonBaseColor}
266
- borderRadius={borderRadius}
267
- speed={800}
268
- >
269
- <View style={[styles.item, styles.skeletonItem]}>
270
- <SkeletonPlaceholder.Item
271
- width={itemWidth}
272
- height={itemHeight}
273
- borderRadius={borderRadius}
274
- />
275
- <View style={styles.numberContainer}>
276
- <SkeletonPlaceholder.Item
277
- width={scale(40)}
278
- height={scale(40)}
279
- borderRadius={borderRadius}
280
- />
281
- </View>
282
- </View>
283
- </SkeletonPlaceholder>
284
- ) : null
285
- }
355
+ ListFooterComponent={renderPaginationSkeleton}
286
356
  />
287
357
  </View>
288
358
  );
289
359
  };
290
360
 
361
+ // ============================================
362
+ // Styles
363
+ // ============================================
291
364
  const getStyles = (
292
365
  theme: ITheme,
293
366
  width: number,
@@ -296,64 +369,30 @@ const getStyles = (
296
369
  ) =>
297
370
  StyleSheet.create({
298
371
  root: {
299
- marginVertical: verticalScale(6),
372
+ marginVertical: ROOT_MARGIN_VERTICAL,
300
373
  },
301
374
  item: {
302
375
  width,
303
376
  height,
304
- marginRight: moderateScale(12),
305
- overflow: 'hidden',
377
+ marginRight: ITEM_MARGIN_RIGHT,
306
378
  borderColor: theme.colors.outlineDisabled,
307
- borderWidth: scale(0.5),
308
- aspectRatio: 2 / 3,
379
+ borderWidth: scale(0.7),
309
380
  borderRadius: radius,
310
381
  position: 'relative',
311
382
  },
312
383
  firstItem: {
313
- marginLeft: moderateScale(10),
314
- },
315
- imageOverlay: {
316
- width: '100%',
317
- height: '100%',
318
- justifyContent: 'flex-end',
319
- alignItems: 'flex-start',
384
+ marginLeft: ITEM_MARGIN_LEFT,
320
385
  },
321
386
  image: {
322
387
  width: '100%',
323
388
  height: '100%',
324
- borderRadius: radius,
325
- },
326
-
327
- rankNumberBox: {
328
- width: scale(40),
329
- height: scale(40),
330
- borderTopRightRadius: scale(30),
331
- justifyContent: 'center',
332
- alignItems: 'center',
333
- },
334
- rankNumberText: {
335
- fontSize: RFValue(27),
336
- fontWeight: '900',
337
- color: theme.colors.textPrimary,
338
- textShadowColor: 'rgba(0, 0, 0, 0.6)',
339
- textShadowOffset: { width: 1, height: 1 },
340
- textShadowRadius: 3,
341
- marginTop: scale(5),
342
- marginRight: scale(5),
343
- letterSpacing: 0.5,
344
- },
345
- numberContainer: {
346
- position: 'absolute',
347
- bottom: 0,
348
- left: 0,
349
- zIndex: 10,
350
389
  },
351
390
  navigateToMoreContainer: {
352
- paddingHorizontal: moderateScale(16),
353
- marginBottom: verticalScale(8),
391
+ paddingHorizontal: CONTAINER_PADDING_HORIZONTAL,
392
+ marginBottom: CONTAINER_MARGIN_BOTTOM,
354
393
  },
355
394
  listContent: {
356
- paddingRight: moderateScale(20),
395
+ paddingRight: LIST_PADDING_RIGHT,
357
396
  },
358
397
  title: {
359
398
  fontSize: RFValue(13),