create-gufran-expo-app 2.0.0 → 2.0.1

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 (266) hide show
  1. package/lib/createApp.js +7 -2
  2. package/package.json +1 -1
  3. package/template/App.tsx +118 -0
  4. package/template/ReactotronConfig.js +5 -0
  5. package/template/android/app/build.gradle +184 -0
  6. package/template/android/app/debug.keystore +0 -0
  7. package/template/android/app/google-services.json +29 -0
  8. package/template/android/app/proguard-rules.pro +14 -0
  9. package/template/android/app/src/debug/AndroidManifest.xml +7 -0
  10. package/template/android/app/src/debugOptimized/AndroidManifest.xml +7 -0
  11. package/template/android/app/src/main/AndroidManifest.xml +28 -0
  12. package/template/android/app/src/main/assets/fonts/Outfit-Bold.ttf +0 -0
  13. package/template/android/app/src/main/assets/fonts/Outfit-Light.ttf +0 -0
  14. package/template/android/app/src/main/assets/fonts/Outfit-Medium.ttf +0 -0
  15. package/template/android/app/src/main/assets/fonts/Outfit-Regular.ttf +0 -0
  16. package/template/android/app/src/main/assets/fonts/Outfit-SemiBold.ttf +0 -0
  17. package/template/android/app/src/main/java/com/club/yakka/MainActivity.kt +61 -0
  18. package/template/android/app/src/main/java/com/club/yakka/MainApplication.kt +60 -0
  19. package/template/android/app/src/main/res/drawable/ic_launcher_background.xml +6 -0
  20. package/template/android/app/src/main/res/drawable/rn_edit_text_material.xml +37 -0
  21. package/template/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png +0 -0
  22. package/template/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png +0 -0
  23. package/template/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png +0 -0
  24. package/template/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png +0 -0
  25. package/template/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png +0 -0
  26. package/template/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +5 -0
  27. package/template/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +5 -0
  28. package/template/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp +0 -0
  29. package/template/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp +0 -0
  30. package/template/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp +0 -0
  31. package/template/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp +0 -0
  32. package/template/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp +0 -0
  33. package/template/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp +0 -0
  34. package/template/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp +0 -0
  35. package/template/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp +0 -0
  36. package/template/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp +0 -0
  37. package/template/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp +0 -0
  38. package/template/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp +0 -0
  39. package/template/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp +0 -0
  40. package/template/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp +0 -0
  41. package/template/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp +0 -0
  42. package/template/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp +0 -0
  43. package/template/android/app/src/main/res/values/colors.xml +6 -0
  44. package/template/android/app/src/main/res/values/strings.xml +5 -0
  45. package/template/android/app/src/main/res/values/styles.xml +14 -0
  46. package/template/android/app/src/main/res/values-night/colors.xml +1 -0
  47. package/template/android/build.gradle +33 -0
  48. package/template/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  49. package/template/android/gradle/wrapper/gradle-wrapper.properties +7 -0
  50. package/template/android/gradle.properties +65 -0
  51. package/template/android/gradlew +251 -0
  52. package/template/android/gradlew.bat +94 -0
  53. package/template/android/settings.gradle +39 -0
  54. package/template/app.json +69 -0
  55. package/template/assets/adaptive-icon.png +0 -0
  56. package/template/assets/adaptive-icon1.png +0 -0
  57. package/template/assets/app_icon.png +0 -0
  58. package/template/assets/favicon.png +0 -0
  59. package/template/assets/icon.png +0 -0
  60. package/template/assets/splash-icon.png +0 -0
  61. package/template/babel-plugin-disable-font-scaling.js +41 -0
  62. package/template/babel.config.js +28 -0
  63. package/template/firebase.json +5 -0
  64. package/template/index.ts +24 -0
  65. package/template/ios/.xcode.env +11 -0
  66. package/template/ios/ClubYakka/AppDelegate.swift +74 -0
  67. package/template/ios/ClubYakka/ClubYakka-Bridging-Header.h +3 -0
  68. package/template/ios/ClubYakka/ClubYakka.entitlements +8 -0
  69. package/template/ios/ClubYakka/GoogleService-Info.plist +30 -0
  70. package/template/ios/ClubYakka/Images.xcassets/AppIcon.appiconset/App-Icon-1024x1024@1x.png +0 -0
  71. package/template/ios/ClubYakka/Images.xcassets/AppIcon.appiconset/Contents.json +14 -0
  72. package/template/ios/ClubYakka/Images.xcassets/Contents.json +6 -0
  73. package/template/ios/ClubYakka/Images.xcassets/SplashScreenBackground.colorset/Contents.json +20 -0
  74. package/template/ios/ClubYakka/Images.xcassets/SplashScreenLegacy.imageset/Contents.json +23 -0
  75. package/template/ios/ClubYakka/Images.xcassets/SplashScreenLegacy.imageset/image.png +0 -0
  76. package/template/ios/ClubYakka/Images.xcassets/SplashScreenLegacy.imageset/image@2x.png +0 -0
  77. package/template/ios/ClubYakka/Images.xcassets/SplashScreenLegacy.imageset/image@3x.png +0 -0
  78. package/template/ios/ClubYakka/Info.plist +101 -0
  79. package/template/ios/ClubYakka/PrivacyInfo.xcprivacy +50 -0
  80. package/template/ios/ClubYakka/SplashScreen.storyboard +48 -0
  81. package/template/ios/ClubYakka/Supporting/Expo.plist +12 -0
  82. package/template/ios/ClubYakka.xcodeproj/project.pbxproj +669 -0
  83. package/template/ios/ClubYakka.xcodeproj/xcshareddata/xcschemes/ClubYakka.xcscheme +88 -0
  84. package/template/ios/ClubYakka.xcworkspace/contents.xcworkspacedata +10 -0
  85. package/template/ios/ClubYakka.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +5 -0
  86. package/template/ios/Podfile +84 -0
  87. package/template/ios/Podfile.lock +2698 -0
  88. package/template/ios/Podfile.properties.json +8 -0
  89. package/template/metro.config.js +17 -0
  90. package/template/package.json +70 -0
  91. package/template/patches/react-native-background-upload+6.6.0.patch +704 -0
  92. package/template/react-native.config.js +7 -0
  93. package/template/src/assets/fonts/Outfit-Bold.ttf +0 -0
  94. package/template/src/assets/fonts/Outfit-Light.ttf +0 -0
  95. package/template/src/assets/fonts/Outfit-Medium.ttf +0 -0
  96. package/template/src/assets/fonts/Outfit-Regular.ttf +0 -0
  97. package/template/src/assets/fonts/Outfit-SemiBold.ttf +0 -0
  98. package/template/src/assets/icons/BG.svg +33 -0
  99. package/template/src/assets/icons/Ic_Users.svg +6 -0
  100. package/template/src/assets/icons/arrow-left-white.svg +4 -0
  101. package/template/src/assets/icons/arrow-left.svg +4 -0
  102. package/template/src/assets/icons/bell.svg +4 -0
  103. package/template/src/assets/icons/bottomSheetIcone.svg +3 -0
  104. package/template/src/assets/icons/call.svg +4 -0
  105. package/template/src/assets/icons/camera.svg +0 -0
  106. package/template/src/assets/icons/chatAppleGreenBG.svg +22 -0
  107. package/template/src/assets/icons/check.svg +4 -0
  108. package/template/src/assets/icons/check_Radio.svg +4 -0
  109. package/template/src/assets/icons/chevron-right.svg +3 -0
  110. package/template/src/assets/icons/clubDefauldImage.png +0 -0
  111. package/template/src/assets/icons/curvBackgroundView.svg +3 -0
  112. package/template/src/assets/icons/defaultClub.png +0 -0
  113. package/template/src/assets/icons/email.svg +3 -0
  114. package/template/src/assets/icons/emptyUser.svg +5 -0
  115. package/template/src/assets/icons/eye-Hide.svg +8 -0
  116. package/template/src/assets/icons/eye.svg +4 -0
  117. package/template/src/assets/icons/gallery.svg +4 -0
  118. package/template/src/assets/icons/home.svg +4 -0
  119. package/template/src/assets/icons/ic_Calendar.svg +14 -0
  120. package/template/src/assets/icons/ic_Calendar_blue.svg +12 -0
  121. package/template/src/assets/icons/ic_Calendar_white.svg +12 -0
  122. package/template/src/assets/icons/ic_Chat.svg +14 -0
  123. package/template/src/assets/icons/ic_ChatAppleGreen.svg +21 -0
  124. package/template/src/assets/icons/ic_ChatAppleWhite.svg +21 -0
  125. package/template/src/assets/icons/ic_Download.svg +6 -0
  126. package/template/src/assets/icons/ic_Events.svg +6 -0
  127. package/template/src/assets/icons/ic_HeadCoachIcon.svg +3 -0
  128. package/template/src/assets/icons/ic_Membership.svg +10 -0
  129. package/template/src/assets/icons/ic_Notification.svg +6 -0
  130. package/template/src/assets/icons/ic_Raffles.svg +14 -0
  131. package/template/src/assets/icons/ic_Referral_Members.svg +12 -0
  132. package/template/src/assets/icons/ic_Shop.svg +13 -0
  133. package/template/src/assets/icons/ic_Teams.svg +8 -0
  134. package/template/src/assets/icons/ic_Volunteer.svg +9 -0
  135. package/template/src/assets/icons/ic_add.svg +3 -0
  136. package/template/src/assets/icons/ic_addCircle.svg +5 -0
  137. package/template/src/assets/icons/ic_chatSend.svg +4 -0
  138. package/template/src/assets/icons/ic_chat_blue_bg.svg +22 -0
  139. package/template/src/assets/icons/ic_clock_blue.svg +4 -0
  140. package/template/src/assets/icons/ic_delete.svg +8 -0
  141. package/template/src/assets/icons/ic_more.svg +5 -0
  142. package/template/src/assets/icons/ic_mute.svg +10 -0
  143. package/template/src/assets/icons/ic_pdf.svg +3 -0
  144. package/template/src/assets/icons/ic_pending_AppleGreen.svg +11 -0
  145. package/template/src/assets/icons/ic_right_appleGreen.svg +11 -0
  146. package/template/src/assets/icons/ic_unread_chat_blue_bg.svg +23 -0
  147. package/template/src/assets/icons/ic_volunteer_Member.svg +8 -0
  148. package/template/src/assets/icons/index.ts +144 -0
  149. package/template/src/assets/icons/location-blue.svg +4 -0
  150. package/template/src/assets/icons/location-white.svg +4 -0
  151. package/template/src/assets/icons/location.svg +4 -0
  152. package/template/src/assets/icons/lock.svg +5 -0
  153. package/template/src/assets/icons/log-out.svg +5 -0
  154. package/template/src/assets/icons/login_logo.svg +9 -0
  155. package/template/src/assets/icons/mail.svg +4 -0
  156. package/template/src/assets/icons/or_saprater.svg +5 -0
  157. package/template/src/assets/icons/password.svg +4 -0
  158. package/template/src/assets/icons/profile-appleGreen.svg +6 -0
  159. package/template/src/assets/icons/search.svg +3 -0
  160. package/template/src/assets/icons/settings.svg +4 -0
  161. package/template/src/assets/icons/success.svg +4 -0
  162. package/template/src/assets/icons/unCheck_Radio.svg +3 -0
  163. package/template/src/assets/icons/uncheck.svg +3 -0
  164. package/template/src/assets/icons/upload_Image.svg +6 -0
  165. package/template/src/assets/icons/upload_Image_Member.svg +6 -0
  166. package/template/src/assets/icons/user.svg +4 -0
  167. package/template/src/assets/icons/wifi.svg +1 -0
  168. package/template/src/assets/images/Splash.png +0 -0
  169. package/template/src/assets/images/SplashLogo.png +0 -0
  170. package/template/src/assets/images/background.png +0 -0
  171. package/template/src/assets/images/clubDefauldImage.png +0 -0
  172. package/template/src/assets/images/index.tsx +9 -0
  173. package/template/src/assets/index.ts +1 -0
  174. package/template/src/components/common/AddMemberModal.tsx +543 -0
  175. package/template/src/components/common/AppLoader.tsx +91 -0
  176. package/template/src/components/common/Button.tsx +173 -0
  177. package/template/src/components/common/ClubCard.tsx +248 -0
  178. package/template/src/components/common/Icon.tsx +93 -0
  179. package/template/src/components/common/IconAlt.tsx +65 -0
  180. package/template/src/components/common/IconButton.tsx +92 -0
  181. package/template/src/components/common/ImagePicker.tsx +451 -0
  182. package/template/src/components/common/LoadingSpinner.tsx +30 -0
  183. package/template/src/components/common/OTPInput.tsx +128 -0
  184. package/template/src/components/common/ReminderCalendar.tsx +129 -0
  185. package/template/src/components/common/ReminderCardItem.tsx +91 -0
  186. package/template/src/components/common/SafeAreaWrapper.tsx +27 -0
  187. package/template/src/components/common/SetReminderModal.tsx +308 -0
  188. package/template/src/components/common/SlowInternet.js +57 -0
  189. package/template/src/components/common/TeamCard.tsx +297 -0
  190. package/template/src/components/common/TextInput.tsx +227 -0
  191. package/template/src/components/common/ToastConfig.tsx +103 -0
  192. package/template/src/components/common/ToastManager.ts +86 -0
  193. package/template/src/components/common/UploadProgressModal.tsx +284 -0
  194. package/template/src/components/common/WrapperContainer.tsx +39 -0
  195. package/template/src/components/common/index.ts +19 -0
  196. package/template/src/constants/Constants.tsx +7 -0
  197. package/template/src/constants/Fonts.tsx +30 -0
  198. package/template/src/constants/index.ts +45 -0
  199. package/template/src/constants/strings.ts +211 -0
  200. package/template/src/constants/theme.ts +72 -0
  201. package/template/src/contexts/AuthContext.tsx +268 -0
  202. package/template/src/contexts/index.ts +2 -0
  203. package/template/src/hooks/index.ts +3 -0
  204. package/template/src/hooks/useImageUpload.ts +199 -0
  205. package/template/src/index.ts +8 -0
  206. package/template/src/navigation/AuthStack.tsx +67 -0
  207. package/template/src/navigation/MainStack.tsx +183 -0
  208. package/template/src/navigation/MiddleStack.tsx +35 -0
  209. package/template/src/navigation/RootNavigator.tsx +101 -0
  210. package/template/src/navigation/index.ts +5 -0
  211. package/template/src/navigation/navigationRef.ts +5 -0
  212. package/template/src/providers/QueryProvider.tsx +30 -0
  213. package/template/src/screens/DetailsScreen.tsx +271 -0
  214. package/template/src/screens/HomeScreen.tsx +736 -0
  215. package/template/src/screens/ProfileScreen.tsx +202 -0
  216. package/template/src/screens/SettingsScreen.tsx +253 -0
  217. package/template/src/screens/SportHubScreen.tsx +280 -0
  218. package/template/src/screens/auth/AddMamber.tsx +428 -0
  219. package/template/src/screens/auth/ForgotPasswordScreen.tsx +176 -0
  220. package/template/src/screens/auth/LoginScreen.tsx +286 -0
  221. package/template/src/screens/auth/OTPVerifyScreen.tsx +359 -0
  222. package/template/src/screens/auth/RegisterScreen.tsx +430 -0
  223. package/template/src/screens/auth/SuccessScreen.tsx +201 -0
  224. package/template/src/screens/auth/WalcomeScreen.tsx +274 -0
  225. package/template/src/screens/auth/index.ts +8 -0
  226. package/template/src/screens/chat/ChatScreen.tsx +1819 -0
  227. package/template/src/screens/chat/ChatThreadsScreen.tsx +360 -0
  228. package/template/src/screens/chat/ReportMessageScreen.tsx +238 -0
  229. package/template/src/screens/clubs/Announcements.tsx +426 -0
  230. package/template/src/screens/clubs/BuyRaffleTicketsScreen.tsx +568 -0
  231. package/template/src/screens/clubs/ClubDeteils.tsx +497 -0
  232. package/template/src/screens/clubs/JoinClub.tsx +841 -0
  233. package/template/src/screens/events/EventScreen.tsx +460 -0
  234. package/template/src/screens/index.ts +42 -0
  235. package/template/src/screens/raffles/MyReferralMembersScreen.tsx +758 -0
  236. package/template/src/screens/raffles/RaffleDetailsScreen.tsx +762 -0
  237. package/template/src/screens/raffles/RafflesScreen.tsx +495 -0
  238. package/template/src/screens/raffles/SetRaffleReminderScreen.tsx +390 -0
  239. package/template/src/screens/teams/JoinTeamScreen.tsx +464 -0
  240. package/template/src/screens/teams/MyTeamDetailsScreen.tsx +979 -0
  241. package/template/src/screens/teams/MyTeamScreen.tsx +568 -0
  242. package/template/src/screens/teams/PendingRequestsScreen.tsx +426 -0
  243. package/template/src/screens/volunteerOpportunities/SetReminderScreen.tsx +631 -0
  244. package/template/src/screens/volunteerOpportunities/VolunteerOpportunitiesDetailsScreen.tsx +1049 -0
  245. package/template/src/screens/volunteerOpportunities/VolunteerOpportunitiesScreen.tsx +608 -0
  246. package/template/src/services/api.ts +167 -0
  247. package/template/src/services/authService.ts +422 -0
  248. package/template/src/services/index.ts +5 -0
  249. package/template/src/services/mainServices.ts +1963 -0
  250. package/template/src/stores/authStore.ts +159 -0
  251. package/template/src/stores/index.ts +2 -0
  252. package/template/src/types/index.ts +85 -0
  253. package/template/src/types/navigation.ts +206 -0
  254. package/template/src/utils/AzureUploaderService.ts +371 -0
  255. package/template/src/utils/ClubSearchManager.ts +222 -0
  256. package/template/src/utils/NotificationManager.ts +503 -0
  257. package/template/src/utils/UploadDebugUtil.ts +107 -0
  258. package/template/src/utils/imagePicker.ts +321 -0
  259. package/template/src/utils/index.ts +111 -0
  260. package/template/src/utils/permissions.ts +277 -0
  261. package/template/src/utils/scaling.ts +14 -0
  262. package/template/src/utils/storage.ts +247 -0
  263. package/template/src/utils/usePermissions.ts +275 -0
  264. package/template/src/utils/validation.ts +340 -0
  265. package/template/tsconfig.json +50 -0
  266. package/template/types/svg.d.ts +6 -0
