@zezosoft/zezo-ott-react-native-ui-kit 1.3.6 → 1.3.7

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 (258) hide show
  1. package/README.md +40 -36
  2. package/package.json +1 -3
  3. package/src/assets/animations/135037-payment-processing-error.json +0 -1347
  4. package/src/assets/animations/7227-vui-animation.json +0 -3377
  5. package/src/assets/animations/Failed.json +0 -2103
  6. package/src/assets/animations/Pending.json +0 -522
  7. package/src/assets/animations/Successful.json +0 -2289
  8. package/src/assets/animations/heart.json +0 -788
  9. package/src/assets/animations/succesfull-payment.json +0 -2379
  10. package/src/assets/animations/voice-icon.json +0 -542
  11. package/src/assets/img/back.png +0 -0
  12. package/src/assets/img/bottom-panel.png +0 -0
  13. package/src/assets/img/camera.png +0 -0
  14. package/src/assets/img/camera2.png +0 -0
  15. package/src/assets/img/home.png +0 -0
  16. package/src/assets/img/lock.png +0 -0
  17. package/src/assets/img/play.png +0 -0
  18. package/src/assets/img/profile.jpg +0 -0
  19. package/src/assets/img/qr-code.png +0 -0
  20. package/src/assets/img/shadow.png +0 -0
  21. package/src/assets/img/shadow2.png +0 -0
  22. package/src/assets/img/user.png +0 -0
  23. package/src/assets/svg/Account.svg +0 -4
  24. package/src/assets/svg/Favourite.svg +0 -14
  25. package/src/assets/svg/Upcoming.svg +0 -4
  26. package/src/assets/svg/content-error.svg +0 -28
  27. package/src/assets/svg/download.svg +0 -3
  28. package/src/assets/svg/eye-off.svg +0 -10
  29. package/src/assets/svg/favorites.svg +0 -3
  30. package/src/assets/svg/h.svg +0 -4
  31. package/src/assets/svg/home.svg +0 -5
  32. package/src/assets/svg/home1.svg +0 -3
  33. package/src/assets/svg/menu-bar.svg +0 -4
  34. package/src/assets/svg/my-space.svg +0 -14
  35. package/src/assets/svg/play-icon-with-bg.svg +0 -5
  36. package/src/assets/svg/profile.svg +0 -4
  37. package/src/assets/svg/search.svg +0 -5
  38. package/src/assets/svg/search1.svg +0 -4
  39. package/src/assets/svg/server-error.svg +0 -139
  40. package/src/components/Account/Account.tsx +0 -354
  41. package/src/components/Account/index.ts +0 -6
  42. package/src/components/Alert/AlertDialog.tsx +0 -253
  43. package/src/components/Alert/UAAlert.tsx +0 -176
  44. package/src/components/Alert/index.ts +0 -7
  45. package/src/components/Auth/AuthProvider/AuthProvider.tsx +0 -412
  46. package/src/components/Auth/One/ForgotPassword/ForgotPassword.tsx +0 -333
  47. package/src/components/Auth/One/Login/LoginWithEmail.tsx +0 -449
  48. package/src/components/Auth/One/Login/LoginWithPhone.tsx +0 -309
  49. package/src/components/Auth/One/OTP/OTP.tsx +0 -539
  50. package/src/components/Auth/One/QrLogin/QrLogin.tsx +0 -329
  51. package/src/components/Auth/One/QrLogin/components/index.ts +0 -8
  52. package/src/components/Auth/One/QrLogin/components/qr-scanner-fallback.tsx +0 -158
  53. package/src/components/Auth/One/QrLogin/components/qr-scanner-frame.tsx +0 -207
  54. package/src/components/Auth/One/QrLogin/components/qr-scanner-header.tsx +0 -65
  55. package/src/components/Auth/One/QrLogin/components/qr-scanner-intro.tsx +0 -255
  56. package/src/components/Auth/One/QrLogin/components/qr-scanner-overlay.tsx +0 -291
  57. package/src/components/Auth/One/SignUp/SignUp.tsx +0 -470
  58. package/src/components/Auth/One/SplashScreen/SplashScreen.tsx +0 -229
  59. package/src/components/Auth/One/SplashScreen/components/SplashImage/SplashImage.tsx +0 -92
  60. package/src/components/Auth/One/SplashScreen/components/SplashLottie/SplashLottie.tsx +0 -129
  61. package/src/components/Auth/One/SplashScreen/components/SplashVideo/SplashVideo.tsx +0 -172
  62. package/src/components/Auth/One/SplashScreen/utils/splashUtils.ts +0 -23
  63. package/src/components/Auth/One/index.ts +0 -24
  64. package/src/components/Auth/Two/AuthHeader/AuthHeader.tsx +0 -130
  65. package/src/components/Auth/Two/ForgotPassword/ForgotPassword.tsx +0 -331
  66. package/src/components/Auth/Two/Login/EmailOrPhoneLogin.tsx +0 -612
  67. package/src/components/Auth/Two/OTP/OTP.tsx +0 -504
  68. package/src/components/Auth/Two/SignUp/SignUp.tsx +0 -439
  69. package/src/components/Auth/Two/index.ts +0 -20
  70. package/src/components/Auth/index.ts +0 -16
  71. package/src/components/BackgroundLayout/One/One.tsx +0 -184
  72. package/src/components/BackgroundLayout/Two/Two.tsx +0 -65
  73. package/src/components/BackgroundLayout/index.ts +0 -14
  74. package/src/components/BlogView/BlogView.tsx +0 -282
  75. package/src/components/BlogView/index.ts +0 -8
  76. package/src/components/BlurView/BlurView.tsx +0 -199
  77. package/src/components/BlurView/index.ts +0 -7
  78. package/src/components/BottomSheet/BottomSheet.tsx +0 -204
  79. package/src/components/BottomSheet/BottomSheetOne.tsx +0 -223
  80. package/src/components/BottomSheet/index.ts +0 -9
  81. package/src/components/Button/BackBtn.tsx +0 -149
  82. package/src/components/Button/MenuBtn.tsx +0 -220
  83. package/src/components/Button/PrimaryBtn.tsx +0 -123
  84. package/src/components/Button/SecondaryBtn.tsx +0 -123
  85. package/src/components/Button/TextButton.tsx +0 -150
  86. package/src/components/Button/index.ts +0 -18
  87. package/src/components/Button/types.ts +0 -33
  88. package/src/components/Content/Card/Category/Category.tsx +0 -436
  89. package/src/components/Content/Card/Category/CategroyTwo.tsx +0 -429
  90. package/src/components/Content/Card/NowWatching/NowWatching.tsx +0 -607
  91. package/src/components/Content/Card/Sliders/Styles/One.tsx +0 -490
  92. package/src/components/Content/Card/Sliders/Styles/Three.tsx +0 -1017
  93. package/src/components/Content/Card/Sliders/Styles/Two.tsx +0 -395
  94. package/src/components/Content/Card/Sliders/index.ts +0 -18
  95. package/src/components/Content/Card/Styles/Five.tsx +0 -367
  96. package/src/components/Content/Card/Styles/Four.tsx +0 -366
  97. package/src/components/Content/Card/Styles/One.tsx +0 -372
  98. package/src/components/Content/Card/Styles/RotateInOut.tsx +0 -413
  99. package/src/components/Content/Card/Styles/Six.tsx +0 -378
  100. package/src/components/Content/Card/Styles/Three.tsx +0 -312
  101. package/src/components/Content/Card/Styles/TopTen.tsx +0 -402
  102. package/src/components/Content/Card/Styles/Two.tsx +0 -404
  103. package/src/components/Content/Card/components/AdsPoster.tsx +0 -207
  104. package/src/components/Content/Card/components/CardPoster.tsx +0 -377
  105. package/src/components/Content/Card/components/LiveBadge.tsx +0 -125
  106. package/src/components/Content/Card/components/NavigateToMore.tsx +0 -97
  107. package/src/components/Content/Card/components/RentOrBuyIcon.tsx +0 -134
  108. package/src/components/Content/Card/components/ShowAllButton.tsx +0 -92
  109. package/src/components/Content/Card/components/ThumbnailCard.tsx +0 -219
  110. package/src/components/Content/Card/components/index.ts +0 -12
  111. package/src/components/Content/Card/index.ts +0 -31
  112. package/src/components/Content/Content.tsx +0 -338
  113. package/src/components/Content/Sections.tsx +0 -239
  114. package/src/components/Content/types.ts +0 -180
  115. package/src/components/ContentView/MoreContentList.tsx +0 -330
  116. package/src/components/ContentView/One/ContentViewOne.tsx +0 -251
  117. package/src/components/ContentView/One/components/CastCard.tsx +0 -266
  118. package/src/components/ContentView/One/components/HeroBanner.tsx +0 -413
  119. package/src/components/ContentView/One/components/MiniInfo.tsx +0 -343
  120. package/src/components/ContentView/One/components/Title.tsx +0 -149
  121. package/src/components/ContentView/Two/ContentViewTwo.tsx +0 -332
  122. package/src/components/ContentView/Two/components/Details.tsx +0 -196
  123. package/src/components/ContentView/Two/components/HeroBanner.tsx +0 -267
  124. package/src/components/ContentView/Two/components/LikeShareActions.tsx +0 -125
  125. package/src/components/ContentView/Two/components/MoreLikeThisContentList .tsx +0 -308
  126. package/src/components/ContentView/Two/components/PlayOrTrailer.tsx +0 -162
  127. package/src/components/ContentView/Two/components/SectionTabs.tsx +0 -181
  128. package/src/components/ContentView/Two/components/Title.tsx +0 -229
  129. package/src/components/ContentView/Two/components/index.ts +0 -12
  130. package/src/components/ContentView/index.ts +0 -13
  131. package/src/components/ContentView/shared/AboutSection.tsx +0 -226
  132. package/src/components/ContentView/shared/EpisodeCard.tsx +0 -600
  133. package/src/components/ContentView/shared/GenreTags.tsx +0 -189
  134. package/src/components/ContentView/shared/PlayButton.tsx +0 -52
  135. package/src/components/ContentView/shared/TrailerButton.tsx +0 -76
  136. package/src/components/Fallbacks/NoContentFallback.tsx +0 -175
  137. package/src/components/Fallbacks/NotFoundFallback.tsx +0 -94
  138. package/src/components/Fallbacks/index.ts +0 -7
  139. package/src/components/Headers/AppHeader.tsx +0 -151
  140. package/src/components/Headers/Four.tsx +0 -84
  141. package/src/components/Headers/One.tsx +0 -115
  142. package/src/components/Headers/Three.tsx +0 -137
  143. package/src/components/Headers/Two.tsx +0 -101
  144. package/src/components/Headers/index.ts +0 -34
  145. package/src/components/Input/Input.ts +0 -18
  146. package/src/components/Input/InputOne.tsx +0 -265
  147. package/src/components/Input/InputThree.tsx +0 -205
  148. package/src/components/Input/InputTwo.tsx +0 -217
  149. package/src/components/Input/PhoneInput/One/One.tsx +0 -415
  150. package/src/components/Input/PhoneInput/Two/Two.tsx +0 -406
  151. package/src/components/Input/PhoneInput/index.ts +0 -14
  152. package/src/components/Keyboard/HideKeyboard.tsx +0 -91
  153. package/src/components/Loader/Loader.tsx +0 -49
  154. package/src/components/Logo/Logo.tsx +0 -150
  155. package/src/components/NewRelease/NewReleaseSheet.tsx +0 -260
  156. package/src/components/NewRelease/index.ts +0 -6
  157. package/src/components/Reels/ReelsSeries/MediaControls/BottomControls.tsx +0 -226
  158. package/src/components/Reels/ReelsSeries/MediaControls/MediaControlsProvider.tsx +0 -324
  159. package/src/components/Reels/ReelsSeries/MediaControls/MiddleControls.tsx +0 -201
  160. package/src/components/Reels/ReelsSeries/MediaControls/RightControls.tsx +0 -100
  161. package/src/components/Reels/ReelsSeries/MediaControls/TopControls.tsx +0 -168
  162. package/src/components/Reels/ReelsSeries/Model/DetailsModal.tsx +0 -207
  163. package/src/components/Reels/ReelsSeries/Model/SettingModal.tsx +0 -151
  164. package/src/components/Reels/ReelsSeries/Model/UnlockModal.tsx +0 -159
  165. package/src/components/Reels/ReelsSeries/ReelsSeries.tsx +0 -278
  166. package/src/components/Reels/ReelsSeries/ReelsSeriesItem.tsx +0 -569
  167. package/src/components/Reels/ReelsSeries/components/AnimatedThreeLines.tsx +0 -189
  168. package/src/components/Reels/ReelsSeries/components/Episodes.tsx +0 -159
  169. package/src/components/Reels/ReelsSeries/components/GradientOverlay.tsx +0 -46
  170. package/src/components/Reels/ReelsSeries/components/Like.tsx +0 -45
  171. package/src/components/Reels/ReelsSeries/components/RotatingLoader.tsx +0 -84
  172. package/src/components/Reels/ReelsSeries/components/Synopsis.tsx +0 -338
  173. package/src/components/Reels/ReelsSeries/components/VideoControls/QualityControl.tsx +0 -185
  174. package/src/components/Reels/ReelsSeries/components/VideoControls/SpeedControl.tsx +0 -77
  175. package/src/components/Reels/ReelsSeries/components/VideoControls/index.ts +0 -7
  176. package/src/components/Reels/ReelsSeries/types.ts +0 -78
  177. package/src/components/Reels/ReelsSeries/useReelsWatchProgress.ts +0 -90
  178. package/src/components/Reels/ReelsSeries/utils/quality.ts +0 -72
  179. package/src/components/Reels/index.ts +0 -9
  180. package/src/components/Reels/utils/Controls/gestureUtils.ts +0 -46
  181. package/src/components/Reels/utils/Controls/index.ts +0 -9
  182. package/src/components/Reels/utils/Controls/overlayUtils.ts +0 -40
  183. package/src/components/Reels/utils/Controls/videoControlsConstants.ts +0 -30
  184. package/src/components/Reels/utils/Controls/videoRef.ts +0 -9
  185. package/src/components/Reels/utils/index.ts +0 -6
  186. package/src/components/Reels/utils/timeoutUtils.ts +0 -34
  187. package/src/components/Search/One.tsx +0 -262
  188. package/src/components/Search/components/RecentSearchesSection.tsx +0 -181
  189. package/src/components/Search/components/SearchCard.tsx +0 -285
  190. package/src/components/Search/index.ts +0 -16
  191. package/src/components/Settings/AppSettings.tsx +0 -442
  192. package/src/components/Settings/index.ts +0 -6
  193. package/src/components/Subscription/SubOne.tsx +0 -423
  194. package/src/components/Subscription/components/SubsDetailsModal.tsx +0 -347
  195. package/src/components/Subscription/components/SubscriptionCard.tsx +0 -342
  196. package/src/components/Subscription/index.ts +0 -12
  197. package/src/components/TabBar/One.tsx +0 -145
  198. package/src/components/TabBar/Three.tsx +0 -162
  199. package/src/components/TabBar/Two.tsx +0 -179
  200. package/src/components/TabBar/index.ts +0 -20
  201. package/src/components/Text/Text.tsx +0 -90
  202. package/src/components/Text/index.ts +0 -6
  203. package/src/components/User/DeviceSessions/DeviceSessions.tsx +0 -468
  204. package/src/components/User/ProfileUpdate/ProfileUpdate.tsx +0 -293
  205. package/src/components/User/PurchaseHistory/PurchaseHistory.tsx +0 -504
  206. package/src/components/User/WatchHistory/WatchHistory.tsx +0 -214
  207. package/src/components/User/WatchLater/WatchLater.tsx +0 -400
  208. package/src/components/User/components/UserAvatar.tsx +0 -121
  209. package/src/components/User/components/UserSection.tsx +0 -218
  210. package/src/components/User/index.ts +0 -18
  211. package/src/components/View/View.tsx +0 -38
  212. package/src/components/View/index.ts +0 -6
  213. package/src/components/common/AppStatusBar.tsx +0 -57
  214. package/src/components/common/index.ts +0 -1
  215. package/src/components/index.ts +0 -30
  216. package/src/components/layout/SafeAreaWrapper.tsx +0 -50
  217. package/src/components/layout/index.ts +0 -6
  218. package/src/constants/dummySections.ts +0 -103
  219. package/src/hooks/Images/index.ts +0 -6
  220. package/src/hooks/Images/useImageLoader.ts +0 -209
  221. package/src/hooks/index.ts +0 -16
  222. package/src/hooks/useAdTracking.ts +0 -354
  223. package/src/hooks/useCards.ts +0 -247
  224. package/src/hooks/useDebounce.ts +0 -40
  225. package/src/hooks/useKeyboard.ts +0 -43
  226. package/src/hooks/useNavigationMode.ts +0 -48
  227. package/src/hooks/usePaginatedSection.ts +0 -108
  228. package/src/hooks/usePrevious.ts +0 -28
  229. package/src/hooks/useSafeCallback.ts +0 -29
  230. package/src/hooks/useSkeletonItems.ts +0 -30
  231. package/src/hooks/useSplashCache.ts +0 -245
  232. package/src/index.tsx +0 -9
  233. package/src/store/RecentSearchesStore.ts +0 -72
  234. package/src/store/splashStore.ts +0 -86
  235. package/src/store/storage.ts +0 -29
  236. package/src/theme/ThemeContext.ts +0 -19
  237. package/src/theme/ThemeProvider.tsx +0 -87
  238. package/src/theme/hooks/index.ts +0 -6
  239. package/src/theme/hooks/useTheme.ts +0 -118
  240. package/src/theme/index.ts +0 -8
  241. package/src/theme/store/theme.ts +0 -50
  242. package/src/theme/themes.ts +0 -262
  243. package/src/theme/utils/cleanColors.ts +0 -71
  244. package/src/theme/utils/toRgba.ts +0 -150
  245. package/src/types/content/content-view.types.ts +0 -209
  246. package/src/types/hook/index.ts +0 -6
  247. package/src/types/hook/usePaginatedSection.ts +0 -20
  248. package/src/types/index.ts +0 -10
  249. package/src/types/navigation.ts +0 -17
  250. package/src/types/sections/index.ts +0 -87
  251. package/src/types/user.ts +0 -18
  252. package/src/utils/Display.ts +0 -15
  253. package/src/utils/Formater.ts +0 -33
  254. package/src/utils/SizeMatters.ts +0 -8
  255. package/src/utils/Spacing.ts +0 -27
  256. package/src/utils/colorUtils.ts +0 -70
  257. package/src/utils/imageValidation.ts +0 -36
  258. package/src/utils/interaction.ts +0 -19
