ordering-ui-react-native 0.16.69 → 0.16.70-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 +6 -5
- package/src/DeliveryApp.tsx +43 -1
- package/src/components/ActiveOrders/styles.tsx +8 -14
- package/src/components/BusinessInformation/index.tsx +19 -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/Messages/index.tsx +2 -2
- package/src/components/OrdersOption/index.tsx +54 -56
- package/src/components/PaymentOptions/index.tsx +298 -345
- package/src/components/PaymentOptionsWebView/index.tsx +119 -120
- package/src/components/SingleProductReview/index.tsx +7 -4
- package/src/components/StripeElementsForm/index.tsx +25 -16
- package/src/components/VerifyPhone/styles.tsx +1 -2
- package/src/components/shared/OToast.tsx +4 -4
- 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/AcceptOrRejectOrder/index.tsx +260 -238
- package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +6 -4
- package/themes/business/src/components/BusinessController/index.tsx +2 -2
- package/themes/business/src/components/Chat/index.tsx +31 -31
- package/themes/business/src/components/DriverMap/index.tsx +7 -5
- package/themes/business/src/components/LoginForm/index.tsx +111 -74
- package/themes/business/src/components/MapView/index.tsx +14 -3
- package/themes/business/src/components/MessagesOption/index.tsx +11 -1
- package/themes/business/src/components/NewOrderNotification/index.tsx +31 -41
- package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +70 -43
- package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +3 -3
- package/themes/business/src/components/OrdersOption/index.tsx +63 -73
- 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/OrderItem.tsx +250 -0
- package/themes/business/src/components/PreviousOrders/OrdersGroupedItem.tsx +115 -0
- package/themes/business/src/components/PreviousOrders/index.tsx +440 -245
- package/themes/business/src/components/PreviousOrders/styles.tsx +31 -3
- package/themes/business/src/components/ProductItemAccordion/index.tsx +3 -2
- package/themes/business/src/components/ReviewCustomer/index.tsx +39 -15
- package/themes/business/src/components/shared/ODropDown.tsx +42 -8
- package/themes/business/src/components/shared/ODropDownCalendar.tsx +36 -7
- package/themes/business/src/components/shared/OLink.tsx +33 -13
- package/themes/business/src/components/shared/OText.tsx +8 -2
- package/themes/business/src/types/index.tsx +14 -3
- 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 +6 -0
- package/themes/original/src/components/AddressDetails/index.tsx +10 -8
- package/themes/original/src/components/AddressForm/index.tsx +153 -137
- package/themes/original/src/components/AddressList/index.tsx +18 -18
- package/themes/original/src/components/AddressList/styles.tsx +4 -2
- package/themes/original/src/components/AppleLogin/index.tsx +4 -4
- package/themes/original/src/components/BusinessBasicInformation/index.tsx +49 -33
- package/themes/original/src/components/BusinessController/index.tsx +101 -70
- package/themes/original/src/components/BusinessController/styles.tsx +14 -9
- package/themes/original/src/components/BusinessInformation/index.tsx +10 -31
- 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 +87 -142
- 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 +41 -62
- package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
- package/themes/original/src/components/BusinessProductsListing/index.tsx +561 -479
- package/themes/original/src/components/BusinessProductsListing/styles.tsx +13 -12
- package/themes/original/src/components/BusinessTypeFilter/index.tsx +3 -2
- package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +2 -1
- package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +93 -98
- package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -9
- package/themes/original/src/components/BusinessesListing/index.tsx +8 -8
- package/themes/original/src/components/Cart/index.tsx +75 -42
- package/themes/original/src/components/CartContent/index.tsx +80 -18
- package/themes/original/src/components/CartContent/styles.tsx +11 -1
- package/themes/original/src/components/Checkout/index.tsx +110 -114
- package/themes/original/src/components/Checkout/styles.tsx +4 -3
- 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/DriverTips/index.tsx +47 -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/index.tsx +20 -19
- 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 +7 -7
- package/themes/original/src/components/HelpAccountAndPayment/index.tsx +14 -20
- package/themes/original/src/components/HelpAccountAndPayment/styles.tsx +6 -0
- package/themes/original/src/components/HelpGuide/index.tsx +12 -11
- package/themes/original/src/components/HelpGuide/styles.tsx +5 -0
- package/themes/original/src/components/HelpOrder/index.tsx +12 -20
- package/themes/original/src/components/HelpOrder/styles.tsx +8 -1
- 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 +98 -41
- package/themes/original/src/components/LottieAnimation/index.tsx +78 -0
- package/themes/original/src/components/MessageListing/index.tsx +7 -40
- package/themes/original/src/components/Messages/index.tsx +35 -20
- package/themes/original/src/components/MomentOption/index.tsx +17 -11
- package/themes/original/src/components/MultiCart/index.tsx +50 -0
- package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +92 -93
- package/themes/original/src/components/MultiCheckout/index.tsx +158 -77
- package/themes/original/src/components/MultiOrdersDetails/SingleOrderCard.tsx +37 -224
- package/themes/original/src/components/MultiOrdersDetails/index.tsx +85 -34
- package/themes/original/src/components/MultiOrdersDetails/styles.tsx +1 -1
- package/themes/original/src/components/MyOrders/index.tsx +86 -20
- package/themes/original/src/components/NavBar/index.tsx +7 -6
- 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 +144 -0
- package/themes/original/src/components/Notifications/styles.tsx +20 -0
- package/themes/original/src/components/OrderDetails/index.tsx +115 -215
- package/themes/original/src/components/OrderDetails/styles.tsx +15 -2
- package/themes/original/src/components/OrderItAgain/index.tsx +46 -43
- package/themes/original/src/components/OrderProgress/index.tsx +79 -100
- 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 +13 -6
- package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +94 -98
- package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +3 -0
- package/themes/original/src/components/OrdersOption/index.tsx +97 -88
- 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 +1 -2
- package/themes/original/src/components/PhoneInputNumber/index.tsx +1 -1
- package/themes/original/src/components/PlaceSpot/index.tsx +249 -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 +212 -253
- package/themes/original/src/components/ProductForm/styles.tsx +5 -8
- package/themes/original/src/components/ProductItemAccordion/index.tsx +199 -128
- package/themes/original/src/components/ProductOptionSubOption/index.tsx +17 -9
- package/themes/original/src/components/ProductOptionSubOption/styles.tsx +1 -2
- package/themes/original/src/components/ProfessionalFilter/index.tsx +2 -1
- package/themes/original/src/components/ProfessionalProfile/index.tsx +19 -8
- package/themes/original/src/components/Promotions/index.tsx +234 -220
- package/themes/original/src/components/Promotions/styles.tsx +7 -2
- 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 +328 -264
- package/themes/original/src/components/SignupForm/index.tsx +134 -89
- package/themes/original/src/components/SingleOrderCard/index.tsx +129 -54
- package/themes/original/src/components/SingleOrderCard/styles.tsx +10 -8
- package/themes/original/src/components/SingleProductCard/index.tsx +85 -82
- package/themes/original/src/components/SingleProductCard/styles.tsx +2 -9
- 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 +13 -2
- package/themes/original/src/components/UpsellingProducts/index.tsx +244 -215
- package/themes/original/src/components/UpsellingProducts/styles.tsx +12 -1
- package/themes/original/src/components/UserDetails/index.tsx +5 -3
- package/themes/original/src/components/UserFormDetails/index.tsx +6 -48
- 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 +19 -28
- package/themes/original/src/components/UserProfileForm/styles.tsx +7 -0
- 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 +230 -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/HeaderTitle.tsx +8 -3
- package/themes/original/src/components/shared/OBottomPopup.tsx +6 -4
- package/themes/original/src/components/shared/OButton.tsx +9 -4
- package/themes/original/src/components/shared/OIcon.tsx +8 -1
- package/themes/original/src/components/shared/OInput.tsx +10 -1
- package/themes/original/src/layouts/Container.tsx +13 -9
- package/themes/original/src/types/index.tsx +44 -6
- package/themes/original/src/utils/index.tsx +305 -58
- 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,7 +96,7 @@ 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'
|
|
@@ -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) => {
|
|
@@ -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
|
|
@@ -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
|
|
@@ -711,7 +762,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
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,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
|
}
|
|
@@ -225,7 +192,7 @@ const OrderMessageUI = (props: any) => {
|
|
|
225
192
|
}
|
|
226
193
|
|
|
227
194
|
export const OrderListing = (props: OrdersOptionParams) => {
|
|
228
|
-
|
|
195
|
+
const [businessState] = useBusiness();
|
|
229
196
|
const OrderListingProps = {
|
|
230
197
|
...props,
|
|
231
198
|
UIComponent: OrdersOptionUI,
|
|
@@ -236,7 +203,7 @@ export const OrderListing = (props: OrdersOptionParams) => {
|
|
|
236
203
|
pageSize: 10,
|
|
237
204
|
controlType: 'infinity'
|
|
238
205
|
},
|
|
239
|
-
|
|
206
|
+
businessId: businessState?.business?.id,
|
|
240
207
|
profileMessages: true,
|
|
241
208
|
orderBy: 'last_direct_message_at',
|
|
242
209
|
orderDirection: 'asc'
|
|
@@ -292,7 +259,7 @@ export const MessageListing = (props: MessageListingParams) => {
|
|
|
292
259
|
titleAlign={'center'}
|
|
293
260
|
onActionLeft={goToBack}
|
|
294
261
|
showCall={false}
|
|
295
|
-
paddingTop={10}
|
|
262
|
+
paddingTop={Platform.OS === 'ios' ? 20 : 10}
|
|
296
263
|
btnStyle={{ paddingLeft: 0 }}
|
|
297
264
|
/>
|
|
298
265
|
<OrderListing
|
|
@@ -300,7 +267,7 @@ export const MessageListing = (props: MessageListingParams) => {
|
|
|
300
267
|
setSelectedOrderId={setSelectedOrderId}
|
|
301
268
|
setOrderList={setOrderListStatus}
|
|
302
269
|
setOpenMessges={setOpenMessges}
|
|
303
|
-
|
|
270
|
+
franchiseId={props.franchiseId}
|
|
304
271
|
/>
|
|
305
272
|
{openMessages && seletedOrder && (
|
|
306
273
|
<OModal
|
|
@@ -1,10 +1,12 @@
|
|
|
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'
|
|
5
6
|
import { GiftedChat, Actions, ActionsProps, InputToolbar, Composer, Send, Bubble, MessageImage, InputToolbarProps, ComposerProps } from 'react-native-gifted-chat'
|
|
6
7
|
import { USER_TYPE } from '../../config/constants'
|
|
7
8
|
import MaterialCommunityIcon from 'react-native-vector-icons/MaterialCommunityIcons'
|
|
9
|
+
import AntDesignIcon from 'react-native-vector-icons/AntDesign'
|
|
8
10
|
import { OIcon, OIconButton, OText, OButton } from '../shared'
|
|
9
11
|
import { TouchableOpacity, ActivityIndicator, StyleSheet, View, Platform, Keyboard } from 'react-native'
|
|
10
12
|
import { Header, TitleHeader, Wrapper, QuickMessageContainer, ProfileMessageHeader, MessageTypeItem } from './styles'
|
|
@@ -36,7 +38,7 @@ const ORDER_STATUS: any = {
|
|
|
36
38
|
20: 'ORDER_CUSTOMER_ALMOST_ARRIVED_BUSINESS',
|
|
37
39
|
21: 'ORDER_CUSTOMER_ARRIVED_BUSINESS',
|
|
38
40
|
22: 'ORDER_LOOKING_FOR_DRIVER',
|
|
39
|
-
|
|
41
|
+
23: 'ORDER_DRIVER_ON_WAY'
|
|
40
42
|
}
|
|
41
43
|
|
|
42
44
|
const filterSpecialStatus = ['prepared_in', 'delivered_in', 'delivery_datetime']
|
|
@@ -122,18 +124,17 @@ const MessagesUI = (props: MessagesParams) => {
|
|
|
122
124
|
|
|
123
125
|
const messageConsole = (message: any) => {
|
|
124
126
|
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
127
|
?
|
|
133
|
-
`${
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
128
|
+
`${t('ORDER', 'Order')} ${t(message.change.attribute.toUpperCase(), message.change.attribute.replace('_', ' '))} ${t('CHANGED_FROM', 'Changed from')} ${filterSpecialStatus.includes(message.change.attribute) ?
|
|
129
|
+
`${message.change.old === null ? '0' : message.change.old} ${t('TO', 'to')} ${message.change.new} ${t('MINUTES', 'Minutes')}` :
|
|
130
|
+
`${message.change.old !== null && t(ORDER_STATUS[parseInt(message.change.old, 10)])} ${t('TO', 'to')} ${t(ORDER_STATUS[parseInt(message.change.new, 10)])}`
|
|
131
|
+
}`
|
|
132
|
+
: message.change.new
|
|
133
|
+
?
|
|
134
|
+
`${message.driver?.name} ${message.driver?.lastname !== null ? message.driver.lastname : ''} ${t('WAS_ASSIGNED_AS_DRIVER', 'Was assigned as driver')} ${message.comment ? message.comment.length : ''}`
|
|
135
|
+
:
|
|
136
|
+
`${t('DRIVER_UNASSIGNED', 'Driver unassigned')}`
|
|
137
|
+
}
|
|
137
138
|
|
|
138
139
|
useEffect(() => {
|
|
139
140
|
let newMessages: Array<any> = []
|
|
@@ -141,7 +142,7 @@ const MessagesUI = (props: MessagesParams) => {
|
|
|
141
142
|
const firstMessage = {
|
|
142
143
|
_id: 0,
|
|
143
144
|
text: _console,
|
|
144
|
-
createdAt: order?.created_at,
|
|
145
|
+
createdAt: parseDate(order?.created_at, { outputFormat: 'YYYY-MM-DD HH:mm:ss' }),
|
|
145
146
|
system: true
|
|
146
147
|
}
|
|
147
148
|
const newMessage: any = [];
|
|
@@ -150,7 +151,7 @@ const MessagesUI = (props: MessagesParams) => {
|
|
|
150
151
|
newMessage.push({
|
|
151
152
|
_id: message?.id,
|
|
152
153
|
text: message.type === 1 ? messageConsole(message) : message.comment,
|
|
153
|
-
createdAt: message.type !== 0 && message
|
|
154
|
+
createdAt: message.type !== 0 && parseDate(message?.created_at, { outputFormat: 'YYYY-MM-DD HH:mm:ss' }),
|
|
154
155
|
image: message.source,
|
|
155
156
|
system: message.type === 1,
|
|
156
157
|
user: {
|
|
@@ -165,7 +166,7 @@ const MessagesUI = (props: MessagesParams) => {
|
|
|
165
166
|
newMessage.push({
|
|
166
167
|
_id: message?.id,
|
|
167
168
|
text: message.type === 1 ? messageConsole(message) : message.comment,
|
|
168
|
-
createdAt: message.type !== 0 && message
|
|
169
|
+
createdAt: message.type !== 0 && parseDate(message?.created_at, { outputFormat: 'YYYY-MM-DD HH:mm:ss' }),
|
|
169
170
|
image: message.source,
|
|
170
171
|
system: message.type === 1,
|
|
171
172
|
user: {
|
|
@@ -397,12 +398,27 @@ const MessagesUI = (props: MessagesParams) => {
|
|
|
397
398
|
}
|
|
398
399
|
}
|
|
399
400
|
|
|
401
|
+
const onLongPress = (context: any, message: any) => {
|
|
402
|
+
const options = [
|
|
403
|
+
t('COPY_TEXT', 'Copy text'),
|
|
404
|
+
t('CANCEL', 'Cancel'),
|
|
405
|
+
];
|
|
406
|
+
const cancelButtonIndex = options.length - 1;
|
|
407
|
+
context.actionSheet().showActionSheetWithOptions({
|
|
408
|
+
options,
|
|
409
|
+
cancelButtonIndex
|
|
410
|
+
}, (buttonIndex: any) => buttonIndex === 0 && Clipboard.setString(message.text)
|
|
411
|
+
);
|
|
412
|
+
}
|
|
413
|
+
|
|
400
414
|
return (
|
|
401
415
|
<View style={{ height: getViewHeight(), width: '100%', paddingTop: 12, backgroundColor: 'white' }}>
|
|
402
416
|
<Wrapper>
|
|
403
417
|
{!isMeesageListing ? (
|
|
404
418
|
<Header>
|
|
405
|
-
<
|
|
419
|
+
<TouchableOpacity onPress={onClose} style={{ paddingStart: 10, borderColor: theme.colors.clear }}>
|
|
420
|
+
<AntDesignIcon name='arrowleft' size={26} />
|
|
421
|
+
</TouchableOpacity>
|
|
406
422
|
<View style={{ marginRight: 10, shadowColor: theme.colors.black, shadowOpacity: 0.1, shadowOffset: { width: 0, height: 1 }, shadowRadius: 2 }}>
|
|
407
423
|
<OIcon
|
|
408
424
|
url={type === USER_TYPE.DRIVER ? order?.driver?.photo : order?.business?.logo}
|
|
@@ -419,10 +435,8 @@ const MessagesUI = (props: MessagesParams) => {
|
|
|
419
435
|
) : (
|
|
420
436
|
<ProfileMessageHeader>
|
|
421
437
|
<View style={{ ...styles.headerTitle }}>
|
|
422
|
-
<TouchableOpacity
|
|
423
|
-
|
|
424
|
-
onPress={onClose}>
|
|
425
|
-
<OIcon src={theme.images.general.arrow_left} width={16} />
|
|
438
|
+
<TouchableOpacity onPress={onClose} style={styles.headerItem}>
|
|
439
|
+
<AntDesignIcon name='arrowleft' size={26} />
|
|
426
440
|
</TouchableOpacity>
|
|
427
441
|
<OText size={18}>{t('ORDER', theme?.defaultLanguages?.ORDER || 'Order')} #{order?.id}</OText>
|
|
428
442
|
</View>
|
|
@@ -473,6 +487,7 @@ const MessagesUI = (props: MessagesParams) => {
|
|
|
473
487
|
onSend={onSubmit}
|
|
474
488
|
onInputTextChanged={onChangeMessage}
|
|
475
489
|
alignTop
|
|
490
|
+
onLongPress={(context: any, message: any) => onLongPress(context, message)}
|
|
476
491
|
scrollToBottom
|
|
477
492
|
renderAvatarOnTop
|
|
478
493
|
renderUsernameOnMessage
|
|
@@ -13,7 +13,8 @@ import IconAntDesign from 'react-native-vector-icons/AntDesign'
|
|
|
13
13
|
import {
|
|
14
14
|
StyleSheet,
|
|
15
15
|
View,
|
|
16
|
-
TouchableOpacity
|
|
16
|
+
TouchableOpacity,
|
|
17
|
+
Platform
|
|
17
18
|
} from 'react-native';
|
|
18
19
|
import Spinner from 'react-native-loading-spinner-overlay';
|
|
19
20
|
import { MomentOptionParams } from '../../types';
|
|
@@ -28,6 +29,7 @@ import {
|
|
|
28
29
|
TimeItem
|
|
29
30
|
} from './styles';
|
|
30
31
|
import { useSafeAreaInsets } from 'react-native-safe-area-context';
|
|
32
|
+
import { locale, monthsEnum } from '../../utils';
|
|
31
33
|
|
|
32
34
|
const MomentOptionUI = (props: MomentOptionParams) => {
|
|
33
35
|
const {
|
|
@@ -252,19 +254,22 @@ const MomentOptionUI = (props: MomentOptionParams) => {
|
|
|
252
254
|
|
|
253
255
|
return (
|
|
254
256
|
<>
|
|
255
|
-
<Container
|
|
256
|
-
|
|
257
|
+
<Container
|
|
258
|
+
style={{
|
|
259
|
+
paddingLeft: 40,
|
|
260
|
+
paddingRight: 40
|
|
261
|
+
}}>
|
|
262
|
+
<View style={{ paddingBottom: 90, paddingRight: 20 }}>
|
|
257
263
|
<NavBar
|
|
258
264
|
onActionLeft={() => goToBack()}
|
|
259
265
|
btnStyle={{ paddingLeft: 0 }}
|
|
260
|
-
|
|
261
|
-
|
|
266
|
+
style={{ paddingBottom: 0 }}
|
|
267
|
+
paddingTop={Platform.OS === 'ios' ? 10 : 0}
|
|
262
268
|
title={t('QUESTION_WHEN_ORDER', 'When do you want your order?')}
|
|
263
269
|
titleAlign={'center'}
|
|
264
270
|
titleStyle={{ fontSize: 14, marginRight: 0, marginLeft: 0 }}
|
|
265
271
|
titleWrapStyle={{ paddingHorizontal: 0 }}
|
|
266
272
|
/>
|
|
267
|
-
|
|
268
273
|
<WrapSelectOption
|
|
269
274
|
onPress={() => _handleAsap()}
|
|
270
275
|
disabled={orderState.loading} style={{ alignItems: 'flex-start' }}>
|
|
@@ -281,7 +286,7 @@ const MomentOptionUI = (props: MomentOptionParams) => {
|
|
|
281
286
|
style={{ marginEnd: 24 }}
|
|
282
287
|
/>
|
|
283
288
|
)}
|
|
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>
|
|
289
|
+
<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
290
|
</WrapSelectOption>
|
|
286
291
|
<WrapSelectOption
|
|
287
292
|
onPress={() => setOptionSelected({ isAsap: false, isSchedule: true })}
|
|
@@ -308,6 +313,7 @@ const MomentOptionUI = (props: MomentOptionParams) => {
|
|
|
308
313
|
{selectDate && datesWhitelist[0]?.start !== null && (
|
|
309
314
|
<CalendarStrip
|
|
310
315
|
scrollable
|
|
316
|
+
locale={locale}
|
|
311
317
|
style={styles.calendar}
|
|
312
318
|
calendarHeaderContainerStyle={styles.calendarHeaderContainer}
|
|
313
319
|
calendarHeaderStyle={styles.calendarHeader}
|
|
@@ -342,12 +348,12 @@ const MomentOptionUI = (props: MomentOptionParams) => {
|
|
|
342
348
|
style={{
|
|
343
349
|
lineHeight: 24
|
|
344
350
|
}}
|
|
345
|
-
>{is12hours ? (
|
|
346
|
-
time.startTime.includes('12')
|
|
351
|
+
>{is12hours ? (
|
|
352
|
+
time.startTime.includes('12')
|
|
347
353
|
? `${time.startTime}PM`
|
|
348
354
|
: parseTime(moment(time.startTime, 'HH:mm'), { outputFormat: 'hh:mma' })
|
|
349
|
-
|
|
350
|
-
|
|
355
|
+
) : time.startTime
|
|
356
|
+
}</OText>
|
|
351
357
|
</TimeItem>
|
|
352
358
|
</TouchableOpacity>
|
|
353
359
|
))}
|