ordering-ui-react-native 0.17.56 → 0.17.57-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 +64 -26
- 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 +194 -89
- 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 +43 -20
- 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 } from 'react-native';
|
|
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,11 +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'));
|
|
180
|
+
vibrateApp()
|
|
181
|
+
return
|
|
182
|
+
}
|
|
183
|
+
if (!values?.cellphone && otpType === 'cellphone') {
|
|
184
|
+
showToast(ToastType.Error, t('PHONE_NUMBER_REQUIRED', 'Phone number is required'));
|
|
168
185
|
return
|
|
169
186
|
}
|
|
170
187
|
if (loginTab === 'otp') {
|
|
@@ -177,6 +194,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
177
194
|
} else {
|
|
178
195
|
if (phoneInputData.error) {
|
|
179
196
|
showToast(ToastType.Error, phoneInputData.error);
|
|
197
|
+
vibrateApp()
|
|
180
198
|
return;
|
|
181
199
|
}
|
|
182
200
|
handleButtonLoginClick({
|
|
@@ -189,6 +207,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
189
207
|
const handleVerifyCodeClick = () => {
|
|
190
208
|
if (phoneInputData.error) {
|
|
191
209
|
showToast(ToastType.Error, phoneInputData.error);
|
|
210
|
+
vibrateApp()
|
|
192
211
|
return;
|
|
193
212
|
}
|
|
194
213
|
if (
|
|
@@ -203,6 +222,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
203
222
|
'The field Mobile phone is required.',
|
|
204
223
|
),
|
|
205
224
|
);
|
|
225
|
+
vibrateApp()
|
|
206
226
|
return;
|
|
207
227
|
}
|
|
208
228
|
handleSendVerifyCode && handleSendVerifyCode(phoneInputData.phone);
|
|
@@ -217,17 +237,19 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
217
237
|
};
|
|
218
238
|
|
|
219
239
|
const handleChangeInputEmail = (value: string, onChange: any) => {
|
|
220
|
-
onChange(value.toLowerCase().replace(/[&,()%";:ç?<>{}\\[\]\s]/g, ''));
|
|
240
|
+
onChange(value.toLowerCase().trim().replace(/[&,()%";:ç?<>{}\\[\]\s]/g, ''));
|
|
221
241
|
};
|
|
222
242
|
|
|
223
243
|
const handleOpenRecaptcha = () => {
|
|
224
244
|
setRecaptchaVerified(false)
|
|
225
245
|
if (!recaptchaConfig?.siteKey) {
|
|
226
246
|
showToast(ToastType.Error, t('NO_RECAPTCHA_SITE_KEY', 'The config doesn\'t have recaptcha site key'));
|
|
247
|
+
vibrateApp()
|
|
227
248
|
return
|
|
228
249
|
}
|
|
229
250
|
if (!recaptchaConfig?.baseUrl) {
|
|
230
251
|
showToast(ToastType.Error, t('NO_RECAPTCHA_BASE_URL', 'The config doesn\'t have recaptcha base url'));
|
|
252
|
+
vibrateApp()
|
|
231
253
|
return
|
|
232
254
|
}
|
|
233
255
|
|
|
@@ -244,9 +266,14 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
244
266
|
setOtpType(type)
|
|
245
267
|
}
|
|
246
268
|
|
|
247
|
-
const handleLoginOtp = (code: string) => {
|
|
248
|
-
|
|
249
|
-
|
|
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
|
+
}
|
|
250
277
|
}
|
|
251
278
|
|
|
252
279
|
const closeAlert = () => {
|
|
@@ -304,6 +331,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
304
331
|
baseUrl: configs?.security_recaptcha_base_url?.value || null
|
|
305
332
|
})
|
|
306
333
|
showToast(ToastType.Info, t('TRY_AGAIN', 'Please try again'))
|
|
334
|
+
vibrateApp()
|
|
307
335
|
return
|
|
308
336
|
}
|
|
309
337
|
formState.result?.result &&
|
|
@@ -313,6 +341,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
313
341
|
? formState.result?.result
|
|
314
342
|
: formState.result?.result[0],
|
|
315
343
|
);
|
|
344
|
+
formState.result?.result && vibrateApp()
|
|
316
345
|
}
|
|
317
346
|
}, [formState]);
|
|
318
347
|
|
|
@@ -324,6 +353,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
324
353
|
? verifyPhoneState?.result?.result
|
|
325
354
|
: verifyPhoneState?.result?.result[0];
|
|
326
355
|
verifyPhoneState.result?.result && showToast(ToastType.Error, message);
|
|
356
|
+
verifyPhoneState.result?.result && vibrateApp();
|
|
327
357
|
setIsLoadingVerifyModal(false);
|
|
328
358
|
return;
|
|
329
359
|
}
|
|
@@ -363,18 +393,25 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
363
393
|
}
|
|
364
394
|
}, [checkPhoneCodeState])
|
|
365
395
|
|
|
396
|
+
useEffect(() => {
|
|
397
|
+
if (!!Object.values(errors)?.length) vibrateApp()
|
|
398
|
+
}, [errors])
|
|
399
|
+
|
|
366
400
|
return (
|
|
367
401
|
<Container>
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
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
|
+
)}
|
|
378
415
|
<FormSide>
|
|
379
416
|
{(Number(useLoginByEmail) + Number(useLoginByCellphone) + Number(useLoginOtpEmail) + Number(useLoginOtpCellphone) > 1) && (
|
|
380
417
|
<LoginWith>
|
|
@@ -720,8 +757,8 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
720
757
|
|
|
721
758
|
{configs && Object.keys(configs).length > 0 ? (
|
|
722
759
|
(((configs?.facebook_login?.value === 'true' || configs?.facebook_login?.value === '1') && configs?.facebook_id?.value && facebookLoginEnabled) ||
|
|
723
|
-
|
|
724
|
-
|
|
760
|
+
((configs?.google_login_client_id?.value !== '' && configs?.google_login_client_id?.value !== null) && googleLoginEnabled) ||
|
|
761
|
+
((configs?.apple_login_client_id?.value !== '' && configs?.apple_login_client_id?.value !== null) && appleLoginEnabled)) && !isGuest &&
|
|
725
762
|
(
|
|
726
763
|
<>
|
|
727
764
|
<View
|
|
@@ -749,7 +786,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
749
786
|
facebookLoginEnabled && (
|
|
750
787
|
<FacebookLogin
|
|
751
788
|
notificationState={notificationState}
|
|
752
|
-
handleErrors={(err: any) => showToast(ToastType.Error, err)}
|
|
789
|
+
handleErrors={(err: any) => { showToast(ToastType.Error, err), vibrateApp() }}
|
|
753
790
|
handleLoading={(val: boolean) => setIsFBLoading(val)}
|
|
754
791
|
handleSuccessFacebookLogin={handleSuccessFacebook}
|
|
755
792
|
/>
|
|
@@ -758,7 +795,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
758
795
|
<GoogleLogin
|
|
759
796
|
notificationState={notificationState}
|
|
760
797
|
webClientId={configs?.google_login_client_id?.value}
|
|
761
|
-
handleErrors={(err: any) => showToast(ToastType.Error, err)}
|
|
798
|
+
handleErrors={(err: any) => { showToast(ToastType.Error, err), vibrateApp() }}
|
|
762
799
|
handleLoading={(val: boolean) => setIsFBLoading(val)}
|
|
763
800
|
handleSuccessGoogleLogin={handleSuccessFacebook}
|
|
764
801
|
/>
|
|
@@ -766,7 +803,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
766
803
|
{(configs?.apple_login_client_id?.value !== '' && configs?.google_login_client_id?.value !== null) && appleLoginEnabled && (
|
|
767
804
|
<AppleLogin
|
|
768
805
|
notificationState={notificationState}
|
|
769
|
-
handleErrors={(err: any) => showToast(ToastType.Error, err)}
|
|
806
|
+
handleErrors={(err: any) => { showToast(ToastType.Error, err), vibrateApp() }}
|
|
770
807
|
handleLoading={(val: boolean) => setIsFBLoading(val)}
|
|
771
808
|
handleSuccessAppleLogin={handleSuccessFacebook}
|
|
772
809
|
/>
|
|
@@ -812,20 +849,21 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
812
849
|
onClose={() => setIsModalVisible(false)}
|
|
813
850
|
/>
|
|
814
851
|
</OModal>
|
|
815
|
-
<
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
title={t('ENTER_VERIFICATION_CODE', 'Enter verification code')}
|
|
852
|
+
<Modal
|
|
853
|
+
visible={willVerifyOtpState}
|
|
854
|
+
onDismiss={() => setWillVerifyOtpState(false)}
|
|
855
|
+
animationType='slide'
|
|
820
856
|
>
|
|
821
857
|
<Otp
|
|
822
858
|
willVerifyOtpState={willVerifyOtpState}
|
|
859
|
+
otpError={otpError}
|
|
860
|
+
setOtpError={setOtpError}
|
|
823
861
|
setWillVerifyOtpState={setWillVerifyOtpState}
|
|
824
862
|
handleLoginOtp={handleLoginOtp}
|
|
825
863
|
onSubmit={onSubmit}
|
|
826
864
|
setAlertState={setAlertState}
|
|
827
865
|
/>
|
|
828
|
-
</
|
|
866
|
+
</Modal>
|
|
829
867
|
<Alert
|
|
830
868
|
open={alertState.open}
|
|
831
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
|