@@ -0,0 +1,284 @@
1
+ import React from 'react';
2
+ import {
3
+ View,
4
+ Text,
5
+ StyleSheet,
6
+ Modal,
7
+ TouchableOpacity,
8
+ ActivityIndicator,
9
+ } from 'react-native';
10
+ import { moderateScale, verticalScale } from '../../utils/scaling';
11
+ import { theme } from '../../constants';
12
+ import { Fonts } from '../../constants/Fonts';
13
+
14
+ interface UploadProgressModalProps {
15
+ visible: boolean;
16
+ progress: number;
17
+ isUploading: boolean;
18
+ isRetrying: boolean;
19
+ retryCount: number;
20
+ error: string | null;
21
+ onRetry?: () => void;
22
+ onCancel?: () => void;
23
+ onDismiss?: () => void;
24
+ }
25
+
26
+ export const UploadProgressModal: React.FC<UploadProgressModalProps> = ({
27
+ visible,
28
+ progress,
29
+ isUploading,
30
+ isRetrying,
31
+ retryCount,
32
+ error,
33
+ onRetry,
34
+ onCancel,
35
+ onDismiss,
36
+ }) => {
37
+ const getStatusText = () => {
38
+ if (error) {
39
+ return 'Upload Failed';
40
+ }
41
+ if (isRetrying) {
42
+ return `Retrying... (${retryCount})`;
43
+ }
44
+ if (isUploading) {
45
+ return 'Uploading...';
46
+ }
47
+ return 'Upload Complete';
48
+ };
49
+
50
+ const getStatusColor = () => {
51
+ if (error) {
52
+ return theme.colors.error;
53
+ }
54
+ if (isRetrying) {
55
+ return theme.colors.warning;
56
+ }
57
+ if (isUploading) {
58
+ return theme.colors.primary;
59
+ }
60
+ return theme.colors.success;
61
+ };
62
+
63
+ return (
64
+ <Modal
65
+ visible={visible}
66
+ transparent
67
+ animationType="fade"
68
+ onRequestClose={onDismiss}
69
+ >
70
+ <View style={styles.overlay}>
71
+ <View style={styles.container}>
72
+ <View style={styles.header}>
73
+ <Text style={styles.title}>Image Upload</Text>
74
+ <TouchableOpacity onPress={onDismiss} style={styles.closeButton}>
75
+ <Text style={styles.closeButtonText}>×</Text>
76
+ </TouchableOpacity>
77
+ </View>
78
+
79
+ <View style={styles.content}>
80
+ {/* Status Icon */}
81
+ <View style={styles.statusContainer}>
82
+ {isUploading || isRetrying ? (
83
+ <ActivityIndicator
84
+ size="large"
85
+ color={getStatusColor()}
86
+ />
87
+ ) : error ? (
88
+ <Text style={styles.errorIcon}>⚠️</Text>
89
+ ) : (
90
+ <Text style={styles.successIcon}>✓</Text>
91
+ )}
92
+ </View>
93
+
94
+ {/* Status Text */}
95
+ <Text style={[styles.statusText, { color: getStatusColor() }]}>
96
+ {getStatusText()}
97
+ </Text>
98
+
99
+ {/* Progress Bar */}
100
+ {(isUploading || isRetrying) && (
101
+ <View style={styles.progressContainer}>
102
+ <View style={styles.progressBar}>
103
+ <View
104
+ style={[
105
+ styles.progressFill,
106
+ { width: `${progress}%` }
107
+ ]}
108
+ />
109
+ </View>
110
+ <Text style={styles.progressText}>{Math.round(progress)}%</Text>
111
+ </View>
112
+ )}
113
+
114
+ {/* Error Message */}
115
+ {error && (
116
+ <View style={styles.errorContainer}>
117
+ <Text style={styles.errorText}>{error}</Text>
118
+ </View>
119
+ )}
120
+
121
+ {/* Action Buttons */}
122
+ <View style={styles.buttonContainer}>
123
+ {error && onRetry && (
124
+ <TouchableOpacity
125
+ style={[styles.button, styles.retryButton]}
126
+ onPress={onRetry}
127
+ >
128
+ <Text style={styles.retryButtonText}>Retry</Text>
129
+ </TouchableOpacity>
130
+ )}
131
+
132
+ {(isUploading || isRetrying) && onCancel && (
133
+ <TouchableOpacity
134
+ style={[styles.button, styles.cancelButton]}
135
+ onPress={onCancel}
136
+ >
137
+ <Text style={styles.cancelButtonText}>Cancel</Text>
138
+ </TouchableOpacity>
139
+ )}
140
+
141
+ {!isUploading && !isRetrying && (
142
+ <TouchableOpacity
143
+ style={[styles.button, styles.doneButton]}
144
+ onPress={onDismiss}
145
+ >
146
+ <Text style={styles.doneButtonText}>Done</Text>
147
+ </TouchableOpacity>
148
+ )}
149
+ </View>
150
+ </View>
151
+ </View>
152
+ </View>
153
+ </Modal>
154
+ );
155
+ };
156
+
157
+ const styles = StyleSheet.create({
158
+ overlay: {
159
+ flex: 1,
160
+ backgroundColor: 'rgba(0, 0, 0, 0.5)',
161
+ justifyContent: 'center',
162
+ alignItems: 'center',
163
+ padding: theme.spacing.lg,
164
+ },
165
+ container: {
166
+ backgroundColor: theme.colors.background,
167
+ borderRadius: moderateScale(16),
168
+ width: '100%',
169
+ maxWidth: moderateScale(400),
170
+ maxHeight: '80%',
171
+ },
172
+ header: {
173
+ flexDirection: 'row',
174
+ justifyContent: 'space-between',
175
+ alignItems: 'center',
176
+ padding: theme.spacing.lg,
177
+ borderBottomWidth: 1,
178
+ borderBottomColor: theme.colors.border,
179
+ },
180
+ title: {
181
+ fontFamily: Fonts.outfitSemiBold,
182
+ fontSize: moderateScale(18),
183
+ color: theme.colors.text,
184
+ },
185
+ closeButton: {
186
+ padding: theme.spacing.xs,
187
+ },
188
+ closeButtonText: {
189
+ fontSize: moderateScale(24),
190
+ color: theme.colors.text,
191
+ fontWeight: 'bold',
192
+ },
193
+ content: {
194
+ padding: theme.spacing.lg,
195
+ alignItems: 'center',
196
+ },
197
+ statusContainer: {
198
+ marginBottom: theme.spacing.lg,
199
+ },
200
+ errorIcon: {
201
+ fontSize: moderateScale(48),
202
+ color: theme.colors.error,
203
+ },
204
+ successIcon: {
205
+ fontSize: moderateScale(48),
206
+ color: theme.colors.success,
207
+ },
208
+ statusText: {
209
+ fontFamily: Fonts.outfitMedium,
210
+ fontSize: moderateScale(16),
211
+ marginBottom: theme.spacing.lg,
212
+ textAlign: 'center',
213
+ },
214
+ progressContainer: {
215
+ width: '100%',
216
+ marginBottom: theme.spacing.lg,
217
+ },
218
+ progressBar: {
219
+ height: moderateScale(8),
220
+ backgroundColor: theme.colors.border,
221
+ borderRadius: moderateScale(4),
222
+ overflow: 'hidden',
223
+ marginBottom: theme.spacing.sm,
224
+ },
225
+ progressFill: {
226
+ height: '100%',
227
+ backgroundColor: theme.colors.white,
228
+ borderRadius: moderateScale(4),
229
+ },
230
+ progressText: {
231
+ fontFamily: Fonts.outfitRegular,
232
+ fontSize: moderateScale(14),
233
+ color: theme.colors.textSecondary,
234
+ textAlign: 'center',
235
+ },
236
+ errorContainer: {
237
+ backgroundColor: "red",
238
+ padding: theme.spacing.md,
239
+ borderRadius: moderateScale(8),
240
+ marginBottom: theme.spacing.lg,
241
+ width: '100%',
242
+ },
243
+ errorText: {
244
+ fontFamily: Fonts.outfitRegular,
245
+ fontSize: moderateScale(14),
246
+ color: theme.colors.error,
247
+ textAlign: 'center',
248
+ },
249
+ buttonContainer: {
250
+ flexDirection: 'row',
251
+ gap: theme.spacing.md,
252
+ width: '100%',
253
+ },
254
+ button: {
255
+ flex: 1,
256
+ paddingVertical: theme.spacing.md,
257
+ borderRadius: moderateScale(8),
258
+ alignItems: 'center',
259
+ },
260
+ retryButton: {
261
+ backgroundColor: theme.colors.primary,
262
+ },
263
+ retryButtonText: {
264
+ fontFamily: Fonts.outfitMedium,
265
+ fontSize: moderateScale(16),
266
+ color: theme.colors.background,
267
+ },
268
+ cancelButton: {
269
+ backgroundColor: theme.colors.border,
270
+ },
271
+ cancelButtonText: {
272
+ fontFamily: Fonts.outfitMedium,
273
+ fontSize: moderateScale(16),
274
+ color: theme.colors.text,
275
+ },
276
+ doneButton: {
277
+ backgroundColor: theme.colors.success,
278
+ },
279
+ doneButtonText: {
280
+ fontFamily: Fonts.outfitMedium,
281
+ fontSize: moderateScale(16),
282
+ color: theme.colors.background,
283
+ },
284
+ });
@@ -0,0 +1,39 @@
1
+ import React from 'react';
2
+ import { StatusBar, StyleSheet, ViewStyle} from 'react-native';
3
+ import { SafeAreaView, SafeAreaViewProps } from 'react-native-safe-area-context';
4
+
5
+ interface WrapperContainerProps extends SafeAreaViewProps {
6
+ children: React.ReactNode;
7
+ style?: ViewStyle;
8
+ }
9
+
10
+ const WrapperContainer: React.FC<WrapperContainerProps> = ({
11
+ children,
12
+ style,
13
+ ...safeAreaProps
14
+ }) => {
15
+
16
+
17
+ return (
18
+ <SafeAreaView
19
+ style={[
20
+ styles.container,
21
+
22
+ ]}
23
+ {...safeAreaProps}
24
+ >
25
+ <StatusBar
26
+ barStyle={'light-content'}
27
+ />
28
+ {children}
29
+ </SafeAreaView>
30
+ );
31
+ };
32
+
33
+ const styles = StyleSheet.create({
34
+ container: {
35
+ flex: 1,
36
+ }
37
+ });
38
+
39
+ export default React.memo(WrapperContainer);
@@ -0,0 +1,19 @@
1
+ export * from './Button';
2
+ export * from './LoadingSpinner';
3
+ export * from './SafeAreaWrapper';
4
+ export * from './Icon';
5
+ export * from './IconButton';
6
+ export * from './TextInput';
7
+ export * from './WrapperContainer';
8
+ export * from './AppLoader';
9
+ export * from './ToastManager';
10
+ export * from './ImagePicker';
11
+ export * from './UploadProgressModal';
12
+ export * from './OTPInput';
13
+ export * from './ClubCard';
14
+ export * from './TeamCard';
15
+ export * from './SlowInternet';
16
+ export * from './SetReminderModal';
17
+ export * from './AddMemberModal';
18
+ export * from './ReminderCalendar';
19
+ export * from './ReminderCardItem';
@@ -0,0 +1,7 @@
1
+ const Constants = {
2
+ SENTRY_SESSION_ID:
3
+ "https://7c1cda40fa01dbc9337d082f00df3f0b@o971472.ingest.us.sentry.io/4510125751664640",
4
+ DATE_FORMAT: "YYYY-MM-DD",
5
+ };
6
+
7
+ export default Constants;
@@ -0,0 +1,30 @@
1
+ import { Dimensions, PixelRatio } from "react-native";
2
+ const { width: SCREEN_WIDTH, height: SCREEN_HEIGHT } = Dimensions.get("window");
3
+ const scale = Math.min(SCREEN_WIDTH, SCREEN_HEIGHT) / 420;
4
+
5
+ export const Fonts = {
6
+ outfitBold: "Outfit-Bold",
7
+ outfitRegular: "Outfit-Regular",
8
+ outfitMedium: "Outfit-Medium",
9
+ outfitSemiBold: "Outfit-SemiBold",
10
+ outfitLight: "Outfit-Light",
11
+ } as const;
12
+
13
+ export type FontFamily = (typeof Fonts)[keyof typeof Fonts];
14
+
15
+ export const normalize = (size: number) => {
16
+ const newSize = size * scale;
17
+ return Math.round(PixelRatio.roundToNearestPixel(newSize));
18
+ };
19
+
20
+ export const applyTypography = (
21
+ fontFamily: FontFamily,
22
+ fontSize: number,
23
+ color: string
24
+ ) => {
25
+ return {
26
+ fontFamily: fontFamily,
27
+ fontSize: normalize(fontSize),
28
+ color: color,
29
+ };
30
+ };
@@ -0,0 +1,45 @@
1
+ // Theme constants
2
+ export * from './theme';
3
+
4
+ // String constants
5
+ export { Strings } from './strings';
6
+
7
+ // App constants
8
+ export const APP_CONFIG = {
9
+ name: 'RN Club Yakka',
10
+ version: '1.0.0',
11
+ environment: __DEV__ ? 'development' : 'production',
12
+ } as const;
13
+
14
+ // API constants
15
+ export const API_CONFIG = {
16
+ baseUrl: __DEV__
17
+ ? 'https://api-dev.example.com'
18
+ : 'https://api.example.com',
19
+ timeout: 10000,
20
+ retryAttempts: 3,
21
+ } as const;
22
+
23
+ // Screen names
24
+ export const SCREEN_NAMES = {
25
+ HOME: 'Home',
26
+ PROFILE: 'Profile',
27
+ SETTINGS: 'Settings',
28
+ DETAILS: 'Details',
29
+ } as const;
30
+
31
+ // Storage keys
32
+ export const STORAGE_KEYS = {
33
+ USER_TOKEN: '@user_token',
34
+ USER_DATA: '@user_data',
35
+ THEME_PREFERENCE: '@theme_preference',
36
+ LANGUAGE_PREFERENCE: '@language_preference',
37
+ } as const;
38
+
39
+ // Validation constants
40
+ export const VALIDATION = {
41
+ MIN_PASSWORD_LENGTH: 8,
42
+ MAX_EMAIL_LENGTH: 254,
43
+ MIN_NAME_LENGTH: 2,
44
+ MAX_NAME_LENGTH: 50,
45
+ } as const;
@@ -0,0 +1,211 @@
1
+ /**
2
+ * Centralized String Management Class
3
+ * All app strings are organized here for easy maintenance and localization
4
+ */
5
+ export class Strings {
6
+ // MARK: - Common Strings
7
+ static readonly COMMON = {
8
+ // Buttons
9
+ LOGIN: 'Login',
10
+ SIGN_UP: 'Sign Up',
11
+ SIGN_IN: 'Sign In',
12
+ CREATE_ACCOUNT: 'Create Account',
13
+ FORGOT_PASSWORD: 'Forgot Password?',
14
+ SEND_RESET_LINK: 'Send Reset Link',
15
+ SUBMIT: 'Submit',
16
+ VERIFY: 'Verify',
17
+ BACK_TO_LOGIN: 'Back to Login',
18
+ TRY_DIFFERENT_EMAIL: 'Try Different Email',
19
+ VIEW_PROFILE: 'View Profile',
20
+ SETTINGS: 'Settings',
21
+ VIEW_DETAILS: 'View Details',
22
+ OTP: 'OTP',
23
+ // Form Labels
24
+ EMAIL: 'Email',
25
+ PASSWORD: 'Password',
26
+ NAME: 'Name',
27
+ CONFIRM_PASSWORD: 'Confirm Password',
28
+ EMAIL_ADDRESS: 'Email Address',
29
+ PHONE: 'Phone',
30
+ // Placeholders
31
+ EMAIL_PLACEHOLDER: 'Email',
32
+ PASSWORD_PLACEHOLDER: '••••••••',
33
+ NAME_PLACEHOLDER: 'Name',
34
+ PHONE_PLACEHOLDER: 'Phone',
35
+ EMAIL_INPUT_PLACEHOLDER: 'Enter your email',
36
+ PASSWORD_CREATE_PLACEHOLDER: 'Create a password',
37
+ PASSWORD_CONFIRM_PLACEHOLDER: 'Confirm your password',
38
+ PHONE_INPUT_PLACEHOLDER: 'Enter your phone',
39
+ // Navigation
40
+ HOME: 'Home',
41
+ PROFILE: 'Profile',
42
+ DETAILS: 'Details',
43
+
44
+ // Status
45
+ LOADING: 'Loading...',
46
+ SUCCESS: 'Success',
47
+ ERROR: 'Error',
48
+ FAILED: 'Failed',
49
+ };
50
+
51
+ // MARK: - Authentication Strings
52
+ static readonly AUTH = {
53
+ // Titles
54
+ LOGIN_TITLE: 'Log In',
55
+ REGISTER_TITLE: 'Create Account',
56
+ SIGN_UP_TITLE: 'Sign Up',
57
+ FORGOT_PASSWORD_TITLE: 'Forgot Password',
58
+ TERMS_AND_CONDITIONS: 'Terms & Conditions',
59
+ FORGOT_PASSWORD_SUBTITLE: 'Please enter your email address, you will receive a link to create a new password via email.',
60
+
61
+ PRIVACY_POLICY: 'Privacy Policy',
62
+ EMAIL_VERIFY_TITLE: 'Verify Email',
63
+ EMAIL_VERIFY_SUBTITLE: "4 digit code has been sent to your email id.",
64
+ // Subtitles
65
+ REGISTER_SUBTITLE: 'Join our community today',
66
+ OTP_VERIFY_SUBTITLE: 'Enter the OTP sent to your email',
67
+ // Success Messages
68
+ ACCOUNT_CREATED_SUCCESS: 'Account created successfully!',
69
+ CHECK_EMAIL_TITLE: 'Check your email',
70
+ CHECK_EMAIL_MESSAGE: "We've sent a password reset link to",
71
+
72
+ // Error Messages
73
+ LOGIN_FAILED: 'Login Failed',
74
+ REGISTRATION_FAILED: 'Registration Failed',
75
+ INVALID_CREDENTIALS: 'Invalid email or password',
76
+ UNABLE_TO_CREATE_ACCOUNT: 'Unable to create account',
77
+ LOGIN_ERROR: 'An error occurred during login',
78
+ REGISTRATION_ERROR: 'An error occurred during registration',
79
+ RESET_EMAIL_ERROR: 'Failed to send reset email. Please try again.',
80
+ OTP_VERIFY_ERROR: 'Failed to verify OTP. Please try again.',
81
+ OTP_VERIFIED_SUCCESS: 'OTP verified successfully!',
82
+ OTP_SEND_SUCCESS: 'OTP sent successfully!',
83
+ OTP_VERIFIED_FAILED: 'Failed to verify OTP. Please try again.',
84
+ // Add Member
85
+ ADD_MEMBER_TITLE: 'Add Member',
86
+ ADD_MEMBER_SUBTITLE: 'Add Member',
87
+ JOIN_CLUB: 'Join Club',
88
+ ADD_MEMBER_SECTION_TITLE: 'ADD MEMBER',
89
+ MY_CLUBS_SECTION_TITLE: 'My CLUBS',
90
+ SKIP: 'Skip',
91
+ NEXT: 'Next',
92
+ SAVE: 'Save',
93
+ UPLOAD_MEMBER_PHOTO: 'Upload Member Photo',
94
+ MEMBER_NAME: 'Member Name',
95
+ MEMBER_NAME_PLACEHOLDER: 'Member Name',
96
+ DATE_OF_BIRTH: 'Date of Birth',
97
+ DATE_OF_BIRTH_PLACEHOLDER: 'DD/MM/YYYY',
98
+ TYPE_OF_RELATIONSHIP: 'Type of Relationship',
99
+ TYPE_OF_RELATIONSHIP_PLACEHOLDER: 'Enter',
100
+ // Validation Messages
101
+ EMAIL_REQUIRED: 'Email is required',
102
+ PASSWORD_REQUIRED: 'Password is required',
103
+ NAME_REQUIRED: 'Name is required',
104
+ CONFIRM_PASSWORD_REQUIRED: 'Please confirm your password',
105
+ VALID_EMAIL_REQUIRED: 'Please enter a valid email',
106
+ VALID_EMAIL_ADDRESS_REQUIRED: 'Please enter a valid email address',
107
+ PASSWORD_MIN_LENGTH: 'Password must be at least 8 characters',
108
+ PASSWORDS_DO_NOT_MATCH: 'Passwords do not match',
109
+ VALID_PHONE_NUMBER_REQUIRED: 'Please enter a valid phone number',
110
+ PHONE_NUMBER_REQUIRED: 'Phone number is required',
111
+ I_AGREE_TO_THE_TERMS_AND_CONDITIONS: 'I agree to the Terms and Conditions',
112
+ // Footer Messages
113
+ ALREADY_HAVE_ACCOUNT: 'Already have an account?',
114
+ REMEMBER_PASSWORD: 'Remember your password?',
115
+ };
116
+
117
+ // MARK: - Home Screen Strings
118
+ static readonly HOME = {
119
+ WELCOME_TITLE: 'Welcome to Club Yakka',
120
+ WELCOME_SUBTITLE: 'Your React Native Navigation App',
121
+ QUICK_ACTIONS_TITLE: 'Quick Actions',
122
+ FEATURES_TITLE: 'Features',
123
+
124
+ // Features List
125
+ FEATURE_TYPESCRIPT: '✅ TypeScript Support',
126
+ FEATURE_NAVIGATION: '✅ React Navigation',
127
+ FEATURE_COMPONENTS: '✅ Common Components',
128
+ FEATURE_THEME: '✅ Theme System',
129
+ FEATURE_UTILITIES: '✅ Utility Functions',
130
+ };
131
+
132
+ // MARK: - Profile Screen Strings
133
+ static readonly PROFILE = {
134
+ TITLE: 'Profile',
135
+ EDIT_PROFILE: 'Edit Profile',
136
+ LOGOUT: 'Logout',
137
+ ACCOUNT_SETTINGS: 'Account Settings',
138
+ PERSONAL_INFO: 'Personal Information',
139
+ SECURITY: 'Security',
140
+ NOTIFICATIONS: 'Notifications',
141
+ PRIVACY: 'Privacy',
142
+ };
143
+
144
+ // MARK: - Settings Screen Strings
145
+ static readonly SETTINGS = {
146
+ TITLE: 'Settings',
147
+ GENERAL: 'General',
148
+ APPEARANCE: 'Appearance',
149
+ LANGUAGE: 'Language',
150
+ ABOUT: 'About',
151
+ VERSION: 'Version',
152
+ TERMS_OF_SERVICE: 'Terms of Service',
153
+ PRIVACY_POLICY: 'Privacy Policy',
154
+ CONTACT_SUPPORT: 'Contact Support',
155
+ };
156
+
157
+ // MARK: - Details Screen Strings
158
+ static readonly DETAILS = {
159
+ TITLE: 'Details',
160
+ DESCRIPTION: 'Description',
161
+ MORE_INFO: 'More Information',
162
+ RELATED_ITEMS: 'Related Items',
163
+ SHARE: 'Share',
164
+ BOOKMARK: 'Bookmark',
165
+ };
166
+
167
+ // MARK: - Alert Messages
168
+ static readonly ALERTS = {
169
+ CONFIRM_LOGOUT: 'Are you sure you want to logout?',
170
+ CONFIRM_DELETE: 'Are you sure you want to delete this item?',
171
+ NETWORK_ERROR: 'Network error. Please check your connection.',
172
+ SERVER_ERROR: 'Server error. Please try again later.',
173
+ UNKNOWN_ERROR: 'An unknown error occurred.',
174
+ };
175
+
176
+ // MARK: - Accessibility Strings
177
+ static readonly ACCESSIBILITY = {
178
+ LOGIN_BUTTON: 'Login button',
179
+ SIGNUP_BUTTON: 'Sign up button',
180
+ EMAIL_INPUT: 'Email input field',
181
+ PASSWORD_INPUT: 'Password input field',
182
+ FORGOT_PASSWORD_LINK: 'Forgot password link',
183
+ MENU_BUTTON: 'Menu button',
184
+ BACK_BUTTON: 'Back button',
185
+ CLOSE_BUTTON: 'Close button',
186
+ };
187
+ static readonly Teams = {
188
+ TEAMS: 'Teams',
189
+ JOIN_TEAM_SUBTITLE: 'Join Team',
190
+ PENDING_REQUEST: 'Pending Request',
191
+ MY_TEAMS_SECTION_TITLE: 'MY TEAMS',
192
+ SEARCH_AND_JOIN_TEAM:'Search and join team to explore the events, matches, and activities and more.',
193
+ UNIQUE_CODE_AND_CLUB_NAME:'Unique code and club name',
194
+ SEARCH_BY_TEAM_NAME:'Search by team name'
195
+ };
196
+ static readonly Announcements = {
197
+ ANNOUNCEMENTS: 'Announcements'
198
+ };
199
+ static readonly VolunteerOpportunities = {
200
+ VOLUNTEER_OPPORTUNITIES: 'Volunteer Opportunities',
201
+ TOTAL_HOURS: "Total Hours",
202
+ HOURS: " Hours",
203
+ NEXT_SHIFT: "Next Shift",
204
+ THIS_MONTH: "This Month",
205
+ VIEW_MORE_DETAILS: "View Details",
206
+ };
207
+
208
+ }
209
+
210
+ // Default export
211
+ export default Strings;