@zezosoft/zezo-ott-react-native-ui-kit 1.1.2 → 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 (136) hide show
  1. package/lib/module/components/Auth/QrLogin/QrLogin.js +304 -138
  2. package/lib/module/components/Auth/QrLogin/QrLogin.js.map +1 -1
  3. package/lib/module/components/Auth/QrLogin/components/QrViewArea.js +193 -141
  4. package/lib/module/components/Auth/QrLogin/components/QrViewArea.js.map +1 -1
  5. package/lib/module/components/Content/Card/Category/Category.js +83 -11
  6. package/lib/module/components/Content/Card/Category/Category.js.map +1 -1
  7. package/lib/module/components/Content/Card/NowWatching/NowWatching.js +237 -108
  8. package/lib/module/components/Content/Card/NowWatching/NowWatching.js.map +1 -1
  9. package/lib/module/components/Content/Card/Sliders/Styles/One.js +185 -126
  10. package/lib/module/components/Content/Card/Sliders/Styles/One.js.map +1 -1
  11. package/lib/module/components/Content/Card/Sliders/Styles/Two.js +139 -92
  12. package/lib/module/components/Content/Card/Sliders/Styles/Two.js.map +1 -1
  13. package/lib/module/components/Content/Card/Styles/Five.js +131 -48
  14. package/lib/module/components/Content/Card/Styles/Five.js.map +1 -1
  15. package/lib/module/components/Content/Card/Styles/Four.js +126 -59
  16. package/lib/module/components/Content/Card/Styles/Four.js.map +1 -1
  17. package/lib/module/components/Content/Card/Styles/One.js +125 -50
  18. package/lib/module/components/Content/Card/Styles/One.js.map +1 -1
  19. package/lib/module/components/Content/Card/Styles/RotateInOut.js +138 -53
  20. package/lib/module/components/Content/Card/Styles/RotateInOut.js.map +1 -1
  21. package/lib/module/components/Content/Card/Styles/Six.js +207 -115
  22. package/lib/module/components/Content/Card/Styles/Six.js.map +1 -1
  23. package/lib/module/components/Content/Card/Styles/Three.js +134 -79
  24. package/lib/module/components/Content/Card/Styles/Three.js.map +1 -1
  25. package/lib/module/components/Content/Card/Styles/TopTen.js +186 -171
  26. package/lib/module/components/Content/Card/Styles/TopTen.js.map +1 -1
  27. package/lib/module/components/Content/Card/Styles/Two.js +144 -64
  28. package/lib/module/components/Content/Card/Styles/Two.js.map +1 -1
  29. package/lib/module/components/Content/Card/components/AdsPoster.js +162 -0
  30. package/lib/module/components/Content/Card/components/AdsPoster.js.map +1 -0
  31. package/lib/module/components/Content/Card/components/CardPoster.js +120 -136
  32. package/lib/module/components/Content/Card/components/CardPoster.js.map +1 -1
  33. package/lib/module/components/Content/Card/components/index.js +4 -0
  34. package/lib/module/components/Content/Card/components/index.js.map +1 -0
  35. package/lib/module/components/Content/Content.js +67 -27
  36. package/lib/module/components/Content/Content.js.map +1 -1
  37. package/lib/module/components/Content/Sections.js +32 -11
  38. package/lib/module/components/Content/Sections.js.map +1 -1
  39. package/lib/module/constants/dummySections.js +44 -4
  40. package/lib/module/constants/dummySections.js.map +1 -1
  41. package/lib/module/hooks/Images/index.js +5 -0
  42. package/lib/module/hooks/Images/index.js.map +1 -0
  43. package/lib/module/hooks/Images/useImageLoader.js +168 -0
  44. package/lib/module/hooks/Images/useImageLoader.js.map +1 -0
  45. package/lib/module/hooks/Images/useImageValidation.js +36 -0
  46. package/lib/module/hooks/Images/useImageValidation.js.map +1 -0
  47. package/lib/module/hooks/index.js +3 -0
  48. package/lib/module/hooks/index.js.map +1 -1
  49. package/lib/module/hooks/useAdTracking.js +270 -0
  50. package/lib/module/hooks/useAdTracking.js.map +1 -0
  51. package/lib/module/hooks/useCards.js +164 -0
  52. package/lib/module/hooks/useCards.js.map +1 -0
  53. package/lib/module/hooks/usePaginatedSection.js +11 -6
  54. package/lib/module/hooks/usePaginatedSection.js.map +1 -1
  55. package/lib/typescript/src/components/Auth/QrLogin/QrLogin.d.ts +2 -0
  56. package/lib/typescript/src/components/Auth/QrLogin/QrLogin.d.ts.map +1 -1
  57. package/lib/typescript/src/components/Auth/QrLogin/components/QrViewArea.d.ts.map +1 -1
  58. package/lib/typescript/src/components/Content/Card/Category/Category.d.ts.map +1 -1
  59. package/lib/typescript/src/components/Content/Card/NowWatching/NowWatching.d.ts.map +1 -1
  60. package/lib/typescript/src/components/Content/Card/Sliders/Styles/One.d.ts.map +1 -1
  61. package/lib/typescript/src/components/Content/Card/Sliders/Styles/Two.d.ts.map +1 -1
  62. package/lib/typescript/src/components/Content/Card/Styles/Five.d.ts +13 -1
  63. package/lib/typescript/src/components/Content/Card/Styles/Five.d.ts.map +1 -1
  64. package/lib/typescript/src/components/Content/Card/Styles/Four.d.ts +13 -1
  65. package/lib/typescript/src/components/Content/Card/Styles/Four.d.ts.map +1 -1
  66. package/lib/typescript/src/components/Content/Card/Styles/One.d.ts +15 -3
  67. package/lib/typescript/src/components/Content/Card/Styles/One.d.ts.map +1 -1
  68. package/lib/typescript/src/components/Content/Card/Styles/RotateInOut.d.ts +13 -1
  69. package/lib/typescript/src/components/Content/Card/Styles/RotateInOut.d.ts.map +1 -1
  70. package/lib/typescript/src/components/Content/Card/Styles/Six.d.ts +1 -0
  71. package/lib/typescript/src/components/Content/Card/Styles/Six.d.ts.map +1 -1
  72. package/lib/typescript/src/components/Content/Card/Styles/Three.d.ts +13 -5
  73. package/lib/typescript/src/components/Content/Card/Styles/Three.d.ts.map +1 -1
  74. package/lib/typescript/src/components/Content/Card/Styles/TopTen.d.ts +1 -0
  75. package/lib/typescript/src/components/Content/Card/Styles/TopTen.d.ts.map +1 -1
  76. package/lib/typescript/src/components/Content/Card/Styles/Two.d.ts +13 -1
  77. package/lib/typescript/src/components/Content/Card/Styles/Two.d.ts.map +1 -1
  78. package/lib/typescript/src/components/Content/Card/components/AdsPoster.d.ts +26 -0
  79. package/lib/typescript/src/components/Content/Card/components/AdsPoster.d.ts.map +1 -0
  80. package/lib/typescript/src/components/Content/Card/components/CardPoster.d.ts +3 -1
  81. package/lib/typescript/src/components/Content/Card/components/CardPoster.d.ts.map +1 -1
  82. package/lib/typescript/src/components/Content/Card/components/index.d.ts +2 -0
  83. package/lib/typescript/src/components/Content/Card/components/index.d.ts.map +1 -0
  84. package/lib/typescript/src/components/Content/Card/index.d.ts +76 -6
  85. package/lib/typescript/src/components/Content/Card/index.d.ts.map +1 -1
  86. package/lib/typescript/src/components/Content/Content.d.ts +4 -3
  87. package/lib/typescript/src/components/Content/Content.d.ts.map +1 -1
  88. package/lib/typescript/src/components/Content/Sections.d.ts +20 -6
  89. package/lib/typescript/src/components/Content/Sections.d.ts.map +1 -1
  90. package/lib/typescript/src/constants/dummySections.d.ts +5 -0
  91. package/lib/typescript/src/constants/dummySections.d.ts.map +1 -1
  92. package/lib/typescript/src/hooks/Images/index.d.ts +3 -0
  93. package/lib/typescript/src/hooks/Images/index.d.ts.map +1 -0
  94. package/lib/typescript/src/hooks/Images/useImageLoader.d.ts +36 -0
  95. package/lib/typescript/src/hooks/Images/useImageLoader.d.ts.map +1 -0
  96. package/lib/typescript/src/hooks/Images/useImageValidation.d.ts +17 -0
  97. package/lib/typescript/src/hooks/Images/useImageValidation.d.ts.map +1 -0
  98. package/lib/typescript/src/hooks/index.d.ts +3 -0
  99. package/lib/typescript/src/hooks/index.d.ts.map +1 -1
  100. package/lib/typescript/src/hooks/useAdTracking.d.ts +39 -0
  101. package/lib/typescript/src/hooks/useAdTracking.d.ts.map +1 -0
  102. package/lib/typescript/src/hooks/useCards.d.ts +36 -0
  103. package/lib/typescript/src/hooks/useCards.d.ts.map +1 -0
  104. package/lib/typescript/src/hooks/usePaginatedSection.d.ts +12 -2
  105. package/lib/typescript/src/hooks/usePaginatedSection.d.ts.map +1 -1
  106. package/lib/typescript/src/types/sections/index.d.ts +7 -4
  107. package/lib/typescript/src/types/sections/index.d.ts.map +1 -1
  108. package/package.json +6 -3
  109. package/src/components/Auth/QrLogin/QrLogin.tsx +382 -122
  110. package/src/components/Auth/QrLogin/components/QrViewArea.tsx +291 -197
  111. package/src/components/Content/Card/Category/Category.tsx +95 -8
  112. package/src/components/Content/Card/NowWatching/NowWatching.tsx +281 -136
  113. package/src/components/Content/Card/Sliders/Styles/One.tsx +244 -148
  114. package/src/components/Content/Card/Sliders/Styles/Two.tsx +171 -102
  115. package/src/components/Content/Card/Styles/Five.tsx +161 -62
  116. package/src/components/Content/Card/Styles/Four.tsx +164 -85
  117. package/src/components/Content/Card/Styles/One.tsx +161 -71
  118. package/src/components/Content/Card/Styles/RotateInOut.tsx +157 -60
  119. package/src/components/Content/Card/Styles/Six.tsx +242 -142
  120. package/src/components/Content/Card/Styles/Three.tsx +166 -133
  121. package/src/components/Content/Card/Styles/TopTen.tsx +230 -191
  122. package/src/components/Content/Card/Styles/Two.tsx +182 -79
  123. package/src/components/Content/Card/components/AdsPoster.tsx +202 -0
  124. package/src/components/Content/Card/components/CardPoster.tsx +134 -154
  125. package/src/components/Content/Card/components/index.ts +1 -0
  126. package/src/components/Content/Content.tsx +83 -45
  127. package/src/components/Content/Sections.tsx +51 -10
  128. package/src/constants/dummySections.ts +48 -1
  129. package/src/hooks/Images/index.ts +2 -0
  130. package/src/hooks/Images/useImageLoader.ts +206 -0
  131. package/src/hooks/Images/useImageValidation.ts +36 -0
  132. package/src/hooks/index.ts +3 -0
  133. package/src/hooks/useAdTracking.ts +349 -0
  134. package/src/hooks/useCards.ts +228 -0
  135. package/src/hooks/usePaginatedSection.ts +26 -7
  136. package/src/types/sections/index.ts +7 -4
