ordering-ui-react-native 0.16.97 → 0.16.98-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 +5 -5
- package/src/DeliveryApp.tsx +43 -1
- package/src/components/ActiveOrders/styles.tsx +8 -14
- package/src/components/BusinessInformation/index.tsx +11 -4
- package/src/components/BusinessInformation/styles.tsx +2 -2
- package/src/components/BusinessProductsList/index.tsx +1 -1
- package/src/components/BusinessesListing/index.tsx +1 -1
- package/src/components/OrderCreating/index.tsx +1 -21
- package/src/components/OrdersOption/index.tsx +54 -56
- package/src/components/PaymentOptionsWebView/index.tsx +119 -120
- package/src/components/SingleProductReview/index.tsx +7 -4
- package/src/components/VerifyPhone/styles.tsx +1 -2
- package/src/components/shared/OToast.tsx +4 -4
- package/src/utils/index.tsx +7 -1
- package/themes/business/index.tsx +2 -0
- package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +265 -240
- package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +6 -4
- package/themes/business/src/components/BusinessController/index.tsx +2 -3
- package/themes/business/src/components/Chat/index.tsx +146 -135
- package/themes/business/src/components/DriverMap/index.tsx +22 -9
- package/themes/business/src/components/GoogleMap/index.tsx +58 -57
- package/themes/business/src/components/LoginForm/Otp/index.tsx +120 -0
- package/themes/business/src/components/LoginForm/Otp/styles.tsx +7 -0
- package/themes/business/src/components/LoginForm/index.tsx +239 -80
- package/themes/business/src/components/LoginForm/styles.tsx +10 -0
- package/themes/business/src/components/MapView/index.tsx +18 -7
- package/themes/business/src/components/NewOrderNotification/index.tsx +33 -43
- package/themes/business/src/components/OrderDetails/Delivery.tsx +4 -3
- package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +96 -50
- package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +59 -62
- package/themes/business/src/components/OrderDetailsLogistic/index.tsx +195 -0
- package/themes/business/src/components/OrderDetailsLogistic/styles.tsx +5 -0
- package/themes/business/src/components/OrderMessage/index.tsx +18 -17
- package/themes/business/src/components/OrdersOption/index.tsx +33 -75
- package/themes/business/src/components/OrdersOptionBusiness/index.tsx +1 -1
- package/themes/business/src/components/PreviousMessages/index.tsx +16 -18
- package/themes/business/src/components/PreviousOrders/OrderItem.tsx +250 -0
- package/themes/business/src/components/PreviousOrders/OrdersGroupedItem.tsx +115 -0
- package/themes/business/src/components/PreviousOrders/index.tsx +447 -247
- package/themes/business/src/components/PreviousOrders/styles.tsx +31 -3
- package/themes/business/src/components/ProductItemAccordion/index.tsx +27 -3
- package/themes/business/src/components/ReviewCustomer/index.tsx +42 -25
- package/themes/business/src/components/StoresList/index.tsx +2 -2
- package/themes/business/src/components/shared/OLink.tsx +33 -13
- package/themes/business/src/components/shared/OModal.tsx +16 -9
- package/themes/business/src/components/shared/OText.tsx +8 -2
- package/themes/business/src/types/index.tsx +33 -2
- package/themes/business/src/utils/index.tsx +53 -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/Otp/index.tsx +92 -0
- package/themes/kiosk/src/components/LoginForm/Otp/styles.tsx +7 -0
- package/themes/kiosk/src/components/LoginForm/index.tsx +473 -151
- package/themes/kiosk/src/components/LoginForm/styles.tsx +14 -1
- 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/PhoneInputNumber/index.tsx +3 -2
- package/themes/kiosk/src/components/PhoneInputNumber/styles.tsx +1 -3
- package/themes/kiosk/src/components/ProductForm/index.tsx +1 -14
- package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
- package/themes/kiosk/src/components/shared/OModal.tsx +14 -11
- package/themes/kiosk/src/layouts/Container.tsx +7 -1
- package/themes/kiosk/src/types/index.d.ts +13 -0
- package/themes/kiosk/src/utils/index.tsx +15 -0
- package/themes/original/index.tsx +8 -0
- package/themes/original/src/components/AddressDetails/index.tsx +29 -11
- package/themes/original/src/components/AddressForm/index.tsx +152 -117
- package/themes/original/src/components/AddressList/index.tsx +26 -21
- package/themes/original/src/components/AddressList/styles.tsx +4 -2
- package/themes/original/src/components/AnalyticsSegment/index.tsx +189 -9
- package/themes/original/src/components/AppleLogin/index.tsx +4 -4
- package/themes/original/src/components/BusinessBasicInformation/index.tsx +125 -82
- package/themes/original/src/components/BusinessBasicInformation/styles.tsx +9 -4
- package/themes/original/src/components/BusinessController/index.tsx +145 -68
- package/themes/original/src/components/BusinessController/styles.tsx +22 -9
- package/themes/original/src/components/BusinessFeaturedController/index.tsx +21 -54
- package/themes/original/src/components/BusinessFeaturedController/styles.tsx +8 -0
- package/themes/original/src/components/BusinessInformation/index.tsx +10 -31
- package/themes/original/src/components/BusinessItemAccordion/index.tsx +24 -23
- package/themes/original/src/components/BusinessListingSearch/index.tsx +52 -24
- package/themes/original/src/components/BusinessPreorder/index.tsx +96 -15
- package/themes/original/src/components/BusinessProductsList/index.tsx +20 -11
- package/themes/original/src/components/BusinessProductsList/styles.tsx +8 -3
- package/themes/original/src/components/BusinessProductsListing/index.tsx +617 -490
- package/themes/original/src/components/BusinessProductsListing/styles.tsx +7 -13
- package/themes/original/src/components/BusinessReviews/index.tsx +3 -1
- package/themes/original/src/components/BusinessTypeFilter/index.tsx +3 -3
- package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +1 -1
- package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +98 -78
- package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -9
- package/themes/original/src/components/BusinessesListing/index.tsx +5 -3
- package/themes/original/src/components/Cart/index.tsx +87 -43
- package/themes/original/src/components/CartContent/index.tsx +77 -15
- package/themes/original/src/components/CartContent/styles.tsx +11 -1
- package/themes/original/src/components/Checkout/index.tsx +294 -175
- package/themes/original/src/components/Checkout/styles.tsx +4 -2
- package/themes/original/src/components/CitiesControl/index.tsx +89 -0
- package/themes/original/src/components/CitiesControl/styles.tsx +17 -0
- package/themes/original/src/components/CouponControl/index.tsx +10 -3
- package/themes/original/src/components/DriverTips/index.tsx +52 -37
- package/themes/original/src/components/DriverTips/styles.tsx +2 -1
- package/themes/original/src/components/Favorite/index.tsx +7 -4
- package/themes/original/src/components/Favorite/styles.tsx +1 -1
- package/themes/original/src/components/FavoriteList/index.tsx +70 -80
- package/themes/original/src/components/FloatingButton/index.tsx +1 -2
- package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
- package/themes/original/src/components/GPSButton/styles.ts +3 -3
- package/themes/original/src/components/GoogleMap/index.tsx +10 -1
- package/themes/original/src/components/Help/index.tsx +8 -8
- package/themes/original/src/components/HelpAccountAndPayment/index.tsx +11 -22
- package/themes/original/src/components/HelpAccountAndPayment/styles.tsx +6 -0
- package/themes/original/src/components/HelpGuide/index.tsx +12 -16
- package/themes/original/src/components/HelpGuide/styles.tsx +6 -0
- package/themes/original/src/components/HelpOrder/index.tsx +12 -25
- package/themes/original/src/components/HelpOrder/styles.tsx +8 -1
- package/themes/original/src/components/Home/index.tsx +13 -4
- package/themes/original/src/components/LanguageSelector/index.tsx +19 -14
- package/themes/original/src/components/LastOrder/index.tsx +1 -34
- package/themes/original/src/components/LoginForm/Otp/index.tsx +89 -73
- package/themes/original/src/components/LoginForm/Otp/styles.tsx +0 -1
- package/themes/original/src/components/LoginForm/index.tsx +43 -19
- package/themes/original/src/components/LottieAnimation/index.tsx +78 -0
- package/themes/original/src/components/MessageListing/index.tsx +16 -42
- package/themes/original/src/components/Messages/index.tsx +32 -10
- package/themes/original/src/components/MomentOption/index.tsx +195 -88
- package/themes/original/src/components/MultiCart/index.tsx +50 -0
- package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +117 -96
- package/themes/original/src/components/MultiCheckout/index.tsx +247 -83
- package/themes/original/src/components/MultiOrdersDetails/SingleOrderCard.tsx +37 -224
- package/themes/original/src/components/MultiOrdersDetails/index.tsx +67 -20
- package/themes/original/src/components/MultiOrdersDetails/styles.tsx +1 -1
- package/themes/original/src/components/MyOrders/index.tsx +66 -17
- package/themes/original/src/components/NavBar/index.tsx +6 -11
- package/themes/original/src/components/NotFoundSource/index.tsx +1 -1
- package/themes/original/src/components/Notifications/index.tsx +144 -0
- package/themes/original/src/components/Notifications/styles.tsx +20 -0
- package/themes/original/src/components/OrderDetails/OrderEta.tsx +59 -0
- package/themes/original/src/components/OrderDetails/index.tsx +110 -221
- package/themes/original/src/components/OrderDetails/styles.tsx +10 -1
- package/themes/original/src/components/OrderItAgain/index.tsx +47 -43
- package/themes/original/src/components/OrderProgress/index.tsx +74 -112
- package/themes/original/src/components/OrderProgress/styles.tsx +5 -0
- package/themes/original/src/components/OrderSummary/index.tsx +66 -29
- package/themes/original/src/components/OrderTypeSelector/index.tsx +4 -3
- package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +28 -19
- package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +3 -0
- package/themes/original/src/components/OrdersOption/index.tsx +76 -83
- package/themes/original/src/components/PageBanner/index.tsx +171 -0
- package/themes/original/src/components/PageBanner/styles.tsx +11 -0
- package/themes/original/src/components/PaymentOptionStripe/styles.tsx +1 -1
- package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
- package/themes/original/src/components/PaymentOptions/index.tsx +2 -2
- package/themes/original/src/components/PhoneInputNumber/index.tsx +1 -1
- package/themes/original/src/components/PlaceSpot/index.tsx +12 -6
- package/themes/original/src/components/PreviousOrders/index.tsx +3 -2
- package/themes/original/src/components/ProductForm/index.tsx +240 -261
- package/themes/original/src/components/ProductForm/styles.tsx +4 -7
- package/themes/original/src/components/ProductItemAccordion/index.tsx +199 -128
- package/themes/original/src/components/ProductOptionSubOption/index.tsx +18 -10
- package/themes/original/src/components/ProductOptionSubOption/styles.tsx +1 -2
- package/themes/original/src/components/ProfessionalFilter/SingleProfessionalCard/index.tsx +108 -0
- package/themes/original/src/components/ProfessionalFilter/index.tsx +20 -49
- package/themes/original/src/components/ProfessionalProfile/index.tsx +54 -14
- package/themes/original/src/components/Promotions/index.tsx +234 -220
- package/themes/original/src/components/Promotions/styles.tsx +10 -3
- package/themes/original/src/components/ReviewDriver/index.tsx +3 -3
- package/themes/original/src/components/ReviewOrder/index.tsx +43 -11
- package/themes/original/src/components/ReviewOrder/styles.tsx +7 -0
- package/themes/original/src/components/ReviewProducts/index.tsx +8 -5
- package/themes/original/src/components/ReviewTrigger/index.tsx +27 -9
- package/themes/original/src/components/ReviewTrigger/styles.tsx +8 -1
- package/themes/original/src/components/ScheduleAccordion/index.tsx +68 -0
- package/themes/original/src/components/ScheduleAccordion/styles.tsx +14 -0
- package/themes/original/src/components/ServiceForm/index.tsx +377 -270
- package/themes/original/src/components/Sessions/index.tsx +11 -8
- package/themes/original/src/components/Sessions/styles.tsx +5 -0
- package/themes/original/src/components/SignupForm/index.tsx +79 -66
- package/themes/original/src/components/SingleOrderCard/index.tsx +126 -57
- package/themes/original/src/components/SingleOrderCard/styles.tsx +10 -8
- package/themes/original/src/components/SingleProductCard/index.tsx +111 -49
- package/themes/original/src/components/SingleProductCard/styles.tsx +27 -13
- 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/StripeCardsList/index.tsx +1 -1
- package/themes/original/src/components/StripeElementsForm/index.tsx +4 -1
- package/themes/original/src/components/UpsellingProducts/index.tsx +238 -218
- package/themes/original/src/components/UpsellingProducts/styles.tsx +12 -1
- package/themes/original/src/components/UserDetails/index.tsx +8 -4
- package/themes/original/src/components/UserFormDetails/index.tsx +53 -54
- package/themes/original/src/components/UserProfile/index.tsx +58 -35
- package/themes/original/src/components/UserProfile/styles.ts +17 -0
- package/themes/original/src/components/UserProfileForm/index.tsx +21 -28
- package/themes/original/src/components/UserProfileForm/styles.tsx +7 -0
- package/themes/original/src/components/Wallets/index.tsx +20 -19
- package/themes/original/src/components/Wallets/styles.tsx +2 -0
- package/themes/original/src/components/shared/CardAnimation.tsx +47 -0
- package/themes/original/src/components/shared/HeaderTitle.tsx +8 -3
- package/themes/original/src/components/shared/OBottomPopup.tsx +1 -1
- package/themes/original/src/components/shared/OButton.tsx +6 -2
- package/themes/original/src/components/shared/OIcon.tsx +8 -1
- package/themes/original/src/components/shared/OInput.tsx +10 -1
- package/themes/original/src/components/shared/OModal.tsx +3 -3
- package/themes/original/src/layouts/Container.tsx +13 -9
- package/themes/original/src/types/index.tsx +45 -7
- package/themes/original/src/utils/index.tsx +359 -58
- package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
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';
|
|
@@ -72,6 +72,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
72
72
|
generateOtpCode,
|
|
73
73
|
useLoginOtpEmail,
|
|
74
74
|
useLoginOtpCellphone,
|
|
75
|
+
isGuest
|
|
75
76
|
} = props;
|
|
76
77
|
|
|
77
78
|
const [, { showToast }] = useToast();
|
|
@@ -96,7 +97,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
96
97
|
const [alertState, setAlertState] = useState({ open: false, title: '', content: [] })
|
|
97
98
|
const [tabLayouts, setTabLayouts] = useState<any>({})
|
|
98
99
|
const tabsRef = useRef<any>(null)
|
|
99
|
-
|
|
100
|
+
const enabledPoweredByOrdering = configs?.powered_by_ordering_module?.value
|
|
100
101
|
const theme = useTheme();
|
|
101
102
|
const isOtpEmail = loginTab === 'otp' && otpType === 'email'
|
|
102
103
|
const isOtpCellphone = loginTab === 'otp' && otpType === 'cellphone'
|
|
@@ -165,6 +166,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
165
166
|
if (loginTab === 'otp') {
|
|
166
167
|
if (phoneInputData.error && (loginTab !== 'otp' || (otpType === 'cellphone' && loginTab === 'otp'))) {
|
|
167
168
|
showToast(ToastType.Error, t('INVALID_PHONE_NUMBER', 'Invalid phone number'));
|
|
169
|
+
Vibration.vibrate()
|
|
168
170
|
return
|
|
169
171
|
}
|
|
170
172
|
if (loginTab === 'otp') {
|
|
@@ -177,6 +179,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
177
179
|
} else {
|
|
178
180
|
if (phoneInputData.error) {
|
|
179
181
|
showToast(ToastType.Error, phoneInputData.error);
|
|
182
|
+
Vibration.vibrate()
|
|
180
183
|
return;
|
|
181
184
|
}
|
|
182
185
|
handleButtonLoginClick({
|
|
@@ -189,6 +192,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
189
192
|
const handleVerifyCodeClick = () => {
|
|
190
193
|
if (phoneInputData.error) {
|
|
191
194
|
showToast(ToastType.Error, phoneInputData.error);
|
|
195
|
+
Vibration.vibrate()
|
|
192
196
|
return;
|
|
193
197
|
}
|
|
194
198
|
if (
|
|
@@ -203,6 +207,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
203
207
|
'The field Mobile phone is required.',
|
|
204
208
|
),
|
|
205
209
|
);
|
|
210
|
+
Vibration.vibrate()
|
|
206
211
|
return;
|
|
207
212
|
}
|
|
208
213
|
handleSendVerifyCode && handleSendVerifyCode(phoneInputData.phone);
|
|
@@ -217,17 +222,19 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
217
222
|
};
|
|
218
223
|
|
|
219
224
|
const handleChangeInputEmail = (value: string, onChange: any) => {
|
|
220
|
-
onChange(value.toLowerCase().replace(/[&,()%";:ç?<>{}\\[\]\s]/g, ''));
|
|
225
|
+
onChange(value.toLowerCase().trim().replace(/[&,()%";:ç?<>{}\\[\]\s]/g, ''));
|
|
221
226
|
};
|
|
222
227
|
|
|
223
228
|
const handleOpenRecaptcha = () => {
|
|
224
229
|
setRecaptchaVerified(false)
|
|
225
230
|
if (!recaptchaConfig?.siteKey) {
|
|
226
231
|
showToast(ToastType.Error, t('NO_RECAPTCHA_SITE_KEY', 'The config doesn\'t have recaptcha site key'));
|
|
232
|
+
Vibration.vibrate()
|
|
227
233
|
return
|
|
228
234
|
}
|
|
229
235
|
if (!recaptchaConfig?.baseUrl) {
|
|
230
236
|
showToast(ToastType.Error, t('NO_RECAPTCHA_BASE_URL', 'The config doesn\'t have recaptcha base url'));
|
|
237
|
+
Vibration.vibrate()
|
|
231
238
|
return
|
|
232
239
|
}
|
|
233
240
|
|
|
@@ -304,6 +311,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
304
311
|
baseUrl: configs?.security_recaptcha_base_url?.value || null
|
|
305
312
|
})
|
|
306
313
|
showToast(ToastType.Info, t('TRY_AGAIN', 'Please try again'))
|
|
314
|
+
Vibration.vibrate()
|
|
307
315
|
return
|
|
308
316
|
}
|
|
309
317
|
formState.result?.result &&
|
|
@@ -313,6 +321,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
313
321
|
? formState.result?.result
|
|
314
322
|
: formState.result?.result[0],
|
|
315
323
|
);
|
|
324
|
+
formState.result?.result && Vibration.vibrate()
|
|
316
325
|
}
|
|
317
326
|
}, [formState]);
|
|
318
327
|
|
|
@@ -324,6 +333,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
324
333
|
? verifyPhoneState?.result?.result
|
|
325
334
|
: verifyPhoneState?.result?.result[0];
|
|
326
335
|
verifyPhoneState.result?.result && showToast(ToastType.Error, message);
|
|
336
|
+
verifyPhoneState.result?.result && Vibration.vibrate();
|
|
327
337
|
setIsLoadingVerifyModal(false);
|
|
328
338
|
return;
|
|
329
339
|
}
|
|
@@ -363,18 +373,25 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
363
373
|
}
|
|
364
374
|
}, [checkPhoneCodeState])
|
|
365
375
|
|
|
376
|
+
useEffect(() => {
|
|
377
|
+
if (!!Object.values(errors)?.length) Vibration.vibrate()
|
|
378
|
+
}, [errors])
|
|
379
|
+
|
|
366
380
|
return (
|
|
367
381
|
<Container>
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
382
|
+
{isGuest ? (
|
|
383
|
+
<OText style={{ textAlign: 'center', marginBottom: 10 }} size={18}>{t('LOGIN', 'Login')}</OText>
|
|
384
|
+
) : (
|
|
385
|
+
<NavBar
|
|
386
|
+
title={t('LOGIN', 'Login')}
|
|
387
|
+
titleAlign={'center'}
|
|
388
|
+
onActionLeft={() => navigation?.canGoBack() && navigation.goBack()}
|
|
389
|
+
showCall={false}
|
|
390
|
+
btnStyle={{ paddingLeft: 0 }}
|
|
391
|
+
titleWrapStyle={{ paddingHorizontal: 0 }}
|
|
392
|
+
titleStyle={{ marginRight: 0, marginLeft: 0 }}
|
|
393
|
+
/>
|
|
394
|
+
)}
|
|
378
395
|
<FormSide>
|
|
379
396
|
{(Number(useLoginByEmail) + Number(useLoginByCellphone) + Number(useLoginOtpEmail) + Number(useLoginOtpCellphone) > 1) && (
|
|
380
397
|
<LoginWith>
|
|
@@ -680,7 +697,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
680
697
|
{t('NEW_ON_PLATFORM', 'New on Ordering?')}
|
|
681
698
|
</OText>
|
|
682
699
|
<TouchableOpacity onPress={() => onNavigationRedirect('Signup')}>
|
|
683
|
-
<OText size={14} mLeft={5} color={theme.colors.
|
|
700
|
+
<OText size={14} mLeft={5} color={theme.colors.primary}>
|
|
684
701
|
{t('CREATE_ACCOUNT', 'Create account')}
|
|
685
702
|
</OText>
|
|
686
703
|
</TouchableOpacity>
|
|
@@ -719,8 +736,9 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
719
736
|
)}
|
|
720
737
|
|
|
721
738
|
{configs && Object.keys(configs).length > 0 ? (
|
|
722
|
-
(((configs?.facebook_login?.value === 'true' || configs?.facebook_login?.value === '1') && configs?.facebook_id?.value) ||
|
|
723
|
-
(configs?.google_login_client_id?.value !== '' && configs?.google_login_client_id?.value !== null))
|
|
739
|
+
(((configs?.facebook_login?.value === 'true' || configs?.facebook_login?.value === '1') && configs?.facebook_id?.value && facebookLoginEnabled) ||
|
|
740
|
+
((configs?.google_login_client_id?.value !== '' && configs?.google_login_client_id?.value !== null) && googleLoginEnabled) ||
|
|
741
|
+
((configs?.apple_login_client_id?.value !== '' && configs?.apple_login_client_id?.value !== null) && appleLoginEnabled)) && !isGuest &&
|
|
724
742
|
(
|
|
725
743
|
<>
|
|
726
744
|
<View
|
|
@@ -748,7 +766,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
748
766
|
facebookLoginEnabled && (
|
|
749
767
|
<FacebookLogin
|
|
750
768
|
notificationState={notificationState}
|
|
751
|
-
handleErrors={(err: any) => showToast(ToastType.Error, err)}
|
|
769
|
+
handleErrors={(err: any) => { showToast(ToastType.Error, err), Vibration.vibrate() }}
|
|
752
770
|
handleLoading={(val: boolean) => setIsFBLoading(val)}
|
|
753
771
|
handleSuccessFacebookLogin={handleSuccessFacebook}
|
|
754
772
|
/>
|
|
@@ -757,7 +775,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
757
775
|
<GoogleLogin
|
|
758
776
|
notificationState={notificationState}
|
|
759
777
|
webClientId={configs?.google_login_client_id?.value}
|
|
760
|
-
handleErrors={(err: any) => showToast(ToastType.Error, err)}
|
|
778
|
+
handleErrors={(err: any) => { showToast(ToastType.Error, err), Vibration.vibrate() }}
|
|
761
779
|
handleLoading={(val: boolean) => setIsFBLoading(val)}
|
|
762
780
|
handleSuccessGoogleLogin={handleSuccessFacebook}
|
|
763
781
|
/>
|
|
@@ -765,7 +783,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
765
783
|
{(configs?.apple_login_client_id?.value !== '' && configs?.google_login_client_id?.value !== null) && appleLoginEnabled && (
|
|
766
784
|
<AppleLogin
|
|
767
785
|
notificationState={notificationState}
|
|
768
|
-
handleErrors={(err: any) => showToast(ToastType.Error, err)}
|
|
786
|
+
handleErrors={(err: any) => { showToast(ToastType.Error, err), Vibration.vibrate() }}
|
|
769
787
|
handleLoading={(val: boolean) => setIsFBLoading(val)}
|
|
770
788
|
handleSuccessAppleLogin={handleSuccessFacebook}
|
|
771
789
|
/>
|
|
@@ -788,6 +806,12 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
788
806
|
</Placeholder>
|
|
789
807
|
</SkeletonWrapper>
|
|
790
808
|
)}
|
|
809
|
+
|
|
810
|
+
{enabledPoweredByOrdering && (
|
|
811
|
+
<OText>
|
|
812
|
+
Powered By Ordering.co
|
|
813
|
+
</OText>
|
|
814
|
+
)}
|
|
791
815
|
</FormSide>
|
|
792
816
|
<OModal
|
|
793
817
|
open={isModalVisible}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import React, { useRef, useState } 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 [isHide, setIsHide] = useState(true)
|
|
38
|
+
const favoriteArray = ['heart', 'hearto']
|
|
39
|
+
const icon = type === 'favorite' ? favoriteArray : []
|
|
40
|
+
const animationGif = type === 'favorite' ? theme.images?.general?.heart : ''
|
|
41
|
+
const onPressLottie = () => {
|
|
42
|
+
if (!disableAnimation) {
|
|
43
|
+
setIsHide(false)
|
|
44
|
+
Animated.timing(animationProgress.current, {
|
|
45
|
+
toValue,
|
|
46
|
+
duration: duration || 5000,
|
|
47
|
+
easing: animationType || Easing.linear,
|
|
48
|
+
useNativeDriver: useNativeDriver ?? true
|
|
49
|
+
}).start();
|
|
50
|
+
hideLottie()
|
|
51
|
+
}
|
|
52
|
+
onClick()
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
const hideLottie = () => {
|
|
56
|
+
setTimeout(() => setIsHide(true), 4500)
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
return (
|
|
60
|
+
<TouchableOpacity
|
|
61
|
+
onPress={onPressLottie}
|
|
62
|
+
style={style}
|
|
63
|
+
>
|
|
64
|
+
{!isHide &&
|
|
65
|
+
<Lottie
|
|
66
|
+
progress={animationProgress.current}
|
|
67
|
+
source={animationGif}
|
|
68
|
+
/>
|
|
69
|
+
}
|
|
70
|
+
<IconAntDesign
|
|
71
|
+
name={isActive ? icon[0] : icon[1]}
|
|
72
|
+
color={iconProps?.color || theme.colors.danger5}
|
|
73
|
+
size={iconProps?.size || 16}
|
|
74
|
+
style={iconProps?.style}
|
|
75
|
+
/>
|
|
76
|
+
</TouchableOpacity>
|
|
77
|
+
)
|
|
78
|
+
}
|
|
@@ -16,11 +16,12 @@ import {
|
|
|
16
16
|
PlaceholderLine,
|
|
17
17
|
Fade
|
|
18
18
|
} from "rn-placeholder";
|
|
19
|
-
import { View, BackHandler } from 'react-native'
|
|
19
|
+
import { View, BackHandler, Platform } from 'react-native'
|
|
20
20
|
import {
|
|
21
21
|
MessageListingWrapper,
|
|
22
22
|
MessageContainer
|
|
23
23
|
} from './styles';
|
|
24
|
+
import { getOrderStatus } from '../../utils'
|
|
24
25
|
|
|
25
26
|
const OrdersOptionUI = (props: OrdersOptionParams) => {
|
|
26
27
|
const {
|
|
@@ -51,40 +52,6 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
|
|
|
51
52
|
: theme.images.general.emptyPastOrders
|
|
52
53
|
const orders = customArray || values || []
|
|
53
54
|
|
|
54
|
-
const getOrderStatus = (s: string) => {
|
|
55
|
-
const status = parseInt(s)
|
|
56
|
-
const orderStatus = [
|
|
57
|
-
{ key: 0, value: t('PENDING', 'Pending') },
|
|
58
|
-
{ key: 1, value: t('COMPLETED', 'Completed') },
|
|
59
|
-
{ key: 2, value: t('REJECTED', 'Rejected') },
|
|
60
|
-
{ key: 3, value: t('DRIVER_IN_BUSINESS', 'Driver in business') },
|
|
61
|
-
{ key: 4, value: t('PREPARATION_COMPLETED', 'Preparation Completed') },
|
|
62
|
-
{ key: 5, value: t('REJECTED_BY_BUSINESS', 'Rejected by business') },
|
|
63
|
-
{ key: 6, value: t('REJECTED_BY_DRIVER', 'Rejected by Driver') },
|
|
64
|
-
{ key: 7, value: t('ACCEPTED_BY_BUSINESS', 'Accepted by business') },
|
|
65
|
-
{ key: 8, value: t('ACCEPTED_BY_DRIVER', 'Accepted by driver') },
|
|
66
|
-
{ key: 9, value: t('PICK_UP_COMPLETED_BY_DRIVER', 'Pick up completed by driver') },
|
|
67
|
-
{ key: 10, value: t('PICK_UP_FAILED_BY_DRIVER', 'Pick up Failed by driver') },
|
|
68
|
-
{ key: 11, value: t('DELIVERY_COMPLETED_BY_DRIVER', 'Delivery completed by driver') },
|
|
69
|
-
{ key: 12, value: t('DELIVERY_FAILED_BY_DRIVER', 'Delivery Failed by driver') },
|
|
70
|
-
{ key: 13, value: t('PREORDER', 'PreOrder') },
|
|
71
|
-
{ key: 14, value: t('ORDER_NOT_READY', 'Order not ready') },
|
|
72
|
-
{ key: 15, value: t('ORDER_PICKEDUP_COMPLETED_BY_CUSTOMER', 'Order picked up completed by customer') },
|
|
73
|
-
{ key: 16, value: t('CANCELLED_BY_CUSTOMER', 'Cancelled by customer') },
|
|
74
|
-
{ key: 17, value: t('ORDER_NOT_PICKEDUP_BY_CUSTOMER', 'Order not picked up by customer') },
|
|
75
|
-
{ key: 18, value: t('DRIVER_ALMOST_ARRIVED_TO_BUSINESS', 'Driver almost arrived to business') },
|
|
76
|
-
{ key: 19, value: t('DRIVER_ALMOST_ARRIVED_TO_CUSTOMER', 'Driver almost arrived to customer') },
|
|
77
|
-
{ key: 20, value: t('ORDER_CUSTOMER_ALMOST_ARRIVED_BUSINESS', 'Customer almost arrived to business') },
|
|
78
|
-
{ key: 21, value: t('ORDER_CUSTOMER_ARRIVED_BUSINESS', 'Customer arrived to business') },
|
|
79
|
-
{ key: 22, value: t('ORDER_LOOKING_FOR_DRIVER', 'Looking for driver') },
|
|
80
|
-
{ key: 23, value: t('ORDER_DRIVER_ON_WAY', 'Driver on way') }
|
|
81
|
-
]
|
|
82
|
-
|
|
83
|
-
const objectStatus = orderStatus.find((o) => o.key === status)
|
|
84
|
-
|
|
85
|
-
return objectStatus && objectStatus
|
|
86
|
-
}
|
|
87
|
-
|
|
88
55
|
const handleClickOrder = (uuid: string) => {
|
|
89
56
|
setSelectedOrderId(uuid)
|
|
90
57
|
setOpenMessges(true)
|
|
@@ -102,7 +69,7 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
|
|
|
102
69
|
}, [orderList, loading])
|
|
103
70
|
|
|
104
71
|
useEffect(() => {
|
|
105
|
-
if(refreshOrders){
|
|
72
|
+
if (refreshOrders) {
|
|
106
73
|
loadOrders(false, false, false, true)
|
|
107
74
|
setRefreshOrders && setRefreshOrders(false)
|
|
108
75
|
}
|
|
@@ -156,7 +123,9 @@ const OrderMessageUI = (props: any) => {
|
|
|
156
123
|
setMessages,
|
|
157
124
|
readMessages,
|
|
158
125
|
messagesReadList,
|
|
159
|
-
setOpenMessges
|
|
126
|
+
setOpenMessges,
|
|
127
|
+
setSeletedOrder,
|
|
128
|
+
setSelectedOrderId
|
|
160
129
|
} = props;
|
|
161
130
|
const [openModalForBusiness, setOpenModalForBusiness] = useState(false);
|
|
162
131
|
const [openModalForDriver, setOpenModalForDriver] = useState(false);
|
|
@@ -173,6 +142,8 @@ const OrderMessageUI = (props: any) => {
|
|
|
173
142
|
|
|
174
143
|
const handleClose = () => {
|
|
175
144
|
setOpenMessges(false)
|
|
145
|
+
setSeletedOrder(null)
|
|
146
|
+
setSelectedOrderId(null)
|
|
176
147
|
}
|
|
177
148
|
|
|
178
149
|
const handleOpenMessages = (data: any) => {
|
|
@@ -225,7 +196,7 @@ const OrderMessageUI = (props: any) => {
|
|
|
225
196
|
}
|
|
226
197
|
|
|
227
198
|
export const OrderListing = (props: OrdersOptionParams) => {
|
|
228
|
-
|
|
199
|
+
const [businessState] = useBusiness();
|
|
229
200
|
const OrderListingProps = {
|
|
230
201
|
...props,
|
|
231
202
|
UIComponent: OrdersOptionUI,
|
|
@@ -236,7 +207,7 @@ export const OrderListing = (props: OrdersOptionParams) => {
|
|
|
236
207
|
pageSize: 10,
|
|
237
208
|
controlType: 'infinity'
|
|
238
209
|
},
|
|
239
|
-
|
|
210
|
+
businessId: businessState?.business?.id,
|
|
240
211
|
profileMessages: true,
|
|
241
212
|
orderBy: 'last_direct_message_at',
|
|
242
213
|
orderDirection: 'asc'
|
|
@@ -292,7 +263,7 @@ export const MessageListing = (props: MessageListingParams) => {
|
|
|
292
263
|
titleAlign={'center'}
|
|
293
264
|
onActionLeft={goToBack}
|
|
294
265
|
showCall={false}
|
|
295
|
-
paddingTop={10}
|
|
266
|
+
paddingTop={Platform.OS === 'ios' ? 20 : 10}
|
|
296
267
|
btnStyle={{ paddingLeft: 0 }}
|
|
297
268
|
/>
|
|
298
269
|
<OrderListing
|
|
@@ -300,9 +271,9 @@ export const MessageListing = (props: MessageListingParams) => {
|
|
|
300
271
|
setSelectedOrderId={setSelectedOrderId}
|
|
301
272
|
setOrderList={setOrderListStatus}
|
|
302
273
|
setOpenMessges={setOpenMessges}
|
|
303
|
-
|
|
274
|
+
franchiseId={props.franchiseId}
|
|
304
275
|
/>
|
|
305
|
-
{openMessages && seletedOrder && (
|
|
276
|
+
{openMessages && !!seletedOrder?.id && (
|
|
306
277
|
<OModal
|
|
307
278
|
open={openMessages}
|
|
308
279
|
entireModal
|
|
@@ -311,7 +282,10 @@ export const MessageListing = (props: MessageListingParams) => {
|
|
|
311
282
|
>
|
|
312
283
|
<MessagesView
|
|
313
284
|
order={seletedOrder}
|
|
285
|
+
orderId={seletedOrder?.id}
|
|
314
286
|
setOpenMessges={setOpenMessges}
|
|
287
|
+
setSeletedOrder={setSeletedOrder}
|
|
288
|
+
setSelectedOrderId={setSelectedOrderId}
|
|
315
289
|
/>
|
|
316
290
|
</OModal>
|
|
317
291
|
)}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import React, { useEffect, useState } from 'react'
|
|
2
|
+
import Clipboard from '@react-native-clipboard/clipboard';
|
|
2
3
|
import { Messages as MessagesController, useSession, useUtils, useLanguage, ToastType, useToast } from 'ordering-components/native'
|
|
3
4
|
import { useTheme } from 'styled-components/native';
|
|
4
5
|
import { launchImageLibrary } from 'react-native-image-picker'
|
|
@@ -12,6 +13,7 @@ import { Header, TitleHeader, Wrapper, QuickMessageContainer, ProfileMessageHead
|
|
|
12
13
|
import { MessagesParams } from '../../types'
|
|
13
14
|
import { useWindowDimensions } from 'react-native'
|
|
14
15
|
import { useSafeAreaInsets } from 'react-native-safe-area-context'
|
|
16
|
+
import { getLogisticTag } from '../../utils'
|
|
15
17
|
|
|
16
18
|
const ORDER_STATUS: any = {
|
|
17
19
|
0: 'ORDER_STATUS_PENDING',
|
|
@@ -126,7 +128,7 @@ const MessagesUI = (props: MessagesParams) => {
|
|
|
126
128
|
?
|
|
127
129
|
`${t('ORDER', 'Order')} ${t(message.change.attribute.toUpperCase(), message.change.attribute.replace('_', ' '))} ${t('CHANGED_FROM', 'Changed from')} ${filterSpecialStatus.includes(message.change.attribute) ?
|
|
128
130
|
`${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)])}`
|
|
131
|
+
`${message.change?.attribute !== 'logistic_status' ? message.change.old !== null && t(ORDER_STATUS[parseInt(message.change.old, 10)]) : message.change.old !== null && getLogisticTag(message.change.old)} ${t('TO', 'to')} ${message.change?.attribute !== 'logistic_status' ? t(ORDER_STATUS[parseInt(message.change.new, 10)]) : getLogisticTag(message.change.new)}`
|
|
130
132
|
}`
|
|
131
133
|
: message.change.new
|
|
132
134
|
?
|
|
@@ -141,7 +143,7 @@ const MessagesUI = (props: MessagesParams) => {
|
|
|
141
143
|
const firstMessage = {
|
|
142
144
|
_id: 0,
|
|
143
145
|
text: _console,
|
|
144
|
-
createdAt: order?.created_at,
|
|
146
|
+
createdAt: parseDate(order?.created_at, { outputFormat: 'YYYY-MM-DD HH:mm:ss' }),
|
|
145
147
|
system: true
|
|
146
148
|
}
|
|
147
149
|
const newMessage: any = [];
|
|
@@ -150,13 +152,13 @@ const MessagesUI = (props: MessagesParams) => {
|
|
|
150
152
|
newMessage.push({
|
|
151
153
|
_id: message?.id,
|
|
152
154
|
text: message.type === 1 ? messageConsole(message) : message.comment,
|
|
153
|
-
createdAt: message.type !== 0 && message
|
|
155
|
+
createdAt: message.type !== 0 && parseDate(message?.created_at, { outputFormat: 'YYYY-MM-DD HH:mm:ss' }),
|
|
154
156
|
image: message.source,
|
|
155
157
|
system: message.type === 1,
|
|
156
158
|
user: {
|
|
157
|
-
_id: message.author.id,
|
|
158
|
-
name: message.author.name,
|
|
159
|
-
avatar: message.author.id !== user.id && type === USER_TYPE.DRIVER ? order?.driver?.photo : order?.business?.logo
|
|
159
|
+
_id: message.author && message.author.id,
|
|
160
|
+
name: message.author && message.author.name,
|
|
161
|
+
avatar: message.author && (message.author.id !== user.id && type === USER_TYPE.DRIVER ? order?.driver?.photo : order?.business?.logo)
|
|
160
162
|
}
|
|
161
163
|
});
|
|
162
164
|
}
|
|
@@ -165,13 +167,13 @@ const MessagesUI = (props: MessagesParams) => {
|
|
|
165
167
|
newMessage.push({
|
|
166
168
|
_id: message?.id,
|
|
167
169
|
text: message.type === 1 ? messageConsole(message) : message.comment,
|
|
168
|
-
createdAt: message.type !== 0 && message
|
|
170
|
+
createdAt: message.type !== 0 && parseDate(message?.created_at, { outputFormat: 'YYYY-MM-DD HH:mm:ss' }),
|
|
169
171
|
image: message.source,
|
|
170
172
|
system: message.type === 1,
|
|
171
173
|
user: {
|
|
172
|
-
_id: message.author.id,
|
|
173
|
-
name: message.author.name,
|
|
174
|
-
avatar: message.author.id !== user.id && type === USER_TYPE.DRIVER ? order?.driver?.photo : order?.business?.logo
|
|
174
|
+
_id: message.author && message.author.id,
|
|
175
|
+
name: message.author && message.author.name,
|
|
176
|
+
avatar: message.author && (message.author.id !== user.id && type === USER_TYPE.DRIVER ? order?.driver?.photo : order?.business?.logo)
|
|
175
177
|
}
|
|
176
178
|
});
|
|
177
179
|
}
|
|
@@ -240,6 +242,7 @@ const MessagesUI = (props: MessagesParams) => {
|
|
|
240
242
|
|
|
241
243
|
const renderAccessory = () => {
|
|
242
244
|
return (
|
|
245
|
+
!chatDisabled &&
|
|
243
246
|
<QuickMessageContainer
|
|
244
247
|
style={{
|
|
245
248
|
marginLeft: 10,
|
|
@@ -397,6 +400,24 @@ const MessagesUI = (props: MessagesParams) => {
|
|
|
397
400
|
}
|
|
398
401
|
}
|
|
399
402
|
|
|
403
|
+
const onLongPress = (context: any, message: any) => {
|
|
404
|
+
const options = [
|
|
405
|
+
t('COPY_TEXT', 'Copy text'),
|
|
406
|
+
t('CANCEL', 'Cancel'),
|
|
407
|
+
];
|
|
408
|
+
const cancelButtonIndex = options.length - 1;
|
|
409
|
+
context.actionSheet().showActionSheetWithOptions({
|
|
410
|
+
options,
|
|
411
|
+
cancelButtonIndex
|
|
412
|
+
}, (buttonIndex: any) => buttonIndex === 0 && Clipboard.setString(message.text)
|
|
413
|
+
);
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
useEffect(() => {
|
|
417
|
+
if (!order?.id || messages?.loading) return
|
|
418
|
+
readMessages && readMessages()
|
|
419
|
+
}, [order?.id, messages?.loading])
|
|
420
|
+
|
|
400
421
|
return (
|
|
401
422
|
<View style={{ height: getViewHeight(), width: '100%', paddingTop: 12, backgroundColor: 'white' }}>
|
|
402
423
|
<Wrapper>
|
|
@@ -473,6 +494,7 @@ const MessagesUI = (props: MessagesParams) => {
|
|
|
473
494
|
onSend={onSubmit}
|
|
474
495
|
onInputTextChanged={onChangeMessage}
|
|
475
496
|
alignTop
|
|
497
|
+
onLongPress={(context: any, message: any) => onLongPress(context, message)}
|
|
476
498
|
scrollToBottom
|
|
477
499
|
renderAvatarOnTop
|
|
478
500
|
renderUsernameOnMessage
|