ordering-ui-react-native 0.16.76 → 0.16.77-release
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +6 -5
- package/src/DeliveryApp.tsx +43 -1
- package/src/components/ActiveOrders/styles.tsx +8 -14
- package/src/components/BusinessInformation/index.tsx +19 -4
- package/src/components/BusinessInformation/styles.tsx +2 -2
- package/src/components/BusinessProductsList/index.tsx +10 -10
- package/src/components/BusinessesListing/index.tsx +1 -1
- package/src/components/LanguageSelector/index.tsx +21 -16
- package/src/components/Messages/index.tsx +2 -2
- package/src/components/OrderCreating/index.tsx +2 -2
- package/src/components/OrdersOption/index.tsx +54 -56
- package/src/components/PaymentOptionsWebView/index.tsx +119 -120
- package/src/components/SingleProductReview/index.tsx +7 -4
- package/src/components/VerifyPhone/styles.tsx +1 -2
- package/src/components/shared/OToast.tsx +4 -4
- package/src/types/@fatnlazycat/react-native-recaptcha-v3/index.d.ts +1 -0
- package/src/utils/index.tsx +2 -1
- package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +260 -238
- package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +6 -4
- package/themes/business/src/components/BusinessController/index.tsx +2 -2
- package/themes/business/src/components/Chat/index.tsx +31 -31
- package/themes/business/src/components/DriverMap/index.tsx +7 -5
- package/themes/business/src/components/LoginForm/Otp/index.tsx +120 -0
- package/themes/business/src/components/LoginForm/Otp/styles.tsx +7 -0
- package/themes/business/src/components/LoginForm/index.tsx +332 -140
- package/themes/business/src/components/LoginForm/styles.tsx +10 -0
- package/themes/business/src/components/MapView/index.tsx +14 -3
- package/themes/business/src/components/MessagesOption/index.tsx +11 -1
- package/themes/business/src/components/NewOrderNotification/index.tsx +31 -41
- package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +70 -43
- package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +3 -3
- package/themes/business/src/components/OrdersOption/index.tsx +63 -73
- package/themes/business/src/components/OrdersOption/styles.tsx +5 -1
- package/themes/business/src/components/OrdersOptionBusiness/index.tsx +15 -1
- package/themes/business/src/components/OrdersOptionCity/index.tsx +15 -1
- package/themes/business/src/components/OrdersOptionDate/index.tsx +19 -6
- package/themes/business/src/components/OrdersOptionDelivery/index.tsx +15 -1
- package/themes/business/src/components/OrdersOptionDriver/index.tsx +15 -1
- package/themes/business/src/components/OrdersOptionPaymethod/index.tsx +15 -1
- package/themes/business/src/components/OrdersOptionStatus/index.tsx +10 -1
- package/themes/business/src/components/PreviousMessages/index.tsx +17 -18
- package/themes/business/src/components/PreviousOrders/OrderItem.tsx +250 -0
- package/themes/business/src/components/PreviousOrders/OrdersGroupedItem.tsx +115 -0
- package/themes/business/src/components/PreviousOrders/index.tsx +440 -245
- package/themes/business/src/components/PreviousOrders/styles.tsx +31 -3
- package/themes/business/src/components/ProductItemAccordion/index.tsx +24 -5
- package/themes/business/src/components/ReviewCustomer/index.tsx +39 -15
- package/themes/business/src/components/shared/ODropDown.tsx +42 -8
- package/themes/business/src/components/shared/ODropDownCalendar.tsx +36 -7
- package/themes/business/src/components/shared/OLink.tsx +33 -13
- package/themes/business/src/components/shared/OText.tsx +8 -2
- package/themes/business/src/types/index.tsx +29 -3
- package/themes/business/src/utils/index.tsx +26 -0
- package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
- package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
- package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
- package/themes/kiosk/src/components/BusinessesListing/index.tsx +2 -1
- package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
- package/themes/kiosk/src/components/LoginForm/Otp/index.tsx +92 -0
- package/themes/kiosk/src/components/LoginForm/Otp/styles.tsx +7 -0
- package/themes/kiosk/src/components/LoginForm/index.tsx +545 -112
- package/themes/kiosk/src/components/LoginForm/styles.tsx +18 -0
- package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
- package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
- package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
- package/themes/kiosk/src/components/PhoneInputNumber/index.tsx +1 -0
- 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 +15 -0
- package/themes/kiosk/src/utils/index.tsx +15 -0
- package/themes/original/index.tsx +8 -0
- package/themes/original/src/components/AddressDetails/index.tsx +10 -8
- package/themes/original/src/components/AddressForm/index.tsx +155 -139
- package/themes/original/src/components/AddressList/index.tsx +18 -18
- package/themes/original/src/components/AddressList/styles.tsx +4 -2
- package/themes/original/src/components/AppleLogin/index.tsx +4 -4
- package/themes/original/src/components/BusinessBasicInformation/index.tsx +47 -22
- package/themes/original/src/components/BusinessController/index.tsx +101 -70
- package/themes/original/src/components/BusinessController/styles.tsx +14 -9
- package/themes/original/src/components/BusinessInformation/index.tsx +10 -31
- package/themes/original/src/components/BusinessItemAccordion/index.tsx +12 -6
- package/themes/original/src/components/BusinessListingSearch/BusinessControllerSkeletons/index.tsx +57 -0
- package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/index.tsx +59 -0
- package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/styles.tsx +13 -0
- package/themes/original/src/components/BusinessListingSearch/index.tsx +104 -155
- package/themes/original/src/components/BusinessListingSearch/styles.tsx +10 -12
- package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/index.tsx +87 -0
- package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/styles.tsx +12 -0
- package/themes/original/src/components/BusinessProductsList/index.tsx +26 -52
- package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
- package/themes/original/src/components/BusinessProductsListing/index.tsx +563 -493
- package/themes/original/src/components/BusinessProductsListing/styles.tsx +13 -12
- package/themes/original/src/components/BusinessTypeFilter/index.tsx +3 -2
- package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +2 -1
- package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +116 -81
- package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -9
- package/themes/original/src/components/BusinessesListing/index.tsx +7 -6
- package/themes/original/src/components/Cart/index.tsx +75 -40
- package/themes/original/src/components/CartContent/index.tsx +80 -18
- package/themes/original/src/components/CartContent/styles.tsx +11 -1
- package/themes/original/src/components/Checkout/index.tsx +102 -108
- package/themes/original/src/components/Checkout/styles.tsx +4 -3
- package/themes/original/src/components/CitiesControl/index.tsx +89 -0
- package/themes/original/src/components/CitiesControl/styles.tsx +17 -0
- package/themes/original/src/components/DriverTips/index.tsx +47 -37
- package/themes/original/src/components/DriverTips/styles.tsx +2 -1
- package/themes/original/src/components/Favorite/index.tsx +7 -4
- package/themes/original/src/components/Favorite/styles.tsx +1 -1
- package/themes/original/src/components/FavoriteList/index.tsx +70 -80
- package/themes/original/src/components/FloatingButton/index.tsx +1 -2
- package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
- package/themes/original/src/components/GPSButton/index.tsx +20 -19
- package/themes/original/src/components/GPSButton/styles.ts +3 -3
- package/themes/original/src/components/GoogleMap/index.tsx +10 -1
- package/themes/original/src/components/Help/index.tsx +8 -8
- package/themes/original/src/components/HelpAccountAndPayment/index.tsx +14 -20
- package/themes/original/src/components/HelpAccountAndPayment/styles.tsx +6 -0
- package/themes/original/src/components/HelpGuide/index.tsx +13 -12
- package/themes/original/src/components/HelpGuide/styles.tsx +6 -0
- package/themes/original/src/components/HelpOrder/index.tsx +12 -20
- package/themes/original/src/components/HelpOrder/styles.tsx +8 -1
- package/themes/original/src/components/LanguageSelector/index.tsx +19 -14
- package/themes/original/src/components/LastOrder/index.tsx +1 -34
- package/themes/original/src/components/LoginForm/Otp/index.tsx +89 -73
- package/themes/original/src/components/LoginForm/Otp/styles.tsx +0 -1
- package/themes/original/src/components/LoginForm/index.tsx +98 -41
- package/themes/original/src/components/LottieAnimation/index.tsx +78 -0
- package/themes/original/src/components/MessageListing/index.tsx +7 -40
- package/themes/original/src/components/Messages/index.tsx +42 -26
- package/themes/original/src/components/MomentOption/index.tsx +23 -14
- package/themes/original/src/components/MultiCart/index.tsx +50 -0
- package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +92 -93
- package/themes/original/src/components/MultiCheckout/index.tsx +158 -77
- package/themes/original/src/components/MultiOrdersDetails/SingleOrderCard.tsx +37 -224
- package/themes/original/src/components/MultiOrdersDetails/index.tsx +85 -34
- package/themes/original/src/components/MultiOrdersDetails/styles.tsx +1 -1
- package/themes/original/src/components/MyOrders/index.tsx +66 -17
- package/themes/original/src/components/NavBar/index.tsx +7 -6
- package/themes/original/src/components/NetworkError/index.tsx +5 -3
- package/themes/original/src/components/NotFoundSource/index.tsx +2 -1
- package/themes/original/src/components/Notifications/index.tsx +144 -0
- package/themes/original/src/components/Notifications/styles.tsx +20 -0
- package/themes/original/src/components/OrderDetails/index.tsx +108 -218
- package/themes/original/src/components/OrderDetails/styles.tsx +10 -1
- package/themes/original/src/components/OrderItAgain/index.tsx +46 -43
- package/themes/original/src/components/OrderProgress/index.tsx +81 -105
- package/themes/original/src/components/OrderProgress/styles.tsx +5 -0
- package/themes/original/src/components/OrderSummary/index.tsx +2 -2
- package/themes/original/src/components/OrderTypeSelector/index.tsx +13 -6
- package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +93 -97
- package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +3 -0
- package/themes/original/src/components/OrdersOption/index.tsx +86 -92
- package/themes/original/src/components/PageBanner/index.tsx +146 -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 +1 -1
- package/themes/original/src/components/PhoneInputNumber/index.tsx +1 -1
- package/themes/original/src/components/PlaceSpot/index.tsx +16 -6
- package/themes/original/src/components/PreviousOrders/index.tsx +3 -2
- package/themes/original/src/components/ProductForm/index.tsx +240 -254
- package/themes/original/src/components/ProductForm/styles.tsx +5 -8
- package/themes/original/src/components/ProductItemAccordion/index.tsx +199 -128
- package/themes/original/src/components/ProductOptionSubOption/index.tsx +18 -10
- package/themes/original/src/components/ProductOptionSubOption/styles.tsx +1 -2
- package/themes/original/src/components/ProfessionalFilter/SingleProfessionalCard/index.tsx +108 -0
- package/themes/original/src/components/ProfessionalFilter/index.tsx +20 -49
- package/themes/original/src/components/ProfessionalProfile/index.tsx +20 -9
- package/themes/original/src/components/Promotions/index.tsx +234 -220
- package/themes/original/src/components/Promotions/styles.tsx +7 -2
- package/themes/original/src/components/ReviewDriver/index.tsx +3 -3
- package/themes/original/src/components/ReviewOrder/index.tsx +43 -11
- package/themes/original/src/components/ReviewOrder/styles.tsx +7 -0
- package/themes/original/src/components/ReviewProducts/index.tsx +8 -5
- package/themes/original/src/components/ReviewTrigger/index.tsx +27 -9
- package/themes/original/src/components/ReviewTrigger/styles.tsx +8 -1
- package/themes/original/src/components/ScheduleAccordion/index.tsx +68 -0
- package/themes/original/src/components/ScheduleAccordion/styles.tsx +14 -0
- package/themes/original/src/components/ServiceForm/index.tsx +360 -265
- 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 +150 -100
- package/themes/original/src/components/SingleOrderCard/index.tsx +125 -56
- package/themes/original/src/components/SingleOrderCard/styles.tsx +10 -8
- package/themes/original/src/components/SingleProductCard/index.tsx +116 -79
- package/themes/original/src/components/SingleProductCard/styles.tsx +14 -13
- package/themes/original/src/components/SingleProductReview/index.tsx +38 -5
- package/themes/original/src/components/SingleProductReview/styles.tsx +12 -0
- package/themes/original/src/components/StripeCardsList/index.tsx +1 -1
- package/themes/original/src/components/StripeElementsForm/index.tsx +4 -1
- package/themes/original/src/components/UpsellingProducts/index.tsx +244 -215
- package/themes/original/src/components/UpsellingProducts/styles.tsx +12 -1
- package/themes/original/src/components/UserDetails/index.tsx +5 -3
- package/themes/original/src/components/UserFormDetails/index.tsx +50 -54
- package/themes/original/src/components/UserProfile/index.tsx +58 -35
- package/themes/original/src/components/UserProfile/styles.ts +17 -0
- package/themes/original/src/components/UserProfileForm/index.tsx +21 -28
- package/themes/original/src/components/UserProfileForm/styles.tsx +7 -0
- package/themes/original/src/components/WalletTransactions/index.tsx +76 -0
- package/themes/original/src/components/WalletTransactions/styles.tsx +13 -0
- package/themes/original/src/components/Wallets/index.tsx +177 -164
- package/themes/original/src/components/Wallets/styles.tsx +12 -8
- package/themes/original/src/components/shared/CardAnimation.tsx +47 -0
- package/themes/original/src/components/shared/HeaderTitle.tsx +8 -3
- package/themes/original/src/components/shared/OBottomPopup.tsx +6 -4
- package/themes/original/src/components/shared/OButton.tsx +9 -4
- package/themes/original/src/components/shared/OIcon.tsx +8 -1
- package/themes/original/src/components/shared/OInput.tsx +10 -1
- package/themes/original/src/layouts/Container.tsx +13 -9
- package/themes/original/src/types/index.tsx +42 -7
- package/themes/original/src/utils/index.tsx +322 -58
- package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import React, { useEffect, useState, useRef } from 'react';
|
|
2
|
-
import { StyleSheet, View, Keyboard } from 'react-native';
|
|
2
|
+
import { StyleSheet, View, Keyboard, Vibration } from 'react-native';
|
|
3
3
|
import Spinner from 'react-native-loading-spinner-overlay';
|
|
4
4
|
import { useForm, Controller } from 'react-hook-form';
|
|
5
5
|
import { PhoneInputNumber } from '../PhoneInputNumber';
|
|
6
6
|
import MaterialCommunityIcons from 'react-native-vector-icons/MaterialCommunityIcons';
|
|
7
7
|
import Recaptcha from 'react-native-recaptcha-that-works'
|
|
8
|
+
import ReCaptcha from '@fatnlazycat/react-native-recaptcha-v3'
|
|
8
9
|
|
|
9
10
|
import {
|
|
10
11
|
LoginForm as LoginFormController,
|
|
@@ -95,7 +96,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
95
96
|
const [alertState, setAlertState] = useState({ open: false, title: '', content: [] })
|
|
96
97
|
const [tabLayouts, setTabLayouts] = useState<any>({})
|
|
97
98
|
const tabsRef = useRef<any>(null)
|
|
98
|
-
|
|
99
|
+
const enabledPoweredByOrdering = configs?.powered_by_ordering_module?.value
|
|
99
100
|
const theme = useTheme();
|
|
100
101
|
const isOtpEmail = loginTab === 'otp' && otpType === 'email'
|
|
101
102
|
const isOtpCellphone = loginTab === 'otp' && otpType === 'cellphone'
|
|
@@ -164,6 +165,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
164
165
|
if (loginTab === 'otp') {
|
|
165
166
|
if (phoneInputData.error && (loginTab !== 'otp' || (otpType === 'cellphone' && loginTab === 'otp'))) {
|
|
166
167
|
showToast(ToastType.Error, t('INVALID_PHONE_NUMBER', 'Invalid phone number'));
|
|
168
|
+
Vibration.vibrate()
|
|
167
169
|
return
|
|
168
170
|
}
|
|
169
171
|
if (loginTab === 'otp') {
|
|
@@ -176,6 +178,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
176
178
|
} else {
|
|
177
179
|
if (phoneInputData.error) {
|
|
178
180
|
showToast(ToastType.Error, phoneInputData.error);
|
|
181
|
+
Vibration.vibrate()
|
|
179
182
|
return;
|
|
180
183
|
}
|
|
181
184
|
handleButtonLoginClick({
|
|
@@ -188,6 +191,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
188
191
|
const handleVerifyCodeClick = () => {
|
|
189
192
|
if (phoneInputData.error) {
|
|
190
193
|
showToast(ToastType.Error, phoneInputData.error);
|
|
194
|
+
Vibration.vibrate()
|
|
191
195
|
return;
|
|
192
196
|
}
|
|
193
197
|
if (
|
|
@@ -202,6 +206,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
202
206
|
'The field Mobile phone is required.',
|
|
203
207
|
),
|
|
204
208
|
);
|
|
209
|
+
Vibration.vibrate()
|
|
205
210
|
return;
|
|
206
211
|
}
|
|
207
212
|
handleSendVerifyCode && handleSendVerifyCode(phoneInputData.phone);
|
|
@@ -223,10 +228,12 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
223
228
|
setRecaptchaVerified(false)
|
|
224
229
|
if (!recaptchaConfig?.siteKey) {
|
|
225
230
|
showToast(ToastType.Error, t('NO_RECAPTCHA_SITE_KEY', 'The config doesn\'t have recaptcha site key'));
|
|
231
|
+
Vibration.vibrate()
|
|
226
232
|
return
|
|
227
233
|
}
|
|
228
234
|
if (!recaptchaConfig?.baseUrl) {
|
|
229
235
|
showToast(ToastType.Error, t('NO_RECAPTCHA_BASE_URL', 'The config doesn\'t have recaptcha base url'));
|
|
236
|
+
Vibration.vibrate()
|
|
230
237
|
return
|
|
231
238
|
}
|
|
232
239
|
|
|
@@ -235,7 +242,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
235
242
|
|
|
236
243
|
const onRecaptchaVerify = (token: any) => {
|
|
237
244
|
setRecaptchaVerified(true)
|
|
238
|
-
handleReCaptcha(token)
|
|
245
|
+
handleReCaptcha({ code: token, version: recaptchaConfig?.version })
|
|
239
246
|
}
|
|
240
247
|
|
|
241
248
|
const handleChangeOtpType = (type: string) => {
|
|
@@ -272,15 +279,40 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
272
279
|
|
|
273
280
|
useEffect(() => {
|
|
274
281
|
if (configs && Object.keys(configs).length > 0 && enableReCaptcha) {
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
282
|
+
if (configs?.security_recaptcha_type?.value === 'v3' &&
|
|
283
|
+
configs?.security_recaptcha_score_v3?.value > 0 &&
|
|
284
|
+
configs?.security_recaptcha_site_key_v3?.value
|
|
285
|
+
) {
|
|
286
|
+
setRecaptchaConfig({
|
|
287
|
+
version: 'v3',
|
|
288
|
+
siteKey: configs?.security_recaptcha_site_key_v3?.value || null,
|
|
289
|
+
baseUrl: configs?.security_recaptcha_base_url?.value || null
|
|
290
|
+
})
|
|
291
|
+
return
|
|
292
|
+
}
|
|
293
|
+
if (configs?.security_recaptcha_site_key?.value) {
|
|
294
|
+
setRecaptchaConfig({
|
|
295
|
+
version: 'v2',
|
|
296
|
+
siteKey: configs?.security_recaptcha_site_key?.value || null,
|
|
297
|
+
baseUrl: configs?.security_recaptcha_base_url?.value || null
|
|
298
|
+
})
|
|
299
|
+
}
|
|
279
300
|
}
|
|
280
301
|
}, [configs, enableReCaptcha])
|
|
281
302
|
|
|
282
303
|
useEffect(() => {
|
|
283
304
|
if (!formState.loading && formState.result?.error) {
|
|
305
|
+
if (formState.result?.result?.[0] === 'ERROR_AUTH_VERIFICATION_CODE') {
|
|
306
|
+
setRecaptchaVerified(false)
|
|
307
|
+
setRecaptchaConfig({
|
|
308
|
+
version: 'v2',
|
|
309
|
+
siteKey: configs?.security_recaptcha_site_key?.value || null,
|
|
310
|
+
baseUrl: configs?.security_recaptcha_base_url?.value || null
|
|
311
|
+
})
|
|
312
|
+
showToast(ToastType.Info, t('TRY_AGAIN', 'Please try again'))
|
|
313
|
+
Vibration.vibrate()
|
|
314
|
+
return
|
|
315
|
+
}
|
|
284
316
|
formState.result?.result &&
|
|
285
317
|
showToast(
|
|
286
318
|
ToastType.Error,
|
|
@@ -288,6 +320,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
288
320
|
? formState.result?.result
|
|
289
321
|
: formState.result?.result[0],
|
|
290
322
|
);
|
|
323
|
+
formState.result?.result && Vibration.vibrate()
|
|
291
324
|
}
|
|
292
325
|
}, [formState]);
|
|
293
326
|
|
|
@@ -299,6 +332,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
299
332
|
? verifyPhoneState?.result?.result
|
|
300
333
|
: verifyPhoneState?.result?.result[0];
|
|
301
334
|
verifyPhoneState.result?.result && showToast(ToastType.Error, message);
|
|
335
|
+
verifyPhoneState.result?.result && Vibration.vibrate();
|
|
302
336
|
setIsLoadingVerifyModal(false);
|
|
303
337
|
return;
|
|
304
338
|
}
|
|
@@ -338,6 +372,10 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
338
372
|
}
|
|
339
373
|
}, [checkPhoneCodeState])
|
|
340
374
|
|
|
375
|
+
useEffect(() => {
|
|
376
|
+
if (!!Object.values(errors)?.length) Vibration.vibrate()
|
|
377
|
+
}, [errors])
|
|
378
|
+
|
|
341
379
|
return (
|
|
342
380
|
<Container>
|
|
343
381
|
<NavBar
|
|
@@ -596,35 +634,47 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
596
634
|
</TouchableOpacity>
|
|
597
635
|
)}
|
|
598
636
|
|
|
599
|
-
{enableReCaptcha && (
|
|
637
|
+
{(enableReCaptcha && recaptchaConfig?.version) && (
|
|
600
638
|
<>
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
{
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
639
|
+
{recaptchaConfig?.version === 'v3' ? (
|
|
640
|
+
<ReCaptcha
|
|
641
|
+
url={recaptchaConfig?.baseUrl}
|
|
642
|
+
siteKey={recaptchaConfig?.siteKey}
|
|
643
|
+
containerStyle={{ height: 40 }}
|
|
644
|
+
onExecute={onRecaptchaVerify}
|
|
645
|
+
reCaptchaType={1}
|
|
646
|
+
/>
|
|
647
|
+
) : (
|
|
648
|
+
<>
|
|
649
|
+
<TouchableOpacity
|
|
650
|
+
onPress={handleOpenRecaptcha}
|
|
651
|
+
>
|
|
652
|
+
<RecaptchaButton>
|
|
653
|
+
{recaptchaVerified ? (
|
|
654
|
+
<MaterialCommunityIcons
|
|
655
|
+
name="checkbox-marked"
|
|
656
|
+
size={26}
|
|
657
|
+
color={theme.colors.primary}
|
|
658
|
+
/>
|
|
659
|
+
) : (
|
|
660
|
+
<MaterialCommunityIcons
|
|
661
|
+
name="checkbox-blank-outline"
|
|
662
|
+
size={26}
|
|
663
|
+
color={theme.colors.mediumGray}
|
|
664
|
+
/>
|
|
665
|
+
)}
|
|
666
|
+
<OText size={14} mLeft={8}>{t('VERIFY_ReCAPTCHA', 'Verify reCAPTCHA')}</OText>
|
|
667
|
+
</RecaptchaButton>
|
|
668
|
+
</TouchableOpacity>
|
|
669
|
+
<Recaptcha
|
|
670
|
+
ref={recaptchaRef}
|
|
671
|
+
siteKey={recaptchaConfig?.siteKey}
|
|
672
|
+
baseUrl={recaptchaConfig?.baseUrl}
|
|
673
|
+
onVerify={onRecaptchaVerify}
|
|
674
|
+
onExpire={() => setRecaptchaVerified(false)}
|
|
675
|
+
/>
|
|
676
|
+
</>)
|
|
677
|
+
}
|
|
628
678
|
</>
|
|
629
679
|
)}
|
|
630
680
|
<OButton
|
|
@@ -643,7 +693,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
643
693
|
{t('NEW_ON_PLATFORM', 'New on Ordering?')}
|
|
644
694
|
</OText>
|
|
645
695
|
<TouchableOpacity onPress={() => onNavigationRedirect('Signup')}>
|
|
646
|
-
<OText size={14} mLeft={5} color={theme.colors.
|
|
696
|
+
<OText size={14} mLeft={5} color={theme.colors.primary}>
|
|
647
697
|
{t('CREATE_ACCOUNT', 'Create account')}
|
|
648
698
|
</OText>
|
|
649
699
|
</TouchableOpacity>
|
|
@@ -682,8 +732,9 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
682
732
|
)}
|
|
683
733
|
|
|
684
734
|
{configs && Object.keys(configs).length > 0 ? (
|
|
685
|
-
(((configs?.facebook_login?.value === 'true' || configs?.facebook_login?.value === '1') && configs?.facebook_id?.value) ||
|
|
686
|
-
(configs?.google_login_client_id?.value !== '' && configs?.google_login_client_id?.value !== null))
|
|
735
|
+
(((configs?.facebook_login?.value === 'true' || configs?.facebook_login?.value === '1') && configs?.facebook_id?.value && facebookLoginEnabled) ||
|
|
736
|
+
((configs?.google_login_client_id?.value !== '' && configs?.google_login_client_id?.value !== null) && googleLoginEnabled) ||
|
|
737
|
+
((configs?.apple_login_client_id?.value !== '' && configs?.apple_login_client_id?.value !== null) && appleLoginEnabled)) &&
|
|
687
738
|
(
|
|
688
739
|
<>
|
|
689
740
|
<View
|
|
@@ -711,7 +762,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
711
762
|
facebookLoginEnabled && (
|
|
712
763
|
<FacebookLogin
|
|
713
764
|
notificationState={notificationState}
|
|
714
|
-
handleErrors={(err: any) => showToast(ToastType.Error, err)}
|
|
765
|
+
handleErrors={(err: any) => { showToast(ToastType.Error, err), Vibration.vibrate() }}
|
|
715
766
|
handleLoading={(val: boolean) => setIsFBLoading(val)}
|
|
716
767
|
handleSuccessFacebookLogin={handleSuccessFacebook}
|
|
717
768
|
/>
|
|
@@ -720,7 +771,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
720
771
|
<GoogleLogin
|
|
721
772
|
notificationState={notificationState}
|
|
722
773
|
webClientId={configs?.google_login_client_id?.value}
|
|
723
|
-
handleErrors={(err: any) => showToast(ToastType.Error, err)}
|
|
774
|
+
handleErrors={(err: any) => { showToast(ToastType.Error, err), Vibration.vibrate() }}
|
|
724
775
|
handleLoading={(val: boolean) => setIsFBLoading(val)}
|
|
725
776
|
handleSuccessGoogleLogin={handleSuccessFacebook}
|
|
726
777
|
/>
|
|
@@ -728,7 +779,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
728
779
|
{(configs?.apple_login_client_id?.value !== '' && configs?.google_login_client_id?.value !== null) && appleLoginEnabled && (
|
|
729
780
|
<AppleLogin
|
|
730
781
|
notificationState={notificationState}
|
|
731
|
-
handleErrors={(err: any) => showToast(ToastType.Error, err)}
|
|
782
|
+
handleErrors={(err: any) => { showToast(ToastType.Error, err), Vibration.vibrate() }}
|
|
732
783
|
handleLoading={(val: boolean) => setIsFBLoading(val)}
|
|
733
784
|
handleSuccessAppleLogin={handleSuccessFacebook}
|
|
734
785
|
/>
|
|
@@ -751,6 +802,12 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
751
802
|
</Placeholder>
|
|
752
803
|
</SkeletonWrapper>
|
|
753
804
|
)}
|
|
805
|
+
|
|
806
|
+
{enabledPoweredByOrdering && (
|
|
807
|
+
<OText>
|
|
808
|
+
Powered By Ordering.co
|
|
809
|
+
</OText>
|
|
810
|
+
)}
|
|
754
811
|
</FormSide>
|
|
755
812
|
<OModal
|
|
756
813
|
open={isModalVisible}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import React, { useRef, useState } from 'react'
|
|
2
|
+
import Lottie from 'lottie-react-native';
|
|
3
|
+
import { TouchableOpacity, Easing, ViewStyle, Animated } from 'react-native';
|
|
4
|
+
import IconAntDesign from 'react-native-vector-icons/AntDesign'
|
|
5
|
+
import { useTheme } from 'styled-components';
|
|
6
|
+
|
|
7
|
+
interface Props {
|
|
8
|
+
initialValue: number,
|
|
9
|
+
onClick: any,
|
|
10
|
+
disableAnimation?: boolean
|
|
11
|
+
toValue: number,
|
|
12
|
+
style?: ViewStyle,
|
|
13
|
+
duration?: number,
|
|
14
|
+
type: 'favorite', // animation types
|
|
15
|
+
isActive: boolean,
|
|
16
|
+
animationType?: ((value: number) => number);
|
|
17
|
+
useNativeDriver?: boolean,
|
|
18
|
+
iconProps?: { color?: string, size?: number, style?: ViewStyle }
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export const LottieAnimation = (props: Props) => {
|
|
22
|
+
const {
|
|
23
|
+
initialValue,
|
|
24
|
+
onClick,
|
|
25
|
+
disableAnimation,
|
|
26
|
+
toValue,
|
|
27
|
+
style,
|
|
28
|
+
duration,
|
|
29
|
+
type,
|
|
30
|
+
isActive,
|
|
31
|
+
useNativeDriver,
|
|
32
|
+
animationType,
|
|
33
|
+
iconProps
|
|
34
|
+
} = props
|
|
35
|
+
const theme = useTheme()
|
|
36
|
+
const animationProgress = useRef(new Animated.Value(initialValue))
|
|
37
|
+
const [isHide, setIsHide] = useState(true)
|
|
38
|
+
const favoriteArray = ['heart', 'hearto']
|
|
39
|
+
const icon = type === 'favorite' ? favoriteArray : []
|
|
40
|
+
const animationGif = type === 'favorite' ? theme.images?.general?.heart : ''
|
|
41
|
+
const onPressLottie = () => {
|
|
42
|
+
if (!disableAnimation) {
|
|
43
|
+
setIsHide(false)
|
|
44
|
+
Animated.timing(animationProgress.current, {
|
|
45
|
+
toValue,
|
|
46
|
+
duration: duration || 5000,
|
|
47
|
+
easing: animationType || Easing.linear,
|
|
48
|
+
useNativeDriver: useNativeDriver ?? true
|
|
49
|
+
}).start();
|
|
50
|
+
hideLottie()
|
|
51
|
+
}
|
|
52
|
+
onClick()
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
const hideLottie = () => {
|
|
56
|
+
setTimeout(() => setIsHide(true), 4500)
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
return (
|
|
60
|
+
<TouchableOpacity
|
|
61
|
+
onPress={onPressLottie}
|
|
62
|
+
style={style}
|
|
63
|
+
>
|
|
64
|
+
{!isHide &&
|
|
65
|
+
<Lottie
|
|
66
|
+
progress={animationProgress.current}
|
|
67
|
+
source={animationGif}
|
|
68
|
+
/>
|
|
69
|
+
}
|
|
70
|
+
<IconAntDesign
|
|
71
|
+
name={isActive ? icon[0] : icon[1]}
|
|
72
|
+
color={iconProps?.color || theme.colors.danger5}
|
|
73
|
+
size={iconProps?.size || 16}
|
|
74
|
+
style={iconProps?.style}
|
|
75
|
+
/>
|
|
76
|
+
</TouchableOpacity>
|
|
77
|
+
)
|
|
78
|
+
}
|
|
@@ -16,11 +16,12 @@ import {
|
|
|
16
16
|
PlaceholderLine,
|
|
17
17
|
Fade
|
|
18
18
|
} from "rn-placeholder";
|
|
19
|
-
import { View, BackHandler } from 'react-native'
|
|
19
|
+
import { View, BackHandler, Platform } from 'react-native'
|
|
20
20
|
import {
|
|
21
21
|
MessageListingWrapper,
|
|
22
22
|
MessageContainer
|
|
23
23
|
} from './styles';
|
|
24
|
+
import { getOrderStatus } from '../../utils'
|
|
24
25
|
|
|
25
26
|
const OrdersOptionUI = (props: OrdersOptionParams) => {
|
|
26
27
|
const {
|
|
@@ -51,40 +52,6 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
|
|
|
51
52
|
: theme.images.general.emptyPastOrders
|
|
52
53
|
const orders = customArray || values || []
|
|
53
54
|
|
|
54
|
-
const getOrderStatus = (s: string) => {
|
|
55
|
-
const status = parseInt(s)
|
|
56
|
-
const orderStatus = [
|
|
57
|
-
{ key: 0, value: t('PENDING', 'Pending') },
|
|
58
|
-
{ key: 1, value: t('COMPLETED', 'Completed') },
|
|
59
|
-
{ key: 2, value: t('REJECTED', 'Rejected') },
|
|
60
|
-
{ key: 3, value: t('DRIVER_IN_BUSINESS', 'Driver in business') },
|
|
61
|
-
{ key: 4, value: t('PREPARATION_COMPLETED', 'Preparation Completed') },
|
|
62
|
-
{ key: 5, value: t('REJECTED_BY_BUSINESS', 'Rejected by business') },
|
|
63
|
-
{ key: 6, value: t('REJECTED_BY_DRIVER', 'Rejected by Driver') },
|
|
64
|
-
{ key: 7, value: t('ACCEPTED_BY_BUSINESS', 'Accepted by business') },
|
|
65
|
-
{ key: 8, value: t('ACCEPTED_BY_DRIVER', 'Accepted by driver') },
|
|
66
|
-
{ key: 9, value: t('PICK_UP_COMPLETED_BY_DRIVER', 'Pick up completed by driver') },
|
|
67
|
-
{ key: 10, value: t('PICK_UP_FAILED_BY_DRIVER', 'Pick up Failed by driver') },
|
|
68
|
-
{ key: 11, value: t('DELIVERY_COMPLETED_BY_DRIVER', 'Delivery completed by driver') },
|
|
69
|
-
{ key: 12, value: t('DELIVERY_FAILED_BY_DRIVER', 'Delivery Failed by driver') },
|
|
70
|
-
{ key: 13, value: t('PREORDER', 'PreOrder') },
|
|
71
|
-
{ key: 14, value: t('ORDER_NOT_READY', 'Order not ready') },
|
|
72
|
-
{ key: 15, value: t('ORDER_PICKEDUP_COMPLETED_BY_CUSTOMER', 'Order picked up completed by customer') },
|
|
73
|
-
{ key: 16, value: t('CANCELLED_BY_CUSTOMER', 'Cancelled by customer') },
|
|
74
|
-
{ key: 17, value: t('ORDER_NOT_PICKEDUP_BY_CUSTOMER', 'Order not picked up by customer') },
|
|
75
|
-
{ key: 18, value: t('DRIVER_ALMOST_ARRIVED_TO_BUSINESS', 'Driver almost arrived to business') },
|
|
76
|
-
{ key: 19, value: t('DRIVER_ALMOST_ARRIVED_TO_CUSTOMER', 'Driver almost arrived to customer') },
|
|
77
|
-
{ key: 20, value: t('ORDER_CUSTOMER_ALMOST_ARRIVED_BUSINESS', 'Customer almost arrived to business') },
|
|
78
|
-
{ key: 21, value: t('ORDER_CUSTOMER_ARRIVED_BUSINESS', 'Customer arrived to business') },
|
|
79
|
-
{ key: 22, value: t('ORDER_LOOKING_FOR_DRIVER', 'Looking for driver') },
|
|
80
|
-
{ key: 23, value: t('ORDER_DRIVER_ON_WAY', 'Driver on way') }
|
|
81
|
-
]
|
|
82
|
-
|
|
83
|
-
const objectStatus = orderStatus.find((o) => o.key === status)
|
|
84
|
-
|
|
85
|
-
return objectStatus && objectStatus
|
|
86
|
-
}
|
|
87
|
-
|
|
88
55
|
const handleClickOrder = (uuid: string) => {
|
|
89
56
|
setSelectedOrderId(uuid)
|
|
90
57
|
setOpenMessges(true)
|
|
@@ -102,7 +69,7 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
|
|
|
102
69
|
}, [orderList, loading])
|
|
103
70
|
|
|
104
71
|
useEffect(() => {
|
|
105
|
-
if(refreshOrders){
|
|
72
|
+
if (refreshOrders) {
|
|
106
73
|
loadOrders(false, false, false, true)
|
|
107
74
|
setRefreshOrders && setRefreshOrders(false)
|
|
108
75
|
}
|
|
@@ -225,7 +192,7 @@ const OrderMessageUI = (props: any) => {
|
|
|
225
192
|
}
|
|
226
193
|
|
|
227
194
|
export const OrderListing = (props: OrdersOptionParams) => {
|
|
228
|
-
|
|
195
|
+
const [businessState] = useBusiness();
|
|
229
196
|
const OrderListingProps = {
|
|
230
197
|
...props,
|
|
231
198
|
UIComponent: OrdersOptionUI,
|
|
@@ -236,7 +203,7 @@ export const OrderListing = (props: OrdersOptionParams) => {
|
|
|
236
203
|
pageSize: 10,
|
|
237
204
|
controlType: 'infinity'
|
|
238
205
|
},
|
|
239
|
-
|
|
206
|
+
businessId: businessState?.business?.id,
|
|
240
207
|
profileMessages: true,
|
|
241
208
|
orderBy: 'last_direct_message_at',
|
|
242
209
|
orderDirection: 'asc'
|
|
@@ -292,7 +259,7 @@ export const MessageListing = (props: MessageListingParams) => {
|
|
|
292
259
|
titleAlign={'center'}
|
|
293
260
|
onActionLeft={goToBack}
|
|
294
261
|
showCall={false}
|
|
295
|
-
paddingTop={10}
|
|
262
|
+
paddingTop={Platform.OS === 'ios' ? 20 : 10}
|
|
296
263
|
btnStyle={{ paddingLeft: 0 }}
|
|
297
264
|
/>
|
|
298
265
|
<OrderListing
|
|
@@ -300,7 +267,7 @@ export const MessageListing = (props: MessageListingParams) => {
|
|
|
300
267
|
setSelectedOrderId={setSelectedOrderId}
|
|
301
268
|
setOrderList={setOrderListStatus}
|
|
302
269
|
setOpenMessges={setOpenMessges}
|
|
303
|
-
|
|
270
|
+
franchiseId={props.franchiseId}
|
|
304
271
|
/>
|
|
305
272
|
{openMessages && seletedOrder && (
|
|
306
273
|
<OModal
|
|
@@ -1,16 +1,19 @@
|
|
|
1
1
|
import React, { useEffect, useState } from 'react'
|
|
2
|
+
import Clipboard from '@react-native-clipboard/clipboard';
|
|
2
3
|
import { Messages as MessagesController, useSession, useUtils, useLanguage, ToastType, useToast } from 'ordering-components/native'
|
|
3
4
|
import { useTheme } from 'styled-components/native';
|
|
4
5
|
import { launchImageLibrary } from 'react-native-image-picker'
|
|
5
6
|
import { GiftedChat, Actions, ActionsProps, InputToolbar, Composer, Send, Bubble, MessageImage, InputToolbarProps, ComposerProps } from 'react-native-gifted-chat'
|
|
6
7
|
import { USER_TYPE } from '../../config/constants'
|
|
7
8
|
import MaterialCommunityIcon from 'react-native-vector-icons/MaterialCommunityIcons'
|
|
9
|
+
import AntDesignIcon from 'react-native-vector-icons/AntDesign'
|
|
8
10
|
import { OIcon, OIconButton, OText, OButton } from '../shared'
|
|
9
11
|
import { TouchableOpacity, ActivityIndicator, StyleSheet, View, Platform, Keyboard } from 'react-native'
|
|
10
12
|
import { Header, TitleHeader, Wrapper, QuickMessageContainer, ProfileMessageHeader, MessageTypeItem } from './styles'
|
|
11
13
|
import { MessagesParams } from '../../types'
|
|
12
14
|
import { useWindowDimensions } from 'react-native'
|
|
13
15
|
import { useSafeAreaInsets } from 'react-native-safe-area-context'
|
|
16
|
+
import { getLogisticTag } from '../../utils'
|
|
14
17
|
|
|
15
18
|
const ORDER_STATUS: any = {
|
|
16
19
|
0: 'ORDER_STATUS_PENDING',
|
|
@@ -36,7 +39,7 @@ const ORDER_STATUS: any = {
|
|
|
36
39
|
20: 'ORDER_CUSTOMER_ALMOST_ARRIVED_BUSINESS',
|
|
37
40
|
21: 'ORDER_CUSTOMER_ARRIVED_BUSINESS',
|
|
38
41
|
22: 'ORDER_LOOKING_FOR_DRIVER',
|
|
39
|
-
|
|
42
|
+
23: 'ORDER_DRIVER_ON_WAY'
|
|
40
43
|
}
|
|
41
44
|
|
|
42
45
|
const filterSpecialStatus = ['prepared_in', 'delivered_in', 'delivery_datetime']
|
|
@@ -122,18 +125,17 @@ const MessagesUI = (props: MessagesParams) => {
|
|
|
122
125
|
|
|
123
126
|
const messageConsole = (message: any) => {
|
|
124
127
|
return message.change?.attribute !== 'driver_id'
|
|
125
|
-
?
|
|
126
|
-
`${t('ORDER', 'Order')} ${t(message.change.attribute.toUpperCase(), message.change.attribute.replace('_', ' '))} ${t('CHANGED_FROM', 'Changed from')} ${
|
|
127
|
-
filterSpecialStatus.includes(message.change.attribute) ?
|
|
128
|
-
`${message.change.old === null ? '0' : message.change.old} ${t('TO', 'to')} ${message.change.new} ${t('MINUTES', 'Minutes')}` :
|
|
129
|
-
`${message.change.old !== null && t(ORDER_STATUS[parseInt(message.change.old, 10)])} ${t('TO', 'to')} ${t(ORDER_STATUS[parseInt(message.change.new, 10)])}`
|
|
130
|
-
}`
|
|
131
|
-
: message.change.new
|
|
132
128
|
?
|
|
133
|
-
`${
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
129
|
+
`${t('ORDER', 'Order')} ${t(message.change.attribute.toUpperCase(), message.change.attribute.replace('_', ' '))} ${t('CHANGED_FROM', 'Changed from')} ${filterSpecialStatus.includes(message.change.attribute) ?
|
|
130
|
+
`${message.change.old === null ? '0' : message.change.old} ${t('TO', 'to')} ${message.change.new} ${t('MINUTES', 'Minutes')}` :
|
|
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)}`
|
|
132
|
+
}`
|
|
133
|
+
: message.change.new
|
|
134
|
+
?
|
|
135
|
+
`${message.driver?.name} ${message.driver?.lastname !== null ? message.driver.lastname : ''} ${t('WAS_ASSIGNED_AS_DRIVER', 'Was assigned as driver')} ${message.comment ? message.comment.length : ''}`
|
|
136
|
+
:
|
|
137
|
+
`${t('DRIVER_UNASSIGNED', 'Driver unassigned')}`
|
|
138
|
+
}
|
|
137
139
|
|
|
138
140
|
useEffect(() => {
|
|
139
141
|
let newMessages: Array<any> = []
|
|
@@ -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
|
}
|
|
@@ -397,12 +399,27 @@ const MessagesUI = (props: MessagesParams) => {
|
|
|
397
399
|
}
|
|
398
400
|
}
|
|
399
401
|
|
|
402
|
+
const onLongPress = (context: any, message: any) => {
|
|
403
|
+
const options = [
|
|
404
|
+
t('COPY_TEXT', 'Copy text'),
|
|
405
|
+
t('CANCEL', 'Cancel'),
|
|
406
|
+
];
|
|
407
|
+
const cancelButtonIndex = options.length - 1;
|
|
408
|
+
context.actionSheet().showActionSheetWithOptions({
|
|
409
|
+
options,
|
|
410
|
+
cancelButtonIndex
|
|
411
|
+
}, (buttonIndex: any) => buttonIndex === 0 && Clipboard.setString(message.text)
|
|
412
|
+
);
|
|
413
|
+
}
|
|
414
|
+
|
|
400
415
|
return (
|
|
401
416
|
<View style={{ height: getViewHeight(), width: '100%', paddingTop: 12, backgroundColor: 'white' }}>
|
|
402
417
|
<Wrapper>
|
|
403
418
|
{!isMeesageListing ? (
|
|
404
419
|
<Header>
|
|
405
|
-
<
|
|
420
|
+
<TouchableOpacity onPress={onClose} style={{ paddingStart: 10, borderColor: theme.colors.clear }}>
|
|
421
|
+
<AntDesignIcon name='arrowleft' size={26} />
|
|
422
|
+
</TouchableOpacity>
|
|
406
423
|
<View style={{ marginRight: 10, shadowColor: theme.colors.black, shadowOpacity: 0.1, shadowOffset: { width: 0, height: 1 }, shadowRadius: 2 }}>
|
|
407
424
|
<OIcon
|
|
408
425
|
url={type === USER_TYPE.DRIVER ? order?.driver?.photo : order?.business?.logo}
|
|
@@ -419,10 +436,8 @@ const MessagesUI = (props: MessagesParams) => {
|
|
|
419
436
|
) : (
|
|
420
437
|
<ProfileMessageHeader>
|
|
421
438
|
<View style={{ ...styles.headerTitle }}>
|
|
422
|
-
<TouchableOpacity
|
|
423
|
-
|
|
424
|
-
onPress={onClose}>
|
|
425
|
-
<OIcon src={theme.images.general.arrow_left} width={16} />
|
|
439
|
+
<TouchableOpacity onPress={onClose} style={styles.headerItem}>
|
|
440
|
+
<AntDesignIcon name='arrowleft' size={26} />
|
|
426
441
|
</TouchableOpacity>
|
|
427
442
|
<OText size={18}>{t('ORDER', theme?.defaultLanguages?.ORDER || 'Order')} #{order?.id}</OText>
|
|
428
443
|
</View>
|
|
@@ -473,6 +488,7 @@ const MessagesUI = (props: MessagesParams) => {
|
|
|
473
488
|
onSend={onSubmit}
|
|
474
489
|
onInputTextChanged={onChangeMessage}
|
|
475
490
|
alignTop
|
|
491
|
+
onLongPress={(context: any, message: any) => onLongPress(context, message)}
|
|
476
492
|
scrollToBottom
|
|
477
493
|
renderAvatarOnTop
|
|
478
494
|
renderUsernameOnMessage
|