@@ -20,18 +20,49 @@ import { ThumbnailCard } from "../../components/ThumbnailCard.js";
20
20
  import { RFValue } from 'react-native-responsive-fontsize';
21
21
  import RentOrBuyIcon from "../../components/RentOrBuyIcon.js";
22
22
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
23
+ // ============================================================================
24
+ // Constants
25
+ // ============================================================================
23
26
  const FULL_WIDTH = Display.fullWidth;
24
- const FULL_HEIGHT = FULL_WIDTH * (9 / 16);
27
+ const ASPECT_RATIO = 9 / 16;
28
+ const FULL_HEIGHT = FULL_WIDTH * ASPECT_RATIO;
29
+ const DEFAULT_SKELETON_COUNT = 3;
30
+ const SCROLL_ANIMATION_DURATION = 300;
31
+ const AUTO_PLAY_INTERVAL = 3000;
32
+ const CAROUSEL_WINDOW_SIZE = 2;
33
+ const SNAP_DEBOUNCE_DELAY = 50;
34
+ const SKELETON_SPEED = 2000;
35
+ const PAN_GESTURE_ACTIVE_OFFSET_X = [-10, 10];
36
+ const PAN_GESTURE_FAIL_OFFSET_Y = [-5, 5];
37
+ const GRADIENT_OVERLAY_COLORS = ['transparent', 'rgba(0,0,0,0.7)'];
38
+ const GRADIENT_START = {
39
+ x: 0.5,
40
+ y: 0
41
+ };
42
+ const GRADIENT_END = {
43
+ x: 0.5,
44
+ y: 1
45
+ };
46
+ const INDICATOR_WIDTH_ACTIVE = scale(18);
47
+ const INDICATOR_WIDTH_INACTIVE = scale(8);
48
+ const INDICATOR_HEIGHT = scale(8);
49
+ const INDICATOR_BORDER_RADIUS = scale(50);
50
+ const TOUCH_OPACITY = 0.85;
25
51
 
