ordering-ui-react-native 0.17.28 → 0.17.29-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 +8 -7
- package/src/DeliveryApp.tsx +43 -1
- package/src/components/BusinessesListing/index.tsx +1 -1
- package/src/components/OrderCreating/index.tsx +1 -21
- package/src/components/PaymentOptionsWebView/index.tsx +119 -120
- package/src/components/StripeMethodForm/index.tsx +108 -79
- package/src/components/VerifyPhone/styles.tsx +1 -2
- package/src/components/shared/OToast.tsx +4 -4
- package/src/types/index.tsx +5 -0
- 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 +0 -1
- package/themes/business/src/components/Chat/index.tsx +118 -107
- package/themes/business/src/components/DriverMap/index.tsx +17 -6
- 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 +238 -80
- package/themes/business/src/components/LoginForm/styles.tsx +10 -0
- package/themes/business/src/components/MapView/index.tsx +10 -10
- package/themes/business/src/components/NewOrderNotification/index.tsx +43 -50
- package/themes/business/src/components/OrderDetails/Delivery.tsx +4 -3
- package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +90 -47
- 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/OrderSummary/index.tsx +113 -121
- package/themes/business/src/components/OrdersOption/index.tsx +32 -75
- 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 +445 -243
- 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 +41 -24
- 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 +32 -2
- package/themes/business/src/utils/index.tsx +44 -1
- 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 +6 -0
- package/themes/original/src/components/AddressDetails/index.tsx +29 -11
- package/themes/original/src/components/AddressForm/index.tsx +81 -45
- 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 +193 -10
- package/themes/original/src/components/AppleLogin/index.tsx +4 -4
- package/themes/original/src/components/BusinessBasicInformation/index.tsx +166 -89
- package/themes/original/src/components/BusinessBasicInformation/styles.tsx +9 -7
- package/themes/original/src/components/BusinessController/index.tsx +154 -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 +23 -22
- package/themes/original/src/components/BusinessListingSearch/index.tsx +350 -323
- package/themes/original/src/components/BusinessPreorder/index.tsx +97 -16
- 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/UpsellingRedirect.tsx +1 -1
- package/themes/original/src/components/BusinessProductsListing/index.tsx +684 -524
- package/themes/original/src/components/BusinessProductsListing/styles.tsx +7 -9
- package/themes/original/src/components/BusinessReviews/index.tsx +3 -1
- package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +1 -1
- package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +105 -78
- package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -9
- package/themes/original/src/components/BusinessesListing/index.tsx +0 -1
- package/themes/original/src/components/Cart/index.tsx +102 -69
- package/themes/original/src/components/CartContent/index.tsx +115 -19
- package/themes/original/src/components/CartContent/styles.tsx +15 -1
- package/themes/original/src/components/Checkout/index.tsx +331 -177
- 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 -34
- 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 +51 -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 +6 -4
- package/themes/original/src/components/GPSButton/styles.ts +3 -3
- package/themes/original/src/components/GiftCard/GiftCardUI/index.tsx +96 -0
- package/themes/original/src/components/GiftCard/GiftCardUI/styles.tsx +5 -0
- package/themes/original/src/components/GiftCard/PurchaseGiftCard/index.tsx +100 -0
- package/themes/original/src/components/GiftCard/PurchaseGiftCard/styles.tsx +8 -0
- package/themes/original/src/components/GiftCard/RedeemGiftCard/index.tsx +191 -0
- package/themes/original/src/components/GiftCard/RedeemGiftCard/styles.tsx +8 -0
- package/themes/original/src/components/GiftCard/SendGiftCard/index.tsx +165 -0
- package/themes/original/src/components/GiftCard/SendGiftCard/styles.tsx +9 -0
- package/themes/original/src/components/GoogleMap/index.tsx +15 -4
- 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/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 +67 -22
- 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 +197 -116
- package/themes/original/src/components/MultiCheckout/index.tsx +288 -86
- package/themes/original/src/components/MultiOrdersDetails/SingleOrderCard.tsx +37 -224
- package/themes/original/src/components/MultiOrdersDetails/index.tsx +68 -21
- package/themes/original/src/components/MultiOrdersDetails/styles.tsx +1 -1
- package/themes/original/src/components/MyOrders/index.tsx +55 -51
- package/themes/original/src/components/NavBar/index.tsx +21 -21
- package/themes/original/src/components/Notifications/index.tsx +46 -50
- package/themes/original/src/components/Notifications/styles.tsx +6 -3
- package/themes/original/src/components/OrderDetails/OrderEta.tsx +76 -0
- package/themes/original/src/components/OrderDetails/OrderHistory.tsx +15 -3
- package/themes/original/src/components/OrderDetails/index.tsx +199 -359
- package/themes/original/src/components/OrderDetails/styles.tsx +0 -1
- package/themes/original/src/components/OrderItAgain/index.tsx +3 -1
- 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 +87 -59
- package/themes/original/src/components/OrderTypeSelector/index.tsx +2 -1
- package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +24 -19
- package/themes/original/src/components/OrdersOption/index.tsx +63 -56
- 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 +34 -6
- package/themes/original/src/components/PhoneInputNumber/index.tsx +3 -3
- package/themes/original/src/components/PlaceSpot/index.tsx +12 -6
- package/themes/original/src/components/ProductForm/index.tsx +225 -234
- package/themes/original/src/components/ProductForm/styles.tsx +5 -8
- package/themes/original/src/components/ProductItemAccordion/index.tsx +59 -29
- package/themes/original/src/components/ProductOptionSubOption/index.tsx +19 -11
- 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 -50
- package/themes/original/src/components/ProfessionalProfile/index.tsx +36 -7
- 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 +26 -9
- package/themes/original/src/components/ReviewOrder/styles.tsx +7 -0
- package/themes/original/src/components/ReviewProducts/index.tsx +23 -11
- 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 +74 -19
- 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 +42 -19
- package/themes/original/src/components/SingleOrderCard/index.tsx +156 -64
- package/themes/original/src/components/SingleOrderCard/styles.tsx +11 -9
- package/themes/original/src/components/SingleProductCard/index.tsx +99 -55
- package/themes/original/src/components/SingleProductCard/styles.tsx +27 -13
- package/themes/original/src/components/SingleProductReview/styles.tsx +1 -1
- package/themes/original/src/components/StripeCardsList/index.tsx +9 -2
- package/themes/original/src/components/StripeElementsForm/index.tsx +28 -15
- package/themes/original/src/components/UpsellingProducts/index.tsx +238 -224
- 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 +47 -7
- package/themes/original/src/components/UserProfile/index.tsx +9 -14
- package/themes/original/src/components/UserProfileForm/index.tsx +25 -28
- package/themes/original/src/components/UserProfileForm/styles.tsx +7 -0
- package/themes/original/src/components/WalletTransactionItem/index.tsx +2 -2
- package/themes/original/src/components/WalletTransactions/index.tsx +3 -3
- package/themes/original/src/components/Wallets/index.tsx +79 -36
- package/themes/original/src/components/Wallets/styles.tsx +5 -4
- 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 +16 -2
- 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 +35 -9
- package/themes/original/src/utils/index.tsx +364 -58
- package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
|
@@ -1,11 +1,12 @@
|
|
|
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
8
|
import ReCaptcha from '@fatnlazycat/react-native-recaptcha-v3'
|
|
9
|
+
import ReactNativeHapticFeedback from "react-native-haptic-feedback";
|
|
9
10
|
|
|
10
11
|
import {
|
|
11
12
|
LoginForm as LoginFormController,
|
|
@@ -72,6 +73,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
72
73
|
generateOtpCode,
|
|
73
74
|
useLoginOtpEmail,
|
|
74
75
|
useLoginOtpCellphone,
|
|
76
|
+
isGuest
|
|
75
77
|
} = props;
|
|
76
78
|
|
|
77
79
|
const [, { showToast }] = useToast();
|
|
@@ -96,7 +98,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
96
98
|
const [alertState, setAlertState] = useState({ open: false, title: '', content: [] })
|
|
97
99
|
const [tabLayouts, setTabLayouts] = useState<any>({})
|
|
98
100
|
const tabsRef = useRef<any>(null)
|
|
99
|
-
|
|
101
|
+
const enabledPoweredByOrdering = configs?.powered_by_ordering_module?.value
|
|
100
102
|
const theme = useTheme();
|
|
101
103
|
const isOtpEmail = loginTab === 'otp' && otpType === 'email'
|
|
102
104
|
const isOtpCellphone = loginTab === 'otp' && otpType === 'cellphone'
|
|
@@ -160,11 +162,24 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
160
162
|
handleCategoryScroll(otpType ? `${val}_${otpType}` : val)
|
|
161
163
|
};
|
|
162
164
|
|
|
165
|
+
const vibrateApp = (impact?: string) => {
|
|
166
|
+
const options = {
|
|
167
|
+
enableVibrateFallback: true,
|
|
168
|
+
ignoreAndroidSystemSettings: false
|
|
169
|
+
};
|
|
170
|
+
ReactNativeHapticFeedback.trigger(impact || "impactLight", options);
|
|
171
|
+
}
|
|
172
|
+
|
|
163
173
|
const onSubmit = (values?: any) => {
|
|
164
174
|
Keyboard.dismiss();
|
|
165
175
|
if (loginTab === 'otp') {
|
|
166
176
|
if (phoneInputData.error && (loginTab !== 'otp' || (otpType === 'cellphone' && loginTab === 'otp'))) {
|
|
167
177
|
showToast(ToastType.Error, t('INVALID_PHONE_NUMBER', 'Invalid phone number'));
|
|
178
|
+
Vibration.vibrate()
|
|
179
|
+
return
|
|
180
|
+
}
|
|
181
|
+
if (!values?.cellphone && otpType === 'cellphone') {
|
|
182
|
+
showToast(ToastType.Error, t('PHONE_NUMBER_REQUIRED', 'Phone number is required'));
|
|
168
183
|
return
|
|
169
184
|
}
|
|
170
185
|
if (loginTab === 'otp') {
|
|
@@ -177,6 +192,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
177
192
|
} else {
|
|
178
193
|
if (phoneInputData.error) {
|
|
179
194
|
showToast(ToastType.Error, phoneInputData.error);
|
|
195
|
+
Vibration.vibrate()
|
|
180
196
|
return;
|
|
181
197
|
}
|
|
182
198
|
handleButtonLoginClick({
|
|
@@ -189,6 +205,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
189
205
|
const handleVerifyCodeClick = () => {
|
|
190
206
|
if (phoneInputData.error) {
|
|
191
207
|
showToast(ToastType.Error, phoneInputData.error);
|
|
208
|
+
Vibration.vibrate()
|
|
192
209
|
return;
|
|
193
210
|
}
|
|
194
211
|
if (
|
|
@@ -203,6 +220,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
203
220
|
'The field Mobile phone is required.',
|
|
204
221
|
),
|
|
205
222
|
);
|
|
223
|
+
Vibration.vibrate()
|
|
206
224
|
return;
|
|
207
225
|
}
|
|
208
226
|
handleSendVerifyCode && handleSendVerifyCode(phoneInputData.phone);
|
|
@@ -217,17 +235,19 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
217
235
|
};
|
|
218
236
|
|
|
219
237
|
const handleChangeInputEmail = (value: string, onChange: any) => {
|
|
220
|
-
onChange(value.toLowerCase().replace(/[&,()%";:ç?<>{}\\[\]\s]/g, ''));
|
|
238
|
+
onChange(value.toLowerCase().trim().replace(/[&,()%";:ç?<>{}\\[\]\s]/g, ''));
|
|
221
239
|
};
|
|
222
240
|
|
|
223
241
|
const handleOpenRecaptcha = () => {
|
|
224
242
|
setRecaptchaVerified(false)
|
|
225
243
|
if (!recaptchaConfig?.siteKey) {
|
|
226
244
|
showToast(ToastType.Error, t('NO_RECAPTCHA_SITE_KEY', 'The config doesn\'t have recaptcha site key'));
|
|
245
|
+
Vibration.vibrate()
|
|
227
246
|
return
|
|
228
247
|
}
|
|
229
248
|
if (!recaptchaConfig?.baseUrl) {
|
|
230
249
|
showToast(ToastType.Error, t('NO_RECAPTCHA_BASE_URL', 'The config doesn\'t have recaptcha base url'));
|
|
250
|
+
Vibration.vibrate()
|
|
231
251
|
return
|
|
232
252
|
}
|
|
233
253
|
|
|
@@ -244,9 +264,18 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
244
264
|
setOtpType(type)
|
|
245
265
|
}
|
|
246
266
|
|
|
247
|
-
const handleLoginOtp = (code: string) => {
|
|
248
|
-
|
|
249
|
-
|
|
267
|
+
const handleLoginOtp = async (code: string) => {
|
|
268
|
+
if (!code) return
|
|
269
|
+
const logged = await handleButtonLoginClick({ code })
|
|
270
|
+
if (logged) {
|
|
271
|
+
setWillVerifyOtpState(false)
|
|
272
|
+
} else {
|
|
273
|
+
setAlertState({
|
|
274
|
+
open: true,
|
|
275
|
+
title: '',
|
|
276
|
+
content: t('OTP_CODE_INCORRECT', 'Otp code incorrect')
|
|
277
|
+
})
|
|
278
|
+
}
|
|
250
279
|
}
|
|
251
280
|
|
|
252
281
|
const closeAlert = () => {
|
|
@@ -304,6 +333,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
304
333
|
baseUrl: configs?.security_recaptcha_base_url?.value || null
|
|
305
334
|
})
|
|
306
335
|
showToast(ToastType.Info, t('TRY_AGAIN', 'Please try again'))
|
|
336
|
+
Vibration.vibrate()
|
|
307
337
|
return
|
|
308
338
|
}
|
|
309
339
|
formState.result?.result &&
|
|
@@ -313,6 +343,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
313
343
|
? formState.result?.result
|
|
314
344
|
: formState.result?.result[0],
|
|
315
345
|
);
|
|
346
|
+
formState.result?.result && Vibration.vibrate()
|
|
316
347
|
}
|
|
317
348
|
}, [formState]);
|
|
318
349
|
|
|
@@ -324,6 +355,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
324
355
|
? verifyPhoneState?.result?.result
|
|
325
356
|
: verifyPhoneState?.result?.result[0];
|
|
326
357
|
verifyPhoneState.result?.result && showToast(ToastType.Error, message);
|
|
358
|
+
verifyPhoneState.result?.result && Vibration.vibrate();
|
|
327
359
|
setIsLoadingVerifyModal(false);
|
|
328
360
|
return;
|
|
329
361
|
}
|
|
@@ -363,18 +395,25 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
363
395
|
}
|
|
364
396
|
}, [checkPhoneCodeState])
|
|
365
397
|
|
|
398
|
+
useEffect(() => {
|
|
399
|
+
if (!!Object.values(errors)?.length) Vibration.vibrate()
|
|
400
|
+
}, [errors])
|
|
401
|
+
|
|
366
402
|
return (
|
|
367
403
|
<Container>
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
404
|
+
{isGuest ? (
|
|
405
|
+
<OText style={{ textAlign: 'center', marginBottom: 10 }} size={18}>{t('LOGIN', 'Login')}</OText>
|
|
406
|
+
) : (
|
|
407
|
+
<NavBar
|
|
408
|
+
title={t('LOGIN', 'Login')}
|
|
409
|
+
titleAlign={'center'}
|
|
410
|
+
onActionLeft={() => navigation?.canGoBack() && navigation.goBack()}
|
|
411
|
+
showCall={false}
|
|
412
|
+
btnStyle={{ paddingLeft: 0 }}
|
|
413
|
+
titleWrapStyle={{ paddingHorizontal: 0 }}
|
|
414
|
+
titleStyle={{ marginRight: 0, marginLeft: 0 }}
|
|
415
|
+
/>
|
|
416
|
+
)}
|
|
378
417
|
<FormSide>
|
|
379
418
|
{(Number(useLoginByEmail) + Number(useLoginByCellphone) + Number(useLoginOtpEmail) + Number(useLoginOtpCellphone) > 1) && (
|
|
380
419
|
<LoginWith>
|
|
@@ -680,7 +719,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
680
719
|
{t('NEW_ON_PLATFORM', 'New on Ordering?')}
|
|
681
720
|
</OText>
|
|
682
721
|
<TouchableOpacity onPress={() => onNavigationRedirect('Signup')}>
|
|
683
|
-
<OText size={14} mLeft={5} color={theme.colors.
|
|
722
|
+
<OText size={14} mLeft={5} color={theme.colors.primary}>
|
|
684
723
|
{t('CREATE_ACCOUNT', 'Create account')}
|
|
685
724
|
</OText>
|
|
686
725
|
</TouchableOpacity>
|
|
@@ -720,8 +759,8 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
720
759
|
|
|
721
760
|
{configs && Object.keys(configs).length > 0 ? (
|
|
722
761
|
(((configs?.facebook_login?.value === 'true' || configs?.facebook_login?.value === '1') && configs?.facebook_id?.value && facebookLoginEnabled) ||
|
|
723
|
-
|
|
724
|
-
|
|
762
|
+
((configs?.google_login_client_id?.value !== '' && configs?.google_login_client_id?.value !== null) && googleLoginEnabled) ||
|
|
763
|
+
((configs?.apple_login_client_id?.value !== '' && configs?.apple_login_client_id?.value !== null) && appleLoginEnabled)) && !isGuest &&
|
|
725
764
|
(
|
|
726
765
|
<>
|
|
727
766
|
<View
|
|
@@ -749,7 +788,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
749
788
|
facebookLoginEnabled && (
|
|
750
789
|
<FacebookLogin
|
|
751
790
|
notificationState={notificationState}
|
|
752
|
-
handleErrors={(err: any) => showToast(ToastType.Error, err)}
|
|
791
|
+
handleErrors={(err: any) => { showToast(ToastType.Error, err), Vibration.vibrate() }}
|
|
753
792
|
handleLoading={(val: boolean) => setIsFBLoading(val)}
|
|
754
793
|
handleSuccessFacebookLogin={handleSuccessFacebook}
|
|
755
794
|
/>
|
|
@@ -758,7 +797,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
758
797
|
<GoogleLogin
|
|
759
798
|
notificationState={notificationState}
|
|
760
799
|
webClientId={configs?.google_login_client_id?.value}
|
|
761
|
-
handleErrors={(err: any) => showToast(ToastType.Error, err)}
|
|
800
|
+
handleErrors={(err: any) => { showToast(ToastType.Error, err), Vibration.vibrate() }}
|
|
762
801
|
handleLoading={(val: boolean) => setIsFBLoading(val)}
|
|
763
802
|
handleSuccessGoogleLogin={handleSuccessFacebook}
|
|
764
803
|
/>
|
|
@@ -766,7 +805,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
766
805
|
{(configs?.apple_login_client_id?.value !== '' && configs?.google_login_client_id?.value !== null) && appleLoginEnabled && (
|
|
767
806
|
<AppleLogin
|
|
768
807
|
notificationState={notificationState}
|
|
769
|
-
handleErrors={(err: any) => showToast(ToastType.Error, err)}
|
|
808
|
+
handleErrors={(err: any) => { showToast(ToastType.Error, err), Vibration.vibrate() }}
|
|
770
809
|
handleLoading={(val: boolean) => setIsFBLoading(val)}
|
|
771
810
|
handleSuccessAppleLogin={handleSuccessFacebook}
|
|
772
811
|
/>
|
|
@@ -789,6 +828,12 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
789
828
|
</Placeholder>
|
|
790
829
|
</SkeletonWrapper>
|
|
791
830
|
)}
|
|
831
|
+
|
|
832
|
+
{enabledPoweredByOrdering && (
|
|
833
|
+
<OText>
|
|
834
|
+
Powered By Ordering.co
|
|
835
|
+
</OText>
|
|
836
|
+
)}
|
|
792
837
|
</FormSide>
|
|
793
838
|
<OModal
|
|
794
839
|
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
|