ordering-ui-react-native 0.16.35 → 0.16.36-release
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/package.json +7 -5
- package/src/DeliveryApp.tsx +43 -1
- package/src/components/ActiveOrders/index.tsx +61 -63
- package/src/components/ActiveOrders/styles.tsx +8 -14
- package/src/components/BusinessBasicInformation/index.tsx +11 -19
- package/src/components/BusinessInformation/index.tsx +33 -4
- package/src/components/BusinessInformation/styles.tsx +2 -2
- package/src/components/BusinessProductsList/index.tsx +10 -10
- package/src/components/BusinessesListing/index.tsx +1 -1
- package/src/components/Checkout/index.tsx +2 -1
- package/src/components/LanguageSelector/index.tsx +21 -16
- package/src/components/LoginForm/index.tsx +15 -0
- package/src/components/Messages/index.tsx +2 -2
- package/src/components/NotificationSetting/index.tsx +85 -0
- package/src/components/OrderDetails/index.tsx +2 -20
- package/src/components/OrdersOption/index.tsx +54 -56
- package/src/components/PaymentOptions/index.tsx +335 -365
- package/src/components/PaymentOptionsWebView/index.tsx +120 -121
- package/src/components/ReviewDriver/index.tsx +1 -1
- package/src/components/ReviewOrder/index.tsx +2 -1
- package/src/components/ReviewProducts/index.tsx +11 -0
- package/src/components/SignupForm/index.tsx +15 -0
- package/src/components/SingleProductReview/index.tsx +8 -5
- package/src/components/StripeElementsForm/index.tsx +25 -16
- package/src/components/VerifyPhone/styles.tsx +1 -2
- package/src/components/shared/OBottomPopup.tsx +6 -2
- package/src/index.tsx +2 -0
- package/src/pages/BusinessesListing.tsx +7 -6
- package/src/pages/OrderDetails.tsx +1 -1
- package/src/pages/ReviewDriver.tsx +2 -2
- package/src/pages/ReviewOrder.tsx +2 -2
- package/src/types/@fatnlazycat/react-native-recaptcha-v3/index.d.ts +1 -0
- package/src/utils/index.tsx +2 -1
- package/themes/business/src/components/BusinessController/index.tsx +2 -2
- package/themes/business/src/components/Chat/index.tsx +38 -30
- package/themes/business/src/components/DriverMap/index.tsx +7 -5
- package/themes/business/src/components/DriverSchedule/index.tsx +36 -19
- package/themes/business/src/components/LoginForm/index.tsx +111 -74
- package/themes/business/src/components/MapView/index.tsx +12 -1
- package/themes/business/src/components/MessagesOption/index.tsx +11 -1
- package/themes/business/src/components/NewOrderNotification/index.tsx +26 -41
- package/themes/business/src/components/OrderDetails/Business.tsx +1 -1
- package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +25 -19
- package/themes/business/src/components/OrdersListManager/index.tsx +10 -3
- package/themes/business/src/components/OrdersOption/index.tsx +65 -21
- package/themes/business/src/components/OrdersOption/styles.tsx +5 -1
- package/themes/business/src/components/OrdersOptionBusiness/index.tsx +15 -1
- package/themes/business/src/components/OrdersOptionCity/index.tsx +15 -1
- package/themes/business/src/components/OrdersOptionDate/index.tsx +19 -6
- package/themes/business/src/components/OrdersOptionDelivery/index.tsx +15 -1
- package/themes/business/src/components/OrdersOptionDriver/index.tsx +15 -1
- package/themes/business/src/components/OrdersOptionPaymethod/index.tsx +15 -1
- package/themes/business/src/components/OrdersOptionStatus/index.tsx +10 -1
- package/themes/business/src/components/PreviousMessages/index.tsx +17 -18
- package/themes/business/src/components/PreviousOrders/index.tsx +21 -23
- package/themes/business/src/components/ProductItemAccordion/index.tsx +3 -2
- package/themes/business/src/components/ReviewCustomer/index.tsx +27 -13
- package/themes/business/src/components/ScheduleBlocked/index.tsx +2 -2
- package/themes/business/src/components/UserFormDetails/index.tsx +5 -2
- package/themes/business/src/components/UserProfileForm/index.tsx +2 -0
- package/themes/business/src/components/shared/ODropDown.tsx +42 -8
- package/themes/business/src/components/shared/ODropDownCalendar.tsx +36 -7
- package/themes/business/src/types/index.tsx +15 -9
- package/themes/business/src/utils/index.tsx +10 -0
- package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
- package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
- package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
- package/themes/kiosk/src/components/BusinessesListing/index.tsx +2 -1
- package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
- package/themes/kiosk/src/components/LoginForm/index.tsx +121 -10
- package/themes/kiosk/src/components/LoginForm/styles.tsx +5 -0
- package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
- package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
- package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
- package/themes/kiosk/src/components/ProductForm/index.tsx +1 -14
- package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
- package/themes/kiosk/src/types/index.d.ts +2 -0
- package/themes/original/index.tsx +4 -0
- package/themes/original/src/components/AddressDetails/index.tsx +2 -2
- package/themes/original/src/components/AddressForm/index.tsx +151 -140
- package/themes/original/src/components/AddressList/index.tsx +1 -1
- package/themes/original/src/components/AppleLogin/index.tsx +4 -4
- package/themes/original/src/components/BusinessBasicInformation/index.tsx +324 -162
- package/themes/original/src/components/BusinessBasicInformation/styles.tsx +6 -2
- package/themes/original/src/components/BusinessController/index.tsx +190 -113
- package/themes/original/src/components/BusinessController/styles.tsx +0 -7
- package/themes/original/src/components/BusinessItemAccordion/index.tsx +12 -6
- package/themes/original/src/components/BusinessListingSearch/BusinessControllerSkeletons/index.tsx +57 -0
- package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/index.tsx +59 -0
- package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/styles.tsx +13 -0
- package/themes/original/src/components/BusinessListingSearch/index.tsx +80 -128
- package/themes/original/src/components/BusinessListingSearch/styles.tsx +10 -12
- package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/index.tsx +87 -0
- package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/styles.tsx +12 -0
- package/themes/original/src/components/BusinessProductsList/index.tsx +49 -52
- package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
- package/themes/original/src/components/BusinessProductsListing/index.tsx +179 -104
- package/themes/original/src/components/BusinessProductsListing/styles.tsx +18 -11
- package/themes/original/src/components/BusinessReviews/index.tsx +6 -1
- package/themes/original/src/components/BusinessTypeFilter/index.tsx +3 -2
- package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +37 -25
- package/themes/original/src/components/BusinessesListing/Layout/Appointment/styles.tsx +5 -4
- package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +278 -104
- package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +47 -10
- package/themes/original/src/components/BusinessesListing/index.tsx +95 -7
- package/themes/original/src/components/Cart/index.tsx +54 -16
- package/themes/original/src/components/Cart/styles.tsx +4 -0
- package/themes/original/src/components/CartContent/index.tsx +22 -16
- package/themes/original/src/components/Checkout/index.tsx +109 -64
- package/themes/original/src/components/Checkout/styles.tsx +0 -1
- package/themes/original/src/components/DriverTips/index.tsx +4 -4
- package/themes/original/src/components/DriverTips/styles.tsx +2 -1
- package/themes/original/src/components/Favorite/index.tsx +1 -0
- package/themes/original/src/components/FavoriteList/index.tsx +32 -2
- package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
- package/themes/original/src/components/GPSButton/index.tsx +20 -19
- package/themes/original/src/components/GoogleMap/index.tsx +20 -12
- package/themes/original/src/components/HelpAccountAndPayment/index.tsx +25 -10
- package/themes/original/src/components/HelpAccountAndPayment/styles.tsx +4 -0
- package/themes/original/src/components/HelpGuide/index.tsx +9 -8
- package/themes/original/src/components/HelpOrder/index.tsx +9 -8
- package/themes/original/src/components/LanguageSelector/index.tsx +19 -14
- package/themes/original/src/components/LoginForm/Otp/index.tsx +95 -72
- package/themes/original/src/components/LoginForm/index.tsx +107 -50
- package/themes/original/src/components/LottieAnimation/index.tsx +69 -0
- package/themes/original/src/components/Messages/index.tsx +17 -17
- package/themes/original/src/components/MomentOption/index.tsx +8 -6
- package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +92 -92
- package/themes/original/src/components/MultiCheckout/index.tsx +6 -0
- package/themes/original/src/components/MultiOrdersDetails/index.tsx +20 -16
- package/themes/original/src/components/MyOrders/index.tsx +70 -6
- package/themes/original/src/components/NavBar/index.tsx +15 -9
- package/themes/original/src/components/NetworkError/index.tsx +5 -3
- package/themes/original/src/components/NotFoundSource/index.tsx +2 -1
- package/themes/original/src/components/Notifications/index.tsx +148 -0
- package/themes/original/src/components/Notifications/styles.tsx +17 -0
- package/themes/original/src/components/OrderDetails/OrderHistory.tsx +167 -0
- package/themes/original/src/components/OrderDetails/index.tsx +200 -37
- package/themes/original/src/components/OrderDetails/styles.tsx +15 -2
- package/themes/original/src/components/OrderItAgain/index.tsx +75 -0
- package/themes/original/src/components/OrderItAgain/styles.tsx +10 -0
- package/themes/original/src/components/OrderProgress/index.tsx +77 -66
- package/themes/original/src/components/OrderProgress/styles.tsx +5 -0
- package/themes/original/src/components/OrderSummary/index.tsx +3 -36
- package/themes/original/src/components/OrderTypeSelector/index.tsx +85 -36
- package/themes/original/src/components/OrderTypeSelector/styles.tsx +19 -1
- package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +97 -106
- package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +3 -0
- package/themes/original/src/components/OrdersOption/index.tsx +71 -55
- package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
- package/themes/original/src/components/PaymentOptions/index.tsx +41 -23
- package/themes/original/src/components/PhoneInputNumber/index.tsx +5 -11
- package/themes/original/src/components/PlaceSpot/index.tsx +243 -47
- package/themes/original/src/components/PlaceSpot/styles.tsx +0 -2
- package/themes/original/src/components/PreviousOrders/index.tsx +3 -2
- package/themes/original/src/components/ProductForm/index.tsx +635 -664
- package/themes/original/src/components/ProductForm/styles.tsx +9 -8
- package/themes/original/src/components/ProductItemAccordion/index.tsx +199 -128
- package/themes/original/src/components/ProductOption/index.tsx +1 -1
- package/themes/original/src/components/ProfessionalFilter/index.tsx +2 -1
- package/themes/original/src/components/ProfessionalProfile/index.tsx +26 -14
- package/themes/original/src/components/ReviewDriver/index.tsx +7 -7
- package/themes/original/src/components/ReviewOrder/index.tsx +18 -3
- package/themes/original/src/components/ReviewProducts/index.tsx +2 -2
- package/themes/original/src/components/ReviewTrigger/index.tsx +118 -0
- package/themes/original/src/components/ReviewTrigger/styles.tsx +34 -0
- package/themes/original/src/components/SearchBar/index.tsx +5 -3
- package/themes/original/src/components/ServiceForm/index.tsx +410 -258
- package/themes/original/src/components/SignupForm/index.tsx +362 -210
- package/themes/original/src/components/SingleOrderCard/index.tsx +229 -181
- package/themes/original/src/components/SingleOrderCard/styles.tsx +0 -7
- package/themes/original/src/components/SingleProductCard/index.tsx +200 -110
- package/themes/original/src/components/SingleProductCard/styles.tsx +2 -10
- package/themes/original/src/components/SingleProductReview/index.tsx +38 -5
- package/themes/original/src/components/SingleProductReview/styles.tsx +12 -0
- package/themes/original/src/components/StripeElementsForm/index.tsx +18 -7
- package/themes/original/src/components/UpsellingProducts/index.tsx +15 -5
- package/themes/original/src/components/UserDetails/index.tsx +11 -2
- package/themes/original/src/components/UserFormDetails/index.tsx +67 -77
- package/themes/original/src/components/UserProfile/index.tsx +56 -31
- package/themes/original/src/components/UserProfile/styles.ts +17 -0
- package/themes/original/src/components/UserProfileForm/index.tsx +10 -10
- package/themes/original/src/components/WalletTransactions/index.tsx +76 -0
- package/themes/original/src/components/WalletTransactions/styles.tsx +13 -0
- package/themes/original/src/components/Wallets/index.tsx +176 -164
- package/themes/original/src/components/Wallets/styles.tsx +12 -8
- package/themes/original/src/components/shared/CardAnimation.tsx +47 -0
- package/themes/original/src/components/shared/OBottomPopup.tsx +48 -15
- package/themes/original/src/components/shared/OButton.tsx +10 -3
- package/themes/original/src/components/shared/OIcon.tsx +8 -1
- package/themes/original/src/components/shared/OInput.tsx +13 -3
- package/themes/original/src/layouts/Container.tsx +13 -9
- package/themes/original/src/layouts/FloatingBottomContainer.tsx +5 -1
- package/themes/original/src/types/index.tsx +91 -30
- package/themes/original/src/utils/index.tsx +121 -10
- package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import React, { useEffect, useState, useRef } from 'react';
|
|
2
|
-
import { StyleSheet, View, Keyboard } from 'react-native';
|
|
2
|
+
import { StyleSheet, View, Keyboard, Vibration } from 'react-native';
|
|
3
3
|
import Spinner from 'react-native-loading-spinner-overlay';
|
|
4
4
|
import { useForm, Controller } from 'react-hook-form';
|
|
5
5
|
import { PhoneInputNumber } from '../PhoneInputNumber';
|
|
6
6
|
import MaterialCommunityIcons from 'react-native-vector-icons/MaterialCommunityIcons';
|
|
7
7
|
import Recaptcha from 'react-native-recaptcha-that-works'
|
|
8
|
+
import ReCaptcha from '@fatnlazycat/react-native-recaptcha-v3'
|
|
8
9
|
|
|
9
10
|
import {
|
|
10
11
|
LoginForm as LoginFormController,
|
|
@@ -95,14 +96,14 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
95
96
|
const [alertState, setAlertState] = useState({ open: false, title: '', content: [] })
|
|
96
97
|
const [tabLayouts, setTabLayouts] = useState<any>({})
|
|
97
98
|
const tabsRef = useRef<any>(null)
|
|
98
|
-
|
|
99
|
+
const enabledPoweredByOrdering = configs?.powered_by_ordering_module?.value
|
|
99
100
|
const theme = useTheme();
|
|
100
101
|
const isOtpEmail = loginTab === 'otp' && otpType === 'email'
|
|
101
102
|
const isOtpCellphone = loginTab === 'otp' && otpType === 'cellphone'
|
|
102
103
|
|
|
103
104
|
const googleLoginEnabled = configs?.google_login_enabled?.value === '1' || !configs?.google_login_enabled?.enabled
|
|
104
105
|
const facebookLoginEnabled = configs?.facebook_login_enabled?.value === '1' || !configs?.facebook_login_enabled?.enabled
|
|
105
|
-
|
|
106
|
+
const appleLoginEnabled = configs?.apple_login_enabled?.value === '1' || !configs?.apple_login_enabled?.enabled
|
|
106
107
|
|
|
107
108
|
const loginStyle = StyleSheet.create({
|
|
108
109
|
btnOutline: {
|
|
@@ -164,6 +165,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
164
165
|
if (loginTab === 'otp') {
|
|
165
166
|
if (phoneInputData.error && (loginTab !== 'otp' || (otpType === 'cellphone' && loginTab === 'otp'))) {
|
|
166
167
|
showToast(ToastType.Error, t('INVALID_PHONE_NUMBER', 'Invalid phone number'));
|
|
168
|
+
Vibration.vibrate()
|
|
167
169
|
return
|
|
168
170
|
}
|
|
169
171
|
if (loginTab === 'otp') {
|
|
@@ -176,6 +178,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
176
178
|
} else {
|
|
177
179
|
if (phoneInputData.error) {
|
|
178
180
|
showToast(ToastType.Error, phoneInputData.error);
|
|
181
|
+
Vibration.vibrate()
|
|
179
182
|
return;
|
|
180
183
|
}
|
|
181
184
|
handleButtonLoginClick({
|
|
@@ -188,6 +191,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
188
191
|
const handleVerifyCodeClick = () => {
|
|
189
192
|
if (phoneInputData.error) {
|
|
190
193
|
showToast(ToastType.Error, phoneInputData.error);
|
|
194
|
+
Vibration.vibrate()
|
|
191
195
|
return;
|
|
192
196
|
}
|
|
193
197
|
if (
|
|
@@ -202,6 +206,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
202
206
|
'The field Mobile phone is required.',
|
|
203
207
|
),
|
|
204
208
|
);
|
|
209
|
+
Vibration.vibrate()
|
|
205
210
|
return;
|
|
206
211
|
}
|
|
207
212
|
handleSendVerifyCode && handleSendVerifyCode(phoneInputData.phone);
|
|
@@ -223,10 +228,12 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
223
228
|
setRecaptchaVerified(false)
|
|
224
229
|
if (!recaptchaConfig?.siteKey) {
|
|
225
230
|
showToast(ToastType.Error, t('NO_RECAPTCHA_SITE_KEY', 'The config doesn\'t have recaptcha site key'));
|
|
231
|
+
Vibration.vibrate()
|
|
226
232
|
return
|
|
227
233
|
}
|
|
228
234
|
if (!recaptchaConfig?.baseUrl) {
|
|
229
235
|
showToast(ToastType.Error, t('NO_RECAPTCHA_BASE_URL', 'The config doesn\'t have recaptcha base url'));
|
|
236
|
+
Vibration.vibrate()
|
|
230
237
|
return
|
|
231
238
|
}
|
|
232
239
|
|
|
@@ -235,7 +242,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
235
242
|
|
|
236
243
|
const onRecaptchaVerify = (token: any) => {
|
|
237
244
|
setRecaptchaVerified(true)
|
|
238
|
-
handleReCaptcha(token)
|
|
245
|
+
handleReCaptcha({ code: token, version: recaptchaConfig?.version })
|
|
239
246
|
}
|
|
240
247
|
|
|
241
248
|
const handleChangeOtpType = (type: string) => {
|
|
@@ -256,7 +263,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
256
263
|
})
|
|
257
264
|
}
|
|
258
265
|
|
|
259
|
-
const handleCategoryScroll = (opc
|
|
266
|
+
const handleCategoryScroll = (opc: string) => {
|
|
260
267
|
tabsRef.current.scrollTo({
|
|
261
268
|
x: tabLayouts?.[opc]?.x - 40,
|
|
262
269
|
animated: true
|
|
@@ -272,15 +279,40 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
272
279
|
|
|
273
280
|
useEffect(() => {
|
|
274
281
|
if (configs && Object.keys(configs).length > 0 && enableReCaptcha) {
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
282
|
+
if (configs?.security_recaptcha_type?.value === 'v3' &&
|
|
283
|
+
configs?.security_recaptcha_score_v3?.value > 0 &&
|
|
284
|
+
configs?.security_recaptcha_site_key_v3?.value
|
|
285
|
+
) {
|
|
286
|
+
setRecaptchaConfig({
|
|
287
|
+
version: 'v3',
|
|
288
|
+
siteKey: configs?.security_recaptcha_site_key_v3?.value || null,
|
|
289
|
+
baseUrl: configs?.security_recaptcha_base_url?.value || null
|
|
290
|
+
})
|
|
291
|
+
return
|
|
292
|
+
}
|
|
293
|
+
if (configs?.security_recaptcha_site_key?.value) {
|
|
294
|
+
setRecaptchaConfig({
|
|
295
|
+
version: 'v2',
|
|
296
|
+
siteKey: configs?.security_recaptcha_site_key?.value || null,
|
|
297
|
+
baseUrl: configs?.security_recaptcha_base_url?.value || null
|
|
298
|
+
})
|
|
299
|
+
}
|
|
279
300
|
}
|
|
280
301
|
}, [configs, enableReCaptcha])
|
|
281
302
|
|
|
282
303
|
useEffect(() => {
|
|
283
304
|
if (!formState.loading && formState.result?.error) {
|
|
305
|
+
if (formState.result?.result?.[0] === 'ERROR_AUTH_VERIFICATION_CODE') {
|
|
306
|
+
setRecaptchaVerified(false)
|
|
307
|
+
setRecaptchaConfig({
|
|
308
|
+
version: 'v2',
|
|
309
|
+
siteKey: configs?.security_recaptcha_site_key?.value || null,
|
|
310
|
+
baseUrl: configs?.security_recaptcha_base_url?.value || null
|
|
311
|
+
})
|
|
312
|
+
showToast(ToastType.Info, t('TRY_AGAIN', 'Please try again'))
|
|
313
|
+
Vibration.vibrate()
|
|
314
|
+
return
|
|
315
|
+
}
|
|
284
316
|
formState.result?.result &&
|
|
285
317
|
showToast(
|
|
286
318
|
ToastType.Error,
|
|
@@ -288,6 +320,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
288
320
|
? formState.result?.result
|
|
289
321
|
: formState.result?.result[0],
|
|
290
322
|
);
|
|
323
|
+
formState.result?.result && Vibration.vibrate()
|
|
291
324
|
}
|
|
292
325
|
}, [formState]);
|
|
293
326
|
|
|
@@ -299,6 +332,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
299
332
|
? verifyPhoneState?.result?.result
|
|
300
333
|
: verifyPhoneState?.result?.result[0];
|
|
301
334
|
verifyPhoneState.result?.result && showToast(ToastType.Error, message);
|
|
335
|
+
verifyPhoneState.result?.result && Vibration.vibrate();
|
|
302
336
|
setIsLoadingVerifyModal(false);
|
|
303
337
|
return;
|
|
304
338
|
}
|
|
@@ -338,6 +372,10 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
338
372
|
}
|
|
339
373
|
}, [checkPhoneCodeState])
|
|
340
374
|
|
|
375
|
+
useEffect(() => {
|
|
376
|
+
if (!!Object.values(errors)?.length) Vibration.vibrate()
|
|
377
|
+
}, [errors])
|
|
378
|
+
|
|
341
379
|
return (
|
|
342
380
|
<Container>
|
|
343
381
|
<NavBar
|
|
@@ -351,15 +389,15 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
351
389
|
titleStyle={{ marginRight: 0, marginLeft: 0 }}
|
|
352
390
|
/>
|
|
353
391
|
<FormSide>
|
|
354
|
-
{((useLoginByEmail
|
|
392
|
+
{(Number(useLoginByEmail) + Number(useLoginByCellphone) + Number(useLoginOtpEmail) + Number(useLoginOtpCellphone) > 1) && (
|
|
355
393
|
<LoginWith>
|
|
356
394
|
<OTabs
|
|
357
|
-
horizontal
|
|
395
|
+
horizontal
|
|
358
396
|
showsHorizontalScrollIndicator={false}
|
|
359
397
|
ref={tabsRef}
|
|
360
398
|
>
|
|
361
399
|
{useLoginByEmail && (
|
|
362
|
-
<TabBtn
|
|
400
|
+
<TabBtn
|
|
363
401
|
onPress={() => handleChangeTab('email')}
|
|
364
402
|
onLayout={(event: any) => handleOnLayout(event, 'email')}
|
|
365
403
|
>
|
|
@@ -384,7 +422,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
384
422
|
</TabBtn>
|
|
385
423
|
)}
|
|
386
424
|
{useLoginByCellphone && (
|
|
387
|
-
<TabBtn
|
|
425
|
+
<TabBtn
|
|
388
426
|
onPress={() => handleChangeTab('cellphone')}
|
|
389
427
|
onLayout={(event: any) => handleOnLayout(event, 'cellphone')}
|
|
390
428
|
>
|
|
@@ -409,7 +447,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
409
447
|
</TabBtn>
|
|
410
448
|
)}
|
|
411
449
|
{useLoginOtpEmail && (
|
|
412
|
-
<TabBtn
|
|
450
|
+
<TabBtn
|
|
413
451
|
onPress={() => handleChangeOtpType('email')}
|
|
414
452
|
onLayout={(event: any) => handleOnLayout(event, 'otp_email')}
|
|
415
453
|
>
|
|
@@ -434,7 +472,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
434
472
|
</TabBtn>
|
|
435
473
|
)}
|
|
436
474
|
{useLoginOtpCellphone && (
|
|
437
|
-
<TabBtn
|
|
475
|
+
<TabBtn
|
|
438
476
|
onPress={() => handleChangeOtpType('cellphone')}
|
|
439
477
|
onLayout={(event: any) => handleOnLayout(event, 'otp_cellphone')}
|
|
440
478
|
>
|
|
@@ -596,35 +634,47 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
596
634
|
</TouchableOpacity>
|
|
597
635
|
)}
|
|
598
636
|
|
|
599
|
-
{enableReCaptcha && (
|
|
637
|
+
{(enableReCaptcha && recaptchaConfig?.version) && (
|
|
600
638
|
<>
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
{
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
639
|
+
{recaptchaConfig?.version === 'v3' ? (
|
|
640
|
+
<ReCaptcha
|
|
641
|
+
url={recaptchaConfig?.baseUrl}
|
|
642
|
+
siteKey={recaptchaConfig?.siteKey}
|
|
643
|
+
containerStyle={{ height: 40 }}
|
|
644
|
+
onExecute={onRecaptchaVerify}
|
|
645
|
+
reCaptchaType={1}
|
|
646
|
+
/>
|
|
647
|
+
) : (
|
|
648
|
+
<>
|
|
649
|
+
<TouchableOpacity
|
|
650
|
+
onPress={handleOpenRecaptcha}
|
|
651
|
+
>
|
|
652
|
+
<RecaptchaButton>
|
|
653
|
+
{recaptchaVerified ? (
|
|
654
|
+
<MaterialCommunityIcons
|
|
655
|
+
name="checkbox-marked"
|
|
656
|
+
size={26}
|
|
657
|
+
color={theme.colors.primary}
|
|
658
|
+
/>
|
|
659
|
+
) : (
|
|
660
|
+
<MaterialCommunityIcons
|
|
661
|
+
name="checkbox-blank-outline"
|
|
662
|
+
size={26}
|
|
663
|
+
color={theme.colors.mediumGray}
|
|
664
|
+
/>
|
|
665
|
+
)}
|
|
666
|
+
<OText size={14} mLeft={8}>{t('VERIFY_ReCAPTCHA', 'Verify reCAPTCHA')}</OText>
|
|
667
|
+
</RecaptchaButton>
|
|
668
|
+
</TouchableOpacity>
|
|
669
|
+
<Recaptcha
|
|
670
|
+
ref={recaptchaRef}
|
|
671
|
+
siteKey={recaptchaConfig?.siteKey}
|
|
672
|
+
baseUrl={recaptchaConfig?.baseUrl}
|
|
673
|
+
onVerify={onRecaptchaVerify}
|
|
674
|
+
onExpire={() => setRecaptchaVerified(false)}
|
|
675
|
+
/>
|
|
676
|
+
</>)
|
|
677
|
+
}
|
|
628
678
|
</>
|
|
629
679
|
)}
|
|
630
680
|
<OButton
|
|
@@ -643,7 +693,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
643
693
|
{t('NEW_ON_PLATFORM', 'New on Ordering?')}
|
|
644
694
|
</OText>
|
|
645
695
|
<TouchableOpacity onPress={() => onNavigationRedirect('Signup')}>
|
|
646
|
-
<OText size={14} mLeft={5} color={theme.colors.
|
|
696
|
+
<OText size={14} mLeft={5} color={theme.colors.primary}>
|
|
647
697
|
{t('CREATE_ACCOUNT', 'Create account')}
|
|
648
698
|
</OText>
|
|
649
699
|
</TouchableOpacity>
|
|
@@ -682,8 +732,9 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
682
732
|
)}
|
|
683
733
|
|
|
684
734
|
{configs && Object.keys(configs).length > 0 ? (
|
|
685
|
-
(((configs?.facebook_login?.value === 'true' || configs?.facebook_login?.value === '1') && configs?.facebook_id?.value) ||
|
|
686
|
-
(configs?.google_login_client_id?.value !== '' && configs?.google_login_client_id?.value !== null))
|
|
735
|
+
(((configs?.facebook_login?.value === 'true' || configs?.facebook_login?.value === '1') && configs?.facebook_id?.value && facebookLoginEnabled) ||
|
|
736
|
+
((configs?.google_login_client_id?.value !== '' && configs?.google_login_client_id?.value !== null) && googleLoginEnabled) ||
|
|
737
|
+
((configs?.apple_login_client_id?.value !== '' && configs?.apple_login_client_id?.value !== null) && appleLoginEnabled)) &&
|
|
687
738
|
(
|
|
688
739
|
<>
|
|
689
740
|
<View
|
|
@@ -707,11 +758,11 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
707
758
|
<ButtonsWrapper>
|
|
708
759
|
<SocialButtons>
|
|
709
760
|
{(configs?.facebook_login?.value === 'true' || configs?.facebook_login?.value === '1') &&
|
|
710
|
-
configs?.facebook_id?.value &&
|
|
761
|
+
configs?.facebook_id?.value &&
|
|
711
762
|
facebookLoginEnabled && (
|
|
712
763
|
<FacebookLogin
|
|
713
764
|
notificationState={notificationState}
|
|
714
|
-
handleErrors={(err: any) => showToast(ToastType.Error, err)}
|
|
765
|
+
handleErrors={(err: any) => { showToast(ToastType.Error, err), Vibration.vibrate() }}
|
|
715
766
|
handleLoading={(val: boolean) => setIsFBLoading(val)}
|
|
716
767
|
handleSuccessFacebookLogin={handleSuccessFacebook}
|
|
717
768
|
/>
|
|
@@ -720,7 +771,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
720
771
|
<GoogleLogin
|
|
721
772
|
notificationState={notificationState}
|
|
722
773
|
webClientId={configs?.google_login_client_id?.value}
|
|
723
|
-
handleErrors={(err: any) => showToast(ToastType.Error, err)}
|
|
774
|
+
handleErrors={(err: any) => { showToast(ToastType.Error, err), Vibration.vibrate() }}
|
|
724
775
|
handleLoading={(val: boolean) => setIsFBLoading(val)}
|
|
725
776
|
handleSuccessGoogleLogin={handleSuccessFacebook}
|
|
726
777
|
/>
|
|
@@ -728,7 +779,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
728
779
|
{(configs?.apple_login_client_id?.value !== '' && configs?.google_login_client_id?.value !== null) && appleLoginEnabled && (
|
|
729
780
|
<AppleLogin
|
|
730
781
|
notificationState={notificationState}
|
|
731
|
-
handleErrors={(err: any) => showToast(ToastType.Error, err)}
|
|
782
|
+
handleErrors={(err: any) => { showToast(ToastType.Error, err), Vibration.vibrate() }}
|
|
732
783
|
handleLoading={(val: boolean) => setIsFBLoading(val)}
|
|
733
784
|
handleSuccessAppleLogin={handleSuccessFacebook}
|
|
734
785
|
/>
|
|
@@ -751,6 +802,12 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
751
802
|
</Placeholder>
|
|
752
803
|
</SkeletonWrapper>
|
|
753
804
|
)}
|
|
805
|
+
|
|
806
|
+
{enabledPoweredByOrdering && (
|
|
807
|
+
<OText>
|
|
808
|
+
Powered By Ordering.co
|
|
809
|
+
</OText>
|
|
810
|
+
)}
|
|
754
811
|
</FormSide>
|
|
755
812
|
<OModal
|
|
756
813
|
open={isModalVisible}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import React, { useRef } from 'react'
|
|
2
|
+
import Lottie from 'lottie-react-native';
|
|
3
|
+
import { TouchableOpacity, Easing, ViewStyle, Animated } from 'react-native';
|
|
4
|
+
import IconAntDesign from 'react-native-vector-icons/AntDesign'
|
|
5
|
+
import { useTheme } from 'styled-components';
|
|
6
|
+
|
|
7
|
+
interface Props {
|
|
8
|
+
initialValue: number,
|
|
9
|
+
onClick: any,
|
|
10
|
+
disableAnimation?: boolean
|
|
11
|
+
toValue: number,
|
|
12
|
+
style?: ViewStyle,
|
|
13
|
+
duration?: number,
|
|
14
|
+
type: 'favorite', // animation types
|
|
15
|
+
isActive: boolean,
|
|
16
|
+
animationType?: ((value : number) => number);
|
|
17
|
+
useNativeDriver?: boolean,
|
|
18
|
+
iconProps?: {color?: string, size?: number, style?: ViewStyle}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export const LottieAnimation = (props: Props) => {
|
|
22
|
+
const {
|
|
23
|
+
initialValue,
|
|
24
|
+
onClick,
|
|
25
|
+
disableAnimation,
|
|
26
|
+
toValue,
|
|
27
|
+
style,
|
|
28
|
+
duration,
|
|
29
|
+
type,
|
|
30
|
+
isActive,
|
|
31
|
+
useNativeDriver,
|
|
32
|
+
animationType,
|
|
33
|
+
iconProps
|
|
34
|
+
} = props
|
|
35
|
+
const theme = useTheme()
|
|
36
|
+
const animationProgress = useRef(new Animated.Value(initialValue))
|
|
37
|
+
const favoriteArray = ['heart', 'hearto']
|
|
38
|
+
const icon = type === 'favorite' ? favoriteArray : []
|
|
39
|
+
const animationGif = type === 'favorite' ? theme.images?.general?.heart : ''
|
|
40
|
+
const onPressLottie = () => {
|
|
41
|
+
if (!disableAnimation) {
|
|
42
|
+
Animated.timing(animationProgress.current, {
|
|
43
|
+
toValue,
|
|
44
|
+
duration: duration || 5000,
|
|
45
|
+
easing: animationType || Easing.linear,
|
|
46
|
+
useNativeDriver: useNativeDriver ?? true
|
|
47
|
+
}).start();
|
|
48
|
+
}
|
|
49
|
+
onClick()
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
return (
|
|
53
|
+
<TouchableOpacity
|
|
54
|
+
onPress={onPressLottie}
|
|
55
|
+
style={style}
|
|
56
|
+
>
|
|
57
|
+
<Lottie
|
|
58
|
+
progress={animationProgress.current}
|
|
59
|
+
source={animationGif}
|
|
60
|
+
/>
|
|
61
|
+
<IconAntDesign
|
|
62
|
+
name={isActive ? icon[0] : icon[1]}
|
|
63
|
+
color={iconProps?.color || theme.colors.danger5}
|
|
64
|
+
size={iconProps?.size || 16}
|
|
65
|
+
style={iconProps?.style}
|
|
66
|
+
/>
|
|
67
|
+
</TouchableOpacity>
|
|
68
|
+
)
|
|
69
|
+
}
|
|
@@ -5,6 +5,7 @@ import { launchImageLibrary } from 'react-native-image-picker'
|
|
|
5
5
|
import { GiftedChat, Actions, ActionsProps, InputToolbar, Composer, Send, Bubble, MessageImage, InputToolbarProps, ComposerProps } from 'react-native-gifted-chat'
|
|
6
6
|
import { USER_TYPE } from '../../config/constants'
|
|
7
7
|
import MaterialCommunityIcon from 'react-native-vector-icons/MaterialCommunityIcons'
|
|
8
|
+
import AntDesignIcon from 'react-native-vector-icons/AntDesign'
|
|
8
9
|
import { OIcon, OIconButton, OText, OButton } from '../shared'
|
|
9
10
|
import { TouchableOpacity, ActivityIndicator, StyleSheet, View, Platform, Keyboard } from 'react-native'
|
|
10
11
|
import { Header, TitleHeader, Wrapper, QuickMessageContainer, ProfileMessageHeader, MessageTypeItem } from './styles'
|
|
@@ -36,7 +37,7 @@ const ORDER_STATUS: any = {
|
|
|
36
37
|
20: 'ORDER_CUSTOMER_ALMOST_ARRIVED_BUSINESS',
|
|
37
38
|
21: 'ORDER_CUSTOMER_ARRIVED_BUSINESS',
|
|
38
39
|
22: 'ORDER_LOOKING_FOR_DRIVER',
|
|
39
|
-
|
|
40
|
+
23: 'ORDER_DRIVER_ON_WAY'
|
|
40
41
|
}
|
|
41
42
|
|
|
42
43
|
const filterSpecialStatus = ['prepared_in', 'delivered_in', 'delivery_datetime']
|
|
@@ -122,18 +123,17 @@ const MessagesUI = (props: MessagesParams) => {
|
|
|
122
123
|
|
|
123
124
|
const messageConsole = (message: any) => {
|
|
124
125
|
return message.change?.attribute !== 'driver_id'
|
|
125
|
-
?
|
|
126
|
-
`${t('ORDER', 'Order')} ${t(message.change.attribute.toUpperCase(), message.change.attribute.replace('_', ' '))} ${t('CHANGED_FROM', 'Changed from')} ${
|
|
127
|
-
filterSpecialStatus.includes(message.change.attribute) ?
|
|
128
|
-
`${message.change.old === null ? '0' : message.change.old} ${t('TO', 'to')} ${message.change.new} ${t('MINUTES', 'Minutes')}` :
|
|
129
|
-
`${message.change.old !== null && t(ORDER_STATUS[parseInt(message.change.old, 10)])} ${t('TO', 'to')} ${t(ORDER_STATUS[parseInt(message.change.new, 10)])}`
|
|
130
|
-
}`
|
|
131
|
-
: message.change.new
|
|
132
126
|
?
|
|
133
|
-
`${
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
127
|
+
`${t('ORDER', 'Order')} ${t(message.change.attribute.toUpperCase(), message.change.attribute.replace('_', ' '))} ${t('CHANGED_FROM', 'Changed from')} ${filterSpecialStatus.includes(message.change.attribute) ?
|
|
128
|
+
`${message.change.old === null ? '0' : message.change.old} ${t('TO', 'to')} ${message.change.new} ${t('MINUTES', 'Minutes')}` :
|
|
129
|
+
`${message.change.old !== null && t(ORDER_STATUS[parseInt(message.change.old, 10)])} ${t('TO', 'to')} ${t(ORDER_STATUS[parseInt(message.change.new, 10)])}`
|
|
130
|
+
}`
|
|
131
|
+
: message.change.new
|
|
132
|
+
?
|
|
133
|
+
`${message.driver?.name} ${message.driver?.lastname !== null ? message.driver.lastname : ''} ${t('WAS_ASSIGNED_AS_DRIVER', 'Was assigned as driver')} ${message.comment ? message.comment.length : ''}`
|
|
134
|
+
:
|
|
135
|
+
`${t('DRIVER_UNASSIGNED', 'Driver unassigned')}`
|
|
136
|
+
}
|
|
137
137
|
|
|
138
138
|
useEffect(() => {
|
|
139
139
|
let newMessages: Array<any> = []
|
|
@@ -402,7 +402,9 @@ const MessagesUI = (props: MessagesParams) => {
|
|
|
402
402
|
<Wrapper>
|
|
403
403
|
{!isMeesageListing ? (
|
|
404
404
|
<Header>
|
|
405
|
-
<
|
|
405
|
+
<TouchableOpacity onPress={onClose} style={{ paddingStart: 10, borderColor: theme.colors.clear }}>
|
|
406
|
+
<AntDesignIcon name='arrowleft' size={26} />
|
|
407
|
+
</TouchableOpacity>
|
|
406
408
|
<View style={{ marginRight: 10, shadowColor: theme.colors.black, shadowOpacity: 0.1, shadowOffset: { width: 0, height: 1 }, shadowRadius: 2 }}>
|
|
407
409
|
<OIcon
|
|
408
410
|
url={type === USER_TYPE.DRIVER ? order?.driver?.photo : order?.business?.logo}
|
|
@@ -419,10 +421,8 @@ const MessagesUI = (props: MessagesParams) => {
|
|
|
419
421
|
) : (
|
|
420
422
|
<ProfileMessageHeader>
|
|
421
423
|
<View style={{ ...styles.headerTitle }}>
|
|
422
|
-
<TouchableOpacity
|
|
423
|
-
|
|
424
|
-
onPress={onClose}>
|
|
425
|
-
<OIcon src={theme.images.general.arrow_left} width={16} />
|
|
424
|
+
<TouchableOpacity onPress={onClose} style={styles.headerItem}>
|
|
425
|
+
<AntDesignIcon name='arrowleft' size={26} />
|
|
426
426
|
</TouchableOpacity>
|
|
427
427
|
<OText size={18}>{t('ORDER', theme?.defaultLanguages?.ORDER || 'Order')} #{order?.id}</OText>
|
|
428
428
|
</View>
|
|
@@ -28,6 +28,7 @@ import {
|
|
|
28
28
|
TimeItem
|
|
29
29
|
} from './styles';
|
|
30
30
|
import { useSafeAreaInsets } from 'react-native-safe-area-context';
|
|
31
|
+
import { locale, monthsEnum } from '../../utils';
|
|
31
32
|
|
|
32
33
|
const MomentOptionUI = (props: MomentOptionParams) => {
|
|
33
34
|
const {
|
|
@@ -258,7 +259,7 @@ const MomentOptionUI = (props: MomentOptionParams) => {
|
|
|
258
259
|
onActionLeft={() => goToBack()}
|
|
259
260
|
btnStyle={{ paddingLeft: 0 }}
|
|
260
261
|
paddingTop={0}
|
|
261
|
-
style={{ paddingBottom: 0
|
|
262
|
+
style={{ paddingBottom: 0 }}
|
|
262
263
|
title={t('QUESTION_WHEN_ORDER', 'When do you want your order?')}
|
|
263
264
|
titleAlign={'center'}
|
|
264
265
|
titleStyle={{ fontSize: 14, marginRight: 0, marginLeft: 0 }}
|
|
@@ -281,7 +282,7 @@ const MomentOptionUI = (props: MomentOptionParams) => {
|
|
|
281
282
|
style={{ marginEnd: 24 }}
|
|
282
283
|
/>
|
|
283
284
|
)}
|
|
284
|
-
<OText color={optionSelected.isAsap ? theme.colors.textNormal : theme.colors.disabled}>{t('ASAP_ABBREVIATION', 'ASAP') + ` (${moment().format('dddd, MMM D, yyyy h:mm A')} + delivery time)`}</OText>
|
|
285
|
+
<OText color={optionSelected.isAsap ? theme.colors.textNormal : theme.colors.disabled}>{t('ASAP_ABBREVIATION', 'ASAP') + ` (${t(moment().format('dddd')?.toLocaleUpperCase(), moment().format('dddd'))}, ${t(monthsEnum[moment().format('MMM')], moment().format('MMM'))}${moment().format(' D, yyyy h:mm A')} + ${t('DELIVERY_TIME', 'delivery time')})`}</OText>
|
|
285
286
|
</WrapSelectOption>
|
|
286
287
|
<WrapSelectOption
|
|
287
288
|
onPress={() => setOptionSelected({ isAsap: false, isSchedule: true })}
|
|
@@ -308,6 +309,7 @@ const MomentOptionUI = (props: MomentOptionParams) => {
|
|
|
308
309
|
{selectDate && datesWhitelist[0]?.start !== null && (
|
|
309
310
|
<CalendarStrip
|
|
310
311
|
scrollable
|
|
312
|
+
locale={locale}
|
|
311
313
|
style={styles.calendar}
|
|
312
314
|
calendarHeaderContainerStyle={styles.calendarHeaderContainer}
|
|
313
315
|
calendarHeaderStyle={styles.calendarHeader}
|
|
@@ -342,12 +344,12 @@ const MomentOptionUI = (props: MomentOptionParams) => {
|
|
|
342
344
|
style={{
|
|
343
345
|
lineHeight: 24
|
|
344
346
|
}}
|
|
345
|
-
>{is12hours ? (
|
|
346
|
-
time.startTime.includes('12')
|
|
347
|
+
>{is12hours ? (
|
|
348
|
+
time.startTime.includes('12')
|
|
347
349
|
? `${time.startTime}PM`
|
|
348
350
|
: parseTime(moment(time.startTime, 'HH:mm'), { outputFormat: 'hh:mma' })
|
|
349
|
-
|
|
350
|
-
|
|
351
|
+
) : time.startTime
|
|
352
|
+
}</OText>
|
|
351
353
|
</TimeItem>
|
|
352
354
|
</TouchableOpacity>
|
|
353
355
|
))}
|