create-gufran-expo-app 2.0.4 → 2.0.6

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 (43) hide show
  1. package/README.md +60 -321
  2. package/bin/cli.js +0 -1
  3. package/package.json +4 -3
  4. package/template/src/navigation/AuthStack.tsx +6 -25
  5. package/template/src/navigation/MainStack.tsx +0 -148
  6. package/template/src/navigation/RootNavigator.tsx +4 -26
  7. package/template/src/navigation/index.ts +0 -1
  8. package/template/src/navigation/navigationRef.ts +1 -1
  9. package/template/src/screens/HomeScreen.tsx +3 -215
  10. package/template/src/screens/auth/LoginScreen.tsx +13 -13
  11. package/template/src/screens/auth/index.ts +1 -6
  12. package/template/src/screens/index.ts +0 -35
  13. package/template/src/services/api.ts +5 -5
  14. package/template/src/services/authService.ts +3 -299
  15. package/template/src/services/mainServices.ts +19 -1914
  16. package/template/src/types/navigation.ts +5 -155
  17. package/template/src/utils/index.ts +5 -8
  18. package/template/src/navigation/MiddleStack.tsx +0 -35
  19. package/template/src/screens/auth/AddMamber.tsx +0 -428
  20. package/template/src/screens/auth/ForgotPasswordScreen.tsx +0 -176
  21. package/template/src/screens/auth/OTPVerifyScreen.tsx +0 -359
  22. package/template/src/screens/auth/RegisterScreen.tsx +0 -430
  23. package/template/src/screens/auth/SuccessScreen.tsx +0 -201
  24. package/template/src/screens/chat/ChatScreen.tsx +0 -1819
  25. package/template/src/screens/chat/ChatThreadsScreen.tsx +0 -360
  26. package/template/src/screens/chat/ReportMessageScreen.tsx +0 -238
  27. package/template/src/screens/clubs/Announcements.tsx +0 -426
  28. package/template/src/screens/clubs/BuyRaffleTicketsScreen.tsx +0 -568
  29. package/template/src/screens/clubs/ClubDeteils.tsx +0 -497
  30. package/template/src/screens/clubs/JoinClub.tsx +0 -841
  31. package/template/src/screens/events/EventScreen.tsx +0 -460
  32. package/template/src/screens/raffles/MyReferralMembersScreen.tsx +0 -758
  33. package/template/src/screens/raffles/RaffleDetailsScreen.tsx +0 -762
  34. package/template/src/screens/raffles/RafflesScreen.tsx +0 -495
  35. package/template/src/screens/raffles/SetRaffleReminderScreen.tsx +0 -390
  36. package/template/src/screens/teams/JoinTeamScreen.tsx +0 -464
  37. package/template/src/screens/teams/MyTeamDetailsScreen.tsx +0 -979
  38. package/template/src/screens/teams/MyTeamScreen.tsx +0 -568
  39. package/template/src/screens/teams/PendingRequestsScreen.tsx +0 -426
  40. package/template/src/screens/volunteerOpportunities/SetReminderScreen.tsx +0 -631
  41. package/template/src/screens/volunteerOpportunities/VolunteerOpportunitiesDetailsScreen.tsx +0 -1049
  42. package/template/src/screens/volunteerOpportunities/VolunteerOpportunitiesScreen.tsx +0 -608
  43. package/template/src/utils/ClubSearchManager.ts +0 -222
