ordering-ui-react-native 0.17.57 → 0.17.58-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 +29 -8
- package/src/components/PhoneInputNumber/index.tsx +6 -2
- package/src/components/StripeMethodForm/index.tsx +136 -102
- 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 +5 -0
- 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 +125 -113
- package/themes/business/src/components/DriverMap/index.tsx +17 -6
- package/themes/business/src/components/DriverSchedule/index.tsx +42 -5
- package/themes/business/src/components/GoogleMap/index.tsx +58 -57
- package/themes/business/src/components/LoginForm/Otp/index.tsx +31 -3
- package/themes/business/src/components/LoginForm/index.tsx +15 -22
- package/themes/business/src/components/MapView/index.tsx +10 -10
- package/themes/business/src/components/NewOrderNotification/index.tsx +35 -21
- package/themes/business/src/components/NotFoundSource/index.tsx +2 -2
- package/themes/business/src/components/OrderDetails/Business.tsx +1 -1
- package/themes/business/src/components/OrderDetails/Delivery.tsx +191 -6
- package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +93 -50
- package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +64 -63
- 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 +19 -18
- 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 +249 -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 +30 -15
- package/themes/business/src/components/StoresList/index.tsx +3 -4
- package/themes/business/src/components/UserProfileForm/index.tsx +11 -13
- 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 +28 -12
- package/themes/business/src/utils/index.tsx +29 -2
- 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/Checkout/index.tsx +6 -0
- package/themes/kiosk/src/components/Intro/index.tsx +16 -1
- package/themes/kiosk/src/components/LoginForm/index.tsx +7 -9
- 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 +2 -2
- package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
- package/themes/original/index.tsx +4 -0
- package/themes/original/src/components/AddressDetails/index.tsx +28 -10
- package/themes/original/src/components/AddressForm/index.tsx +68 -40
- package/themes/original/src/components/AddressList/index.tsx +27 -22
- 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/AppleLogin/styles.tsx +3 -1
- package/themes/original/src/components/BusinessBasicInformation/index.tsx +153 -96
- package/themes/original/src/components/BusinessBasicInformation/styles.tsx +10 -12
- package/themes/original/src/components/BusinessController/index.tsx +122 -68
- package/themes/original/src/components/BusinessController/styles.tsx +23 -4
- 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 +110 -108
- package/themes/original/src/components/BusinessItemAccordion/index.tsx +15 -20
- package/themes/original/src/components/BusinessListingSearch/index.tsx +352 -326
- package/themes/original/src/components/BusinessListingSearch/styles.tsx +0 -18
- package/themes/original/src/components/BusinessPreorder/index.tsx +103 -19
- package/themes/original/src/components/BusinessProductsCategories/index.tsx +1 -2
- package/themes/original/src/components/BusinessProductsList/index.tsx +25 -15
- 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 +683 -555
- package/themes/original/src/components/BusinessProductsListing/styles.tsx +2 -2
- 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 +96 -91
- package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -4
- package/themes/original/src/components/BusinessesListing/index.tsx +0 -1
- package/themes/original/src/components/Cart/index.tsx +77 -50
- package/themes/original/src/components/CartContent/index.tsx +117 -20
- package/themes/original/src/components/CartContent/styles.tsx +17 -7
- package/themes/original/src/components/Checkout/index.tsx +359 -171
- 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/FacebookLogin/styles.tsx +3 -1
- package/themes/original/src/components/Favorite/index.tsx +8 -9
- 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/GoogleLogin/styles.tsx +1 -1
- 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 +10 -31
- package/themes/original/src/components/HelpAccountAndPayment/styles.tsx +5 -3
- package/themes/original/src/components/HelpGuide/index.tsx +6 -6
- package/themes/original/src/components/HelpGuide/styles.tsx +6 -0
- package/themes/original/src/components/HelpOrder/index.tsx +6 -15
- 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 +55 -13
- package/themes/original/src/components/LoginForm/Otp/styles.tsx +0 -1
- package/themes/original/src/components/LoginForm/index.tsx +60 -35
- package/themes/original/src/components/LottieAnimation/index.tsx +89 -55
- 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 -90
- package/themes/original/src/components/MomentSelector/index.tsx +1 -1
- package/themes/original/src/components/MultiCart/index.tsx +50 -0
- package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +153 -49
- package/themes/original/src/components/MultiCheckout/index.tsx +308 -88
- package/themes/original/src/components/MultiCheckout/styles.tsx +3 -1
- 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 +65 -52
- package/themes/original/src/components/NavBar/index.tsx +18 -18
- package/themes/original/src/components/NotFoundSource/index.tsx +14 -10
- 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 +190 -358
- 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 +33 -59
- package/themes/original/src/components/OrderSummary/index.tsx +85 -57
- package/themes/original/src/components/OrderTypeSelector/index.tsx +1 -1
- package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +24 -19
- package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +14 -14
- package/themes/original/src/components/OrdersOption/index.tsx +78 -67
- package/themes/original/src/components/OrdersOption/styles.tsx +1 -1
- package/themes/original/src/components/PageBanner/index.tsx +106 -31
- package/themes/original/src/components/PageBanner/styles.tsx +4 -4
- package/themes/original/src/components/PaymentOptionCard/index.tsx +180 -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 +68 -9
- 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 +109 -33
- package/themes/original/src/components/ProductForm/styles.tsx +5 -7
- package/themes/original/src/components/ProductItemAccordion/index.tsx +22 -19
- package/themes/original/src/components/ProductOptionSubOption/index.tsx +24 -14
- package/themes/original/src/components/ProductOptionSubOption/styles.tsx +3 -4
- 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 +66 -17
- 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 +44 -29
- package/themes/original/src/components/SingleOrderCard/index.tsx +130 -52
- package/themes/original/src/components/SingleOrderCard/styles.tsx +11 -2
- package/themes/original/src/components/SingleProductCard/index.tsx +71 -34
- package/themes/original/src/components/SingleProductCard/styles.tsx +21 -4
- package/themes/original/src/components/SingleProductReview/styles.tsx +1 -1
- package/themes/original/src/components/StripeCardsList/index.tsx +13 -3
- package/themes/original/src/components/StripeElementsForm/index.tsx +48 -34
- 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 +76 -7
- package/themes/original/src/components/UserFormDetails/styles.tsx +1 -1
- package/themes/original/src/components/UserProfile/index.tsx +88 -79
- package/themes/original/src/components/UserProfileForm/index.tsx +27 -29
- 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 +67 -24
- package/themes/original/src/components/Wallets/styles.tsx +3 -4
- package/themes/original/src/components/shared/HeaderTitle.tsx +8 -3
- package/themes/original/src/components/shared/OButton.tsx +6 -2
- package/themes/original/src/components/shared/OInput.tsx +6 -1
- package/themes/original/src/components/shared/OModal.tsx +3 -3
- package/themes/original/src/layouts/Container.tsx +1 -1
- package/themes/original/src/types/index.tsx +41 -11
- package/themes/original/src/utils/index.tsx +273 -1
- 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,
|
|
2
|
+
import { StyleSheet, View, Keyboard, Modal } 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,
|
|
@@ -45,6 +46,7 @@ import { AppleLogin } from '../AppleLogin';
|
|
|
45
46
|
import { Otp } from './Otp'
|
|
46
47
|
import { TouchableOpacity } from 'react-native-gesture-handler';
|
|
47
48
|
import Alert from '../../../../../src/providers/AlertProvider'
|
|
49
|
+
import { vibrateApp } from '../../utils';
|
|
48
50
|
|
|
49
51
|
const LoginFormUI = (props: LoginParams) => {
|
|
50
52
|
const {
|
|
@@ -72,6 +74,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
72
74
|
generateOtpCode,
|
|
73
75
|
useLoginOtpEmail,
|
|
74
76
|
useLoginOtpCellphone,
|
|
77
|
+
isGuest
|
|
75
78
|
} = props;
|
|
76
79
|
|
|
77
80
|
const [, { showToast }] = useToast();
|
|
@@ -95,6 +98,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
95
98
|
const [recaptchaVerified, setRecaptchaVerified] = useState(false)
|
|
96
99
|
const [alertState, setAlertState] = useState({ open: false, title: '', content: [] })
|
|
97
100
|
const [tabLayouts, setTabLayouts] = useState<any>({})
|
|
101
|
+
const [otpError, setOtpError] = useState(null)
|
|
98
102
|
const tabsRef = useRef<any>(null)
|
|
99
103
|
const enabledPoweredByOrdering = configs?.powered_by_ordering_module?.value
|
|
100
104
|
const theme = useTheme();
|
|
@@ -160,12 +164,24 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
160
164
|
handleCategoryScroll(otpType ? `${val}_${otpType}` : val)
|
|
161
165
|
};
|
|
162
166
|
|
|
167
|
+
const vibrateApp = (impact?: string) => {
|
|
168
|
+
const options = {
|
|
169
|
+
enableVibrateFallback: true,
|
|
170
|
+
ignoreAndroidSystemSettings: false
|
|
171
|
+
};
|
|
172
|
+
ReactNativeHapticFeedback.trigger(impact || "impactLight", options);
|
|
173
|
+
}
|
|
174
|
+
|
|
163
175
|
const onSubmit = (values?: any) => {
|
|
164
176
|
Keyboard.dismiss();
|
|
165
177
|
if (loginTab === 'otp') {
|
|
166
178
|
if (phoneInputData.error && (loginTab !== 'otp' || (otpType === 'cellphone' && loginTab === 'otp'))) {
|
|
167
179
|
showToast(ToastType.Error, t('INVALID_PHONE_NUMBER', 'Invalid phone number'));
|
|
168
|
-
|
|
180
|
+
vibrateApp()
|
|
181
|
+
return
|
|
182
|
+
}
|
|
183
|
+
if (!values?.cellphone && otpType === 'cellphone') {
|
|
184
|
+
showToast(ToastType.Error, t('PHONE_NUMBER_REQUIRED', 'Phone number is required'));
|
|
169
185
|
return
|
|
170
186
|
}
|
|
171
187
|
if (loginTab === 'otp') {
|
|
@@ -178,7 +194,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
178
194
|
} else {
|
|
179
195
|
if (phoneInputData.error) {
|
|
180
196
|
showToast(ToastType.Error, phoneInputData.error);
|
|
181
|
-
|
|
197
|
+
vibrateApp()
|
|
182
198
|
return;
|
|
183
199
|
}
|
|
184
200
|
handleButtonLoginClick({
|
|
@@ -191,7 +207,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
191
207
|
const handleVerifyCodeClick = () => {
|
|
192
208
|
if (phoneInputData.error) {
|
|
193
209
|
showToast(ToastType.Error, phoneInputData.error);
|
|
194
|
-
|
|
210
|
+
vibrateApp()
|
|
195
211
|
return;
|
|
196
212
|
}
|
|
197
213
|
if (
|
|
@@ -206,7 +222,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
206
222
|
'The field Mobile phone is required.',
|
|
207
223
|
),
|
|
208
224
|
);
|
|
209
|
-
|
|
225
|
+
vibrateApp()
|
|
210
226
|
return;
|
|
211
227
|
}
|
|
212
228
|
handleSendVerifyCode && handleSendVerifyCode(phoneInputData.phone);
|
|
@@ -221,19 +237,19 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
221
237
|
};
|
|
222
238
|
|
|
223
239
|
const handleChangeInputEmail = (value: string, onChange: any) => {
|
|
224
|
-
onChange(value.toLowerCase().replace(/[&,()%";:ç?<>{}\\[\]\s]/g, ''));
|
|
240
|
+
onChange(value.toLowerCase().trim().replace(/[&,()%";:ç?<>{}\\[\]\s]/g, ''));
|
|
225
241
|
};
|
|
226
242
|
|
|
227
243
|
const handleOpenRecaptcha = () => {
|
|
228
244
|
setRecaptchaVerified(false)
|
|
229
245
|
if (!recaptchaConfig?.siteKey) {
|
|
230
246
|
showToast(ToastType.Error, t('NO_RECAPTCHA_SITE_KEY', 'The config doesn\'t have recaptcha site key'));
|
|
231
|
-
|
|
247
|
+
vibrateApp()
|
|
232
248
|
return
|
|
233
249
|
}
|
|
234
250
|
if (!recaptchaConfig?.baseUrl) {
|
|
235
251
|
showToast(ToastType.Error, t('NO_RECAPTCHA_BASE_URL', 'The config doesn\'t have recaptcha base url'));
|
|
236
|
-
|
|
252
|
+
vibrateApp()
|
|
237
253
|
return
|
|
238
254
|
}
|
|
239
255
|
|
|
@@ -250,9 +266,14 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
250
266
|
setOtpType(type)
|
|
251
267
|
}
|
|
252
268
|
|
|
253
|
-
const handleLoginOtp = (code: string) => {
|
|
254
|
-
|
|
255
|
-
|
|
269
|
+
const handleLoginOtp = async (code: string) => {
|
|
270
|
+
if (!code) return
|
|
271
|
+
const logged = await handleButtonLoginClick({ code })
|
|
272
|
+
if (logged) {
|
|
273
|
+
setWillVerifyOtpState(false)
|
|
274
|
+
} else {
|
|
275
|
+
setOtpError(t('OTP_CODE_INCORRECT', 'Otp code incorrect'))
|
|
276
|
+
}
|
|
256
277
|
}
|
|
257
278
|
|
|
258
279
|
const closeAlert = () => {
|
|
@@ -310,7 +331,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
310
331
|
baseUrl: configs?.security_recaptcha_base_url?.value || null
|
|
311
332
|
})
|
|
312
333
|
showToast(ToastType.Info, t('TRY_AGAIN', 'Please try again'))
|
|
313
|
-
|
|
334
|
+
vibrateApp()
|
|
314
335
|
return
|
|
315
336
|
}
|
|
316
337
|
formState.result?.result &&
|
|
@@ -320,7 +341,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
320
341
|
? formState.result?.result
|
|
321
342
|
: formState.result?.result[0],
|
|
322
343
|
);
|
|
323
|
-
formState.result?.result &&
|
|
344
|
+
formState.result?.result && vibrateApp()
|
|
324
345
|
}
|
|
325
346
|
}, [formState]);
|
|
326
347
|
|
|
@@ -332,7 +353,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
332
353
|
? verifyPhoneState?.result?.result
|
|
333
354
|
: verifyPhoneState?.result?.result[0];
|
|
334
355
|
verifyPhoneState.result?.result && showToast(ToastType.Error, message);
|
|
335
|
-
verifyPhoneState.result?.result &&
|
|
356
|
+
verifyPhoneState.result?.result && vibrateApp();
|
|
336
357
|
setIsLoadingVerifyModal(false);
|
|
337
358
|
return;
|
|
338
359
|
}
|
|
@@ -373,21 +394,24 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
373
394
|
}, [checkPhoneCodeState])
|
|
374
395
|
|
|
375
396
|
useEffect(() => {
|
|
376
|
-
if (!!Object.values(errors)?.length)
|
|
397
|
+
if (!!Object.values(errors)?.length) vibrateApp()
|
|
377
398
|
}, [errors])
|
|
378
399
|
|
|
379
400
|
return (
|
|
380
401
|
<Container>
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
402
|
+
{isGuest ? (
|
|
403
|
+
<OText style={{ textAlign: 'center', marginBottom: 10 }} size={18}>{t('LOGIN', 'Login')}</OText>
|
|
404
|
+
) : (
|
|
405
|
+
<NavBar
|
|
406
|
+
title={t('LOGIN', 'Login')}
|
|
407
|
+
titleAlign={'center'}
|
|
408
|
+
onActionLeft={() => navigation?.canGoBack() && navigation.goBack()}
|
|
409
|
+
showCall={false}
|
|
410
|
+
btnStyle={{ paddingLeft: 0 }}
|
|
411
|
+
titleWrapStyle={{ paddingHorizontal: 0 }}
|
|
412
|
+
titleStyle={{ marginRight: 0, marginLeft: 0 }}
|
|
413
|
+
/>
|
|
414
|
+
)}
|
|
391
415
|
<FormSide>
|
|
392
416
|
{(Number(useLoginByEmail) + Number(useLoginByCellphone) + Number(useLoginOtpEmail) + Number(useLoginOtpCellphone) > 1) && (
|
|
393
417
|
<LoginWith>
|
|
@@ -734,7 +758,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
734
758
|
{configs && Object.keys(configs).length > 0 ? (
|
|
735
759
|
(((configs?.facebook_login?.value === 'true' || configs?.facebook_login?.value === '1') && configs?.facebook_id?.value && facebookLoginEnabled) ||
|
|
736
760
|
((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)) &&
|
|
761
|
+
((configs?.apple_login_client_id?.value !== '' && configs?.apple_login_client_id?.value !== null) && appleLoginEnabled)) && !isGuest &&
|
|
738
762
|
(
|
|
739
763
|
<>
|
|
740
764
|
<View
|
|
@@ -762,7 +786,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
762
786
|
facebookLoginEnabled && (
|
|
763
787
|
<FacebookLogin
|
|
764
788
|
notificationState={notificationState}
|
|
765
|
-
handleErrors={(err: any) => { showToast(ToastType.Error, err),
|
|
789
|
+
handleErrors={(err: any) => { showToast(ToastType.Error, err), vibrateApp() }}
|
|
766
790
|
handleLoading={(val: boolean) => setIsFBLoading(val)}
|
|
767
791
|
handleSuccessFacebookLogin={handleSuccessFacebook}
|
|
768
792
|
/>
|
|
@@ -771,7 +795,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
771
795
|
<GoogleLogin
|
|
772
796
|
notificationState={notificationState}
|
|
773
797
|
webClientId={configs?.google_login_client_id?.value}
|
|
774
|
-
handleErrors={(err: any) => { showToast(ToastType.Error, err),
|
|
798
|
+
handleErrors={(err: any) => { showToast(ToastType.Error, err), vibrateApp() }}
|
|
775
799
|
handleLoading={(val: boolean) => setIsFBLoading(val)}
|
|
776
800
|
handleSuccessGoogleLogin={handleSuccessFacebook}
|
|
777
801
|
/>
|
|
@@ -779,7 +803,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
779
803
|
{(configs?.apple_login_client_id?.value !== '' && configs?.google_login_client_id?.value !== null) && appleLoginEnabled && (
|
|
780
804
|
<AppleLogin
|
|
781
805
|
notificationState={notificationState}
|
|
782
|
-
handleErrors={(err: any) => { showToast(ToastType.Error, err),
|
|
806
|
+
handleErrors={(err: any) => { showToast(ToastType.Error, err), vibrateApp() }}
|
|
783
807
|
handleLoading={(val: boolean) => setIsFBLoading(val)}
|
|
784
808
|
handleSuccessAppleLogin={handleSuccessFacebook}
|
|
785
809
|
/>
|
|
@@ -825,20 +849,21 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
825
849
|
onClose={() => setIsModalVisible(false)}
|
|
826
850
|
/>
|
|
827
851
|
</OModal>
|
|
828
|
-
<
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
title={t('ENTER_VERIFICATION_CODE', 'Enter verification code')}
|
|
852
|
+
<Modal
|
|
853
|
+
visible={willVerifyOtpState}
|
|
854
|
+
onDismiss={() => setWillVerifyOtpState(false)}
|
|
855
|
+
animationType='slide'
|
|
833
856
|
>
|
|
834
857
|
<Otp
|
|
835
858
|
willVerifyOtpState={willVerifyOtpState}
|
|
859
|
+
otpError={otpError}
|
|
860
|
+
setOtpError={setOtpError}
|
|
836
861
|
setWillVerifyOtpState={setWillVerifyOtpState}
|
|
837
862
|
handleLoginOtp={handleLoginOtp}
|
|
838
863
|
onSubmit={onSubmit}
|
|
839
864
|
setAlertState={setAlertState}
|
|
840
865
|
/>
|
|
841
|
-
</
|
|
866
|
+
</Modal>
|
|
842
867
|
<Alert
|
|
843
868
|
open={alertState.open}
|
|
844
869
|
content={alertState.content}
|
|
@@ -1,69 +1,103 @@
|
|
|
1
|
-
import React, { useRef } from 'react'
|
|
1
|
+
import React, { useRef, useState } from 'react'
|
|
2
2
|
import Lottie from 'lottie-react-native';
|
|
3
3
|
import { TouchableOpacity, Easing, ViewStyle, Animated } from 'react-native';
|
|
4
4
|
import IconAntDesign from 'react-native-vector-icons/AntDesign'
|
|
5
5
|
import { useTheme } from 'styled-components';
|
|
6
6
|
|
|
7
7
|
interface Props {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
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
19
|
}
|
|
20
20
|
|
|
21
21
|
export const LottieAnimation = (props: Props) => {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
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
|
+
|
|
36
|
+
const theme = useTheme()
|
|
37
|
+
const animationProgress = useRef(new Animated.Value(initialValue))
|
|
38
|
+
const favRef = useRef<Lottie>(null)
|
|
39
|
+
const [isHide, setIsHide] = useState(true)
|
|
40
|
+
|
|
41
|
+
const favoriteArray = ['heart', 'hearto']
|
|
42
|
+
const icon = type === 'favorite' ? favoriteArray : []
|
|
43
|
+
const animationGif = type === 'favorite' ? theme.images?.general?.heart : ''
|
|
44
|
+
|
|
45
|
+
const onPressLottie = () => {
|
|
46
|
+
if (!disableAnimation) {
|
|
47
|
+
if (type === 'favorite') {
|
|
48
|
+
favRef.current?.play()
|
|
49
|
+
} else {
|
|
50
|
+
setIsHide(false)
|
|
51
|
+
Animated.timing(animationProgress.current, {
|
|
52
|
+
toValue,
|
|
53
|
+
duration: duration || 5000,
|
|
54
|
+
easing: animationType || Easing.linear,
|
|
55
|
+
useNativeDriver: useNativeDriver ?? true
|
|
56
|
+
}).start();
|
|
57
|
+
hideLottie()
|
|
58
|
+
}
|
|
50
59
|
}
|
|
60
|
+
onClick()
|
|
61
|
+
}
|
|
51
62
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
63
|
+
const hideLottie = () => {
|
|
64
|
+
setTimeout(() => setIsHide(true), 4500)
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
return (
|
|
68
|
+
<TouchableOpacity
|
|
69
|
+
onPress={onPressLottie}
|
|
70
|
+
style={style}
|
|
71
|
+
>
|
|
72
|
+
{type === 'favorite' ? (
|
|
73
|
+
// <Lottie
|
|
74
|
+
// ref={favRef}
|
|
75
|
+
// progress={initialValue}
|
|
76
|
+
// style={{ width: 20, height: 20 }}
|
|
77
|
+
// source={animationGif}
|
|
78
|
+
// />
|
|
79
|
+
<IconAntDesign
|
|
80
|
+
name={isActive ? icon[0] : icon[1]}
|
|
81
|
+
color={iconProps?.color || theme.colors.danger5}
|
|
82
|
+
size={iconProps?.size || 16}
|
|
83
|
+
style={iconProps?.style}
|
|
84
|
+
/>
|
|
85
|
+
) : (
|
|
86
|
+
<>
|
|
87
|
+
{!isHide &&
|
|
57
88
|
<Lottie
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
/>
|
|
61
|
-
<IconAntDesign
|
|
62
|
-
name={isActive ? icon[0] : icon[1]}
|
|
63
|
-
color={iconProps?.color || theme.colors.danger5}
|
|
64
|
-
size={iconProps?.size || 16}
|
|
65
|
-
style={iconProps?.style}
|
|
89
|
+
progress={animationProgress.current}
|
|
90
|
+
source={animationGif}
|
|
66
91
|
/>
|
|
67
|
-
|
|
68
|
-
|
|
92
|
+
}
|
|
93
|
+
<IconAntDesign
|
|
94
|
+
name={isActive ? icon[0] : icon[1]}
|
|
95
|
+
color={iconProps?.color || theme.colors.danger5}
|
|
96
|
+
size={iconProps?.size || 16}
|
|
97
|
+
style={iconProps?.style}
|
|
98
|
+
/>
|
|
99
|
+
</>
|
|
100
|
+
)}
|
|
101
|
+
</TouchableOpacity>
|
|
102
|
+
)
|
|
69
103
|
}
|
|
@@ -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
|