26
- // Memoized carousel item component for better performance
52
+ // ============================================================================
53
+ // Types
54
+ // ============================================================================
27
55
 
56
+ // ============================================================================
57
+ // Helper Components
58
+ // ============================================================================
28
59
  const CarouselItem = /*#__PURE__*/memo(({
29
60
  item,
30
61
  onPressItem,
31
62
  appliedTheme,
32
63
  gradientConfig
33
64
  }) => /*#__PURE__*/_jsxs(TouchableOpacity, {
34
- activeOpacity: 0.85,
65
+ activeOpacity: TOUCH_OPACITY,
35
66
  onPress: () => onPressItem?.(item),
36
67
  style: styles.itemWrapper,
37
68
  accessibilityRole: "button",
@@ -52,23 +83,65 @@ const CarouselItem = /*#__PURE__*/memo(({
52
83
  style: styles.gradientBottomOverlay
53
84
  })]
54
85
  }));
86
+ CarouselItem.displayName = 'CarouselItem';
87
+
88
+ // ============================================================================
89
+ // Main Component
90
+ // ============================================================================
55
91
  const SliderTwo = ({
56
92
  data,
57
93
  onPressItem,
58
94
  isLoading = true,
59
- skeletonCount = 3,
95
+ skeletonCount = DEFAULT_SKELETON_COUNT,
60
96
  accessibilityLabel = 'Full Width Slider',
61
97
  accessibilityHint = 'Swipe to view content',
62
98
  theme
63
99
  }) => {
100
+ // ========================================================================
101
+ // Hooks & State
102
+ // ========================================================================
64
103
  const {
65
104
  theme: appliedTheme
66
105
  } = useInternalTheme(theme);
67
- const contentData = useMemo(() => data?.data ?? [], [data]);
68
106
  const [activeIndex, setActiveIndex] = useState(0);
69
- const gradientColors = useMemo(() => [appliedTheme.colors.primary, appliedTheme.colors.primary], [appliedTheme.colors.primary]);
70
- // Debounce snap handler to prevent stuttering
71
107
  const snapTimeoutRef = useRef(null);
108
+
109
+ // ========================================================================
110
+ // Data Processing
111
+ // ========================================================================
112
+ const contentData = useMemo(() => data?.data ?? [], [data]);
113
+ const skeletonItems = useSkeletonItems(skeletonCount);
114
+ const indicatorArray = useMemo(() => Array.from({
115
+ length: isLoading ? skeletonItems.length : contentData.length
116
+ }, (_, i) => i), [isLoading, skeletonItems.length, contentData.length]);
117
+ const carouselData = useMemo(() => isLoading ? skeletonItems : contentData, [isLoading, skeletonItems, contentData]);
118
+
119
+ // ========================================================================
120
+ // Memoized Values
121
+ // ========================================================================
122
+ const gradientColors = useMemo(() => [appliedTheme.colors.primary, appliedTheme.colors.primary], [appliedTheme.colors.primary]);
123
+ const gradientConfig = useMemo(() => ({
124
+ colors: GRADIENT_OVERLAY_COLORS,
125
+ start: GRADIENT_START,
126
+ end: GRADIENT_END
127
+ }), []);
128
+ const carouselProps = useMemo(() => ({
129
+ width: FULL_WIDTH,
130
+ height: FULL_HEIGHT,
131
+ autoPlay: !isLoading && contentData.length > 1,
132
+ loop: !isLoading && contentData.length > 1,
133
+ scrollAnimationDuration: SCROLL_ANIMATION_DURATION,
134
+ autoPlayInterval: AUTO_PLAY_INTERVAL,
135
+ windowSize: CAROUSEL_WINDOW_SIZE,
136
+ enabled: true
137
+ }), [isLoading, contentData.length]);
138
+ const inactiveIndicatorStyle = useMemo(() => [styles.inactiveIndicator, {
139
+ backgroundColor: appliedTheme.colors.onSurface
140
+ }], [appliedTheme.colors.onSurface]);
141
+
142
+ // ========================================================================
143
+ // Event Handlers
144
+ // ========================================================================
72
145
  const handleSnapToItem = useCallback(i => {
73
146
  if (snapTimeoutRef.current) {
74
147
  clearTimeout(snapTimeoutRef.current);
@@ -77,48 +150,27 @@ const SliderTwo = ({
77
150
  InteractionManager.runAfterInteractions(() => {
78
151
  setActiveIndex(i);
79
152
  });
80
- }, 50);
153
+ }, SNAP_DEBOUNCE_DELAY);
81
154
  }, []);
