app-expo-cli 1.0.5 → 1.0.7

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 (74) hide show
  1. package/README.md +11 -5
  2. package/package.json +1 -1
  3. package/src/copy-template.js +19 -1
  4. package/src/install-deps.js +6 -0
  5. package/template/assets/fonts/Inter_18pt-Black.ttf +0 -0
  6. package/template/assets/fonts/Inter_18pt-BlackItalic.ttf +0 -0
  7. package/template/assets/icon/index.ts +146 -0
  8. package/template/assets/images/about_us.png +0 -0
  9. package/template/assets/images/index.ts +6 -0
  10. package/template/assets/images/logo.png +0 -0
  11. package/template/assets/images/privacy_policy.png +0 -0
  12. package/template/assets/images/terms_and_conditions.png +0 -0
  13. package/template/src/app/_layout.tsx +3 -3
  14. package/template/src/app/auth/change_pass.tsx +18 -15
  15. package/template/src/app/auth/change_pass_modal.tsx +32 -51
  16. package/template/src/app/auth/forgot.tsx +74 -88
  17. package/template/src/app/auth/index.tsx +161 -192
  18. package/template/src/app/auth/opt_verify.tsx +93 -103
  19. package/template/src/app/auth/register.tsx +198 -260
  20. package/template/src/app/auth/reset_pass.tsx +102 -105
  21. package/template/src/app/index.tsx +70 -7
  22. package/template/src/app/modals/confirmation_logout_modal.tsx +0 -5
  23. package/template/src/app/modals/success_modal.tsx +28 -48
  24. package/template/src/app/settings/about_us.tsx +1 -1
  25. package/template/src/app/settings/privacy_policy.tsx +1 -1
  26. package/template/src/app/settings/terms_and_conditions.tsx +1 -1
  27. package/template/src/lib/DateTimePicker/DateTimePicker.tsx +63 -0
  28. package/template/src/lib/Empty/EmptyCard.tsx +67 -0
  29. package/template/src/lib/Error/GlobalErrorBoundary.tsx +111 -0
  30. package/template/src/lib/animate/AniImage.tsx +32 -0
  31. package/template/src/lib/backHeader/BackButton.tsx +62 -0
  32. package/template/src/lib/backHeader/BackWithCoponent.tsx +112 -0
  33. package/template/src/lib/backHeader/BackWithHeader.tsx +46 -0
  34. package/template/src/lib/backHeader/BackWithTitle.tsx +53 -0
  35. package/template/src/lib/buttons/IButton.tsx +69 -0
  36. package/template/src/lib/buttons/IwtButton.tsx +199 -0
  37. package/template/src/lib/buttons/Or.tsx +27 -0
  38. package/template/src/lib/buttons/SimpleButton.tsx +45 -0
  39. package/template/src/lib/buttons/TButton.tsx +70 -0
  40. package/template/src/lib/cards/Card.tsx +175 -0
  41. package/template/src/lib/cards/OptionSelect.tsx +44 -0
  42. package/template/src/lib/cards/SearchCard.tsx +35 -0
  43. package/template/src/lib/editor/TextEditor.tsx +81 -0
  44. package/template/src/lib/expend/ExpendComponent.tsx +36 -0
  45. package/template/src/lib/imageViewer/ImageViwer.tsx +332 -0
  46. package/template/src/lib/imageZoomer/ImageZoomer.tsx +104 -0
  47. package/template/src/lib/inputs/CheckBox.tsx +86 -0
  48. package/template/src/lib/inputs/InputText.tsx +232 -0
  49. package/template/src/lib/loader/GLoading.tsx +26 -0
  50. package/template/src/lib/loading/MLoading.tsx +14 -0
  51. package/template/src/lib/loading/SLoading.tsx +14 -0
  52. package/template/src/lib/modals/ActionModal.tsx +97 -0
  53. package/template/src/lib/modals/BottomModal.tsx +224 -0
  54. package/template/src/lib/modals/ConfrimationModal.tsx +116 -0
  55. package/template/src/lib/modals/DateModal.tsx +152 -0
  56. package/template/src/lib/modals/NormalModal.tsx +73 -0
  57. package/template/src/lib/modals/SideModal.tsx +57 -0
  58. package/template/src/lib/modals/Toaster.tsx +256 -0
  59. package/template/src/lib/payment/PaymentCardForD.tsx +47 -0
  60. package/template/src/lib/progressBar/ProgressBar.tsx +64 -0
  61. package/template/src/lib/tailwind.js +9 -0
  62. package/template/src/lib/ui/Avatar.tsx +55 -0
  63. package/template/src/redux/api-config/baseApi.ts +0 -22
  64. package/template/src/redux/interface/interface.ts +11 -193
  65. package/template/src/redux/store.ts +2 -2
  66. package/template/src/app/home/_layout.tsx +0 -29
  67. package/template/src/app/home/drawer/_layout.tsx +0 -27
  68. package/template/src/app/home/tabs/_layout.tsx +0 -75
  69. package/template/src/app/home/tabs/index.tsx +0 -11
  70. package/template/src/app/modals/payment_modal.tsx +0 -105
  71. package/template/src/hooks/useCheckLocation.ts +0 -36
  72. package/template/src/hooks/useDocPicker.ts +0 -83
  73. package/template/src/hooks/useSuggestionLocation.ts +0 -36
  74. package/template/src/hooks/useUploadProgress.ts +0 -127