@@ -1,449 +0,0 @@
1
- /**
2
- * @author Naresh Dhamu
3
- * @LastModified Mon 13 Jul 2026 at 10:13 AM
4
- */
5
-
6
- import React, { useCallback, useMemo } from 'react';
7
- import {
8
- StyleSheet,
9
- View,
10
- Keyboard,
11
- type ViewStyle,
12
- type TextStyle,
13
- type StyleProp,
14
- } from 'react-native';
15
- import { SafeAreaView } from 'react-native-safe-area-context';
16
- import { useForm, Controller } from 'react-hook-form';
17
- import { scale, verticalScale } from 'react-native-size-matters';
18
- import { Input } from '../../../Input/Input';
19
- import { Button } from '../../../Button';
20
-
21
- import { Logo } from '../../../Logo/Logo';
22
- import TextButton from '../../../Button/TextButton';
23
- import { useTheme } from '../../../../theme';
24
- import HideKeyboard from '../../../Keyboard/HideKeyboard';
25
- import { useKeyboard } from '../../../../hooks/useKeyboard';
26
- import BackBtn from '../../../Button/BackBtn';
27
- import { Text } from '../../../Text';
28
- import type { ThemeOverride } from '../../../../theme/themes';
29
- import { RFValue } from 'react-native-responsive-fontsize';
30
- import { getResponsiveBottomSpacing } from '../../../../utils/Spacing';
31
- import { BackgroundLayout } from '../../../BackgroundLayout';
32
-
33
- type FormValues = {
34
- email: string;
35
- password: string;
36
- };
37
-
38
- type LoginWithEmailProps = {
39
- title: string;
40
- onSubmit?: (values: FormValues) => void;
41
- onSignup?: () => void;
42
- onForgotPassword?: () => void;
43
- onSwitchToPhoneLogin?: () => void;
44
- onTopBackBtnPress?: () => void;
45
- containerStyle?: StyleProp<ViewStyle>;
46
- titleStyle?: StyleProp<TextStyle>;
47
- formStyle?: StyleProp<ViewStyle>;
48
- inputStyle?: StyleProp<TextStyle>;
49
- topBackBtnStyle?: StyleProp<ViewStyle>;
50
- inputContainerStyle?: StyleProp<ViewStyle>;
51
- minPasswordLength?: number;
52
- backgroundImage?: {
53
- source?: string | null;
54
- };
55
- logoUri?: string;
56
- loadingSubmitBtn?: boolean;
57
-
58
- theme?: ThemeOverride;
59
- text?: {
60
- emailLabel?: string;
61
- emailPlaceholder?: string;
62
- passwordLabel?: string;
63
- passwordPlaceholder?: string;
64
- forgotPassword?: string;
65
- loadingSubmitBtnText?: string;
66
- loginButton?: string;
67
- signupPrompt?: string;
68
- signupLink?: string;
69
- switchToPhoneLogin?: string;
70
- };
71
- signupTextProps?: TextStyle;
72
- signupLinkTextProps?: TextStyle;
73
- renderLogo?: () => React.ReactNode;
74
- renderForgotPassword?: () => React.ReactNode;
75
- renderEmailHeader?: () => React.ReactNode;
76
- renderSignupPrompt?: (props: { onPress: () => void }) => React.ReactNode;
77
- renderSubmitButton?: (props: {
78
- onPress: () => void;
79
- disabled: boolean;
80
- loading: boolean;
81
- }) => React.ReactNode;
82
- renderSwitchToPhoneLogin?: (props: {
83
- onPress: () => void;
84
- }) => React.ReactNode;
85
- renderTopBackBtn?: (props: { onPress: () => void }) => React.ReactNode;
86
- };
87
-
88
- const LoginWithEmail: React.FC<LoginWithEmailProps> = React.memo(
89
- ({
90
- title = 'Login',
91
- onSubmit,
92
- onSignup,
93
- onForgotPassword,
94
- onSwitchToPhoneLogin,
95
- onTopBackBtnPress,
96
- containerStyle,
97
- titleStyle,
98
- formStyle,
99
- inputStyle,
100
- inputContainerStyle,
101
- loadingSubmitBtn,
102
- topBackBtnStyle,
103
- minPasswordLength = 6,
104
- backgroundImage,
105
- logoUri,
106
- theme: overrideTheme,
107
- text,
108
- signupTextProps,
109
- signupLinkTextProps,
110
- renderLogo,
111
- renderForgotPassword,
112
- renderEmailHeader,
113
- renderSignupPrompt,
114
- renderSubmitButton,
115
- renderSwitchToPhoneLogin,
116
- renderTopBackBtn,
117
- }) => {
118
- const { isKeyboardOpen } = useKeyboard();
119
- const { theme: resolvedTheme } = useTheme(overrideTheme);
120
- const [isLoading, setIsLoading] = React.useState(false);
121
- const {
122
- control,
123
- handleSubmit,
124
- formState: { errors, isValid, touchedFields },
125
- } = useForm<FormValues>({
126
- defaultValues: { email: '', password: '' },
127
- mode: 'onChange',
128
- });
129
-
130
- const handleFormSubmit = useCallback(
131
- async (data: FormValues) => {
132
- if (!onSubmit) return;
133
- setIsLoading(true);
134
- try {
135
- await onSubmit(data);
136
- } catch (error) {
137
- console.error('Form submission error:', error);
138
- } finally {
139
- setIsLoading(false);
140
- }
141
- },
142
- [onSubmit]
143
- );
144
-
145
- const handleKeyboardDismiss = useCallback((callback?: () => void) => {
146
- Keyboard.dismiss();
147
- requestAnimationFrame(() => callback?.());
148
- }, []);
149
-
150
- const shouldRender = useMemo(
151
- () =>
152
- (condition?: boolean | unknown): boolean =>
153
- typeof condition === 'function' || !!condition,
154
- []
155
- );
156
-
157
- // Memoize gradient split background
158
- const gradientSplitBackground = useMemo(
159
- () => (isKeyboardOpen ? 0.31 : 0.35),
160
- [isKeyboardOpen]
161
- );
162
-
163
- // Memoize disabled state
164
- const isDisabled = useMemo(
165
- () => loadingSubmitBtn || isLoading,
166
- [loadingSubmitBtn, isLoading]
167
- );
168
-
169
- return (
170
- <BackgroundLayout.One
171
- backgroundImage={backgroundImage?.source}
172
- theme={overrideTheme}
173
- gradientSplitBackground={gradientSplitBackground}
174
- >
175
- <SafeAreaView style={styles.safeArea}>
176
- {shouldRender(renderTopBackBtn || onTopBackBtnPress) && (
177
- <View style={styles.topBackBtnWrapper}>
178
- {renderTopBackBtn ? (
179
- renderTopBackBtn({
180
- onPress: onTopBackBtnPress ?? (() => {}),
181
- })
182
- ) : (
183
- <BackBtn
184
- theme={overrideTheme}
185
- style={topBackBtnStyle}
186
- onPress={onTopBackBtnPress}
187
- />
188
- )}
189
- </View>
190
- )}
191
- <View style={[styles.container, containerStyle]}>
192
- <HideKeyboard>
193
- <View style={styles.centerContent}>
194
- {renderLogo ? (
195
- renderLogo()
196
- ) : logoUri ? (
197
- <Logo logoUri={logoUri} width={100} height={100} />
198
- ) : null}
199
-
200
- {renderEmailHeader ? (
201
- renderEmailHeader()
202
- ) : (
203
- <Text style={[styles.title, titleStyle]}>{title}</Text>
204
- )}
205
-
206
- <View style={[styles.form, formStyle]}>
207
- <Controller
208
- control={control}
209
- name="email"
210
- rules={{
211
- required: 'Email is required',
212
- pattern: {
213
- value: /^\S+@\S+\.\S+$/,
214
- message: 'Enter a valid email address',
215
- },
216
- }}
217
- render={({ field: { onChange, onBlur, value } }) => (
218
- <Input.One
219
- label={text?.emailLabel || 'Email'}
220
- placeholder={text?.emailPlaceholder || 'Email'}
221
- value={value}
222
- onChangeText={(inputText) => {
223
- const sanitized = inputText.replace(
224
- /[^\w@.\-+]/g,
225
- ''
226
- );
227
- onChange(sanitized);
228
- }}
229
- onBlur={onBlur}
230
- disabled={isDisabled}
231
- error={!!touchedFields.email && !!errors.email}
232
- errorMessage={errors.email?.message}
233
- inputStyle={inputStyle}
234
- containerStyle={inputContainerStyle}
235
- theme={overrideTheme}
236
- textContentType="emailAddress"
237
- autoCapitalize="none"
238
- keyboardType="email-address"
239
- autoCorrect={false}
240
- />
241
- )}
242
- />
243
-
244
- <Controller
245
- control={control}
246
- name="password"
247
- rules={{
248
- required: 'Password is required',
249
- minLength: {
250
- value: minPasswordLength,
251
- message: `Password must be at least ${minPasswordLength} characters`,
252
- },
253
- }}
254
- render={({ field: { onChange, onBlur, value } }) => (
255
- <>
256
- <Input.One
257
- label={text?.passwordLabel || 'Password'}
258
- placeholder={text?.passwordPlaceholder || 'Password'}
259
- value={value}
260
- secureTextEntry
261
- onChangeText={onChange}
262
- onBlur={onBlur}
263
- disabled={isDisabled}
264
- error={!!touchedFields.password && !!errors.password}
265
- errorMessage={errors.password?.message}
266
- inputStyle={inputStyle}
267
- containerStyle={inputContainerStyle}
268
- textContentType="none"
269
- autoCapitalize="none"
270
- spellCheck={false}
271
- autoCorrect={false}
272
- autoComplete="off"
273
- theme={overrideTheme}
274
- />
275
- {!isKeyboardOpen &&
276
- shouldRender(
277
- renderForgotPassword || onForgotPassword
278
- ) &&
279
- (renderForgotPassword ? (
280
- renderForgotPassword()
281
- ) : (
282
- <TextButton
283
- title={text?.forgotPassword || 'Forgot password?'}
284
- onPress={() =>
285
- handleKeyboardDismiss(onForgotPassword)
286
- }
287
- color={resolvedTheme.colors.button}
288
- align="right"
289
- style={styles.forgotPasswordText}
290
- />
291
- ))}
292
- </>
293
- )}
294
- />
295
-
296
- {!isKeyboardOpen &&
297
- (renderSubmitButton ? (
298
- renderSubmitButton({
299
- onPress: handleSubmit(handleFormSubmit),
300
- disabled: loadingSubmitBtn || !isValid || isLoading,
301
- loading: loadingSubmitBtn || isLoading,
302
- })
303
- ) : (
304
- <Button.Primary
305
- title={text?.loginButton || 'Login'}
306
- onPress={handleSubmit(handleFormSubmit)}
307
- disabled={isDisabled || !isValid}
308
- theme={overrideTheme}
309
- titleStyle={{
310
- fontSize: RFValue(14),
311
- }}
312
- loadingText={
313
- text?.loadingSubmitBtnText || 'Logging in...'
314
- }
315
- loading={isDisabled}
316
- />
317
- ))}
318
- </View>
319
-
320
- {!isKeyboardOpen &&
321
- shouldRender(
322
- onSwitchToPhoneLogin || renderSwitchToPhoneLogin
323
- ) &&
324
- (renderSwitchToPhoneLogin ? (
325
- renderSwitchToPhoneLogin({
326
- onPress: () =>
327
- handleKeyboardDismiss(onSwitchToPhoneLogin),
328
- })
329
- ) : (
330
- <TextButton
331
- title={text?.switchToPhoneLogin || 'Login with Phone'}
332
- onPress={() =>
333
- handleKeyboardDismiss(onSwitchToPhoneLogin)
334
- }
335
- color={resolvedTheme.colors.button}
336
- style={styles.switchPhoneText}
337
- underline
338
- bold
339
- align="center"
340
- />
341
- ))}
342
- </View>
343
-
344
- {!isKeyboardOpen &&
345
- shouldRender(onSignup || renderSignupPrompt) && (
346
- <View
347
- style={[
348
- styles.signupContainer,
349
- {
350
- bottom: getResponsiveBottomSpacing(35),
351
- },
352
- ]}
353
- >
354
- {renderSignupPrompt ? (
355
- renderSignupPrompt({
356
- onPress: () => handleKeyboardDismiss(onSignup),
357
- })
358
- ) : (
359
- <View style={styles.loginRow}>
360
- <Text
361
- style={[styles.loginPrompt, signupTextProps]}
362
- color={resolvedTheme.colors.textPrimary}
363
- >
364
- {text?.signupPrompt || `Don't have an account?`}
365
- </Text>
366
- <TextButton
367
- title={text?.signupLink || 'Sign Up'}
368
- onPress={() => handleKeyboardDismiss(onSignup)}
369
- bold
370
- underline
371
- align="center"
372
- color={resolvedTheme.colors.button}
373
- style={signupLinkTextProps}
374
- />
375
- </View>
376
- )}
377
- </View>
378
- )}
379
- </HideKeyboard>
380
- </View>
381
- </SafeAreaView>
382
- </BackgroundLayout.One>
383
- );
384
- }
385
- );
386
-
387
- export default LoginWithEmail;
388
-
389
- const styles = StyleSheet.create({
390
- safeArea: {
391
- flex: 1,
392
- width: '100%',
393
- paddingBottom: verticalScale(12),
394
- },
395
- container: {
396
- flex: 1,
397
- width: '100%',
398
- paddingHorizontal: scale(16),
399
- justifyContent: 'center',
400
- alignItems: 'center',
401
- },
402
- topBackBtnWrapper: {
403
- position: 'absolute',
404
- top: verticalScale(6),
405
- left: 0,
406
- zIndex: 10,
407
- },
408
- centerContent: {
409
- flex: 1,
410
- width: '100%',
411
- alignItems: 'center',
412
- justifyContent: 'center',
413
- },
414
- title: {
415
- fontSize: RFValue(21),
416
- fontWeight: '700',
417
- marginTop: verticalScale(5),
418
- marginBottom: verticalScale(20),
419
- },
420
- form: {
421
- width: '100%',
422
- gap: verticalScale(10),
423
- },
424
- forgotPasswordText: {
425
- textAlign: 'right',
426
- marginRight: scale(4),
427
- marginTop: -verticalScale(10),
428
- marginBottom: verticalScale(8),
429
- },
430
- switchPhoneText: {
431
- marginTop: verticalScale(10),
432
- },
433
- signupContainer: {
434
- position: 'absolute',
435
- left: 0,
436
- right: 0,
437
- alignItems: 'center',
438
- },
439
- loginRow: {
440
- flexDirection: 'row',
441
- justifyContent: 'center',
442
- alignItems: 'center',
443
- flexWrap: 'wrap',
444
- },
445
- loginPrompt: {
446
- textAlign: 'center',
447
- marginRight: 4,
448
- },
449
- });