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,979 @@
1
+ import React, { useState, useEffect, useCallback, useRef } from 'react';
2
+ import { View, Text, StyleSheet, FlatList, StatusBar, Platform, TouchableOpacity, Image, ScrollView, ActivityIndicator } from 'react-native';
3
+ import { MyTeamDetailsScreenProps } from '../../types/navigation';
4
+ import { Strings, theme } from '../../constants';
5
+ import { moderateScale, width } from '../../utils/scaling';
6
+ import { Fonts } from '../../constants/Fonts';
7
+ import SVG from '../../assets/icons';
8
+ import { SafeAreaView } from 'react-native-safe-area-context';
9
+ import { Button } from '../../components/common';
10
+ import { useTeamDetails } from '../../services/mainServices';
11
+ import { getApiErrorInfo, useGetImageUrl } from '../../services/authService';
12
+ import ToastManager from '../../components/common/ToastManager';
13
+
14
+ export const MyTeamDetailsScreen: React.FC<MyTeamDetailsScreenProps> = ({ navigation, route }) => {
15
+ // const { club, selectedClub } = route?.params ?? {};
16
+ // const teamId = club?.teamId;
17
+
18
+
19
+ const { club, selectedClub, selectedMember }: any = route?.params ?? {};
20
+
21
+ const teamDetail = route?.params ?? {}
22
+ const teamId = club?.teamId;
23
+ console.log("teamDetail===>>>", teamDetail);
24
+
25
+
26
+ const { data, isLoading, error, refetch } = useTeamDetails(teamId);
27
+
28
+ const TeamDetails: any = data?.data?.data;
29
+ console.log("Team Details:", route?.params);
30
+
31
+ const getImageUrlMutation = useGetImageUrl();
32
+
33
+ const [teamImageUrl, setTeamImageUrl] = useState<string>('');
34
+ const [memberImages, setMemberImages] = useState<{ [key: string]: string }>({});
35
+ const [imageLoading, setImageLoading] = useState<{ [key: string]: boolean }>({});
36
+ const [activeTab, setActiveTab] = useState<'details' | 'schedule'>('details');
37
+
38
+ // Function to get team profile image URL
39
+ const handleGetTeamImageUrl = () => {
40
+ if (!TeamDetails?.teamDetail?.teamProfileImage) return;
41
+
42
+ const teamImageName = TeamDetails.teamDetail.teamProfileImage;
43
+
44
+ // Check if it contains a folder path
45
+ let containerName = 'teams'; // default container
46
+ let blobName = teamImageName;
47
+
48
+ if (teamImageName.includes('/')) {
49
+ const [folder, blob] = teamImageName.split('/');
50
+ containerName = folder;
51
+ blobName = blob;
52
+ }
53
+
54
+ setImageLoading(prev => ({ ...prev, teamProfile: true }));
55
+
56
+ getImageUrlMutation.mutate({
57
+ containerName: containerName,
58
+ blobName: blobName
59
+ }, {
60
+ onSuccess: (response) => {
61
+ const imageUrl = response?.data?.data?.url;
62
+ setTeamImageUrl(imageUrl);
63
+ console.log('Team Image URL response', response.data);
64
+ setImageLoading(prev => ({ ...prev, teamProfile: false }));
65
+ },
66
+ onError: (error) => {
67
+ const errorInfo = getApiErrorInfo(error);
68
+ ToastManager.error(errorInfo?.message);
69
+ console.error('Failed to get team image URL:', error);
70
+ setTeamImageUrl('');
71
+ setImageLoading(prev => ({ ...prev, teamProfile: false }));
72
+ }
73
+ });
74
+ };
75
+
76
+ // Function to get member image URL
77
+ const handleGetMemberImageUrl = (memberImage: string, memberId: string) => {
78
+ if (!memberImage) return;
79
+
80
+ let containerName = 'members'; // default container
81
+ let blobName = memberImage;
82
+
83
+ if (memberImage.includes('/')) {
84
+ const [folder, blob] = memberImage.split('/');
85
+ containerName = folder;
86
+ blobName = blob;
87
+ }
88
+
89
+ setImageLoading(prev => ({ ...prev, [memberId]: true }));
90
+
91
+ getImageUrlMutation.mutate({
92
+ containerName: containerName,
93
+ blobName: blobName
94
+ }, {
95
+ onSuccess: (response) => {
96
+ const imageUrl = response?.data?.data?.url;
97
+ setMemberImages(prev => ({ ...prev, [memberId]: imageUrl }));
98
+ setImageLoading(prev => ({ ...prev, [memberId]: false }));
99
+ },
100
+ onError: (error) => {
101
+ const errorInfo = getApiErrorInfo(error);
102
+ console.error('Failed to get member image URL:', error);
103
+ setImageLoading(prev => ({ ...prev, [memberId]: false }));
104
+ }
105
+ });
106
+ };
107
+
108
+ // Effect to load team profile image
109
+ useEffect(() => {
110
+ if (TeamDetails?.teamDetail?.teamProfileImage) {
111
+ handleGetTeamImageUrl();
112
+ }
113
+ }, [TeamDetails?.teamDetail?.teamProfileImage]);
114
+
115
+ // Effect to load member images
116
+ useEffect(() => {
117
+ if (TeamDetails?.memberDetailList) {
118
+ console.log('Processing member images:', TeamDetails.memberDetailList);
119
+ TeamDetails.memberDetailList.forEach((member: any) => {
120
+ console.log('Member:', member.memberName, 'Image:', member.memberImage, 'Has image:', member.memberImage && member.memberImage.trim() !== '');
121
+ if (member.memberImage && member.memberImage.trim() !== '') {
122
+ handleGetMemberImageUrl(member.memberImage, member.memberId.toString());
123
+ }
124
+ });
125
+ }
126
+ }, [TeamDetails?.memberDetailList]);
127
+
128
+
129
+
130
+
131
+ // Function to generate date data for horizontal picker
132
+ const generateDateData = () => {
133
+ const dates = [];
134
+ const today = new Date();
135
+ const dayNames = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
136
+
137
+ // Generate 14 days (7 before and 7 after today)
138
+ for (let i = -7; i <= 7; i++) {
139
+ const date = new Date(today);
140
+ date.setDate(today.getDate() + i);
141
+
142
+ dates.push({
143
+ id: i,
144
+ date: date.getDate(),
145
+ month: date.getMonth() + 1,
146
+ dayName: dayNames[date.getDay()],
147
+ isToday: i === 0,
148
+ fullDate: date
149
+ });
150
+ }
151
+
152
+ return dates;
153
+ };
154
+
155
+ // Function to render date item
156
+ const renderDateItem = ({ item }: { item: any }) => {
157
+ return (
158
+ <TouchableOpacity style={[
159
+ styles.dateItem,
160
+ item.isToday && styles.activeDateItem
161
+ ]}>
162
+ <Text style={[
163
+ styles.dateNumber,
164
+ item.isToday && styles.activeDateText
165
+ ]}>
166
+ {item.date}
167
+ </Text>
168
+ <Text style={[
169
+ styles.dayName,
170
+ item.isToday && styles.activeDateText
171
+ ]}>
172
+ {item.dayName}
173
+ </Text>
174
+ </TouchableOpacity>
175
+ );
176
+ };
177
+
178
+ // Function to render individual player card
179
+ const renderPlayerCard = (player: any) => {
180
+
181
+ return (
182
+ <View key={player.memberId} style={styles.playerCard}>
183
+ {player?.memberImage ? (
184
+ <Image
185
+ source={{ uri: player?.memberImage }}
186
+ style={styles.playerImage}
187
+ />
188
+ ) : (
189
+ <View style={styles.playerPlaceholder}>
190
+ <SVG.emptyUser
191
+ width={moderateScale(50)}
192
+ height={moderateScale(50)}
193
+ />
194
+ </View>
195
+ )}
196
+ {/* {isLoadingMemberImage && (
197
+ <View style={styles.memberImageLoader}>
198
+ <ActivityIndicator
199
+ size="small"
200
+ color={theme.colors.appleGreen}
201
+ />
202
+ </View>
203
+ )} */}
204
+ <View style={styles.playerNameOverlay}>
205
+ <Text style={styles.playerName}>{player.memberName || 'Unknown Player'}</Text>
206
+ </View>
207
+ </View>
208
+ );
209
+ };
210
+
211
+ if (!club) {
212
+ return (
213
+ <View style={styles.container}>
214
+ <SafeAreaView style={styles.header}>
215
+ <View style={styles.headerContent}>
216
+ <TouchableOpacity onPress={() => navigation.goBack()}>
217
+ <SVG.arrowLeft_white width={moderateScale(25)} height={moderateScale(25)} />
218
+ </TouchableOpacity>
219
+ <Text style={styles.headerTitle}>Team Details</Text>
220
+ </View>
221
+ </SafeAreaView>
222
+ <View style={styles.errorContainer}>
223
+ <Text style={styles.errorText}>No team data available</Text>
224
+ <Button
225
+ title="Go Back"
226
+ onPress={() => navigation.goBack()}
227
+ variant="primary"
228
+ size="medium"
229
+ />
230
+ </View>
231
+ </View>
232
+ );
233
+ }
234
+
235
+ return (
236
+ <SafeAreaView style={styles.container}>
237
+ <StatusBar
238
+ barStyle="light-content"
239
+ backgroundColor={theme.colors.blue}
240
+ translucent={Platform.OS === 'android' ? true : false}
241
+ />
242
+ {Platform.OS === 'ios' && <View style={styles.statusBarBackground} />}
243
+
244
+ <View style={styles.header}>
245
+ <View style={styles.headerTopRow}>
246
+
247
+ <TouchableOpacity onPress={() => navigation.goBack()}>
248
+ <SVG.arrowLeft_white width={moderateScale(25)} height={moderateScale(25)} />
249
+ </TouchableOpacity>
250
+
251
+
252
+ <View style={{ flexDirection: 'row' }}>
253
+ <View style={styles.userConSty}>
254
+ {!!selectedClub?.clubImage ? (
255
+ <Image
256
+ source={{ uri: selectedClub?.clubImage }} style={styles.userDetailsSty} resizeMode='cover' />
257
+ // onLoadEnd={() => setIsLoading(false)}
258
+ // onLoad={() => setIsLoading(true)}
259
+ // onLoadStart={() => setIsLoading(true)}
260
+ ) : (
261
+ <View style={styles.placeholderLogoHeader}>
262
+ <SVG.UsersIcon width={moderateScale(20)} height={moderateScale(20)} />
263
+ </View>
264
+ )}
265
+ </View>
266
+ <Text style={styles.userNameSty}>{selectedClub?.clubName || 'Unknown Club'}</Text>
267
+ </View>
268
+
269
+ </View>
270
+
271
+ {/* Club Image Centered */}
272
+ <View style={styles.centerImageContainer}>
273
+ {TeamDetails?.teamDetail?.teamProfileImage ? (
274
+ <Image
275
+ source={{ uri: TeamDetails?.teamDetail?.teamProfileImage }}
276
+ style={styles.centerClubImage}
277
+ />
278
+ ) : (
279
+ <View style={styles.centerPlaceholderImage}>
280
+ <SVG.emptyUser width={moderateScale(60)} height={moderateScale(60)} />
281
+ </View>
282
+ )}
283
+ </View>
284
+
285
+ {/* Club Name Centered */}
286
+ <View style={styles.centerTextContainer}>
287
+ <Text style={styles.centerClubName} numberOfLines={2}>
288
+ {TeamDetails?.teamDetail?.teamName || 'Unknown Team'}
289
+ </Text>
290
+ </View>
291
+
292
+ {/* Total Members */}
293
+ <View style={styles.centerMemberInfo}>
294
+ <View style={styles.totalMembersContainer}>
295
+ <SVG.profileAppleGreen width={moderateScale(16)} height={moderateScale(16)} />
296
+ <Text style={styles.totalMembersText}>
297
+ {TeamDetails?.teamDetail?.totalMembers || 0} {(TeamDetails?.teamDetail?.totalMembers || 0) === 1 ? 'member' : 'members'}
298
+ </Text>
299
+ </View>
300
+ </View>
301
+
302
+ {/* Chat Button */}
303
+ <View style={styles.chatButtonContainer}>
304
+ <TouchableOpacity style={styles.chatButton} onPress={() => {
305
+ const navigationData = {
306
+ team: club,
307
+ selectedMember: selectedMember,
308
+ selectedClub: selectedClub
309
+ }
310
+ navigation.navigate('ChatThreads', navigationData);
311
+ }}>
312
+ <SVG.chatAppleGreen width={moderateScale(18)} height={moderateScale(18)} color={theme.colors.appleGreen} />
313
+ <Text style={styles.chatButtonText}>Chat</Text>
314
+ </TouchableOpacity>
315
+ </View>
316
+ </View>
317
+
318
+ <ScrollView style={styles.content} showsVerticalScrollIndicator={false}>
319
+ {/* Tab Bar */}
320
+ <View style={styles.tabContainer}>
321
+ <TouchableOpacity
322
+ style={[styles.tabButton, activeTab === 'details' && styles.activeTabButton]}
323
+ onPress={() => setActiveTab('details')}
324
+ >
325
+ <Text style={[styles.tabButtonText, activeTab === 'details' && styles.activeTabButtonText]}>
326
+ Team Details
327
+ </Text>
328
+ </TouchableOpacity>
329
+ <TouchableOpacity
330
+ style={[styles.tabButton, activeTab === 'schedule' && styles.activeTabButton]}
331
+ onPress={() => setActiveTab('schedule')}
332
+ >
333
+ <Text style={[styles.tabButtonText, activeTab === 'schedule' && styles.activeTabButtonText]}>
334
+ Team Schedule
335
+ </Text>
336
+ </TouchableOpacity>
337
+ </View>
338
+
339
+ {/* Tab Content */}
340
+ {activeTab === 'details' ? (
341
+ <View style={styles.tabContent}>
342
+ {/* Team Info Section */}
343
+ <View style={styles.sectionContainer}>
344
+ <Text style={styles.sectionHeading}>TEAM INFO</Text>
345
+ <Text style={styles.sectionContent}>
346
+ {TeamDetails?.teamDetail?.teamDescription || 'No team description available.'}
347
+ </Text>
348
+ </View>
349
+
350
+ {/* Head Coach Section */}
351
+ <View style={styles.sectionContainer}>
352
+ <Text style={styles.sectionHeading}>HEAD COACH</Text>
353
+ <View style={styles.coachCard}>
354
+ <View style={styles.coachImageContainer}>
355
+ <SVG.HeadCoachIcon width={moderateScale(27)} height={moderateScale(28)} />
356
+ </View>
357
+ <View style={styles.coachDetails}>
358
+ <Text style={styles.coachName}>{TeamDetails?.teamDetail?.headCoachName || 'Unknown Coach'}</Text>
359
+ {/* <Text style={styles.coachTitle}>
360
+ ? Head Coach since {TeamDetails?.teamDetail?.createdOn ? new Date(TeamDetails.teamDetail.createdOn).getFullYear() : 'Unknown'}
361
+ </Text> */}
362
+ </View>
363
+ </View>
364
+ </View>
365
+
366
+
367
+ <View style={styles.sectionContainer}>
368
+ <Text style={styles.sectionHeading}>TEAM PLAYERS</Text>
369
+ {/* Team Players Grid */}
370
+ <View style={styles.playersGrid}>
371
+ <FlatList
372
+ data={TeamDetails?.memberDetailList || []}
373
+ renderItem={({ item }) => renderPlayerCard(item)}
374
+ numColumns={3}
375
+ keyExtractor={(item) => item?.memberId?.toString() || Math.random().toString()}
376
+ columnWrapperStyle={styles.playersRow}
377
+ scrollEnabled={false}
378
+ showsVerticalScrollIndicator={false}
379
+ />
380
+ </View>
381
+ </View>
382
+ </View>
383
+ ) : (
384
+ <View style={styles.tabContent}>
385
+ {/* Team Schedule Content */}
386
+ <View style={styles.sectionContainer}>
387
+ {/* <View style={styles.horizontalLine} />
388
+ <FlatList
389
+ data={generateDateData()}
390
+ renderItem={renderDateItem}
391
+ horizontal
392
+ showsHorizontalScrollIndicator={false}
393
+ keyExtractor={(item) => item.id.toString()}
394
+ contentContainerStyle={styles.datePickerContainer}
395
+ style={styles.datePicker}
396
+ />
397
+ <View style={styles.horizontalLine} /> */}
398
+ <Text style={styles.sectionHeading}>UPCOMING MATCHES</Text>
399
+ <Text style={styles.sectionContent}>
400
+ Schedule Matches will be displayed here Soon.
401
+ </Text>
402
+ </View>
403
+ </View>
404
+ )}
405
+ </ScrollView>
406
+ </SafeAreaView>
407
+ );
408
+ };
409
+
410
+ const styles = StyleSheet.create({
411
+ container: {
412
+ flex: 1,
413
+ backgroundColor: theme.colors.blue,
414
+ },
415
+ statusBarBackground: {
416
+ position: 'absolute',
417
+ top: 0,
418
+ left: 0,
419
+ right: 0,
420
+ height: Platform.OS === 'ios' ? 44 : 0,
421
+ backgroundColor: theme.colors.blue,
422
+ zIndex: 1000,
423
+ },
424
+ header: {
425
+ backgroundColor: theme.colors.blue,
426
+ paddingTop: theme.spacing.xs,
427
+ paddingBottom: theme.spacing.xl,
428
+
429
+ },
430
+ headerContent: {
431
+ flexDirection: 'row',
432
+ alignItems: 'center',
433
+ paddingHorizontal: theme.spacing.lg,
434
+ gap: theme.spacing.md,
435
+ },
436
+ headerTitleContainer: {
437
+ flex: 1,
438
+ },
439
+ headerTitle: {
440
+ fontFamily: Fonts.outfitMedium,
441
+ fontSize: moderateScale(22),
442
+ color: theme.colors.white,
443
+ },
444
+ headerSubtitle: {
445
+ fontFamily: Fonts.outfitRegular,
446
+ fontSize: moderateScale(14),
447
+ color: theme.colors.white,
448
+ opacity: 0.8,
449
+ marginTop: moderateScale(2),
450
+ },
451
+ content: {
452
+ flex: 1,
453
+ backgroundColor: theme.colors.background,
454
+ borderTopLeftRadius: moderateScale(30),
455
+ borderTopRightRadius: moderateScale(30),
456
+ marginTop: -theme.spacing.md,
457
+ },
458
+ teamImageContainer: {
459
+ alignItems: 'center',
460
+ paddingVertical: theme.spacing.xl,
461
+ paddingTop: theme.spacing.xl,
462
+ },
463
+ userConSty: {
464
+ marginHorizontal: moderateScale(10),
465
+ width: moderateScale(30),
466
+ height: moderateScale(30),
467
+ borderRadius: moderateScale(15),
468
+ borderWidth: 1.5,
469
+ borderColor: theme.colors.imageBorder,
470
+ backgroundColor: theme.colors.background,
471
+ alignItems: 'center',
472
+ justifyContent: 'center'
473
+ },
474
+ userNameSty: {
475
+ marginTop: moderateScale(5),
476
+ color: theme.colors.white,
477
+ fontFamily: Fonts.outfitMedium,
478
+ fontSize: moderateScale(15)
479
+ },
480
+ userDetailsSty: {
481
+ width: moderateScale(36),
482
+ height: moderateScale(36),
483
+ borderRadius: moderateScale(18),
484
+
485
+ },
486
+ userDefaultIcone: {
487
+ width: moderateScale(30),
488
+ height: moderateScale(30),
489
+ borderRadius: moderateScale(10)
490
+ },
491
+ placeholderLogoHeader: {
492
+ width: moderateScale(20),
493
+ height: moderateScale(20),
494
+ borderRadius: moderateScale(10),
495
+ alignItems: 'center',
496
+ justifyContent: 'center'
497
+ },
498
+
499
+ teamImage: {
500
+ width: moderateScale(120),
501
+ height: moderateScale(120),
502
+ borderRadius: moderateScale(60),
503
+ backgroundColor: theme.colors.background,
504
+ },
505
+ placeholderImage: {
506
+ width: moderateScale(120),
507
+ height: moderateScale(120),
508
+ borderRadius: moderateScale(60),
509
+ backgroundColor: theme.colors.border,
510
+ justifyContent: 'center',
511
+ alignItems: 'center',
512
+ },
513
+ teamInfoContainer: {
514
+ paddingHorizontal: theme.spacing.lg,
515
+ paddingBottom: theme.spacing.xl,
516
+ },
517
+ teamName: {
518
+ fontFamily: Fonts.outfitSemiBold,
519
+ fontSize: moderateScale(24),
520
+ color: theme.colors.text,
521
+ textAlign: 'center',
522
+ marginBottom: theme.spacing.lg,
523
+ },
524
+ infoRow: {
525
+ flexDirection: 'row',
526
+ justifyContent: 'space-between',
527
+ alignItems: 'flex-start',
528
+ paddingVertical: theme.spacing.sm,
529
+ borderBottomWidth: 1,
530
+ borderBottomColor: theme.colors.border,
531
+ },
532
+ infoLabel: {
533
+ fontFamily: Fonts.outfitMedium,
534
+ fontSize: moderateScale(14),
535
+ color: theme.colors.textSecondary,
536
+ flex: 1,
537
+ },
538
+ infoValue: {
539
+ fontFamily: Fonts.outfitSemiBold,
540
+ fontSize: moderateScale(14),
541
+ color: theme.colors.text,
542
+ flex: 2,
543
+ textAlign: 'right',
544
+ },
545
+ actionsContainer: {
546
+ paddingHorizontal: theme.spacing.lg,
547
+ paddingBottom: theme.spacing.xl,
548
+ },
549
+ actionButton: {
550
+ width: '100%',
551
+ marginBottom: theme.spacing.md,
552
+ },
553
+ secondaryActions: {
554
+ marginTop: theme.spacing.lg,
555
+ gap: theme.spacing.sm,
556
+ },
557
+ secondaryButton: {
558
+ flexDirection: 'row',
559
+ alignItems: 'center',
560
+ justifyContent: 'center',
561
+ backgroundColor: 'transparent',
562
+ borderWidth: 1.5,
563
+ borderColor: theme.colors.primary,
564
+ borderRadius: theme.borderRadius.xxl,
565
+ paddingVertical: theme.spacing.sm,
566
+ paddingHorizontal: theme.spacing.lg,
567
+ gap: theme.spacing.sm,
568
+ },
569
+ secondaryButtonText: {
570
+ fontFamily: Fonts.outfitMedium,
571
+ fontSize: theme.typography.fontSize.md,
572
+ color: theme.colors.primary,
573
+ },
574
+ leaveButton: {
575
+ borderColor: theme.colors.error,
576
+ },
577
+ leaveButtonText: {
578
+ color: theme.colors.error,
579
+ },
580
+ errorContainer: {
581
+ flex: 1,
582
+ backgroundColor: theme.colors.background,
583
+ justifyContent: 'center',
584
+ alignItems: 'center',
585
+ paddingHorizontal: theme.spacing.lg,
586
+ borderTopLeftRadius: moderateScale(30),
587
+ borderTopRightRadius: moderateScale(30),
588
+ },
589
+ errorText: {
590
+ fontFamily: Fonts.outfitMedium,
591
+ fontSize: moderateScale(16),
592
+ color: theme.colors.error,
593
+ textAlign: 'center',
594
+ marginBottom: theme.spacing.lg,
595
+ },
596
+ // Member Information Styles
597
+ memberInfoContainer: {
598
+ paddingHorizontal: theme.spacing.lg,
599
+ paddingBottom: theme.spacing.lg,
600
+ },
601
+ sectionTitle: {
602
+ fontFamily: Fonts.outfitSemiBold,
603
+ fontSize: moderateScale(18),
604
+ color: theme.colors.text,
605
+ marginBottom: theme.spacing.md,
606
+ },
607
+ memberCard: {
608
+ flexDirection: 'row',
609
+ backgroundColor: theme.colors.surface,
610
+ borderRadius: theme.borderRadius.lg,
611
+ padding: theme.spacing.md,
612
+ alignItems: 'center',
613
+ },
614
+ memberImageContainer: {
615
+ marginRight: theme.spacing.md,
616
+ },
617
+ memberImage: {
618
+ width: moderateScale(60),
619
+ height: moderateScale(60),
620
+ borderRadius: moderateScale(30),
621
+ },
622
+ placeholderMemberImage: {
623
+ width: moderateScale(60),
624
+ height: moderateScale(60),
625
+ borderRadius: moderateScale(30),
626
+ backgroundColor: theme.colors.border,
627
+ justifyContent: 'center',
628
+ alignItems: 'center',
629
+ },
630
+ memberDetails: {
631
+ flex: 1,
632
+ },
633
+ memberName: {
634
+ fontFamily: Fonts.outfitSemiBold,
635
+ fontSize: moderateScale(16),
636
+ color: theme.colors.text,
637
+ marginBottom: moderateScale(4),
638
+ },
639
+ memberRelation: {
640
+ fontFamily: Fonts.outfitMedium,
641
+ fontSize: moderateScale(14),
642
+ color: theme.colors.textSecondary,
643
+ marginBottom: moderateScale(2),
644
+ },
645
+ memberBirthDate: {
646
+ fontFamily: Fonts.outfitRegular,
647
+ fontSize: moderateScale(12),
648
+ color: theme.colors.textSecondary,
649
+ marginBottom: moderateScale(4),
650
+ },
651
+ ownerBadge: {
652
+ backgroundColor: theme.colors.primary,
653
+ paddingHorizontal: moderateScale(8),
654
+ paddingVertical: moderateScale(4),
655
+ borderRadius: moderateScale(12),
656
+ alignSelf: 'flex-start',
657
+ },
658
+ ownerBadgeText: {
659
+ fontFamily: Fonts.outfitMedium,
660
+ fontSize: moderateScale(10),
661
+ color: theme.colors.white,
662
+ },
663
+ headerTopRow: {
664
+ flexDirection: 'row',
665
+ alignItems: 'center',
666
+ paddingHorizontal: theme.spacing.lg,
667
+ paddingBottom: theme.spacing.sm,
668
+ },
669
+ clubInfoRow: {
670
+ flexDirection: 'row',
671
+ alignItems: 'center',
672
+ paddingHorizontal: theme.spacing.lg,
673
+ marginBottom: theme.spacing.md,
674
+ },
675
+ headerClubImageContainer: {
676
+ marginRight: theme.spacing.md,
677
+ },
678
+ headerClubImage: {
679
+ width: moderateScale(60),
680
+ height: moderateScale(60),
681
+ borderRadius: moderateScale(30),
682
+ backgroundColor: theme.colors.background,
683
+ },
684
+ headerPlaceholderImage: {
685
+ width: moderateScale(60),
686
+ height: moderateScale(60),
687
+ borderRadius: moderateScale(30),
688
+ backgroundColor: 'rgba(255, 255, 255, 0.2)',
689
+ justifyContent: 'center',
690
+ alignItems: 'center',
691
+ },
692
+ headerTextContainer: {
693
+ flex: 1,
694
+ },
695
+ headerClubName: {
696
+ fontFamily: Fonts.outfitSemiBold,
697
+ fontSize: moderateScale(20),
698
+ color: theme.colors.white,
699
+ marginBottom: moderateScale(4),
700
+ },
701
+ headerMemberText: {
702
+ fontFamily: Fonts.outfitMedium,
703
+ fontSize: moderateScale(14),
704
+ color: theme.colors.appleGreen,
705
+ opacity: 0.8,
706
+ },
707
+ memberInfoRow: {
708
+ flexDirection: 'row',
709
+ alignItems: 'center',
710
+ justifyContent: 'space-between',
711
+ marginBottom: theme.spacing.sm,
712
+ },
713
+ memberCountContainer: {
714
+ flexDirection: 'row',
715
+ alignItems: 'center',
716
+ },
717
+ memberCount: {
718
+ fontFamily: Fonts.outfitRegular,
719
+ fontSize: moderateScale(14),
720
+ color: theme.colors.appleGreen,
721
+ marginLeft: theme.spacing.xs,
722
+ },
723
+ chatButtonContainer: {
724
+ paddingHorizontal: theme.spacing.lg,
725
+ paddingBottom: theme.spacing.xs,
726
+ },
727
+ chatButton: {
728
+ flexDirection: 'row',
729
+ alignItems: 'center',
730
+ justifyContent: 'center',
731
+ backgroundColor: 'transparent',
732
+ borderWidth: 1.5,
733
+ borderColor: theme.colors.appleGreen,
734
+ borderRadius: theme.borderRadius.xxl,
735
+ paddingVertical: theme.spacing.sm,
736
+ paddingHorizontal: theme.spacing.lg,
737
+ gap: theme.spacing.sm,
738
+ },
739
+ chatButtonText: {
740
+ fontFamily: Fonts.outfitMedium,
741
+ fontSize: theme.typography.fontSize.md,
742
+ color: theme.colors.appleGreen,
743
+ },
744
+ centerImageContainer: {
745
+ alignItems: 'center',
746
+ marginBottom: theme.spacing.xs,
747
+ },
748
+ centerClubImage: {
749
+ width: moderateScale(120),
750
+ height: moderateScale(120),
751
+ borderRadius: moderateScale(60),
752
+ backgroundColor: theme.colors.background,
753
+ borderWidth: 1,
754
+ borderColor: theme.colors.imageBorder,
755
+
756
+ },
757
+ centerPlaceholderImage: {
758
+ width: moderateScale(100),
759
+ height: moderateScale(100),
760
+ borderRadius: moderateScale(50),
761
+ backgroundColor: 'rgba(255, 255, 255, 0.2)',
762
+ justifyContent: 'center',
763
+ alignItems: 'center',
764
+ },
765
+ centerTextContainer: {
766
+ alignItems: 'center',
767
+ marginBottom: theme.spacing.sm,
768
+ },
769
+ centerClubName: {
770
+ fontFamily: Fonts.outfitSemiBold,
771
+ fontSize: moderateScale(22),
772
+ color: theme.colors.white,
773
+ textAlign: 'center',
774
+ },
775
+ centerMemberInfo: {
776
+ alignItems: 'center',
777
+ marginBottom: theme.spacing.md,
778
+ },
779
+ totalMembersContainer: {
780
+ flexDirection: 'row',
781
+ alignItems: 'center',
782
+ gap: theme.spacing.xs,
783
+ },
784
+ totalMembersText: {
785
+ fontFamily: Fonts.outfitMedium,
786
+ fontSize: moderateScale(12),
787
+ color: theme.colors.appleGreen,
788
+ opacity: 0.8,
789
+ },
790
+ tabContainer: {
791
+ flexDirection: 'row',
792
+ gap: theme.spacing.xs,
793
+ height: moderateScale(40),
794
+ backgroundColor: theme.colors.background,
795
+ borderRadius: moderateScale(29),
796
+ padding: moderateScale(2),
797
+ marginHorizontal: theme.spacing.md,
798
+ marginBottom: theme.spacing.md,
799
+ marginTop: theme.spacing.md
800
+ },
801
+ tabButton: {
802
+ flex: 1,
803
+ paddingVertical: theme.spacing.sm,
804
+ paddingHorizontal: theme.spacing.md,
805
+ backgroundColor: theme.colors.lightLavenderGray,
806
+ borderRadius: theme.borderRadius.xxl,
807
+ alignItems: 'center',
808
+ },
809
+ activeTabButton: {
810
+ backgroundColor: theme.colors.blue,
811
+ },
812
+ tabButtonText: {
813
+ fontFamily: Fonts.outfitSemiBold,
814
+ fontSize: moderateScale(14),
815
+ color: theme.colors.blue,
816
+ },
817
+ activeTabButtonText: {
818
+ color: theme.colors.white,
819
+ fontSize: moderateScale(14),
820
+ fontFamily: Fonts.outfitSemiBold,
821
+ },
822
+ tabContent: {
823
+ paddingHorizontal: theme.spacing.lg,
824
+ },
825
+ sectionContainer: {
826
+ marginBottom: theme.spacing.sm,
827
+ },
828
+ sectionHeading: {
829
+ fontFamily: Fonts.outfitLight,
830
+ fontSize: moderateScale(11.67),
831
+ color: theme.colors.blue,
832
+ marginVertical: theme.spacing.xs,
833
+ },
834
+ sectionContent: {
835
+ fontFamily: Fonts.outfitLight,
836
+ fontSize: moderateScale(13),
837
+ color: theme.colors.paraText,
838
+ lineHeight: moderateScale(20),
839
+ },
840
+ coachCard: {
841
+ flexDirection: 'row',
842
+ backgroundColor: theme.colors.lightLavenderGray,
843
+ borderRadius: theme.borderRadius.lg,
844
+ padding: theme.spacing.sm,
845
+ alignItems: 'center',
846
+ },
847
+ coachImageContainer: {
848
+ width: moderateScale(60),
849
+ height: moderateScale(60),
850
+ borderRadius: moderateScale(35),
851
+ backgroundColor: theme.colors.white,
852
+ justifyContent: 'center',
853
+ alignItems: 'center',
854
+ marginLeft: moderateScale(8),
855
+ marginRight: theme.spacing.md,
856
+ opacity: 1,
857
+ },
858
+ coachDetails: {
859
+ flex: 1,
860
+ },
861
+ coachName: {
862
+ fontFamily: Fonts.outfitSemiBold,
863
+ fontSize: moderateScale(16),
864
+ color: theme.colors.text,
865
+ marginBottom: moderateScale(4),
866
+ },
867
+ coachTitle: {
868
+ fontFamily: Fonts.outfitLight,
869
+ fontSize: moderateScale(12),
870
+ color: theme.colors.appleGreen,
871
+ marginBottom: moderateScale(2),
872
+ },
873
+ coachExperience: {
874
+ fontFamily: Fonts.outfitRegular,
875
+ fontSize: moderateScale(12),
876
+ color: theme.colors.textSecondary,
877
+ },
878
+ playersGrid: {
879
+ marginHorizontal: -theme.spacing.sm, // To counteract the gap in rows
880
+ },
881
+ playersRow: {
882
+ flexDirection: 'row',
883
+ justifyContent: 'flex-start',
884
+ alignItems: 'center',
885
+ marginVertical: theme.spacing.sm,
886
+ gap: theme.spacing.sm,
887
+ },
888
+ playerCard: {
889
+ position: 'relative',
890
+ width: width / 3 - theme.spacing.md,
891
+ height: moderateScale(113.49),
892
+ borderRadius: moderateScale(19.09),
893
+ borderWidth: moderateScale(1.06),
894
+ borderColor: theme.colors.border,
895
+ overflow: 'hidden',
896
+ },
897
+ playerImage: {
898
+ width: '100%',
899
+ height: '100%',
900
+ borderRadius: moderateScale(19.09),
901
+ },
902
+ playerNameOverlay: {
903
+ position: 'absolute',
904
+ bottom: 0,
905
+ width: '100%',
906
+ paddingHorizontal: theme.spacing.xs,
907
+ paddingVertical: moderateScale(4),
908
+ backgroundColor: 'rgba(0, 0, 0, 0.2)',
909
+ },
910
+ playerName: {
911
+ fontFamily: Fonts.outfitBold,
912
+ fontSize: moderateScale(12),
913
+ alignSelf: 'center',
914
+ color: theme.colors.white,
915
+ opacity: 1,
916
+ textAlign: 'left',
917
+ textShadowColor: 'rgba(0,0,0,0.6)',
918
+ textShadowOffset: { width: 0, height: 1 },
919
+ textShadowRadius: 2,
920
+ },
921
+ playerPlaceholder: {
922
+ width: '100%',
923
+ height: '100%',
924
+ backgroundColor: theme.colors.white,
925
+ justifyContent: 'center',
926
+ alignItems: 'center',
927
+ borderRadius: moderateScale(19.09),
928
+ },
929
+ // Date Picker Styles
930
+ horizontalLine: {
931
+ height: moderateScale(1),
932
+ backgroundColor: theme.colors.border,
933
+ marginVertical: moderateScale(1),
934
+ },
935
+ datePicker: {
936
+ marginVertical: theme.spacing.xs,
937
+ },
938
+ datePickerContainer: {
939
+ paddingHorizontal: theme.spacing.sm,
940
+ },
941
+ dateItem: {
942
+ alignItems: 'center',
943
+ justifyContent: 'center',
944
+ paddingHorizontal: theme.spacing.md,
945
+ paddingVertical: theme.spacing.sm,
946
+ marginHorizontal: theme.spacing.xs,
947
+ borderRadius: moderateScale(8),
948
+ // minWidth: moderateScale(40),
949
+ },
950
+ activeDateItem: {
951
+ backgroundColor: theme.colors.appleGreen,
952
+ height: moderateScale(42),
953
+ },
954
+ dateNumber: {
955
+ fontFamily: Fonts.outfitMedium,
956
+ fontSize: moderateScale(12),
957
+ color: theme.colors.appleGreen,
958
+ marginBottom: moderateScale(2),
959
+ },
960
+ dayName: {
961
+ fontFamily: Fonts.outfitRegular,
962
+ fontSize: moderateScale(10),
963
+ color: theme.colors.textSecondary,
964
+ },
965
+ activeDateText: {
966
+ color: theme.colors.white,
967
+ fontSize: moderateScale(14),
968
+ },
969
+ memberImageLoader: {
970
+ position: 'absolute',
971
+ top: '50%',
972
+ left: '50%',
973
+ marginTop: -10,
974
+ marginLeft: -10,
975
+ backgroundColor: 'rgba(255, 255, 255, 0.8)',
976
+ borderRadius: moderateScale(10),
977
+ padding: moderateScale(5),
978
+ },
979
+ });