155
+ const configurePanGesture = useCallback(gesture => gesture.activeOffsetX(PAN_GESTURE_ACTIVE_OFFSET_X).failOffsetY(PAN_GESTURE_FAIL_OFFSET_Y), []);
82
156
 
83
- // Memoize skeleton items
84
- const skeletonItems = useSkeletonItems(skeletonCount);
85
-
86
- // Memoize indicator array
87
- const indicatorArray = useMemo(() => Array.from({
88
- length: contentData.length
89
- }, (_, i) => i), [contentData.length]);
90
-
91
- // Memoize carousel data
92
- const carouselData = useMemo(() => isLoading ? skeletonItems : contentData, [isLoading, skeletonItems, contentData]);
93
-
94
- // Memoize gradient configuration
95
- const gradientConfig = useMemo(() => ({
96
- colors: ['transparent', 'rgba(0,0,0,0.7)'],
97
- start: {
98
- x: 0.5,
99
- y: 0
100
- },
101
- end: {
102
- x: 0.5,
103
- y: 1
104
- }
105
- }), []);
106
-
107
- // Memoize pan gesture handler for smooth scrolling
108
- const configurePanGesture = useCallback(gesture => {
109
- gesture.activeOffsetX([-10, 10]).failOffsetY([-5, 5]);
110
- }, []);
111
- const renderSkeletonItem = useCallback(() => /*#__PURE__*/_jsx(View, {
157
+ // ========================================================================
158
+ // Render Functions
159
+ // ========================================================================
160
+ const renderSkeletonItem = useCallback(({
161
+ item: _item
162
+ }) => /*#__PURE__*/_jsx(View, {
112
163
  style: styles.itemWrapper,
113
164
  children: /*#__PURE__*/_jsx(SkeletonPlaceholder, {
114
165
  backgroundColor: appliedTheme.colors.skeletonBaseColor,
115
166
  highlightColor: appliedTheme.colors.skeletonHighlightColor,
167
+ speed: SKELETON_SPEED,
116
168
  children: /*#__PURE__*/_jsx(SkeletonPlaceholder.Item, {
117
169
  width: FULL_WIDTH,
118
170
  height: FULL_HEIGHT
119
171
  })
120
172
  })
121
- }), [appliedTheme.colors]);
173
+ }), [appliedTheme.colors.skeletonBaseColor, appliedTheme.colors.skeletonHighlightColor]);
122
174
  const renderCarouselItem = useCallback(({
123
175
  item
124
176
  }) => /*#__PURE__*/_jsx(CarouselItem, {
@@ -127,55 +179,42 @@ const SliderTwo = ({
127
179
  appliedTheme: appliedTheme,
128
180
  gradientConfig: gradientConfig
129
181
  }), [appliedTheme, onPressItem, gradientConfig]);
130
-
131
- // Memoize renderItem to prevent switching functions
132
182
  const renderItem = useMemo(() => isLoading ? renderSkeletonItem : renderCarouselItem, [isLoading, renderSkeletonItem, renderCarouselItem]);
133
-
134
- // Memoize carousel props for smooth scrolling
135
- const carouselProps = useMemo(() => ({
136
- width: FULL_WIDTH,
137
- height: FULL_HEIGHT,
138
- autoPlay: !isLoading && contentData.length > 1,
139
- loop: !isLoading && contentData.length > 1,
140
- scrollAnimationDuration: 300,
141
- // Reduced for smoother scrolling
142
- autoPlayInterval: 3000,
143
- windowSize: 2,
144
- // Reduced window size for better performance
145
- enabled: true
146
- }), [isLoading, contentData.length]);
147
-
148
- // Memoize inactive indicator style
149
- const inactiveIndicatorStyle = useMemo(() => [styles.inactiveIndicator, {
150
- backgroundColor: appliedTheme.colors.onSurface
151
- }], [appliedTheme.colors.onSurface]);
152
- const renderIndicator = useCallback((_, i) => /*#__PURE__*/_jsx(View, {
153
- style: styles.indicatorWrapper,
154
- children: isLoading ? /*#__PURE__*/_jsx(SkeletonPlaceholder, {
155
- backgroundColor: appliedTheme.colors.skeletonBaseColor,
156
- highlightColor: appliedTheme.colors.skeletonHighlightColor,
157
- speed: 2000,
158
- children: /*#__PURE__*/_jsx(SkeletonPlaceholder.Item, {
159
- width: scale(18),
160
- height: scale(8),
161
- borderRadius: scale(50)
183
+ const renderIndicator = useCallback((_, i) => {
184
+ const isActive = i === activeIndex;
185
+ return /*#__PURE__*/_jsx(View, {
186
+ style: styles.indicatorWrapper,
187
+ children: isLoading ? /*#__PURE__*/_jsx(SkeletonPlaceholder, {
188
+ backgroundColor: appliedTheme.colors.skeletonBaseColor,
189
+ highlightColor: appliedTheme.colors.skeletonHighlightColor,
190
+ speed: SKELETON_SPEED,
191
+ children: /*#__PURE__*/_jsx(SkeletonPlaceholder.Item, {
192
+ width: INDICATOR_WIDTH_ACTIVE,
193
+ height: INDICATOR_HEIGHT,
194
+ borderRadius: INDICATOR_BORDER_RADIUS
195
+ })
196
+ }) : isActive ? /*#__PURE__*/_jsx(LinearGradient, {
197
+ start: {
198
+ x: 0,
199
+ y: 0
200
+ },
201
+ end: {
202
+ x: 1,
203
+ y: 0
204
+ },
205
+ colors: gradientColors,
206
+ style: styles.activeIndicator
207
+ }) : /*#__PURE__*/_jsx(View, {
208
+ style: inactiveIndicatorStyle
162
209
  })
163
- }) : i === activeIndex ? /*#__PURE__*/_jsx(LinearGradient, {
164
- start: {
165
- x: 0,
166
- y: 0
167
- },
168
- end: {
169
- x: 1,
170
- y: 0
171
- },
172
- colors: gradientColors,
173
- style: styles.activeIndicator
174
- }) : /*#__PURE__*/_jsx(View, {
175
- style: inactiveIndicatorStyle
176
- })
177
- }, i), [isLoading, appliedTheme.colors.skeletonBaseColor, appliedTheme.colors.skeletonHighlightColor, inactiveIndicatorStyle, activeIndex, gradientColors]);
178
- if (!data || !isLoading && contentData.length === 0) {
210
+ }, i);
211
+ }, [isLoading, appliedTheme.colors.skeletonBaseColor, appliedTheme.colors.skeletonHighlightColor, inactiveIndicatorStyle, activeIndex, gradientColors]);
212
+
213
+ // ========================================================================
214
+ // Early Returns
215
+ // ========================================================================
216
+ // Don't return early if loading - we need to show skeleton
217
+ if (!isLoading && (!data || contentData.length === 0)) {
179
218
  return /*#__PURE__*/_jsx(View, {
180
219
  style: [styles.container, styles.emptyState],
181
220
  children: /*#__PURE__*/_jsx(Text, {
@@ -184,6 +223,10 @@ const SliderTwo = ({
184
223
  })
185
224
  });
186
225
  }
226
+
227
+ // ========================================================================
228
+ // Render Main Content
229
+ // ========================================================================
187
230
  return /*#__PURE__*/_jsxs(View, {
188
231
  style: styles.container,
189
232
  accessibilityLabel: accessibilityLabel,
@@ -194,7 +237,7 @@ const SliderTwo = ({
194
237
  renderItem: renderItem,
195
238
  onSnapToItem: handleSnapToItem,
196
239
  onConfigurePanGesture: configurePanGesture
197
- }), /*#__PURE__*/_jsx(View, {
240
+ }), indicatorArray.length > 0 && /*#__PURE__*/_jsx(View, {
198
241
  style: styles.indicatorContainer,
199
242
  children: /*#__PURE__*/_jsx(View, {
200
243
  style: styles.indicator,
@@ -203,6 +246,10 @@ const SliderTwo = ({
203
246
  })]
204
247
  });
205
248
  };
249
+
250
+ // ============================================================================
251
+ // Styles
252
+ // ============================================================================
206
253
  const styles = StyleSheet.create({
207
254
  container: {
208
255
  flex: 1,
@@ -239,14 +286,14 @@ const styles = StyleSheet.create({
239
286
  justifyContent: 'center'
240
287
  },
241
288
  activeIndicator: {
242
- width: scale(18),
243
- height: scale(8),
244
- borderRadius: scale(50)
289
+ width: INDICATOR_WIDTH_ACTIVE,
290
+ height: INDICATOR_HEIGHT,
291
+ borderRadius: INDICATOR_BORDER_RADIUS
245
292
  },
246
293
  inactiveIndicator: {
247
- width: scale(8),
248
- height: scale(8),
249
- borderRadius: scale(50)
294
+ width: INDICATOR_WIDTH_INACTIVE,
295
+ height: INDICATOR_HEIGHT,
296
+ borderRadius: INDICATOR_BORDER_RADIUS
250
297
  },
251
298
  emptyState: {
252
299
  padding: scale(12),
@@ -1 +1 @@
1
- {"version":3,"names":["React","memo","useCallback","useMemo","useState","useRef","InteractionManager","useSkeletonItems","View","TouchableOpacity","StyleSheet","Carousel","scale","verticalScale","FastImage","LinearGradient","SkeletonPlaceholder","Text","useInternalTheme","Display","ThumbnailCard","RFValue","RentOrBuyIcon","jsx","_jsx","jsxs","_jsxs","FULL_WIDTH","fullWidth","FULL_HEIGHT","CarouselItem","item","onPressItem","appliedTheme","gradientConfig","activeOpacity","onPress","style","styles","itemWrapper","accessibilityRole","accessibilityLabel","name","children","theme","content_offering_type","thumbnailUri","thumbnail","isLoading","wrapperStyle","image","resizeMode","cover","colors","start","end","gradientBottomOverlay","SliderTwo","data","skeletonCount","accessibilityHint","contentData","activeIndex","setActiveIndex","gradientColors","primary","snapTimeoutRef","handleSnapToItem","i","current","clearTimeout","setTimeout","runAfterInteractions","skeletonItems","indicatorArray","Array","from","length","_","carouselData","x","y","configurePanGesture","gesture","activeOffsetX","failOffsetY","renderSkeletonItem","backgroundColor","skeletonBaseColor","highlightColor","skeletonHighlightColor","Item","width","height","renderCarouselItem","renderItem","carouselProps","autoPlay","loop","scrollAnimationDuration","autoPlayInterval","windowSize","enabled","inactiveIndicatorStyle","inactiveIndicator","onSurface","renderIndicator","indicatorWrapper","speed","borderRadius","activeIndicator","container","emptyState","emptyText","onSnapToItem","onConfigurePanGesture","indicatorContainer","indicator","map","create","flex","marginVertical","overflow","position","bottom","left","right","zIndex","alignItems","justifyContent","marginTop","flexDirection","gap","padding","fontSize","fontWeight","color","textAlign"],"sourceRoot":"../../../../../../../src","sources":["components/Content/Card/Sliders/Styles/Two.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","memo","useCallback","useMemo","useState","useRef","InteractionManager","useSkeletonItems","View","TouchableOpacity","StyleSheet","Carousel","scale","verticalScale","FastImage","LinearGradient","SkeletonPlaceholder","Text","useInternalTheme","Display","ThumbnailCard","RFValue","RentOrBuyIcon","jsx","_jsx","jsxs","_jsxs","FULL_WIDTH","fullWidth","ASPECT_RATIO","FULL_HEIGHT","DEFAULT_SKELETON_COUNT","SCROLL_ANIMATION_DURATION","AUTO_PLAY_INTERVAL","CAROUSEL_WINDOW_SIZE","SNAP_DEBOUNCE_DELAY","SKELETON_SPEED","PAN_GESTURE_ACTIVE_OFFSET_X","PAN_GESTURE_FAIL_OFFSET_Y","GRADIENT_OVERLAY_COLORS","GRADIENT_START","x","y","GRADIENT_END","INDICATOR_WIDTH_ACTIVE","INDICATOR_WIDTH_INACTIVE","INDICATOR_HEIGHT","INDICATOR_BORDER_RADIUS","TOUCH_OPACITY","CarouselItem","item","onPressItem","appliedTheme","gradientConfig","activeOpacity","onPress","style","styles","itemWrapper","accessibilityRole","accessibilityLabel","name","children","theme","content_offering_type","thumbnailUri","thumbnail","isLoading","wrapperStyle","image","resizeMode","cover","colors","start","end","gradientBottomOverlay","displayName","SliderTwo","data","skeletonCount","accessibilityHint","activeIndex","setActiveIndex","snapTimeoutRef","contentData","skeletonItems","indicatorArray","Array","from","length","_","i","carouselData","gradientColors","primary","carouselProps","width","height","autoPlay","loop","scrollAnimationDuration","autoPlayInterval","windowSize","enabled","inactiveIndicatorStyle","inactiveIndicator","backgroundColor","onSurface","handleSnapToItem","current","clearTimeout","setTimeout","runAfterInteractions","configurePanGesture","gesture","activeOffsetX","failOffsetY","renderSkeletonItem","_item","skeletonBaseColor","highlightColor","skeletonHighlightColor","speed","Item","renderCarouselItem","renderItem","renderIndicator","isActive","indicatorWrapper","borderRadius","activeIndicator","container","emptyState","emptyText","onSnapToItem","onConfigurePanGesture","indicatorContainer","indicator","map","create","flex","marginVertical","overflow","position","bottom","left","right","zIndex","alignItems","justifyContent","marginTop","flexDirection","gap","padding","fontSize","fontWeight","color","textAlign"],"sourceRoot":"../../../../../../../src","sources":["components/Content/Card/Sliders/Styles/Two.tsx"],"mappings":"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","ignoreList":[]}
@@ -10,21 +10,43 @@ import { View, FlatList, TouchableOpacity, StyleSheet, ScrollView } from 'react-
10
10
  import SkeletonPlaceholder from 'react-native-skeleton-placeholder';
11
11
  import { moderateScale, verticalScale } from 'react-native-size-matters';
12
12
  import FastImage from 'react-native-fast-image';
13
+ import { RFValue } from 'react-native-responsive-fontsize';
13
14
  import CardPoster from "../components/CardPoster.js";
14
15
  import NavigateToMore from "../components/NavigateToMore.js";
15
- import { usePaginatedSection } from "../../../../hooks/usePaginatedSection.js";
16
+ import { AdsPoster } from "../components/index.js";
16
17
  import { useInternalTheme } from "../../../../theme/hook/useInternalTheme.js";
17
- import { RFValue } from 'react-native-responsive-fontsize';
18
+ import { useCards } from "../../../../hooks/index.js";
19
+
20
+ // Constants
18
21
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
19
22
  const DEFAULT_ITEM_WIDTH = moderateScale(140);
20
23
  const DEFAULT_BORDER_RADIUS = moderateScale(5);
21
24
  const DEFAULT_SKELETON_COUNT = 3;
25
+ const ASPECT_RATIO = 0.67;
26
+ const END_REACHED_THRESHOLD = 0.5;
27
+ const ITEM_ACTIVE_OPACITY = 0.8;
28
+ const INITIAL_NUM_TO_RENDER = 5;
29
+ const SKELETON_TITLE_WIDTH = moderateScale(100);
30
+ const SKELETON_TITLE_HEIGHT = moderateScale(20);
31
+ const SKELETON_TITLE_BORDER_RADIUS = moderateScale(4);
32
+ const SKELETON_TITLE_MARGIN_HORIZONTAL = moderateScale(15);
33
+ const SKELETON_TITLE_MARGIN_BOTTOM = verticalScale(6);
34
+ const SKELETON_ITEM_MARGIN_LEFT = moderateScale(12);
35
+ const SKELETON_ITEM_MARGIN_RIGHT = moderateScale(12);
36
+ const ITEM_MARGIN_LEFT = moderateScale(10);
37
+ const ITEM_MARGIN_BOTTOM = verticalScale(2);
38
+ const LIST_CONTENT_PADDING_RIGHT = moderateScale(15);
39
+ const SKELETON_LIST_PADDING_RIGHT = moderateScale(15);
40
+
41
+ // Types
42
+
43
+ // Main Component
22
44
  const MovieCardFive = ({
23
45
  theme,
24
46
  title,
25
47
  section_id,
26
48
  type,
27
- data: initialData,
49
+ data: externalData,
28
50
  moreFetchData,
29
51
  onPressItem,
30
52
  onPressMore,
@@ -32,25 +54,47 @@ const MovieCardFive = ({
32
54
  itemWidth = DEFAULT_ITEM_WIDTH,
33
55
  borderRadius = DEFAULT_BORDER_RADIUS,
34
56
  skeletonCount = DEFAULT_SKELETON_COUNT,
57
+ paginationSkeletonCount,
35
58
  containerStyle,
36
59
  titleStyle,
37
60
  itemStyle,
38
61
  isLoading = false,
39
62
  accessibilityLabel,
40
- accessibilityHint
63
+ accessibilityHint,
64
+ onDisplayAds,
65
+ screenDimensions,
66
+ viewportOffsets
41
67
  }) => {
68
+ // Refs
69
+ const flatListRef = useRef(null);
70
+ const onEndReachedCalledDuringMomentum = useRef(false);
71
+
72
+ // Theme
42
73
  const {
43
74
  theme: appliedTheme
44
75
  } = useInternalTheme(theme);
45
- const flatListRef = useRef(null);
46
- const onEndReachedCalledDuringMomentum = useRef(false);
76
+
77
+ // Styles
47
78
  const styles = useMemo(() => getStyles(appliedTheme, itemWidth, borderRadius), [appliedTheme, itemWidth, borderRadius]);
79
+
80
+ // Data Management
48
81
  const {
49
- data,
82
+ listData,
50
83
  pagination,
51
- loading: isPaginating,
52
- loadMoreData
53
- } = usePaginatedSection(section_id, moreFetchData, initialData?.data, isLoading);
84
+ loadMore,
85
+ isEmpty,
86
+ isPaging: isPaginating
87
+ } = useCards({
88
+ sectionId: section_id,
89
+ data: externalData,
90
+ fetchMore: moreFetchData,
91
+ loading: isLoading,
92
+ initialSkeleton: skeletonCount,
93
+ pagingSkeleton: paginationSkeletonCount,
94
+ adsRender: true
95
+ });
96
+
97
+ // Event Handlers
54
98
  const handleItemPress = useCallback(item => onPressItem?.(item), [onPressItem]);
55
99
  const handlePressMore = useCallback(() => {
56
100
  onPressMore?.({
@@ -62,48 +106,89 @@ const MovieCardFive = ({
62
106
  const handleEndReached = useCallback(() => {
63
107
  if (!onEndReachedCalledDuringMomentum.current && pagination?.hasNextPage && pagination?.nextPage) {
64
108
  onEndReachedCalledDuringMomentum.current = true;
65
- loadMoreData(pagination.nextPage);
109
+ loadMore(pagination.nextPage);
66
110
  }
67
- }, [loadMoreData, pagination]);
111
+ }, [loadMore, pagination]);
112
+ const handleScrollBeginDrag = useCallback(() => {
113
+ onEndReachedCalledDuringMomentum.current = false;
114
+ }, []);
115
+ const handleMomentumScrollBegin = useCallback(() => {
116
+ onEndReachedCalledDuringMomentum.current = false;
117
+ }, []);
118
+
119
+ // Render Functions
68
120
  const renderItem = useCallback(({
69
121
  item,
70
122
  index
71
123
  }) => {
124
+ // Handle ads
125
+ if ('type' in item && item.type === 'ads') {
126
+ const adItem = item;
127
+ return /*#__PURE__*/_jsx(View, {
128
+ style: [styles.item, itemStyle],
129
+ children: /*#__PURE__*/_jsx(AdsPoster, {
130
+ ad: adItem,
131
+ theme: appliedTheme,
132
+ isLoading: isLoading,
133
+ containerStyle: {
134
+ width: itemWidth,
135
+ aspectRatio: ASPECT_RATIO
136
+ },
137
+ imageStyle: styles.image,
138
+ borderRadius: borderRadius,
139
+ onDisplayAds: onDisplayAds,
140
+ screenDimensions: screenDimensions,
141
+ viewportOffsets: viewportOffsets
142
+ })
143
+ }, `ad-${adItem.tracking?.impression || index}`);
144
+ }
145
+ // Handle content items
146
+ const contentItem = item;
147
+ const isSkeleton = contentItem._id?.startsWith?.('pagination-skeleton') ?? false;
72
148
  return /*#__PURE__*/_jsx(TouchableOpacity, {
73
149
  style: [styles.item, itemStyle],
74
- onPress: () => handleItemPress(item),
75
- activeOpacity: 0.8,
150
+ onPress: () => {
151
+ if (!isSkeleton && !isLoading) {
152
+ handleItemPress(contentItem);
153
+ }
154
+ },
155
+ activeOpacity: ITEM_ACTIVE_OPACITY,
76
156
  children: renderItemImage ? renderItemImage({
77
157
  item,
78
158
  index
79
159
  }) : /*#__PURE__*/_jsx(CardPoster, {
80
- content_offering_type: item.content_offering_type,
81
- posterUri: item.poster,
160
+ content_offering_type: contentItem.content_offering_type,
161
+ posterUri: contentItem.poster,
82
162
  theme: appliedTheme,
83
163
  borderRadius: borderRadius,
84
164
  posterWrapperStyle: styles.image,
85
165
  resizeMode: FastImage.resizeMode.cover,
86
- isLoading: isLoading
166
+ isLoading: isSkeleton || isLoading
87
167
  })
88
- });
89
- }, [styles.item, styles.image, itemStyle, renderItemImage, appliedTheme, borderRadius, isLoading, handleItemPress]);
90
- if (!initialData) {
91
- return null;
92
- }
93
- const renderSkeletonItem = ({
168
+ }, contentItem._id);
169
+ }, [styles.item, styles.image, itemStyle, renderItemImage, appliedTheme, borderRadius, isLoading, handleItemPress, itemWidth, onDisplayAds, screenDimensions, viewportOffsets]);
170
+ const renderSkeletonItem = useCallback(({
94
171
  index
95
172
  }) => /*#__PURE__*/_jsx(SkeletonPlaceholder, {
96
173
  highlightColor: appliedTheme.colors.skeletonHighlightColor,
97
174
  backgroundColor: appliedTheme.colors.skeletonBaseColor,
98
175
  children: /*#__PURE__*/_jsx(SkeletonPlaceholder.Item, {
99
176
  width: itemWidth,
100
- aspectRatio: 0.67,
177
+ aspectRatio: ASPECT_RATIO,
101
178
  borderRadius: borderRadius,
102
- marginLeft: index === 0 ? moderateScale(12) : 0,
103
- marginRight: moderateScale(12)
179
+ marginLeft: index === 0 ? SKELETON_ITEM_MARGIN_LEFT : 0,
180
+ marginRight: SKELETON_ITEM_MARGIN_RIGHT
104
181
  })
105
- }, `skeleton-${index}`);
106
- if (!isLoading && data.length === 0) return null;
182
+ }, `skeleton-${index}`), [appliedTheme, itemWidth, borderRadius]);
183
+ const keyExtractor = useCallback((item, index) => {
184
+ return '_id' in item ? item._id : `ad-${index}`;
185
+ }, []);
186
+
187
+ // Early Returns
188
+ if (!externalData) return null;
189
+ if (!isLoading && listData.length === 0 && !isEmpty) return null;
190
+
191
+ // Main Render
107
192
  return /*#__PURE__*/_jsx(View, {
108
193
  style: [styles.root, containerStyle],
109
194
  accessibilityLabel: accessibilityLabel || `Movie section: ${title}`,
@@ -113,11 +198,11 @@ const MovieCardFive = ({
113
198
  highlightColor: appliedTheme.colors.skeletonHighlightColor,
114
199
  backgroundColor: appliedTheme.colors.skeletonBaseColor,
115
200
  children: /*#__PURE__*/_jsx(SkeletonPlaceholder.Item, {
116
- width: moderateScale(100),
117
- height: moderateScale(20),
118
- borderRadius: moderateScale(4),
119
- marginHorizontal: moderateScale(15),
120
- marginBottom: verticalScale(6)
201
+ width: SKELETON_TITLE_WIDTH,
202
+ height: SKELETON_TITLE_HEIGHT,
203
+ borderRadius: SKELETON_TITLE_BORDER_RADIUS,
204
+ marginHorizontal: SKELETON_TITLE_MARGIN_HORIZONTAL,
205
+ marginBottom: SKELETON_TITLE_MARGIN_BOTTOM
121
206
  })
122
207
  }), /*#__PURE__*/_jsx(ScrollView, {
123
208
  horizontal: true,
@@ -143,21 +228,17 @@ const MovieCardFive = ({
143
228
  }
144
229
  }), /*#__PURE__*/_jsx(FlatList, {
145
230
  ref: flatListRef,
146
- data: data,
231
+ data: listData,
147
232
  horizontal: true,
148
- keyExtractor: (item, index) => `${item._id}-${index}`,
233
+ keyExtractor: keyExtractor,
149
234
  renderItem: renderItem,
150
235
  showsHorizontalScrollIndicator: false,
151
236
  contentContainerStyle: styles.listContent,
152
- initialNumToRender: 5,
237
+ initialNumToRender: INITIAL_NUM_TO_RENDER,
153
238
  onEndReached: handleEndReached,
154
- onEndReachedThreshold: 0.5,
155
- onScrollBeginDrag: () => {
156
- onEndReachedCalledDuringMomentum.current = false;
157
- },
158
- onMomentumScrollBegin: () => {
159
- onEndReachedCalledDuringMomentum.current = false;
160
- },
239
+ onEndReachedThreshold: END_REACHED_THRESHOLD,
240
+ onScrollBeginDrag: handleScrollBeginDrag,
241
+ onMomentumScrollBegin: handleMomentumScrollBegin,
161
242
  ListFooterComponent: isPaginating ? renderSkeletonItem({
162
243
  index: 0
163
244
  }) : null
@@ -165,17 +246,19 @@ const MovieCardFive = ({
165
246
  })
166
247
  });
167
248
  };
249
+
250
+ // Styles
168
251
  const getStyles = (theme, width, radius) => StyleSheet.create({
169
252
  root: {
170
253
  marginVertical: verticalScale(6)
171
254
  },
172
255
  item: {
173
- marginLeft: moderateScale(10),
174
- marginBottom: verticalScale(2)
256
+ marginLeft: ITEM_MARGIN_LEFT,
257
+ marginBottom: ITEM_MARGIN_BOTTOM
175
258
  },
176
259
  image: {
177
260
  width,
178
- aspectRatio: 0.67,
261
+ aspectRatio: ASPECT_RATIO,
179
262
  borderRadius: radius,
180
263
  backgroundColor: theme.colors.surfaceVariant
181
264
  },
@@ -188,12 +271,12 @@ const getStyles = (theme, width, radius) => StyleSheet.create({
188
271
  fontWeight: '600'
189
272
  },
190
273
  listContent: {
191
- paddingRight: moderateScale(15)
274
+ paddingRight: LIST_CONTENT_PADDING_RIGHT
192
275
  },
193
276
  skeletonList: {
194
277
  flexDirection: 'row',
195
278
  alignItems: 'flex-start',
196
- paddingRight: moderateScale(15)
279
+ paddingRight: SKELETON_LIST_PADDING_RIGHT
197
280
  }
198
281
  });
199
282
  export default /*#__PURE__*/memo(MovieCardFive);