@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.
Files changed (243) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +93 -0
  3. package/bin/index.js +270 -0
  4. package/lib/prompt.js +63 -0
  5. package/lib/rename.js +239 -0
  6. package/lib/scaffold.js +110 -0
  7. package/lib/utils.js +122 -0
  8. package/package.json +38 -0
  9. package/template/.eslintrc.js +4 -0
  10. package/template/.prettierrc.js +5 -0
  11. package/template/.watchmanconfig +1 -0
  12. package/template/App.tsx +100 -0
  13. package/template/Gemfile +17 -0
  14. package/template/README.md +97 -0
  15. package/template/__tests__/App.test.tsx +13 -0
  16. package/template/_gitignore +75 -0
  17. package/template/android/app/build.gradle +119 -0
  18. package/template/android/app/debug.keystore +0 -0
  19. package/template/android/app/proguard-rules.pro +10 -0
  20. package/template/android/app/src/main/AndroidManifest.xml +45 -0
  21. package/template/android/app/src/main/assets/fonts/MonaSans-Black.ttf +0 -0
  22. package/template/android/app/src/main/assets/fonts/MonaSans-BlackItalic.ttf +0 -0
  23. package/template/android/app/src/main/assets/fonts/MonaSans-Bold.ttf +0 -0
  24. package/template/android/app/src/main/assets/fonts/MonaSans-BoldItalic.ttf +0 -0
  25. package/template/android/app/src/main/assets/fonts/MonaSans-ExtraBold.ttf +0 -0
  26. package/template/android/app/src/main/assets/fonts/MonaSans-ExtraBoldItalic.ttf +0 -0
  27. package/template/android/app/src/main/assets/fonts/MonaSans-ExtraLight.ttf +0 -0
  28. package/template/android/app/src/main/assets/fonts/MonaSans-ExtraLightItalic.ttf +0 -0
  29. package/template/android/app/src/main/assets/fonts/MonaSans-Italic.ttf +0 -0
  30. package/template/android/app/src/main/assets/fonts/MonaSans-Light.ttf +0 -0
  31. package/template/android/app/src/main/assets/fonts/MonaSans-LightItalic.ttf +0 -0
  32. package/template/android/app/src/main/assets/fonts/MonaSans-Medium.ttf +0 -0
  33. package/template/android/app/src/main/assets/fonts/MonaSans-MediumItalic.ttf +0 -0
  34. package/template/android/app/src/main/assets/fonts/MonaSans-Regular.ttf +0 -0
  35. package/template/android/app/src/main/assets/fonts/MonaSans-SemiBold.ttf +0 -0
  36. package/template/android/app/src/main/assets/fonts/MonaSans-SemiBoldItalic.ttf +0 -0
  37. package/template/android/app/src/main/java/com/awesomeproject/MainActivity.kt +22 -0
  38. package/template/android/app/src/main/java/com/awesomeproject/MainApplication.kt +27 -0
  39. package/template/android/app/src/main/res/drawable/launch_screen.png +0 -0
  40. package/template/android/app/src/main/res/drawable/rn_edit_text_material.xml +37 -0
  41. package/template/android/app/src/main/res/layout/launch_screen.xml +12 -0
  42. package/template/android/app/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
  43. package/template/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png +0 -0
  44. package/template/android/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
  45. package/template/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png +0 -0
  46. package/template/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
  47. package/template/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png +0 -0
  48. package/template/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  49. package/template/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png +0 -0
  50. package/template/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
  51. package/template/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png +0 -0
  52. package/template/android/app/src/main/res/values/colors.xml +3 -0
  53. package/template/android/app/src/main/res/values/strings.xml +3 -0
  54. package/template/android/app/src/main/res/values/styles.xml +11 -0
  55. package/template/android/build.gradle +21 -0
  56. package/template/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  57. package/template/android/gradle/wrapper/gradle-wrapper.properties +7 -0
  58. package/template/android/gradle.properties +44 -0
  59. package/template/android/gradlew +248 -0
  60. package/template/android/gradlew.bat +98 -0
  61. package/template/android/link-assets-manifest.json +69 -0
  62. package/template/android/settings.gradle +6 -0
  63. package/template/app.json +4 -0
  64. package/template/babel.config.js +4 -0
  65. package/template/declarations.d.ts +6 -0
  66. package/template/env.example +20 -0
  67. package/template/index.js +10 -0
  68. package/template/ios/.xcode.env +11 -0
  69. package/template/ios/.xcode.env.local +1 -0
  70. package/template/ios/AwesomeProject/AppDelegate.swift +60 -0
  71. package/template/ios/AwesomeProject/Images.xcassets/AppIcon.appiconset/Contents.json +53 -0
  72. package/template/ios/AwesomeProject/Images.xcassets/Contents.json +6 -0
  73. package/template/ios/AwesomeProject/Images.xcassets/Splash.imageset/Contents.json +23 -0
  74. package/template/ios/AwesomeProject/Images.xcassets/Splash.imageset/Splash@1x.png +0 -0
  75. package/template/ios/AwesomeProject/Images.xcassets/Splash.imageset/Splash@2x.png +0 -0
  76. package/template/ios/AwesomeProject/Images.xcassets/Splash.imageset/Splash@3x.png +0 -0
  77. package/template/ios/AwesomeProject/Info.plist +89 -0
  78. package/template/ios/AwesomeProject/LaunchScreen.storyboard +40 -0
  79. package/template/ios/AwesomeProject/PrivacyInfo.xcprivacy +38 -0
  80. package/template/ios/AwesomeProject.xcodeproj/project.pbxproj +576 -0
  81. package/template/ios/AwesomeProject.xcodeproj/xcshareddata/xcschemes/AwesomeProject.xcscheme +88 -0
  82. package/template/ios/AwesomeProject.xcworkspace/contents.xcworkspacedata +10 -0
  83. package/template/ios/Podfile +68 -0
  84. package/template/ios/link-assets-manifest.json +69 -0
  85. package/template/jest.config.js +3 -0
  86. package/template/metro.config.js +24 -0
  87. package/template/package.json +68 -0
  88. package/template/react-native.config.js +7 -0
  89. package/template/src/assets/fonts/MonaSans-Black.ttf +0 -0
  90. package/template/src/assets/fonts/MonaSans-BlackItalic.ttf +0 -0
  91. package/template/src/assets/fonts/MonaSans-Bold.ttf +0 -0
  92. package/template/src/assets/fonts/MonaSans-BoldItalic.ttf +0 -0
  93. package/template/src/assets/fonts/MonaSans-ExtraBold.ttf +0 -0
  94. package/template/src/assets/fonts/MonaSans-ExtraBoldItalic.ttf +0 -0
  95. package/template/src/assets/fonts/MonaSans-ExtraLight.ttf +0 -0
  96. package/template/src/assets/fonts/MonaSans-ExtraLightItalic.ttf +0 -0
  97. package/template/src/assets/fonts/MonaSans-Italic.ttf +0 -0
  98. package/template/src/assets/fonts/MonaSans-Light.ttf +0 -0
  99. package/template/src/assets/fonts/MonaSans-LightItalic.ttf +0 -0
  100. package/template/src/assets/fonts/MonaSans-Medium.ttf +0 -0
  101. package/template/src/assets/fonts/MonaSans-MediumItalic.ttf +0 -0
  102. package/template/src/assets/fonts/MonaSans-Regular.ttf +0 -0
  103. package/template/src/assets/fonts/MonaSans-SemiBold.ttf +0 -0
  104. package/template/src/assets/fonts/MonaSans-SemiBoldItalic.ttf +0 -0
  105. package/template/src/assets/image/BackGroundAuth.png +0 -0
  106. package/template/src/assets/image/BackgroundVerification.png +0 -0
  107. package/template/src/assets/image/logo.png +0 -0
  108. package/template/src/assets/svg/add-circle.svg +5 -0
  109. package/template/src/assets/svg/airConditioning.svg +12 -0
  110. package/template/src/assets/svg/apple.svg +3 -0
  111. package/template/src/assets/svg/arrowDown.svg +3 -0
  112. package/template/src/assets/svg/back.svg +10 -0
  113. package/template/src/assets/svg/bag.svg +11 -0
  114. package/template/src/assets/svg/calender.svg +5 -0
  115. package/template/src/assets/svg/car.svg +10 -0
  116. package/template/src/assets/svg/carConfirm.svg +60 -0
  117. package/template/src/assets/svg/chatActive.svg +3 -0
  118. package/template/src/assets/svg/chatUnActive.svg +3 -0
  119. package/template/src/assets/svg/document-text.svg +6 -0
  120. package/template/src/assets/svg/gender.svg +11 -0
  121. package/template/src/assets/svg/google.svg +6 -0
  122. package/template/src/assets/svg/headphone.svg +3 -0
  123. package/template/src/assets/svg/homeActive.svg +3 -0
  124. package/template/src/assets/svg/homeUnActive.svg +3 -0
  125. package/template/src/assets/svg/logo.svg +18 -0
  126. package/template/src/assets/svg/logout.svg +5 -0
  127. package/template/src/assets/svg/maxBack.svg +4 -0
  128. package/template/src/assets/svg/message-text.svg +7 -0
  129. package/template/src/assets/svg/music.svg +5 -0
  130. package/template/src/assets/svg/noSmoking.svg +10 -0
  131. package/template/src/assets/svg/notification.svg +5 -0
  132. package/template/src/assets/svg/passenger.svg +4 -0
  133. package/template/src/assets/svg/phone.svg +3 -0
  134. package/template/src/assets/svg/rightArrow.svg +3 -0
  135. package/template/src/assets/svg/security-user.svg +5 -0
  136. package/template/src/assets/svg/star.svg +3 -0
  137. package/template/src/assets/svg/tick-circle.svg +4 -0
  138. package/template/src/assets/svg/trafficLight.svg +41 -0
  139. package/template/src/assets/svg/tripActive.svg +10 -0
  140. package/template/src/assets/svg/tripUnActive.svg +10 -0
  141. package/template/src/assets/svg/usbChargers.svg +3 -0
  142. package/template/src/assets/svg/user.svg +4 -0
  143. package/template/src/assets/svg/userActive.svg +3 -0
  144. package/template/src/assets/svg/userPlaceholder.svg +3 -0
  145. package/template/src/assets/svg/userUnActive.svg +3 -0
  146. package/template/src/components/AuthLayout/AuthLayout.tsx +170 -0
  147. package/template/src/components/AuthLayout/index.ts +1 -0
  148. package/template/src/components/BottomSheet/BottomSheet.tsx +73 -0
  149. package/template/src/components/BottomSheet/BottomSheetAlert.tsx +100 -0
  150. package/template/src/components/BottomSheet/CenterAlert.tsx +153 -0
  151. package/template/src/components/BottomSheet/index.ts +2 -0
  152. package/template/src/components/BottomTabBar/index.tsx +145 -0
  153. package/template/src/components/Button/RNButton.tsx +152 -0
  154. package/template/src/components/Button/index.ts +2 -0
  155. package/template/src/components/Common/Avatar.tsx +80 -0
  156. package/template/src/components/Common/Card.tsx +49 -0
  157. package/template/src/components/Common/CardBrandLogo.tsx +66 -0
  158. package/template/src/components/Common/Checkbox.tsx +65 -0
  159. package/template/src/components/Common/Chip.tsx +79 -0
  160. package/template/src/components/Common/CommonStyles.tsx +594 -0
  161. package/template/src/components/Common/Divider.tsx +33 -0
  162. package/template/src/components/Common/DriverTripCard.tsx +308 -0
  163. package/template/src/components/Common/Dropdown.tsx +161 -0
  164. package/template/src/components/Common/EmptyState.tsx +52 -0
  165. package/template/src/components/Common/FAB.tsx +68 -0
  166. package/template/src/components/Common/HeaderLocation.tsx +108 -0
  167. package/template/src/components/Common/Loader.tsx +23 -0
  168. package/template/src/components/Common/RatingStars.tsx +103 -0
  169. package/template/src/components/Common/RouteDots.tsx +98 -0
  170. package/template/src/components/Common/SegmentedControl.tsx +126 -0
  171. package/template/src/components/Common/SosButton.tsx +80 -0
  172. package/template/src/components/Common/SosSheet.tsx +344 -0
  173. package/template/src/components/Common/StarRating.tsx +58 -0
  174. package/template/src/components/Common/StatusBadge.tsx +56 -0
  175. package/template/src/components/Common/Toggle.tsx +66 -0
  176. package/template/src/components/Common/TripCard.tsx +247 -0
  177. package/template/src/components/Common/UploadBox.tsx +106 -0
  178. package/template/src/components/Container/MainContainer.tsx +76 -0
  179. package/template/src/components/Container/index.ts +1 -0
  180. package/template/src/components/Header/index.tsx +143 -0
  181. package/template/src/components/Icon/SvgIcons.tsx +1991 -0
  182. package/template/src/components/ImagePickerSheet/ImagePickerSheet.tsx +233 -0
  183. package/template/src/components/ImagePickerSheet/index.ts +2 -0
  184. package/template/src/components/Input/CountryDropdown.tsx +71 -0
  185. package/template/src/components/Input/OtpInput.tsx +117 -0
  186. package/template/src/components/Input/RNInput.tsx +138 -0
  187. package/template/src/components/Input/index.ts +4 -0
  188. package/template/src/components/Picker/DatePickerSheet.tsx +393 -0
  189. package/template/src/components/Picker/PassengerPickerSheet.tsx +237 -0
  190. package/template/src/components/Text/RNText.tsx +62 -0
  191. package/template/src/components/Text/index.ts +1 -0
  192. package/template/src/components/index.ts +44 -0
  193. package/template/src/hooks/useCurrentLocation.ts +72 -0
  194. package/template/src/localization/i18n.ts +29 -0
  195. package/template/src/localization/i18next.d.ts +11 -0
  196. package/template/src/localization/index.ts +4 -0
  197. package/template/src/localization/languageStorage.ts +27 -0
  198. package/template/src/localization/languages.ts +62 -0
  199. package/template/src/localization/resources/en.ts +703 -0
  200. package/template/src/localization/resources/fr.ts +703 -0
  201. package/template/src/localization/useLanguage.ts +42 -0
  202. package/template/src/navigation/AuthNavigation.tsx +23 -0
  203. package/template/src/navigation/BottomTabs.tsx +24 -0
  204. package/template/src/navigation/RootNavigation.tsx +27 -0
  205. package/template/src/navigation/RouteKey.ts +22 -0
  206. package/template/src/navigation/StackNavigation.tsx +52 -0
  207. package/template/src/navigation/paramLists.ts +25 -0
  208. package/template/src/redux/slice/app.ts +66 -0
  209. package/template/src/redux/slice/auth.ts +40 -0
  210. package/template/src/redux/slice/userProfile.ts +124 -0
  211. package/template/src/redux/store.ts +17 -0
  212. package/template/src/screen/auth/Login.tsx +69 -0
  213. package/template/src/screen/onboarding/LanguageSelection.tsx +231 -0
  214. package/template/src/screen/root/home/index.tsx +36 -0
  215. package/template/src/screen/root/profile/index.tsx +69 -0
  216. package/template/src/screen/shared/Chat.tsx +308 -0
  217. package/template/src/screen/shared/EditProfile.tsx +407 -0
  218. package/template/src/screen/shared/HelpSupport.tsx +678 -0
  219. package/template/src/screen/shared/LocationSearch.tsx +362 -0
  220. package/template/src/screen/shared/Messages.tsx +115 -0
  221. package/template/src/screen/shared/Notifications.tsx +86 -0
  222. package/template/src/screen/shared/PrivacyPolicy.tsx +297 -0
  223. package/template/src/screen/shared/Profile.tsx +118 -0
  224. package/template/src/screen/shared/Ratings.tsx +170 -0
  225. package/template/src/screen/shared/TermsConditions.tsx +315 -0
  226. package/template/src/screen/shared/profile/DriverProfile.tsx +262 -0
  227. package/template/src/screen/shared/profile/PassengerProfile.tsx +123 -0
  228. package/template/src/screen/shared/profile/ProfileParts.tsx +219 -0
  229. package/template/src/services/Config.ts +37 -0
  230. package/template/src/services/api.ts +37 -0
  231. package/template/src/services/index.ts +4 -0
  232. package/template/src/services/places.ts +320 -0
  233. package/template/src/services/storage.ts +33 -0
  234. package/template/src/theme/fonts.ts +30 -0
  235. package/template/src/theme/index.ts +3 -0
  236. package/template/src/theme/spacing.ts +66 -0
  237. package/template/src/theme/theme.ts +58 -0
  238. package/template/src/types/env.d.ts +8 -0
  239. package/template/src/types/index.ts +3 -0
  240. package/template/src/utils/card.ts +101 -0
  241. package/template/src/utils/constants.ts +39 -0
  242. package/template/src/utils/functions.ts +24 -0
  243. 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;