@@ -1,460 +0,0 @@
1
- import React, { useState } from 'react';
2
- import { View, Text, StyleSheet, StatusBar, Platform, TouchableOpacity, SectionList, Image } from 'react-native';
3
- import { SafeAreaView } from 'react-native-safe-area-context';
4
- import { theme } from '@constants';
5
- import { Fonts } from '@constants/Fonts';
6
- import { moderateScale } from '@utils/scaling';
7
- import SVG from '@assets/icons';
8
- import Images from '@assets/images';
9
- import { EventScreenProps } from '@navigation';
10
- import { SearchBar } from 'react-native-screens';
11
- import { TextInput } from '@components/common';
12
-
13
- // Mock Data
14
- interface Event {
15
- id: string;
16
- type: 'match' | 'training' | 'fundraiser' | 'event';
17
- title: string;
18
- subtitle?: string;
19
- time: string;
20
- location: string;
21
- team1?: { name: string; logo: any };
22
- team2?: { name: string; logo: any };
23
- tag?: string;
24
- }
25
-
26
- interface Section {
27
- title: string;
28
- data: Event[];
29
- }
30
-
31
- const EVENTS_DATA: Section[] = [
32
- {
33
- title: '6th May 2025',
34
- data: [
35
- {
36
- id: '1',
37
- type: 'match',
38
- title: 'Net Masters',
39
- time: '3:00 PM',
40
- location: '98 Shirley Street 4209, Sydney',
41
- team1: { name: 'All Starts', logo: Images.clubDefauldImage },
42
- team2: { name: 'Pirates', logo: Images.clubDefauldImage },
43
- subtitle: 'SAT, DEC 16'
44
- }
45
- ]
46
- },
47
- {
48
- title: '7th May 2025',
49
- data: [
50
- {
51
- id: '2',
52
- type: 'training',
53
- title: 'Team Strength Training',
54
- time: '2:00 PM - 4:00 PM',
55
- location: '98 Shirley Street 4209, Sydney',
56
- tag: 'Training'
57
- },
58
- {
59
- id: '3',
60
- type: 'fundraiser',
61
- title: 'Fundraiser Event',
62
- time: '2:00 PM - 4:00 PM',
63
- location: '98 Shirley Street 4209, Sydney',
64
- tag: 'Fundraiser'
65
- }
66
- ]
67
- }
68
- ];
69
-
70
- export const EventScreen: React.FC<EventScreenProps> = ({ navigation, route }) => {
71
- const [searchQuery, setSearchQuery] = useState('');
72
- const { selectedClub } = route.params || {};
73
-
74
- const renderItem = ({ item }: { item: Event }) => {
75
- if (item.type === 'match') {
76
- return (
77
- <View style={styles.card}>
78
- <View style={styles.cardHeader}>
79
- <Image source={Images.clubDefauldImage} style={styles.smallLogo} />
80
- <Text style={styles.cardTitle}>{item.title}</Text>
81
- </View>
82
-
83
- <View style={styles.matchInfo}>
84
- <Text style={styles.matchDate}>{item.subtitle}</Text>
85
- <Text style={styles.matchTime}>{item.time}</Text>
86
- </View>
87
-
88
- <View style={styles.teamsContainer}>
89
- <View style={styles.team}>
90
- <Image source={item.team1?.logo} style={styles.teamLogo} />
91
- <View>
92
- <Text style={styles.teamName}>{item.team1?.name}</Text>
93
- <Text style={styles.teamSubName}>Boomers</Text>
94
- </View>
95
- </View>
96
- <Text style={styles.vsText}>VS</Text>
97
- <View style={styles.team}>
98
- <View style={{ alignItems: 'flex-end' }}>
99
- <Text style={styles.teamName}>{item.team2?.name}</Text>
100
- <Text style={styles.teamSubName}>Eagles</Text>
101
- </View>
102
- <Image source={item.team2?.logo} style={styles.teamLogo} />
103
- </View>
104
- </View>
105
-
106
- <View style={styles.locationContainer}>
107
- <SVG.locationIcon width={moderateScale(16)} height={moderateScale(16)} />
108
- <Text style={styles.locationText}>{item.location}</Text>
109
- </View>
110
- </View>
111
- );
112
- }
113
-
114
- return (
115
- <View style={styles.card}>
116
- <View style={styles.cardHeader}>
117
- <Image source={Images.clubDefauldImage} style={styles.smallLogo} />
118
- <Text style={styles.cardTitle}>Net Masters</Text>
119
- </View>
120
-
121
- <View style={styles.eventRow}>
122
- <Text style={styles.eventTitle}>{item.title}</Text>
123
- {item.tag && (
124
- <View style={[styles.tag, item.tag === 'Training' ? styles.trainingTag : styles.fundraiserTag]}>
125
- <Text style={[styles.tagText, item.tag === 'Training' ? styles.trainingTagText : styles.fundraiserTagText]}>
126
- {item.tag}
127
- </Text>
128
- </View>
129
- )}
130
- </View>
131
-
132
- <Text style={styles.eventTime}>{item.time}</Text>
133
-
134
- <View style={styles.locationContainer}>
135
- <SVG.locationIcon width={moderateScale(16)} height={moderateScale(16)} />
136
- <Text style={styles.locationText}>{item.location}</Text>
137
- </View>
138
- </View>
139
- );
140
- };
141
-
142
- const renderSectionHeader = ({ section: { title } }: { section: { title: string } }) => (
143
- <Text style={styles.sectionHeader}>{title}</Text>
144
- );
145
-
146
- const renderEmptyComponent = () => (
147
- <View style={styles.emptyContainer}>
148
- <Text style={styles.emptyListText}>No events found</Text>
149
- <Text style={styles.emptySubText}>Try refreshing or check back later</Text>
150
- </View>
151
- );
152
-
153
- return (
154
- <View style={styles.container}>
155
- <StatusBar
156
- barStyle="light-content"
157
- backgroundColor={theme.colors.blue}
158
- translucent={Platform.OS === 'android' ? true : false}
159
- />
160
- {Platform.OS === 'ios' && <View style={styles.statusBarBackground} />}
161
- <SafeAreaView style={styles.header}>
162
- <View style={{ flexDirection: 'row', paddingHorizontal: theme.spacing.lg }}>
163
- <TouchableOpacity onPress={() => navigation.goBack()}>
164
- <SVG.arrowLeft_white width={moderateScale(25)} height={moderateScale(25)} />
165
- </TouchableOpacity>
166
- <View style={{ flexDirection: 'row' }}>
167
- <View style={styles.userConSty}>
168
- {!!selectedClub?.clubImage ? (
169
- <Image
170
- source={{ uri: selectedClub.clubImage }}
171
- resizeMode='cover'
172
- style={styles.userDetailsSty} />
173
- ) : (
174
- <View style={styles.placeholderLogoHeader}>
175
- <SVG.UsersIcon width={moderateScale(20)} height={moderateScale(20)} />
176
- </View>
177
- )}
178
- </View>
179
- <Text style={styles.userNameSty}>{selectedClub?.clubName || 'Boomers Club'}</Text>
180
- </View>
181
- </View>
182
- <Text style={styles.headerTitle}>Events</Text>
183
-
184
- <View style={styles.content}>
185
- <View style={styles.searchContainer}>
186
- {/* <SVG.search width={moderateScale(20)} height={moderateScale(20)} /> */}
187
- {/* <TextInput
188
- style={styles.searchInput}
189
- placeholder="Search here"
190
- placeholderTextColor={theme.colors.textSecondary}
191
- value={searchQuery}
192
- onChangeText={setSearchQuery}
193
- /> */}
194
- <TextInput
195
- leftIconStyle={{ marginLeft: theme.spacing.sm }}
196
- leftIconSizeWidth={moderateScale(17)}
197
- leftIconSizeHeight={moderateScale(17)}
198
- placeholder="Unique code and club name"
199
- style={styles.searchInput}
200
- leftIcon={SVG.search}
201
- variant="outlined"
202
- maxLength={50}
203
- value={searchQuery}
204
- onChangeText={setSearchQuery}
205
- />
206
-
207
- </View>
208
- <View style={{ marginTop: theme.spacing.md }}>
209
-
210
- <SectionList
211
- sections={EVENTS_DATA}
212
- keyExtractor={(item) => item.id}
213
- renderItem={renderItem}
214
- renderSectionHeader={renderSectionHeader}
215
- contentContainerStyle={styles.listContent}
216
- showsVerticalScrollIndicator={false}
217
- stickySectionHeadersEnabled={false}
218
- ListEmptyComponent={renderEmptyComponent}
219
- />
220
- </View>
221
- </View>
222
- </SafeAreaView>
223
- </View>
224
- );
225
- };
226
-
227
- const styles = StyleSheet.create({
228
- container: {
229
- flex: 1,
230
- backgroundColor: theme.colors.blue,
231
- },
232
- statusBarBackground: {
233
- position: 'absolute',
234
- top: 0,
235
- left: 0,
236
- right: 0,
237
- height: Platform.OS === 'ios' ? 44 : 0,
238
- backgroundColor: theme.colors.blue,
239
- zIndex: 1000,
240
- },
241
- header: {
242
- flex: 1,
243
- backgroundColor: theme.colors.blue,
244
- paddingVertical: theme.spacing.xs,
245
- paddingTop: Platform.OS === 'android' ? theme.spacing.lg : theme.spacing.xs,
246
- },
247
- headerTitle: {
248
- marginTop: moderateScale(20),
249
- fontFamily: Fonts.outfitMedium,
250
- fontSize: moderateScale(22),
251
- color: theme.colors.white,
252
- paddingHorizontal: theme.spacing.lg,
253
- marginBottom: theme.spacing.sm,
254
- },
255
- content: {
256
- flex: 1,
257
- backgroundColor: theme.colors.white,
258
- paddingHorizontal: theme.spacing.lg,
259
- paddingTop: theme.spacing.md,
260
- borderTopLeftRadius: moderateScale(30),
261
- borderTopRightRadius: moderateScale(30),
262
- },
263
- userConSty: {
264
- marginHorizontal: moderateScale(10),
265
- width: moderateScale(30),
266
- height: moderateScale(30),
267
- borderRadius: moderateScale(15),
268
- borderWidth: 1.5,
269
- borderColor: theme.colors.imageBorder,
270
- backgroundColor: theme.colors.background,
271
- alignItems: 'center',
272
- justifyContent: 'center'
273
- },
274
- userNameSty: {
275
- marginTop: moderateScale(5),
276
- color: theme.colors.white,
277
- fontFamily: Fonts.outfitMedium,
278
- fontSize: moderateScale(15)
279
- },
280
- userDetailsSty: {
281
- width: moderateScale(30),
282
- height: moderateScale(30),
283
- borderRadius: moderateScale(15),
284
- },
285
- placeholderLogoHeader: {
286
- width: moderateScale(20),
287
- height: moderateScale(20),
288
- borderRadius: moderateScale(10),
289
- alignItems: 'center',
290
- justifyContent: 'center'
291
- },
292
- searchContainer: {
293
- paddingVertical: theme.spacing.sm,
294
- marginBottom: theme.spacing.lg,
295
- },
296
- searchInput: {
297
- flex: 1,
298
- fontFamily: Fonts.outfitRegular,
299
- fontSize: moderateScale(14),
300
- color: theme.colors.text,
301
- },
302
- sectionHeader: {
303
- fontFamily: Fonts.outfitMedium,
304
- fontSize: moderateScale(14),
305
- color: theme.colors.blue,
306
- marginBottom: theme.spacing.md,
307
- marginTop: theme.spacing.sm,
308
- },
309
- listContent: {
310
- paddingBottom: theme.spacing.xl,
311
- },
312
- card: {
313
- backgroundColor: theme.colors.lightLavenderGray,
314
- borderRadius: moderateScale(16),
315
- padding: theme.spacing.md,
316
- marginBottom: theme.spacing.lg,
317
- shadowColor: '#000',
318
- shadowOffset: { width: 0, height: 2 },
319
- shadowOpacity: 0.05,
320
- shadowRadius: 4,
321
- elevation: 2,
322
- borderWidth: 1,
323
- borderColor: theme.colors.imageBorder,
324
- },
325
- cardHeader: {
326
- flexDirection: 'row',
327
- alignItems: 'center',
328
- marginBottom: theme.spacing.sm,
329
- },
330
- smallLogo: {
331
- width: moderateScale(20),
332
- height: moderateScale(20),
333
- borderRadius: moderateScale(10),
334
- marginRight: theme.spacing.xs,
335
- },
336
- cardTitle: {
337
- fontFamily: Fonts.outfitMedium,
338
- fontSize: moderateScale(14),
339
- color: theme.colors.text,
340
- },
341
- matchInfo: {
342
- flexDirection: 'row',
343
- justifyContent: 'space-between',
344
- marginBottom: theme.spacing.md,
345
- },
346
- matchDate: {
347
- fontFamily: Fonts.outfitRegular,
348
- fontSize: moderateScale(12),
349
- color: theme.colors.black,
350
- textTransform: 'uppercase',
351
- },
352
- matchTime: {
353
- fontFamily: Fonts.outfitRegular,
354
- fontSize: moderateScale(12),
355
- color: theme.colors.text,
356
- },
357
- teamsContainer: {
358
- flexDirection: 'row',
359
- alignItems: 'center',
360
- justifyContent: 'space-between',
361
- marginBottom: theme.spacing.md,
362
- },
363
- team: {
364
- flexDirection: 'row',
365
- alignItems: 'center',
366
- flex: 1,
367
- },
368
- teamLogo: {
369
- width: moderateScale(40),
370
- height: moderateScale(40),
371
- borderRadius: moderateScale(20),
372
- marginHorizontal: theme.spacing.sm,
373
- },
374
- teamName: {
375
- fontFamily: Fonts.outfitSemiBold,
376
- fontSize: moderateScale(14),
377
- color: theme.colors.text,
378
- },
379
- teamSubName: {
380
- fontFamily: Fonts.outfitRegular,
381
- fontSize: moderateScale(12),
382
- color: theme.colors.textSecondary,
383
- },
384
- vsText: {
385
- fontFamily: Fonts.outfitBold,
386
- fontSize: moderateScale(16),
387
- color: theme.colors.text,
388
- marginHorizontal: theme.spacing.sm,
389
- },
390
- locationContainer: {
391
- flexDirection: 'row',
392
- alignItems: 'center',
393
- borderTopWidth: 1,
394
- borderTopColor: theme.colors.border,
395
- paddingTop: theme.spacing.sm,
396
- },
397
- locationText: {
398
- fontFamily: Fonts.outfitRegular,
399
- fontSize: moderateScale(12),
400
- color: theme.colors.textSecondary,
401
- marginLeft: theme.spacing.xs,
402
- },
403
- eventRow: {
404
- flexDirection: 'row',
405
- justifyContent: 'space-between',
406
- alignItems: 'center',
407
- marginBottom: theme.spacing.xs,
408
- },
409
- eventTitle: {
410
- fontFamily: Fonts.outfitSemiBold,
411
- fontSize: moderateScale(16),
412
- color: theme.colors.text,
413
- },
414
- tag: {
415
- paddingHorizontal: theme.spacing.sm,
416
- paddingVertical: theme.spacing.xs / 2,
417
- borderRadius: moderateScale(12),
418
- },
419
- trainingTag: {
420
- backgroundColor: '#E0F7FA',
421
- },
422
- fundraiserTag: {
423
- backgroundColor: '#FCE4EC',
424
- },
425
- tagText: {
426
- fontFamily: Fonts.outfitRegular,
427
- fontSize: moderateScale(10),
428
- },
429
- trainingTagText: {
430
- color: '#006064',
431
- },
432
- fundraiserTagText: {
433
- color: '#880E4F',
434
- },
435
- eventTime: {
436
- fontFamily: Fonts.outfitRegular,
437
- fontSize: moderateScale(12),
438
- color: theme.colors.textSecondary,
439
- marginBottom: theme.spacing.md,
440
- },
441
- emptyContainer: {
442
- flex: 1,
443
- justifyContent: 'center',
444
- alignItems: 'center',
445
- paddingVertical: theme.spacing.xl,
446
- },
447
- emptyListText: {
448
- fontFamily: Fonts.outfitMedium,
449
- fontSize: theme.typography.fontSize.md,
450
- color: theme.colors.text,
451
- textAlign: 'center',
452
- marginBottom: theme.spacing.xs,
453
- },
454
- emptySubText: {
455
- fontFamily: Fonts.outfitRegular,
456
- fontSize: theme.typography.fontSize.sm,
457
- color: theme.colors.textSecondary,
458
- textAlign: 'center',
459
- },
460
- });