@varunindiit/create-rn-starter 1.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.
- package/LICENSE +21 -0
- package/README.md +93 -0
- package/bin/index.js +270 -0
- package/lib/prompt.js +63 -0
- package/lib/rename.js +239 -0
- package/lib/scaffold.js +110 -0
- package/lib/utils.js +122 -0
- package/package.json +38 -0
- package/template/.eslintrc.js +4 -0
- package/template/.prettierrc.js +5 -0
- package/template/.watchmanconfig +1 -0
- package/template/App.tsx +100 -0
- package/template/Gemfile +17 -0
- package/template/README.md +97 -0
- package/template/__tests__/App.test.tsx +13 -0
- package/template/_gitignore +75 -0
- package/template/android/app/build.gradle +119 -0
- package/template/android/app/debug.keystore +0 -0
- package/template/android/app/proguard-rules.pro +10 -0
- package/template/android/app/src/main/AndroidManifest.xml +45 -0
- package/template/android/app/src/main/assets/fonts/MonaSans-Black.ttf +0 -0
- package/template/android/app/src/main/assets/fonts/MonaSans-BlackItalic.ttf +0 -0
- package/template/android/app/src/main/assets/fonts/MonaSans-Bold.ttf +0 -0
- package/template/android/app/src/main/assets/fonts/MonaSans-BoldItalic.ttf +0 -0
- package/template/android/app/src/main/assets/fonts/MonaSans-ExtraBold.ttf +0 -0
- package/template/android/app/src/main/assets/fonts/MonaSans-ExtraBoldItalic.ttf +0 -0
- package/template/android/app/src/main/assets/fonts/MonaSans-ExtraLight.ttf +0 -0
- package/template/android/app/src/main/assets/fonts/MonaSans-ExtraLightItalic.ttf +0 -0
- package/template/android/app/src/main/assets/fonts/MonaSans-Italic.ttf +0 -0
- package/template/android/app/src/main/assets/fonts/MonaSans-Light.ttf +0 -0
- package/template/android/app/src/main/assets/fonts/MonaSans-LightItalic.ttf +0 -0
- package/template/android/app/src/main/assets/fonts/MonaSans-Medium.ttf +0 -0
- package/template/android/app/src/main/assets/fonts/MonaSans-MediumItalic.ttf +0 -0
- package/template/android/app/src/main/assets/fonts/MonaSans-Regular.ttf +0 -0
- package/template/android/app/src/main/assets/fonts/MonaSans-SemiBold.ttf +0 -0
- package/template/android/app/src/main/assets/fonts/MonaSans-SemiBoldItalic.ttf +0 -0
- package/template/android/app/src/main/java/com/awesomeproject/MainActivity.kt +22 -0
- package/template/android/app/src/main/java/com/awesomeproject/MainApplication.kt +27 -0
- package/template/android/app/src/main/res/drawable/launch_screen.png +0 -0
- package/template/android/app/src/main/res/drawable/rn_edit_text_material.xml +37 -0
- package/template/android/app/src/main/res/layout/launch_screen.xml +12 -0
- package/template/android/app/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
- package/template/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png +0 -0
- package/template/android/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
- package/template/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png +0 -0
- package/template/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
- package/template/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png +0 -0
- package/template/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
- package/template/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png +0 -0
- package/template/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
- package/template/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png +0 -0
- package/template/android/app/src/main/res/values/colors.xml +3 -0
- package/template/android/app/src/main/res/values/strings.xml +3 -0
- package/template/android/app/src/main/res/values/styles.xml +11 -0
- package/template/android/build.gradle +21 -0
- package/template/android/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/template/android/gradle/wrapper/gradle-wrapper.properties +7 -0
- package/template/android/gradle.properties +44 -0
- package/template/android/gradlew +248 -0
- package/template/android/gradlew.bat +98 -0
- package/template/android/link-assets-manifest.json +69 -0
- package/template/android/settings.gradle +6 -0
- package/template/app.json +4 -0
- package/template/babel.config.js +4 -0
- package/template/declarations.d.ts +6 -0
- package/template/env.example +20 -0
- package/template/index.js +10 -0
- package/template/ios/.xcode.env +11 -0
- package/template/ios/.xcode.env.local +1 -0
- package/template/ios/AwesomeProject/AppDelegate.swift +60 -0
- package/template/ios/AwesomeProject/Images.xcassets/AppIcon.appiconset/Contents.json +53 -0
- package/template/ios/AwesomeProject/Images.xcassets/Contents.json +6 -0
- package/template/ios/AwesomeProject/Images.xcassets/Splash.imageset/Contents.json +23 -0
- package/template/ios/AwesomeProject/Images.xcassets/Splash.imageset/Splash@1x.png +0 -0
- package/template/ios/AwesomeProject/Images.xcassets/Splash.imageset/Splash@2x.png +0 -0
- package/template/ios/AwesomeProject/Images.xcassets/Splash.imageset/Splash@3x.png +0 -0
- package/template/ios/AwesomeProject/Info.plist +89 -0
- package/template/ios/AwesomeProject/LaunchScreen.storyboard +40 -0
- package/template/ios/AwesomeProject/PrivacyInfo.xcprivacy +38 -0
- package/template/ios/AwesomeProject.xcodeproj/project.pbxproj +576 -0
- package/template/ios/AwesomeProject.xcodeproj/xcshareddata/xcschemes/AwesomeProject.xcscheme +88 -0
- package/template/ios/AwesomeProject.xcworkspace/contents.xcworkspacedata +10 -0
- package/template/ios/Podfile +68 -0
- package/template/ios/link-assets-manifest.json +69 -0
- package/template/jest.config.js +3 -0
- package/template/metro.config.js +24 -0
- package/template/package.json +68 -0
- package/template/react-native.config.js +7 -0
- package/template/src/assets/fonts/MonaSans-Black.ttf +0 -0
- package/template/src/assets/fonts/MonaSans-BlackItalic.ttf +0 -0
- package/template/src/assets/fonts/MonaSans-Bold.ttf +0 -0
- package/template/src/assets/fonts/MonaSans-BoldItalic.ttf +0 -0
- package/template/src/assets/fonts/MonaSans-ExtraBold.ttf +0 -0
- package/template/src/assets/fonts/MonaSans-ExtraBoldItalic.ttf +0 -0
- package/template/src/assets/fonts/MonaSans-ExtraLight.ttf +0 -0
- package/template/src/assets/fonts/MonaSans-ExtraLightItalic.ttf +0 -0
- package/template/src/assets/fonts/MonaSans-Italic.ttf +0 -0
- package/template/src/assets/fonts/MonaSans-Light.ttf +0 -0
- package/template/src/assets/fonts/MonaSans-LightItalic.ttf +0 -0
- package/template/src/assets/fonts/MonaSans-Medium.ttf +0 -0
- package/template/src/assets/fonts/MonaSans-MediumItalic.ttf +0 -0
- package/template/src/assets/fonts/MonaSans-Regular.ttf +0 -0
- package/template/src/assets/fonts/MonaSans-SemiBold.ttf +0 -0
- package/template/src/assets/fonts/MonaSans-SemiBoldItalic.ttf +0 -0
- package/template/src/assets/image/BackGroundAuth.png +0 -0
- package/template/src/assets/image/BackgroundVerification.png +0 -0
- package/template/src/assets/image/logo.png +0 -0
- package/template/src/assets/svg/add-circle.svg +5 -0
- package/template/src/assets/svg/airConditioning.svg +12 -0
- package/template/src/assets/svg/apple.svg +3 -0
- package/template/src/assets/svg/arrowDown.svg +3 -0
- package/template/src/assets/svg/back.svg +10 -0
- package/template/src/assets/svg/bag.svg +11 -0
- package/template/src/assets/svg/calender.svg +5 -0
- package/template/src/assets/svg/car.svg +10 -0
- package/template/src/assets/svg/carConfirm.svg +60 -0
- package/template/src/assets/svg/chatActive.svg +3 -0
- package/template/src/assets/svg/chatUnActive.svg +3 -0
- package/template/src/assets/svg/document-text.svg +6 -0
- package/template/src/assets/svg/gender.svg +11 -0
- package/template/src/assets/svg/google.svg +6 -0
- package/template/src/assets/svg/headphone.svg +3 -0
- package/template/src/assets/svg/homeActive.svg +3 -0
- package/template/src/assets/svg/homeUnActive.svg +3 -0
- package/template/src/assets/svg/logo.svg +18 -0
- package/template/src/assets/svg/logout.svg +5 -0
- package/template/src/assets/svg/maxBack.svg +4 -0
- package/template/src/assets/svg/message-text.svg +7 -0
- package/template/src/assets/svg/music.svg +5 -0
- package/template/src/assets/svg/noSmoking.svg +10 -0
- package/template/src/assets/svg/notification.svg +5 -0
- package/template/src/assets/svg/passenger.svg +4 -0
- package/template/src/assets/svg/phone.svg +3 -0
- package/template/src/assets/svg/rightArrow.svg +3 -0
- package/template/src/assets/svg/security-user.svg +5 -0
- package/template/src/assets/svg/star.svg +3 -0
- package/template/src/assets/svg/tick-circle.svg +4 -0
- package/template/src/assets/svg/trafficLight.svg +41 -0
- package/template/src/assets/svg/tripActive.svg +10 -0
- package/template/src/assets/svg/tripUnActive.svg +10 -0
- package/template/src/assets/svg/usbChargers.svg +3 -0
- package/template/src/assets/svg/user.svg +4 -0
- package/template/src/assets/svg/userActive.svg +3 -0
- package/template/src/assets/svg/userPlaceholder.svg +3 -0
- package/template/src/assets/svg/userUnActive.svg +3 -0
- package/template/src/components/AuthLayout/AuthLayout.tsx +170 -0
- package/template/src/components/AuthLayout/index.ts +1 -0
- package/template/src/components/BottomSheet/BottomSheet.tsx +73 -0
- package/template/src/components/BottomSheet/BottomSheetAlert.tsx +100 -0
- package/template/src/components/BottomSheet/CenterAlert.tsx +153 -0
- package/template/src/components/BottomSheet/index.ts +2 -0
- package/template/src/components/BottomTabBar/index.tsx +145 -0
- package/template/src/components/Button/RNButton.tsx +152 -0
- package/template/src/components/Button/index.ts +2 -0
- package/template/src/components/Common/Avatar.tsx +80 -0
- package/template/src/components/Common/Card.tsx +49 -0
- package/template/src/components/Common/CardBrandLogo.tsx +66 -0
- package/template/src/components/Common/Checkbox.tsx +65 -0
- package/template/src/components/Common/Chip.tsx +79 -0
- package/template/src/components/Common/CommonStyles.tsx +594 -0
- package/template/src/components/Common/Divider.tsx +33 -0
- package/template/src/components/Common/DriverTripCard.tsx +308 -0
- package/template/src/components/Common/Dropdown.tsx +161 -0
- package/template/src/components/Common/EmptyState.tsx +52 -0
- package/template/src/components/Common/FAB.tsx +68 -0
- package/template/src/components/Common/HeaderLocation.tsx +108 -0
- package/template/src/components/Common/Loader.tsx +23 -0
- package/template/src/components/Common/RatingStars.tsx +103 -0
- package/template/src/components/Common/RouteDots.tsx +98 -0
- package/template/src/components/Common/SegmentedControl.tsx +126 -0
- package/template/src/components/Common/SosButton.tsx +80 -0
- package/template/src/components/Common/SosSheet.tsx +344 -0
- package/template/src/components/Common/StarRating.tsx +58 -0
- package/template/src/components/Common/StatusBadge.tsx +56 -0
- package/template/src/components/Common/Toggle.tsx +66 -0
- package/template/src/components/Common/TripCard.tsx +247 -0
- package/template/src/components/Common/UploadBox.tsx +106 -0
- package/template/src/components/Container/MainContainer.tsx +76 -0
- package/template/src/components/Container/index.ts +1 -0
- package/template/src/components/Header/index.tsx +143 -0
- package/template/src/components/Icon/SvgIcons.tsx +1991 -0
- package/template/src/components/ImagePickerSheet/ImagePickerSheet.tsx +233 -0
- package/template/src/components/ImagePickerSheet/index.ts +2 -0
- package/template/src/components/Input/CountryDropdown.tsx +71 -0
- package/template/src/components/Input/OtpInput.tsx +117 -0
- package/template/src/components/Input/RNInput.tsx +138 -0
- package/template/src/components/Input/index.ts +4 -0
- package/template/src/components/Picker/DatePickerSheet.tsx +393 -0
- package/template/src/components/Picker/PassengerPickerSheet.tsx +237 -0
- package/template/src/components/Text/RNText.tsx +62 -0
- package/template/src/components/Text/index.ts +1 -0
- package/template/src/components/index.ts +44 -0
- package/template/src/hooks/useCurrentLocation.ts +72 -0
- package/template/src/localization/i18n.ts +29 -0
- package/template/src/localization/i18next.d.ts +11 -0
- package/template/src/localization/index.ts +4 -0
- package/template/src/localization/languageStorage.ts +27 -0
- package/template/src/localization/languages.ts +62 -0
- package/template/src/localization/resources/en.ts +703 -0
- package/template/src/localization/resources/fr.ts +703 -0
- package/template/src/localization/useLanguage.ts +42 -0
- package/template/src/navigation/AuthNavigation.tsx +23 -0
- package/template/src/navigation/BottomTabs.tsx +24 -0
- package/template/src/navigation/RootNavigation.tsx +27 -0
- package/template/src/navigation/RouteKey.ts +22 -0
- package/template/src/navigation/StackNavigation.tsx +52 -0
- package/template/src/navigation/paramLists.ts +25 -0
- package/template/src/redux/slice/app.ts +66 -0
- package/template/src/redux/slice/auth.ts +40 -0
- package/template/src/redux/slice/userProfile.ts +124 -0
- package/template/src/redux/store.ts +17 -0
- package/template/src/screen/auth/Login.tsx +69 -0
- package/template/src/screen/onboarding/LanguageSelection.tsx +231 -0
- package/template/src/screen/root/home/index.tsx +36 -0
- package/template/src/screen/root/profile/index.tsx +69 -0
- package/template/src/screen/shared/Chat.tsx +308 -0
- package/template/src/screen/shared/EditProfile.tsx +407 -0
- package/template/src/screen/shared/HelpSupport.tsx +678 -0
- package/template/src/screen/shared/LocationSearch.tsx +362 -0
- package/template/src/screen/shared/Messages.tsx +115 -0
- package/template/src/screen/shared/Notifications.tsx +86 -0
- package/template/src/screen/shared/PrivacyPolicy.tsx +297 -0
- package/template/src/screen/shared/Profile.tsx +118 -0
- package/template/src/screen/shared/Ratings.tsx +170 -0
- package/template/src/screen/shared/TermsConditions.tsx +315 -0
- package/template/src/screen/shared/profile/DriverProfile.tsx +262 -0
- package/template/src/screen/shared/profile/PassengerProfile.tsx +123 -0
- package/template/src/screen/shared/profile/ProfileParts.tsx +219 -0
- package/template/src/services/Config.ts +37 -0
- package/template/src/services/api.ts +37 -0
- package/template/src/services/index.ts +4 -0
- package/template/src/services/places.ts +320 -0
- package/template/src/services/storage.ts +33 -0
- package/template/src/theme/fonts.ts +30 -0
- package/template/src/theme/index.ts +3 -0
- package/template/src/theme/spacing.ts +66 -0
- package/template/src/theme/theme.ts +58 -0
- package/template/src/types/env.d.ts +8 -0
- package/template/src/types/index.ts +3 -0
- package/template/src/utils/card.ts +101 -0
- package/template/src/utils/constants.ts +39 -0
- package/template/src/utils/functions.ts +24 -0
- package/template/tsconfig.json +8 -0
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { ScrollView, StyleSheet, View } from 'react-native';
|
|
3
|
+
import { moderateScale } from 'react-native-size-matters';
|
|
4
|
+
import LinearGradient from 'react-native-linear-gradient';
|
|
5
|
+
import { Card, Header, MainContainer, RNText } from '../../components';
|
|
6
|
+
import { SPACING, THEME } from '../../theme';
|
|
7
|
+
import { useLanguage } from '../../localization';
|
|
8
|
+
import { FileTextIcon } from '../../components/Icon/SvgIcons';
|
|
9
|
+
|
|
10
|
+
interface Term {
|
|
11
|
+
title: string;
|
|
12
|
+
body: string;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const TERMS: Term[] = [
|
|
16
|
+
{
|
|
17
|
+
title: 'Acceptance of Terms',
|
|
18
|
+
body: 'By downloading, accessing, or using HD WAKA, you confirm that you have read, understood, and agree to be bound by these Terms & Conditions. If you do not agree, please discontinue use of the platform.',
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
title: 'Account Registration',
|
|
22
|
+
body: 'You must provide accurate, current and complete information when creating an account. You are responsible for safeguarding your password and for any activities or actions under your account.',
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
title: 'Use of the Service',
|
|
26
|
+
body: 'HD WAKA connects passengers with independent drivers for ride-sharing services. The platform is for personal, non-commercial use unless explicitly authorised. You agree not to misuse the service in any way.',
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
title: 'Bookings & Payments',
|
|
30
|
+
body: 'When booking a ride, you agree to pay the displayed fare including applicable taxes and service fees. Payments are processed through our secure third-party providers. Cash payments may be offered for specific routes at the driver’s discretion.',
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
title: 'Cancellations & Refunds',
|
|
34
|
+
body: 'You may cancel a booking before the driver arrives. Late cancellations or no-shows may incur a fee. Refunds for eligible cancellations are processed back to the original payment method within 5–7 business days.',
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
title: 'User Conduct',
|
|
38
|
+
body: 'You agree to treat drivers and other passengers with respect, follow safety guidelines, and not engage in unlawful, abusive or disruptive behaviour. Violations may result in suspension or permanent account termination.',
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
title: 'Driver Responsibilities',
|
|
42
|
+
body: 'Drivers must hold a valid licence, maintain a roadworthy vehicle, and comply with all traffic laws. HD WAKA reserves the right to verify documents, conduct background checks and remove drivers who breach platform policies.',
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
title: 'Liability & Disclaimers',
|
|
46
|
+
body: 'HD WAKA acts as a technology platform connecting users. We are not a transportation provider and are not liable for any loss, injury or damage arising from a trip, except to the extent required by law.',
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
title: 'Intellectual Property',
|
|
50
|
+
body: 'All content, logos, trademarks and software within HD WAKA are the exclusive property of the company or its licensors. You may not copy, modify or distribute any part of the service without prior written consent.',
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
title: 'Account Termination',
|
|
54
|
+
body: 'We may suspend or terminate your access at any time for breach of these Terms, fraudulent activity, or actions that pose risk to other users. You may close your account at any time from the Profile screen.',
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
title: 'Changes to Terms',
|
|
58
|
+
body: 'We may update these Terms periodically. Material changes will be communicated through the app or via email. Your continued use of HD WAKA following any update constitutes acceptance of the revised Terms.',
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
title: 'Governing Law',
|
|
62
|
+
body: 'These Terms are governed by the laws of the country in which the service is offered, without regard to its conflict-of-law principles. Any disputes shall be resolved in the competent local courts.',
|
|
63
|
+
},
|
|
64
|
+
];
|
|
65
|
+
|
|
66
|
+
const TermsConditions: React.FC = () => {
|
|
67
|
+
const { t } = useLanguage();
|
|
68
|
+
return (
|
|
69
|
+
<MainContainer
|
|
70
|
+
gradient
|
|
71
|
+
gradientColors={['#FBE3CD', '#FFF6EC', '#FFFFFF']}
|
|
72
|
+
gradientStart={{ x: 0, y: 0 }}
|
|
73
|
+
gradientEnd={{ x: 0, y: 0.45 }}
|
|
74
|
+
>
|
|
75
|
+
<Header title={t('profile.termsConditions')} safeArea={false} />
|
|
76
|
+
|
|
77
|
+
<ScrollView
|
|
78
|
+
contentContainerStyle={styles.scroll}
|
|
79
|
+
showsVerticalScrollIndicator={false}
|
|
80
|
+
>
|
|
81
|
+
<LinearGradient
|
|
82
|
+
colors={['#2C1A0E', '#4A2C16']}
|
|
83
|
+
start={{ x: 0, y: 0 }}
|
|
84
|
+
end={{ x: 1, y: 1 }}
|
|
85
|
+
style={styles.heroBox}
|
|
86
|
+
>
|
|
87
|
+
<View style={styles.hero}>
|
|
88
|
+
<View style={styles.heroIconWrap}>
|
|
89
|
+
<FileTextIcon size={moderateScale(28)} color="#FFFFFF" />
|
|
90
|
+
</View>
|
|
91
|
+
<RNText
|
|
92
|
+
font="bold"
|
|
93
|
+
size={20}
|
|
94
|
+
color="#FFFFFF"
|
|
95
|
+
style={styles.heroTitle}
|
|
96
|
+
>
|
|
97
|
+
Terms & Conditions
|
|
98
|
+
</RNText>
|
|
99
|
+
<RNText
|
|
100
|
+
size={13}
|
|
101
|
+
color="rgba(255,255,255,0.85)"
|
|
102
|
+
style={styles.heroSubtitle}
|
|
103
|
+
lineHeight={moderateScale(19)}
|
|
104
|
+
>
|
|
105
|
+
Please review these terms carefully — they govern your use of HD
|
|
106
|
+
WAKA and the rides booked through our platform.
|
|
107
|
+
</RNText>
|
|
108
|
+
<View style={styles.heroFooter}>
|
|
109
|
+
<View style={styles.versionPill}>
|
|
110
|
+
<RNText font="medium" size={11} color="#FFFFFF">
|
|
111
|
+
Version 2.4
|
|
112
|
+
</RNText>
|
|
113
|
+
</View>
|
|
114
|
+
<RNText size={11} color="rgba(255,255,255,0.72)">
|
|
115
|
+
Effective · May 12, 2026
|
|
116
|
+
</RNText>
|
|
117
|
+
</View>
|
|
118
|
+
</View>
|
|
119
|
+
</LinearGradient>
|
|
120
|
+
|
|
121
|
+
<View style={styles.tocCard}>
|
|
122
|
+
<RNText
|
|
123
|
+
font="semibold"
|
|
124
|
+
size={13}
|
|
125
|
+
color={THEME.labelBrown}
|
|
126
|
+
style={styles.tocLabel}
|
|
127
|
+
>
|
|
128
|
+
AGREEMENT BETWEEN YOU AND HD WAKA
|
|
129
|
+
</RNText>
|
|
130
|
+
<RNText
|
|
131
|
+
size={13}
|
|
132
|
+
color={THEME.textSecondary}
|
|
133
|
+
lineHeight={moderateScale(20)}
|
|
134
|
+
>
|
|
135
|
+
By using the HD WAKA application, you agree to comply with and be
|
|
136
|
+
legally bound by the terms below. They cover your rights, our
|
|
137
|
+
responsibilities, payments, conduct and how disputes are resolved.
|
|
138
|
+
</RNText>
|
|
139
|
+
</View>
|
|
140
|
+
|
|
141
|
+
{TERMS.map((term, idx) => (
|
|
142
|
+
<TermCard
|
|
143
|
+
key={term.title}
|
|
144
|
+
index={idx + 1}
|
|
145
|
+
title={term.title}
|
|
146
|
+
body={term.body}
|
|
147
|
+
/>
|
|
148
|
+
))}
|
|
149
|
+
|
|
150
|
+
<Card
|
|
151
|
+
padding={moderateScale(16)}
|
|
152
|
+
style={styles.contactCard}
|
|
153
|
+
shadow={false}
|
|
154
|
+
>
|
|
155
|
+
<RNText
|
|
156
|
+
font="semibold"
|
|
157
|
+
size={14}
|
|
158
|
+
color={THEME.text}
|
|
159
|
+
style={styles.contactTitle}
|
|
160
|
+
>
|
|
161
|
+
Need more clarity?
|
|
162
|
+
</RNText>
|
|
163
|
+
<RNText
|
|
164
|
+
size={13}
|
|
165
|
+
color={THEME.textSecondary}
|
|
166
|
+
lineHeight={moderateScale(20)}
|
|
167
|
+
>
|
|
168
|
+
Our support team is happy to walk you through any clause. Reach us
|
|
169
|
+
at{' '}
|
|
170
|
+
<RNText font="semibold" size={13} color={THEME.primary}>
|
|
171
|
+
legal@hdwaka.com
|
|
172
|
+
</RNText>
|
|
173
|
+
.
|
|
174
|
+
</RNText>
|
|
175
|
+
</Card>
|
|
176
|
+
</ScrollView>
|
|
177
|
+
</MainContainer>
|
|
178
|
+
);
|
|
179
|
+
};
|
|
180
|
+
|
|
181
|
+
const TermCard: React.FC<{
|
|
182
|
+
index: number;
|
|
183
|
+
title: string;
|
|
184
|
+
body: string;
|
|
185
|
+
}> = ({ index, title, body }) => (
|
|
186
|
+
<View style={styles.termCard}>
|
|
187
|
+
<View style={styles.termHead}>
|
|
188
|
+
<View style={styles.indexBadge}>
|
|
189
|
+
<RNText font="bold" size={12} color="#FFFFFF">
|
|
190
|
+
{String(index).padStart(2, '0')}
|
|
191
|
+
</RNText>
|
|
192
|
+
</View>
|
|
193
|
+
<RNText
|
|
194
|
+
font="semibold"
|
|
195
|
+
size={15}
|
|
196
|
+
color={THEME.text}
|
|
197
|
+
style={styles.flexOne}
|
|
198
|
+
>
|
|
199
|
+
{title}
|
|
200
|
+
</RNText>
|
|
201
|
+
</View>
|
|
202
|
+
<RNText
|
|
203
|
+
size={13}
|
|
204
|
+
color={THEME.textSecondary}
|
|
205
|
+
lineHeight={moderateScale(20)}
|
|
206
|
+
style={styles.termBody}
|
|
207
|
+
>
|
|
208
|
+
{body}
|
|
209
|
+
</RNText>
|
|
210
|
+
</View>
|
|
211
|
+
);
|
|
212
|
+
|
|
213
|
+
export default TermsConditions;
|
|
214
|
+
|
|
215
|
+
const styles = StyleSheet.create({
|
|
216
|
+
flexOne: {
|
|
217
|
+
flex: 1,
|
|
218
|
+
},
|
|
219
|
+
contactTitle: {
|
|
220
|
+
marginBottom: moderateScale(6),
|
|
221
|
+
},
|
|
222
|
+
scroll: {
|
|
223
|
+
paddingHorizontal: SPACING.hPadding,
|
|
224
|
+
paddingBottom: moderateScale(48),
|
|
225
|
+
paddingTop: moderateScale(6),
|
|
226
|
+
},
|
|
227
|
+
heroBox: {
|
|
228
|
+
borderRadius: moderateScale(22),
|
|
229
|
+
},
|
|
230
|
+
hero: {
|
|
231
|
+
borderRadius: moderateScale(22),
|
|
232
|
+
paddingHorizontal: moderateScale(20),
|
|
233
|
+
paddingTop: moderateScale(22),
|
|
234
|
+
paddingBottom: moderateScale(20),
|
|
235
|
+
overflow: 'hidden',
|
|
236
|
+
shadowColor: '#2C1A0E',
|
|
237
|
+
shadowOffset: { width: 0, height: 10 },
|
|
238
|
+
shadowOpacity: 0.18,
|
|
239
|
+
shadowRadius: 18,
|
|
240
|
+
elevation: 4,
|
|
241
|
+
},
|
|
242
|
+
heroIconWrap: {
|
|
243
|
+
width: moderateScale(54),
|
|
244
|
+
height: moderateScale(54),
|
|
245
|
+
borderRadius: moderateScale(16),
|
|
246
|
+
backgroundColor: 'rgba(255,255,255,0.18)',
|
|
247
|
+
alignItems: 'center',
|
|
248
|
+
justifyContent: 'center',
|
|
249
|
+
marginBottom: moderateScale(14),
|
|
250
|
+
},
|
|
251
|
+
heroTitle: {
|
|
252
|
+
marginBottom: moderateScale(6),
|
|
253
|
+
},
|
|
254
|
+
heroSubtitle: {
|
|
255
|
+
marginBottom: moderateScale(16),
|
|
256
|
+
},
|
|
257
|
+
heroFooter: {
|
|
258
|
+
flexDirection: 'row',
|
|
259
|
+
alignItems: 'center',
|
|
260
|
+
justifyContent: 'space-between',
|
|
261
|
+
},
|
|
262
|
+
versionPill: {
|
|
263
|
+
backgroundColor: THEME.primary,
|
|
264
|
+
paddingHorizontal: moderateScale(12),
|
|
265
|
+
paddingVertical: moderateScale(5),
|
|
266
|
+
borderRadius: moderateScale(999),
|
|
267
|
+
},
|
|
268
|
+
tocCard: {
|
|
269
|
+
marginTop: moderateScale(18),
|
|
270
|
+
backgroundColor: THEME.surface,
|
|
271
|
+
borderRadius: moderateScale(18),
|
|
272
|
+
padding: moderateScale(16),
|
|
273
|
+
borderLeftWidth: moderateScale(3),
|
|
274
|
+
borderLeftColor: THEME.primary,
|
|
275
|
+
borderTopWidth: 1,
|
|
276
|
+
borderRightWidth: 1,
|
|
277
|
+
borderBottomWidth: 1,
|
|
278
|
+
borderTopColor: 'rgba(44,26,14,0.06)',
|
|
279
|
+
borderRightColor: 'rgba(44,26,14,0.06)',
|
|
280
|
+
borderBottomColor: 'rgba(44,26,14,0.06)',
|
|
281
|
+
},
|
|
282
|
+
tocLabel: {
|
|
283
|
+
letterSpacing: 1,
|
|
284
|
+
marginBottom: moderateScale(8),
|
|
285
|
+
},
|
|
286
|
+
termCard: {
|
|
287
|
+
marginTop: moderateScale(14),
|
|
288
|
+
backgroundColor: THEME.surface,
|
|
289
|
+
borderRadius: moderateScale(18),
|
|
290
|
+
padding: moderateScale(16),
|
|
291
|
+
borderWidth: 1,
|
|
292
|
+
borderColor: 'rgba(44,26,14,0.06)',
|
|
293
|
+
},
|
|
294
|
+
termHead: {
|
|
295
|
+
flexDirection: 'row',
|
|
296
|
+
alignItems: 'center',
|
|
297
|
+
marginBottom: moderateScale(10),
|
|
298
|
+
},
|
|
299
|
+
indexBadge: {
|
|
300
|
+
width: moderateScale(30),
|
|
301
|
+
height: moderateScale(30),
|
|
302
|
+
borderRadius: moderateScale(10),
|
|
303
|
+
backgroundColor: THEME.primary,
|
|
304
|
+
alignItems: 'center',
|
|
305
|
+
justifyContent: 'center',
|
|
306
|
+
marginRight: moderateScale(12),
|
|
307
|
+
},
|
|
308
|
+
termBody: {},
|
|
309
|
+
contactCard: {
|
|
310
|
+
marginTop: moderateScale(20),
|
|
311
|
+
borderWidth: 1,
|
|
312
|
+
borderColor: 'rgba(232,124,62,0.18)',
|
|
313
|
+
backgroundColor: THEME.primaryFaint,
|
|
314
|
+
},
|
|
315
|
+
});
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { StyleSheet, View } from 'react-native';
|
|
3
|
+
import { useNavigation } from '@react-navigation/native';
|
|
4
|
+
import { moderateScale } from 'react-native-size-matters';
|
|
5
|
+
import { useSelector } from 'react-redux';
|
|
6
|
+
import { Avatar, Card, RNText } from '../../../components';
|
|
7
|
+
import { THEME } from '../../../theme';
|
|
8
|
+
import {
|
|
9
|
+
BellIcon,
|
|
10
|
+
CardIcon,
|
|
11
|
+
CarIcon,
|
|
12
|
+
FileTextIcon,
|
|
13
|
+
GlobeIcon,
|
|
14
|
+
HeadphonesIcon,
|
|
15
|
+
ShieldKeyIcon,
|
|
16
|
+
UserCircleIcon,
|
|
17
|
+
} from '../../../components/Icon/SvgIcons';
|
|
18
|
+
import { RootState } from '../../../redux/store';
|
|
19
|
+
import { useLanguage } from '../../../localization';
|
|
20
|
+
import RouteKey from '../../../navigation/RouteKey';
|
|
21
|
+
import { formatNumber } from '../../../utils/functions';
|
|
22
|
+
import {
|
|
23
|
+
CheckBadge,
|
|
24
|
+
DollarCircleIcon,
|
|
25
|
+
MenuRow,
|
|
26
|
+
MenuSection,
|
|
27
|
+
profileStyles,
|
|
28
|
+
SolidStarIcon,
|
|
29
|
+
StarOutlineIcon,
|
|
30
|
+
VerifyRow,
|
|
31
|
+
} from './ProfileParts';
|
|
32
|
+
|
|
33
|
+
const DriverProfile: React.FC = () => {
|
|
34
|
+
const nav = useNavigation<any>();
|
|
35
|
+
const { t } = useLanguage();
|
|
36
|
+
const profile = useSelector((s: RootState) => s.userProfile.profile);
|
|
37
|
+
const earnings = useSelector((s: RootState) => s.earnings);
|
|
38
|
+
const vehicle = profile.vehicles?.[0];
|
|
39
|
+
|
|
40
|
+
return (
|
|
41
|
+
<>
|
|
42
|
+
<Card shadow={false} style={profileStyles.profileCard} padding={0}>
|
|
43
|
+
<View style={profileStyles.profileTop}>
|
|
44
|
+
<Avatar
|
|
45
|
+
name={profile.fullName}
|
|
46
|
+
uri={profile.avatarUri || undefined}
|
|
47
|
+
size={moderateScale(56)}
|
|
48
|
+
/>
|
|
49
|
+
<View style={profileStyles.profileInfo}>
|
|
50
|
+
<RNText font="bold" size={17} color={THEME.text}>
|
|
51
|
+
{profile.fullName}
|
|
52
|
+
</RNText>
|
|
53
|
+
<View style={styles.verifiedPill}>
|
|
54
|
+
<CheckBadge size={moderateScale(14)} />
|
|
55
|
+
<RNText
|
|
56
|
+
font="semibold"
|
|
57
|
+
size={11}
|
|
58
|
+
color={THEME.success}
|
|
59
|
+
style={{ marginLeft: moderateScale(5) }}
|
|
60
|
+
>
|
|
61
|
+
{t('profile.verifiedDriver')}
|
|
62
|
+
</RNText>
|
|
63
|
+
</View>
|
|
64
|
+
</View>
|
|
65
|
+
</View>
|
|
66
|
+
|
|
67
|
+
<View style={styles.statsRow}>
|
|
68
|
+
<Stat
|
|
69
|
+
icon={<SolidStarIcon size={moderateScale(16)} color={THEME.star} />}
|
|
70
|
+
value={(profile.rating ?? 0).toFixed(1)}
|
|
71
|
+
label={t('common.rating')}
|
|
72
|
+
/>
|
|
73
|
+
<View style={styles.statDivider} />
|
|
74
|
+
<Stat
|
|
75
|
+
value={`${earnings.totalTrips ?? profile.totalTrips ?? 0}`}
|
|
76
|
+
label={t('profile.trips')}
|
|
77
|
+
/>
|
|
78
|
+
<View style={styles.statDivider} />
|
|
79
|
+
<Stat
|
|
80
|
+
value={`${formatNumber(earnings.total)} F`}
|
|
81
|
+
label={t('profile.earnings')}
|
|
82
|
+
/>
|
|
83
|
+
</View>
|
|
84
|
+
</Card>
|
|
85
|
+
|
|
86
|
+
{vehicle ? (
|
|
87
|
+
<Card shadow={false} style={styles.vehicleCard} padding={0}>
|
|
88
|
+
<View style={styles.vehicleIcon}>
|
|
89
|
+
<CarIcon size={moderateScale(22)} color={THEME.primary} />
|
|
90
|
+
</View>
|
|
91
|
+
<View style={profileStyles.profileInfo}>
|
|
92
|
+
<RNText font="bold" size={14} color={THEME.text}>
|
|
93
|
+
{vehicle.model || t('vehicle.yourVehicle')}
|
|
94
|
+
</RNText>
|
|
95
|
+
<RNText
|
|
96
|
+
size={12}
|
|
97
|
+
color={THEME.textSecondary}
|
|
98
|
+
style={{ marginTop: moderateScale(2) }}
|
|
99
|
+
>
|
|
100
|
+
{[vehicle.registration, vehicle.type].filter(Boolean).join(' • ') ||
|
|
101
|
+
t('vehicle.vehicleDetails')}
|
|
102
|
+
</RNText>
|
|
103
|
+
</View>
|
|
104
|
+
</Card>
|
|
105
|
+
) : null}
|
|
106
|
+
|
|
107
|
+
<Card shadow={false} style={[profileStyles.profileCard, styles.verifyCard]} padding={0}>
|
|
108
|
+
<View style={profileStyles.verifyList}>
|
|
109
|
+
<VerifyRow verified label={t('profile.govtIdVerified')} />
|
|
110
|
+
<VerifyRow verified label={t('profile.phoneVerified')} />
|
|
111
|
+
<VerifyRow verified={false} label={t('profile.verifyEmail')} />
|
|
112
|
+
</View>
|
|
113
|
+
</Card>
|
|
114
|
+
|
|
115
|
+
<MenuSection title={t('profile.accountSettings')}>
|
|
116
|
+
<MenuRow
|
|
117
|
+
icon={<UserCircleIcon size={moderateScale(20)} color={THEME.text} />}
|
|
118
|
+
label={t('profile.editProfile')}
|
|
119
|
+
onPress={() => nav.navigate(RouteKey.EditProfile)}
|
|
120
|
+
/>
|
|
121
|
+
<MenuRow
|
|
122
|
+
icon={<CarIcon size={moderateScale(20)} color={THEME.text} />}
|
|
123
|
+
label={t('profile.vehicleInformation')}
|
|
124
|
+
onPress={() => nav.navigate(RouteKey.ManageVehicle)}
|
|
125
|
+
/>
|
|
126
|
+
<MenuRow
|
|
127
|
+
icon={<CardIcon size={moderateScale(20)} color={THEME.text} />}
|
|
128
|
+
label={t('profile.drivingLicense')}
|
|
129
|
+
onPress={() => nav.navigate(RouteKey.ManageLicense)}
|
|
130
|
+
/>
|
|
131
|
+
<MenuRow
|
|
132
|
+
icon={<DollarCircleIcon size={moderateScale(20)} color={THEME.text} />}
|
|
133
|
+
label={t('profile.myEarnings')}
|
|
134
|
+
onPress={() => nav.navigate(RouteKey.MyEarnings)}
|
|
135
|
+
/>
|
|
136
|
+
<MenuRow
|
|
137
|
+
icon={<BellIcon size={moderateScale(20)} color={THEME.text} />}
|
|
138
|
+
label={t('profile.notifications')}
|
|
139
|
+
onPress={() => nav.navigate(RouteKey.Notifications)}
|
|
140
|
+
/>
|
|
141
|
+
<MenuRow
|
|
142
|
+
icon={<StarOutlineIcon size={moderateScale(20)} color={THEME.text} />}
|
|
143
|
+
label={t('profile.ratings')}
|
|
144
|
+
onPress={() => nav.navigate(RouteKey.Ratings)}
|
|
145
|
+
last
|
|
146
|
+
/>
|
|
147
|
+
</MenuSection>
|
|
148
|
+
|
|
149
|
+
<MenuSection title={t('profile.securityPrivacy')}>
|
|
150
|
+
<MenuRow
|
|
151
|
+
icon={<GlobeIcon size={moderateScale(20)} color={THEME.text} />}
|
|
152
|
+
label={t('profile.language')}
|
|
153
|
+
onPress={() => nav.navigate(RouteKey.LanguageSettings)}
|
|
154
|
+
/>
|
|
155
|
+
<MenuRow
|
|
156
|
+
icon={<ShieldKeyIcon size={moderateScale(20)} color={THEME.text} />}
|
|
157
|
+
label={t('profile.privacyPolicy')}
|
|
158
|
+
onPress={() => nav.navigate(RouteKey.PrivacyPolicy)}
|
|
159
|
+
/>
|
|
160
|
+
<MenuRow
|
|
161
|
+
icon={<FileTextIcon size={moderateScale(20)} color={THEME.text} />}
|
|
162
|
+
label={t('profile.termsConditions')}
|
|
163
|
+
onPress={() => nav.navigate(RouteKey.TermsConditions)}
|
|
164
|
+
/>
|
|
165
|
+
<MenuRow
|
|
166
|
+
icon={<HeadphonesIcon size={moderateScale(20)} color={THEME.text} />}
|
|
167
|
+
label={t('profile.helpSupport')}
|
|
168
|
+
onPress={() => nav.navigate(RouteKey.HelpSupport)}
|
|
169
|
+
last
|
|
170
|
+
/>
|
|
171
|
+
</MenuSection>
|
|
172
|
+
</>
|
|
173
|
+
);
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
const Stat = ({
|
|
177
|
+
icon,
|
|
178
|
+
value,
|
|
179
|
+
label,
|
|
180
|
+
}: {
|
|
181
|
+
icon?: React.ReactNode;
|
|
182
|
+
value: string;
|
|
183
|
+
label: string;
|
|
184
|
+
}) => (
|
|
185
|
+
<View style={styles.stat}>
|
|
186
|
+
<View style={styles.statValue}>
|
|
187
|
+
{icon}
|
|
188
|
+
<RNText
|
|
189
|
+
font="bold"
|
|
190
|
+
size={16}
|
|
191
|
+
color={THEME.text}
|
|
192
|
+
style={icon ? { marginLeft: moderateScale(4) } : undefined}
|
|
193
|
+
>
|
|
194
|
+
{value}
|
|
195
|
+
</RNText>
|
|
196
|
+
</View>
|
|
197
|
+
<RNText
|
|
198
|
+
font="medium"
|
|
199
|
+
size={12}
|
|
200
|
+
color={THEME.textSecondary}
|
|
201
|
+
style={{ marginTop: moderateScale(2) }}
|
|
202
|
+
>
|
|
203
|
+
{label}
|
|
204
|
+
</RNText>
|
|
205
|
+
</View>
|
|
206
|
+
);
|
|
207
|
+
|
|
208
|
+
export default DriverProfile;
|
|
209
|
+
|
|
210
|
+
const styles = StyleSheet.create({
|
|
211
|
+
verifiedPill: {
|
|
212
|
+
flexDirection: 'row',
|
|
213
|
+
alignItems: 'center',
|
|
214
|
+
alignSelf: 'flex-start',
|
|
215
|
+
marginTop: moderateScale(6),
|
|
216
|
+
paddingVertical: moderateScale(3),
|
|
217
|
+
paddingHorizontal: moderateScale(8),
|
|
218
|
+
borderRadius: moderateScale(999),
|
|
219
|
+
backgroundColor: THEME.successLight,
|
|
220
|
+
},
|
|
221
|
+
statsRow: {
|
|
222
|
+
flexDirection: 'row',
|
|
223
|
+
alignItems: 'center',
|
|
224
|
+
marginTop: moderateScale(16),
|
|
225
|
+
paddingTop: moderateScale(16),
|
|
226
|
+
borderTopWidth: 1,
|
|
227
|
+
borderTopColor: THEME.divider,
|
|
228
|
+
},
|
|
229
|
+
stat: {
|
|
230
|
+
flex: 1,
|
|
231
|
+
alignItems: 'center',
|
|
232
|
+
},
|
|
233
|
+
statValue: {
|
|
234
|
+
flexDirection: 'row',
|
|
235
|
+
alignItems: 'center',
|
|
236
|
+
},
|
|
237
|
+
statDivider: {
|
|
238
|
+
width: 1,
|
|
239
|
+
height: moderateScale(28),
|
|
240
|
+
backgroundColor: THEME.divider,
|
|
241
|
+
},
|
|
242
|
+
vehicleCard: {
|
|
243
|
+
flexDirection: 'row',
|
|
244
|
+
alignItems: 'center',
|
|
245
|
+
paddingVertical: moderateScale(14),
|
|
246
|
+
paddingHorizontal: moderateScale(16),
|
|
247
|
+
borderWidth: 1,
|
|
248
|
+
borderColor: 'rgba(44, 26, 14, 0.1)',
|
|
249
|
+
marginTop: moderateScale(12),
|
|
250
|
+
},
|
|
251
|
+
vehicleIcon: {
|
|
252
|
+
width: moderateScale(44),
|
|
253
|
+
height: moderateScale(44),
|
|
254
|
+
borderRadius: moderateScale(12),
|
|
255
|
+
backgroundColor: THEME.primaryFaint,
|
|
256
|
+
alignItems: 'center',
|
|
257
|
+
justifyContent: 'center',
|
|
258
|
+
},
|
|
259
|
+
verifyCard: {
|
|
260
|
+
marginTop: moderateScale(12),
|
|
261
|
+
},
|
|
262
|
+
});
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { View } from 'react-native';
|
|
3
|
+
import { useNavigation } from '@react-navigation/native';
|
|
4
|
+
import { moderateScale } from 'react-native-size-matters';
|
|
5
|
+
import { useSelector } from 'react-redux';
|
|
6
|
+
import { Avatar, Card, RNText } from '../../../components';
|
|
7
|
+
import { THEME } from '../../../theme';
|
|
8
|
+
import {
|
|
9
|
+
BellIcon,
|
|
10
|
+
CardIcon,
|
|
11
|
+
FileTextIcon,
|
|
12
|
+
GlobeIcon,
|
|
13
|
+
HeadphonesIcon,
|
|
14
|
+
ShieldKeyIcon,
|
|
15
|
+
UserCircleIcon,
|
|
16
|
+
} from '../../../components/Icon/SvgIcons';
|
|
17
|
+
import { RootState } from '../../../redux/store';
|
|
18
|
+
import { useLanguage } from '../../../localization';
|
|
19
|
+
import RouteKey from '../../../navigation/RouteKey';
|
|
20
|
+
import {
|
|
21
|
+
MenuRow,
|
|
22
|
+
MenuSection,
|
|
23
|
+
profileStyles,
|
|
24
|
+
SolidStarIcon,
|
|
25
|
+
StarOutlineIcon,
|
|
26
|
+
VerifyRow,
|
|
27
|
+
} from './ProfileParts';
|
|
28
|
+
|
|
29
|
+
const PassengerProfile: React.FC = () => {
|
|
30
|
+
const nav = useNavigation<any>();
|
|
31
|
+
const { t } = useLanguage();
|
|
32
|
+
const profile = useSelector((s: RootState) => s.userProfile.profile);
|
|
33
|
+
|
|
34
|
+
return (
|
|
35
|
+
<>
|
|
36
|
+
<Card shadow={false} style={profileStyles.profileCard} padding={0}>
|
|
37
|
+
<View style={profileStyles.profileTop}>
|
|
38
|
+
<Avatar
|
|
39
|
+
name={profile.fullName}
|
|
40
|
+
uri={profile.avatarUri || undefined}
|
|
41
|
+
size={moderateScale(56)}
|
|
42
|
+
/>
|
|
43
|
+
<View style={profileStyles.profileInfo}>
|
|
44
|
+
<RNText font="bold" size={17} color={THEME.text}>
|
|
45
|
+
{profile.fullName}
|
|
46
|
+
</RNText>
|
|
47
|
+
<View style={profileStyles.ratingRow}>
|
|
48
|
+
<SolidStarIcon size={moderateScale(13)} color={THEME.star} />
|
|
49
|
+
<RNText
|
|
50
|
+
font="medium"
|
|
51
|
+
size={13}
|
|
52
|
+
color={THEME.text}
|
|
53
|
+
style={{ marginLeft: moderateScale(4) }}
|
|
54
|
+
>
|
|
55
|
+
{(profile.rating ?? 0).toFixed(1)}
|
|
56
|
+
</RNText>
|
|
57
|
+
</View>
|
|
58
|
+
</View>
|
|
59
|
+
</View>
|
|
60
|
+
|
|
61
|
+
<View style={profileStyles.cardDivider} />
|
|
62
|
+
|
|
63
|
+
<View style={profileStyles.verifyList}>
|
|
64
|
+
<VerifyRow verified={false} label={t('profile.verifyGovtId')} />
|
|
65
|
+
<VerifyRow verified label={t('profile.phoneVerified')} />
|
|
66
|
+
<VerifyRow verified={false} label={t('profile.verifyEmail')} />
|
|
67
|
+
</View>
|
|
68
|
+
</Card>
|
|
69
|
+
|
|
70
|
+
<MenuSection title={t('profile.accountSettings')}>
|
|
71
|
+
<MenuRow
|
|
72
|
+
icon={<UserCircleIcon size={moderateScale(20)} color={THEME.text} />}
|
|
73
|
+
label={t('profile.editProfile')}
|
|
74
|
+
onPress={() => nav.navigate(RouteKey.EditProfile)}
|
|
75
|
+
/>
|
|
76
|
+
<MenuRow
|
|
77
|
+
icon={<CardIcon size={moderateScale(20)} color={THEME.text} />}
|
|
78
|
+
label={t('profile.paymentMethods')}
|
|
79
|
+
onPress={() =>
|
|
80
|
+
nav.navigate(RouteKey.PaymentMethod, { mode: "manage" })
|
|
81
|
+
}
|
|
82
|
+
/>
|
|
83
|
+
<MenuRow
|
|
84
|
+
icon={<BellIcon size={moderateScale(20)} color={THEME.text} />}
|
|
85
|
+
label={t('profile.notifications')}
|
|
86
|
+
onPress={() => nav.navigate(RouteKey.Notifications)}
|
|
87
|
+
/>
|
|
88
|
+
<MenuRow
|
|
89
|
+
icon={<StarOutlineIcon size={moderateScale(20)} color={THEME.text} />}
|
|
90
|
+
label={t('profile.ratings')}
|
|
91
|
+
onPress={() => nav.navigate(RouteKey.Ratings)}
|
|
92
|
+
last
|
|
93
|
+
/>
|
|
94
|
+
</MenuSection>
|
|
95
|
+
|
|
96
|
+
<MenuSection title={t('profile.securityPrivacy')}>
|
|
97
|
+
<MenuRow
|
|
98
|
+
icon={<GlobeIcon size={moderateScale(20)} color={THEME.text} />}
|
|
99
|
+
label={t('profile.language')}
|
|
100
|
+
onPress={() => nav.navigate(RouteKey.LanguageSettings)}
|
|
101
|
+
/>
|
|
102
|
+
<MenuRow
|
|
103
|
+
icon={<ShieldKeyIcon size={moderateScale(20)} color={THEME.text} />}
|
|
104
|
+
label={t('profile.privacyPolicy')}
|
|
105
|
+
onPress={() => nav.navigate(RouteKey.PrivacyPolicy)}
|
|
106
|
+
/>
|
|
107
|
+
<MenuRow
|
|
108
|
+
icon={<FileTextIcon size={moderateScale(20)} color={THEME.text} />}
|
|
109
|
+
label={t('profile.termsConditions')}
|
|
110
|
+
onPress={() => nav.navigate(RouteKey.TermsConditions)}
|
|
111
|
+
/>
|
|
112
|
+
<MenuRow
|
|
113
|
+
icon={<HeadphonesIcon size={moderateScale(20)} color={THEME.text} />}
|
|
114
|
+
label={t('profile.helpSupport')}
|
|
115
|
+
onPress={() => nav.navigate(RouteKey.HelpSupport)}
|
|
116
|
+
last
|
|
117
|
+
/>
|
|
118
|
+
</MenuSection>
|
|
119
|
+
</>
|
|
120
|
+
);
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
export default PassengerProfile;
|