@@ -1,25 +1,18 @@
1
1
  import * as Yup from "yup";
2
2
 
3
3
  import { Image, Text, TouchableOpacity, View } from "react-native";
4
- import {
5
- useGoogleLoginMutation,
6
- useSignUpMutation,
7
- } from "@/src/redux/apiSlices/authSlices";
8
4
 
9
- import AppBgWrapper from "@/src/components/common/AppBgWrapper";
5
+ import { Icon } from "@/assets/icon";
6
+ import { ImageAssets } from "@/assets/images";
10
7
  import BackButton from "@/src/lib/backHeader/BackButton";
8
+ import TButton from "@/src/lib/buttons/TButton";
11
9
  import CheckBox from "@/src/lib/inputs/CheckBox";
12
- import { Formik } from "formik";
13
- import { Icon } from "@/assets/icons/Icon";
14
- import { ImageAssets } from "@/assets/images/image";
15
10
  import InputText from "@/src/lib/inputs/InputText";
16
- import { KeyboardAwareScrollView } from "react-native-keyboard-controller";
17
- import Or from "@/src/lib/buttons/Or";
11
+ import tw from "@/src/lib/tailwind";
12
+ import { router } from "expo-router";
13
+ import { Formik } from "formik";
18
14
  import React from "react";
19
15
  import { SvgXml } from "react-native-svg";
20
- import TButton from "@/src/lib/buttons/TButton";
21
- import { router } from "expo-router";
22
- import tw from "@/src/lib/tailwind";
23
16
 
24
17
  const Register = () => {
25
18
  const [showPassword, setShowPassword] = React.useState(false);
@@ -27,8 +20,7 @@ const Register = () => {
27
20
 
28
21
  const [checked, setChecked] = React.useState(false);
29
22
 
30
- const [register, { isLoading }] = useSignUpMutation();
31
- const [loginWithGoogle, googleResults] = useGoogleLoginMutation();
23
+ // const [register, { isLoading }] = useSignUpMutation();
32
24
 
33
25
  const handleRegister = async (values: any) => {
34
26
  try {
@@ -39,35 +31,18 @@ const Register = () => {
39
31
  password: values.password,
40
32
  confirmPassword: values.confirmPassword,
41
33
  name: values.name,
42
- display_name: values.display_name,
43
- gender: values.gender,
44
34
  };
45
- const res = await register(sendData).unwrap();
46
- if (res?.success) {
47
- router.push(`/auth/opt_verify?email=${values.email}&account=true`);
48
- }
49
- console.log(res);
35
+ // const res = await register(sendData).unwrap();
36
+ // if (res?.success) {
37
+ // }
38
+ console.log(sendData);
39
+ router.push(`/auth/opt_verify?email=${values.email}&account=true`);
50
40
  } catch (error: any) {
51
41
  // console.log(error);
52
42
  router.push(`/modals/toaster?content=${error?.message}&time=4000`);
53
43
  }
54
44
  };
55
45
 
56
- const handleLoginWithGoogle = async () => {
57
- try {
58
- const response = await loginWithGoogle({}).unwrap();
59
- // console.log(response);
60
- if (response?.success) {
61
- // router.push("/home/tabs");
62
- router.replace(`/auth/google_login?url=${`${response?.data}`}`);
63
- } else {
64
- router.push(`/modals/toaster?content=${response?.message}`);
65
- }
66
- } catch (error: any) {
67
- router.push(`/modals/toaster?content=${error?.message}`);
68
- }
69
- };
70
-
71
46
  // Define validation schema using Yup
72
47
  const loginValidationSchema = Yup.object().shape({
73
48
  email: Yup.string()
@@ -83,216 +58,182 @@ const Register = () => {
83
58
  // show match password to confirm password
84
59
 
85
60
  name: Yup.string().required("Fullname is required"),
86
- display_name: Yup.string().required("Display name is required"),
87
61
  });
88
62
 
89
63
  return (
90
- <AppBgWrapper>
91
- <KeyboardAwareScrollView style={tw`z-10 `}>
92
- <BackButton
93
- onPress={() => router.dismiss()}
94
- containerStyle={tw`absolute top-0`}
95
- />
96
- <View style={tw`flex-1 items-center justify-center p-5`}>
97
- <View style={tw`justify-center items-center gap-2`}>
98
- <Image
99
- source={ImageAssets.logo}
100
- style={tw`h-28 aspect-square `}
101
- resizeMode="contain"
102
- />
103
- <View style={tw`items-center justify-center gap-1`}>
104
- <Text
105
- style={tw`text-white font-InterSemiBold text-2xl -tracking-[1px]`}
106
- >
107
- Create a new account
108
- </Text>
109
- <Text
110
- style={tw`text-white text-base font-InterRegular -tracking-[1px]`}
111
- >
112
- Please input your details to sign up
113
- </Text>
114
- </View>
64
+ <View>
65
+ <BackButton
66
+ onPress={() => router.dismiss()}
67
+ containerStyle={tw`absolute top-0`}
68
+ />
69
+ <View style={tw`flex-1 items-center justify-center p-5`}>
70
+ <View style={tw`justify-center items-center gap-2`}>
71
+ {/*============= If you want to show logo then you can add here========= */}
72
+ <Image
73
+ source={ImageAssets.logo}
74
+ style={tw`h-28 aspect-square `}
75
+ resizeMode="contain"
76
+ />
77
+ <View style={tw`items-center justify-center gap-1`}>
78
+ <Text
79
+ style={tw`text-white font-InterSemiBold text-2xl -tracking-[1px]`}
80
+ >
81
+ Create a new account
82
+ </Text>
83
+ <Text
84
+ style={tw`text-white text-base font-InterRegular -tracking-[1px]`}
85
+ >
86
+ Please input your details to sign up
87
+ </Text>
115
88
  </View>
89
+ </View>
116
90
 
117
- {/* Formik Wrapper */}
118
- <Formik
119
- initialValues={{
120
- email: "",
121
- password: "",
122
- confirmPassword: "",
123
- name: "",
124
- display_name: "",
125
- gender: "male",
126
- }}
127
- validationSchema={loginValidationSchema}
128
- onSubmit={handleRegister}
129
- >
130
- {({
131
- handleChange,
132
- handleBlur,
133
- handleSubmit,
134
- values,
135
- errors,
136
- touched,
137
- isValid,
138
- setFieldValue,
139
- }) => (
140
- <View style={tw`w-full py-8 gap-6`}>
141
- <View style={tw`gap-3`}>
142
- <InputText
143
- svgFirstIcon={Icon.user}
144
- textInputProps={{
145
- placeholder: "Your Full Name",
146
- placeholderTextColor: "#A9A9A9",
147
- }}
148
- value={values.name}
149
- onChangeText={handleChange("name")}
150
- onBlur={handleBlur("name")}
151
- touched={touched.name}
152
- errorText={errors.name}
153
- />
154
- <InputText
155
- svgFirstIcon={Icon.display_name}
156
- textInputProps={{
157
- placeholder: "Enter your display name",
158
- placeholderTextColor: "#A9A9A9",
159
- }}
160
- value={values.display_name}
161
- onChangeText={handleChange("display_name")}
162
- onBlur={handleBlur("display_name")}
163
- touched={touched.display_name}
164
- errorText={errors.display_name}
165
- />
166
- <InputText
167
- svgFirstIcon={Icon.email}
168
- textInputProps={{
169
- placeholder: "Email",
170
- placeholderTextColor: "#A9A9A9",
171
- }}
172
- value={values.email}
173
- onChangeText={handleChange("email")}
174
- onBlur={handleBlur("email")}
175
- touched={touched.email}
176
- errorText={errors.email}
177
- />
178
- <View style={tw` px-4`}>
179
- <Text style={tw`text-white font-InterRegular mb-2 `}>
180
- Gender
181
- </Text>
182
- <View style={tw`flex-row items-center gap-3`}>
183
- <TouchableOpacity
184
- onPress={() => setFieldValue("gender", "male")}
185
- style={
186
- values.gender === "male"
187
- ? tw`px-4 py-2 rounded-full bg-blue-500`
188
- : tw`px-4 py-2 rounded-full bg-[#3D3D3D]`
189
- }
190
- >
191
- <Text style={tw`text-white`}>Male</Text>
192
- </TouchableOpacity>
193
- <TouchableOpacity
194
- onPress={() => setFieldValue("gender", "female")}
195
- style={
196
- values.gender === "female"
197
- ? tw`px-4 py-2 rounded-full bg-blue-500`
198
- : tw`px-4 py-2 rounded-full bg-[#3D3D3D]`
199
- }
200
- >
201
- <Text style={tw`text-white`}>Female</Text>
202
- </TouchableOpacity>
203
- </View>
204
- </View>
205
- <InputText
206
- svgFirstIcon={Icon.lock}
207
- textInputProps={{
208
- placeholder: "Password",
209
- placeholderTextColor: "#A9A9A9",
210
- secureTextEntry: !showPassword,
211
- }}
212
- svgSecondIcon={!showPassword ? Icon.eyeOff : Icon.eye}
213
- svgSecondOnPress={() => setShowPassword(!showPassword)}
214
- value={values.password}
215
- onChangeText={handleChange("password")}
216
- onBlur={handleBlur("password")}
217
- touched={touched.password}
218
- errorText={errors.password}
219
- />
220
- <InputText
221
- svgFirstIcon={Icon.lock}
222
- textInputProps={{
223
- placeholder: "Confirm Password",
224
- placeholderTextColor: "#A9A9A9",
225
- secureTextEntry: !showPasswordTwo,
226
- }}
227
- svgSecondIcon={!showPasswordTwo ? Icon.eyeOff : Icon.eye}
228
- svgSecondOnPress={() =>
229
- setShowPasswordTwo(!showPasswordTwo)
230
- }
231
- value={values.confirmPassword}
232
- onChangeText={handleChange("confirmPassword")}
233
- onBlur={handleBlur("confirmPassword")}
234
- touched={touched.confirmPassword}
235
- errorText={errors.confirmPassword}
236
- />
237
- </View>
91
+ {/* Formik Wrapper */}
92
+ <Formik
93
+ initialValues={{
94
+ email: "",
95
+ password: "",
96
+ confirmPassword: "",
97
+ name: "",
98
+ }}
99
+ validationSchema={loginValidationSchema}
100
+ onSubmit={handleRegister}
101
+ >
102
+ {({
103
+ handleChange,
104
+ handleBlur,
105
+ handleSubmit,
106
+ values,
107
+ errors,
108
+ touched,
109
+ isValid,
110
+ setFieldValue,
111
+ }) => (
112
+ <View style={tw`w-full py-8 gap-6`}>
113
+ <View style={tw`gap-3`}>
114
+ <InputText
115
+ // === Place icons here ===
116
+ svgFirstIcon={Icon.user}
117
+ textInputProps={{
118
+ placeholder: "Your Full Name",
119
+ placeholderTextColor: "#A9A9A9",
120
+ }}
121
+ value={values.name}
122
+ onChangeText={handleChange("name")}
123
+ onBlur={handleBlur("name")}
124
+ touched={touched.name}
125
+ errorText={errors.name}
126
+ />
238
127
 
239
- <View style={tw`flex-row justify-between items-center`}>
240
- <View style={tw`flex-row items-center`}>
241
- <CheckBox
242
- checked={checked}
243
- onPress={() => setChecked(!checked)}
244
- containerStyle={tw`items-center flex-1`}
245
- titleComponent={
246
- <View style={tw` flex-row items-center gap-1`}>
247
- <Text
248
- style={tw`text-white font-InterRegular text-[13px]`}
249
- >
250
- Agree to
251
- </Text>
252
- <Text
253
- onPress={() =>
254
- router.push("/settings/terms_and_conditions")
255
- }
256
- style={tw`text-blue-500 underline font-InterRegular text-[13px]`}
257
- >
258
- Terms & conditions
259
- </Text>
260
- <Text
261
- style={tw`text-white font-InterRegular text-[13px]`}
262
- >
263
- and
264
- </Text>
265
- <Text
266
- onPress={() =>
267
- router.push("/settings/privacy_policy")
268
- }
269
- style={tw` text-blue-500 underline font-InterRegular text-[13px]`}
270
- >
271
- Privacy policy
272
- </Text>
273
- <Text
274
- style={tw`text-white font-InterRegular text-[13px]`}
275
- >
276
- .
277
- </Text>
278
- </View>
279
- }
280
- />
281
- </View>
282
- </View>
128
+ <InputText
129
+ // === Place icons here ===
130
+ // svgFirstIcon={Icon.email}
131
+ textInputProps={{
132
+ placeholder: "Email",
133
+ placeholderTextColor: "#A9A9A9",
134
+ }}
135
+ value={values.email}
136
+ onChangeText={handleChange("email")}
137
+ onBlur={handleBlur("email")}
138
+ touched={touched.email}
139
+ errorText={errors.email}
140
+ />
283
141
 
284
- {/* Submit button calls handleSubmit from Formik */}
285
- <TButton
286
- isLoading={isLoading}
287
- title="Sign Up"
288
- onPress={() => {
289
- handleSubmit();
290
- // router.push("/auth/opt_verify");
142
+ <InputText
143
+ // === Place icons here ===
144
+ svgFirstIcon={Icon.lock}
145
+ textInputProps={{
146
+ placeholder: "Password",
147
+ placeholderTextColor: "#A9A9A9",
148
+ secureTextEntry: !showPassword,
149
+ }}
150
+ // Place svg for eye icon to show/hide password
151
+ svgSecondIcon={!showPassword ? Icon.eyeOff : Icon.eye}
152
+ svgSecondOnPress={() => setShowPassword(!showPassword)}
153
+ value={values.password}
154
+ onChangeText={handleChange("password")}
155
+ onBlur={handleBlur("password")}
156
+ touched={touched.password}
157
+ errorText={errors.password}
158
+ />
159
+ <InputText
160
+ // === Place icons here ===
161
+ svgFirstIcon={Icon.lock}
162
+ textInputProps={{
163
+ placeholder: "Confirm Password",
164
+ placeholderTextColor: "#A9A9A9",
165
+ secureTextEntry: !showPasswordTwo,
291
166
  }}
292
- disabled={!isValid || !checked}
167
+ // Place svg for eye icon to show/hide password
168
+ // svgSecondIcon={!showPasswordTwo ? Icon.eyeOff : Icon.eye}
169
+ svgSecondOnPress={() => setShowPasswordTwo(!showPasswordTwo)}
170
+ value={values.confirmPassword}
171
+ onChangeText={handleChange("confirmPassword")}
172
+ onBlur={handleBlur("confirmPassword")}
173
+ touched={touched.confirmPassword}
174
+ errorText={errors.confirmPassword}
293
175
  />
176
+ </View>
177
+
178
+ <View style={tw`flex-row justify-between items-center`}>
179
+ <View style={tw`flex-row items-center`}>
180
+ <CheckBox
181
+ checked={checked}
182
+ onPress={() => setChecked(!checked)}
183
+ containerStyle={tw`items-center flex-1`}
184
+ titleComponent={
185
+ <View style={tw` flex-row items-center gap-1`}>
186
+ <Text
187
+ style={tw`text-white font-InterRegular text-[13px]`}
188
+ >
189
+ Agree to
190
+ </Text>
191
+ <Text
192
+ onPress={() =>
193
+ router.push("/settings/terms_and_conditions")
194
+ }
195
+ style={tw`text-blue-500 underline font-InterRegular text-[13px]`}
196
+ >
197
+ Terms & conditions
198
+ </Text>
199
+ <Text
200
+ style={tw`text-white font-InterRegular text-[13px]`}
201
+ >
202
+ and
203
+ </Text>
204
+ <Text
205
+ onPress={() =>
206
+ router.push("/settings/privacy_policy")
207
+ }
208
+ style={tw` text-blue-500 underline font-InterRegular text-[13px]`}
209
+ >
210
+ Privacy policy
211
+ </Text>
212
+ <Text
213
+ style={tw`text-white font-InterRegular text-[13px]`}
214
+ >
215
+ .
216
+ </Text>
217
+ </View>
218
+ }
219
+ />
220
+ </View>
221
+ </View>
294
222
 
295
- <Or title="Or continue with" />
223
+ {/* Submit button calls handleSubmit from Formik */}
224
+ <TButton
225
+ // If you connect API then you can add loading here
226
+ // isLoading={isLoading}
227
+ title="Sign Up"
228
+ onPress={() => {
229
+ handleSubmit();
230
+ // router.push("/auth/opt_verify");
231
+ }}
232
+ disabled={!isValid || !checked}
233
+ />
234
+
235
+ {/* =========== IF need social login button then you can add here ======= */}
236
+ {/* <Or title="Or continue with" />
296
237
  <View style={tw`flex-row justify-center items-center gap-5`}>
297
238
  <TouchableOpacity
298
239
  onPress={handleLoginWithGoogle}
@@ -300,34 +241,31 @@ const Register = () => {
300
241
  >
301
242
  <SvgXml xml={Icon.google} />
302
243
  </TouchableOpacity>
303
- {/* <TouchableOpacity
244
+ <TouchableOpacity
304
245
  style={tw`w-16 h-16 rounded-full bg-[#3D3D3D] items-center justify-center`}
305
246
  >
306
247
  <SvgXml xml={Icon.apple} />
307
- </TouchableOpacity> */}
308
- </View>
309
-
310
- <View style={tw`flex-row justify-center mt-6`}>
311
- <Text style={tw`text-white`}>Already have an account?</Text>
312
- <TouchableOpacity
313
- onPress={() => {
314
- router.replace("/auth");
315
- }}
316
- style={tw`flex-row items-center gap-3`}
317
- >
318
- <Text style={tw`text-[#339DFF] underline ml-1`}>
319
- Sign In
320
- </Text>
321
- <SvgXml xml={Icon.play} />
322
248
  </TouchableOpacity>
323
- </View>
249
+ </View> */}
250
+
251
+ <View style={tw`flex-row justify-center mt-6`}>
252
+ <Text style={tw`text-white`}>Already have an account?</Text>
253
+ <TouchableOpacity
254
+ onPress={() => {
255
+ router.replace("/auth");
256
+ }}
257
+ style={tw`flex-row items-center gap-3`}
258
+ >
259
+ <Text style={tw`text-[#339DFF] underline ml-1`}>Sign In</Text>
260
+ <SvgXml xml={Icon.play} />
261
+ </TouchableOpacity>
324
262
  </View>
325
- )}
326
- </Formik>
327
- {/* End of Formik Wrapper */}
328
- </View>
329
- </KeyboardAwareScrollView>
330
- </AppBgWrapper>
263
+ </View>
264
+ )}
265
+ </Formik>
266
+ {/* End of Formik Wrapper */}
267
+ </View>
268
+ </View>
331
269
  );
332
270
  };
333
271