ordering-ui-react-native 0.21.86 → 0.21.87-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 -7
- package/src/DeliveryApp.tsx +43 -1
- package/src/components/BusinessesListing/index.tsx +1 -1
- package/src/components/StripeMethodForm/index.tsx +6 -4
- package/src/components/VerifyPhone/styles.tsx +1 -2
- package/src/types/index.tsx +3 -1
- package/themes/business/index.tsx +2 -0
- package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +9 -6
- package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +1 -0
- package/themes/business/src/components/BusinessController/index.tsx +8 -3
- package/themes/business/src/components/BusinessProductList/index.tsx +2 -1
- package/themes/business/src/components/Chat/index.tsx +5 -2
- package/themes/business/src/components/DriverMap/index.tsx +49 -27
- package/themes/business/src/components/GoogleMap/index.tsx +15 -8
- package/themes/business/src/components/Home/index.tsx +5 -1
- package/themes/business/src/components/LanguageSelector/index.tsx +2 -3
- package/themes/business/src/components/LanguageSelector/lang_country.json +515 -70
- package/themes/business/src/components/LogoutButton/index.tsx +1 -1
- package/themes/business/src/components/MapView/index.tsx +36 -17
- package/themes/business/src/components/NewOrderNotification/index.tsx +69 -33
- package/themes/business/src/components/OrderDetails/Business.tsx +74 -9
- package/themes/business/src/components/OrderDetails/Delivery.tsx +131 -51
- package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +112 -41
- package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +55 -24
- package/themes/business/src/components/OrderDetails/styles.tsx +39 -3
- package/themes/business/src/components/OrderDetails/usePrinterCommands.tsx +221 -0
- package/themes/business/src/components/OrderDetailsLogistic/index.tsx +3 -2
- package/themes/business/src/components/OrderSummary/index.tsx +223 -73
- package/themes/business/src/components/OrdersListManager/index.tsx +13 -1
- package/themes/business/src/components/OrdersOption/index.tsx +251 -159
- package/themes/business/src/components/PhoneInputNumber/index.tsx +8 -5
- package/themes/business/src/components/PreviousMessages/index.tsx +26 -3
- package/themes/business/src/components/PreviousOrders/OrderItem.tsx +42 -20
- package/themes/business/src/components/PreviousOrders/index.tsx +76 -66
- package/themes/business/src/components/PrinterEdition/MessageAlert.tsx +33 -0
- package/themes/business/src/components/PrinterEdition/index.tsx +431 -0
- package/themes/business/src/components/PrinterEdition/printerList.tsx +23 -0
- package/themes/business/src/components/PrinterEdition/styles.tsx +61 -0
- package/themes/business/src/components/PrinterSettings/index.tsx +267 -0
- package/themes/business/src/components/PrinterSettings/styles.tsx +30 -0
- package/themes/business/src/components/ReviewCustomer/index.tsx +2 -0
- package/themes/business/src/components/Sessions/index.tsx +1 -1
- package/themes/business/src/components/StoresList/index.tsx +2 -2
- package/themes/business/src/components/UserFormDetails/index.tsx +111 -107
- package/themes/business/src/components/UserProfileForm/index.tsx +56 -35
- package/themes/business/src/components/WebsocketStatus/index.tsx +2 -2
- package/themes/business/src/components/shared/OInput.tsx +2 -0
- package/themes/business/src/components/shared/OTextarea.tsx +8 -9
- package/themes/business/src/hooks/useLocation.tsx +5 -4
- package/themes/business/src/layouts/SafeAreaContainer.tsx +35 -19
- package/themes/business/src/types/index.tsx +14 -4
- package/themes/business/src/utils/index.tsx +25 -1
- package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
- package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
- package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
- package/themes/kiosk/src/components/Checkout/index.tsx +6 -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/shared/OButton.tsx +5 -18
- package/themes/original/index.tsx +13 -1
- package/themes/original/src/components/AddressDetails/index.tsx +20 -10
- package/themes/original/src/components/AddressForm/index.tsx +32 -17
- package/themes/original/src/components/AddressList/index.tsx +8 -7
- package/themes/original/src/components/AnalyticsSegment/index.tsx +6 -6
- package/themes/original/src/components/AppleLogin/index.tsx +4 -4
- package/themes/original/src/components/BusinessBasicInformation/index.tsx +5 -8
- package/themes/original/src/components/BusinessController/index.tsx +12 -7
- package/themes/original/src/components/BusinessItemAccordion/index.tsx +13 -5
- package/themes/original/src/components/BusinessListingSearch/BusinessSearchFooter.tsx +2 -3
- package/themes/original/src/components/BusinessListingSearch/BusinessSearchHeader.tsx +1 -3
- package/themes/original/src/components/BusinessListingSearch/index.tsx +1 -2
- package/themes/original/src/components/BusinessPreorder/index.tsx +20 -15
- package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/index.tsx +5 -5
- package/themes/original/src/components/BusinessProductsList/index.tsx +2 -2
- package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
- package/themes/original/src/components/BusinessProductsListing/index.tsx +18 -6
- package/themes/original/src/components/BusinessTypeFilter/index.tsx +9 -8
- package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +2 -1
- package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +1 -1
- package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -1
- package/themes/original/src/components/BusinessesListing/index.tsx +0 -1
- package/themes/original/src/components/Cart/index.tsx +43 -15
- package/themes/original/src/components/CartContent/index.tsx +21 -8
- package/themes/original/src/components/Checkout/index.tsx +109 -60
- package/themes/original/src/components/CitiesControl/index.tsx +0 -3
- package/themes/original/src/components/CouponControl/index.tsx +1 -3
- package/themes/original/src/components/DriverTips/index.tsx +1 -3
- package/themes/original/src/components/Favorite/index.tsx +1 -5
- package/themes/original/src/components/FavoriteList/index.tsx +0 -1
- package/themes/original/src/components/ForgotPasswordForm/index.tsx +5 -7
- package/themes/original/src/components/GiftCard/GiftCardOrdersList/index.tsx +64 -0
- package/themes/original/src/components/GiftCard/GiftCardOrdersList/styles.tsx +8 -0
- package/themes/original/src/components/GiftCard/GiftCardUI/index.tsx +15 -17
- package/themes/original/src/components/GiftCard/PurchaseGiftCard/index.tsx +3 -7
- package/themes/original/src/components/GiftCard/RedeemGiftCard/index.tsx +24 -32
- package/themes/original/src/components/GiftCard/SendGiftCard/index.tsx +7 -9
- package/themes/original/src/components/GiftCard/SingleGiftCard/index.tsx +101 -0
- package/themes/original/src/components/GiftCard/SingleGiftCard/styles.tsx +4 -0
- package/themes/original/src/components/GiftCard/VerticalGiftCardOrdersLayout/index.tsx +82 -0
- package/themes/original/src/components/GiftCard/VerticalGiftCardOrdersLayout/styles.tsx +9 -0
- package/themes/original/src/components/GoogleMap/index.tsx +39 -18
- package/themes/original/src/components/Help/index.tsx +2 -0
- package/themes/original/src/components/HighestRatedBusinesses/index.tsx +1 -1
- package/themes/original/src/components/Home/index.tsx +2 -10
- package/themes/original/src/components/LoginForm/Otp/index.tsx +0 -3
- package/themes/original/src/components/LoginForm/index.tsx +4 -7
- package/themes/original/src/components/MessageListing/index.tsx +2 -1
- package/themes/original/src/components/Messages/index.tsx +13 -9
- package/themes/original/src/components/MomentOption/index.tsx +13 -2
- package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +7 -3
- package/themes/original/src/components/MultiCheckout/index.tsx +139 -87
- package/themes/original/src/components/MultiOrdersDetails/index.tsx +2 -1
- package/themes/original/src/components/MyOrders/index.tsx +21 -26
- package/themes/original/src/components/NavBar/index.tsx +7 -4
- package/themes/original/src/components/NetworkError/index.tsx +0 -5
- package/themes/original/src/components/NotFoundSource/index.tsx +0 -3
- package/themes/original/src/components/OrderDetails/OrderEta.tsx +4 -3
- package/themes/original/src/components/OrderDetails/OrderHistory.tsx +13 -10
- package/themes/original/src/components/OrderDetails/index.tsx +42 -19
- package/themes/original/src/components/OrderDetails/styles.tsx +0 -1
- package/themes/original/src/components/OrderProgress/index.tsx +26 -6
- package/themes/original/src/components/OrderSummary/index.tsx +28 -9
- package/themes/original/src/components/OrderTypeSelector/index.tsx +7 -6
- package/themes/original/src/components/OrdersOption/index.tsx +4 -6
- package/themes/original/src/components/PaymentOptionStripe/index.tsx +0 -5
- package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
- package/themes/original/src/components/PaymentOptions/index.tsx +17 -9
- package/themes/original/src/components/PlaceSpot/index.tsx +1 -3
- package/themes/original/src/components/PreviousOrders/index.tsx +1 -2
- package/themes/original/src/components/ProductForm/ActionButton.tsx +17 -20
- package/themes/original/src/components/ProductForm/index.tsx +107 -102
- package/themes/original/src/components/ProductItemAccordion/index.tsx +55 -49
- package/themes/original/src/components/ProductItemAccordion/styles.tsx +3 -4
- package/themes/original/src/components/ProductOptionSubOption/index.tsx +16 -8
- package/themes/original/src/components/ProfessionalProfile/index.tsx +4 -5
- package/themes/original/src/components/Promotions/index.tsx +6 -9
- package/themes/original/src/components/ReviewDriver/index.tsx +1 -1
- package/themes/original/src/components/ReviewOrder/index.tsx +2 -2
- package/themes/original/src/components/ReviewProducts/index.tsx +1 -1
- package/themes/original/src/components/ReviewTrigger/index.tsx +2 -2
- package/themes/original/src/components/ServiceForm/index.tsx +52 -54
- package/themes/original/src/components/Sessions/index.tsx +3 -3
- package/themes/original/src/components/SignupForm/index.tsx +86 -78
- package/themes/original/src/components/SingleOrderCard/index.tsx +7 -5
- package/themes/original/src/components/SingleProductCard/index.tsx +3 -4
- package/themes/original/src/components/SingleProductCard/styles.tsx +0 -3
- package/themes/original/src/components/StripeCardForm/index.tsx +0 -3
- package/themes/original/src/components/StripeCardsList/index.tsx +10 -3
- package/themes/original/src/components/StripeElementsForm/index.tsx +77 -60
- package/themes/original/src/components/StripeElementsForm/naked.tsx +48 -1
- package/themes/original/src/components/StripeRedirectForm/index.tsx +0 -3
- package/themes/original/src/components/TaxInformation/index.tsx +3 -2
- package/themes/original/src/components/UpsellingProducts/UpsellingContent.tsx +10 -7
- package/themes/original/src/components/UpsellingProducts/UpsellingLayout.tsx +8 -3
- package/themes/original/src/components/UserDetails/index.tsx +3 -2
- package/themes/original/src/components/UserFormDetails/index.tsx +154 -130
- package/themes/original/src/components/UserProfile/index.tsx +11 -2
- package/themes/original/src/components/Wallets/index.tsx +6 -3
- package/themes/original/src/components/WebsocketStatus/index.tsx +169 -0
- package/themes/original/src/components/WebsocketStatus/styles.tsx +28 -0
- package/themes/original/src/components/shared/OAlert.tsx +2 -1
- package/themes/original/src/components/shared/OButton.tsx +5 -4
- package/themes/original/src/components/shared/OInput.tsx +4 -8
- package/themes/original/src/components/shared/OModal.tsx +7 -2
- package/themes/original/src/types/index.tsx +5 -1
- package/themes/original/src/utils/index.tsx +30 -1
- package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React, { useEffect, useState, useRef } from 'react';
|
|
2
|
-
import { StyleSheet, View, Keyboard, Modal } from 'react-native';
|
|
2
|
+
import { StyleSheet, View, Keyboard, Modal, Platform } 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';
|
|
@@ -108,7 +108,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
108
108
|
|
|
109
109
|
const googleLoginEnabled = configs?.google_login_enabled?.value === '1' || !configs?.google_login_enabled?.enabled
|
|
110
110
|
const facebookLoginEnabled = configs?.facebook_login_enabled?.value === '1' || !configs?.facebook_login_enabled?.enabled
|
|
111
|
-
const appleLoginEnabled = configs?.apple_login_enabled?.value === '1' || !configs?.apple_login_enabled?.enabled
|
|
111
|
+
const appleLoginEnabled = Platform.OS === 'ios' && (configs?.apple_login_enabled?.value === '1' || !configs?.apple_login_enabled?.enabled)
|
|
112
112
|
|
|
113
113
|
const loginStyle = StyleSheet.create({
|
|
114
114
|
btnOutline: {
|
|
@@ -630,6 +630,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
630
630
|
/>
|
|
631
631
|
)
|
|
632
632
|
}
|
|
633
|
+
autoCapitalize='none'
|
|
633
634
|
value={value}
|
|
634
635
|
forwardRef={passwordRef}
|
|
635
636
|
onChange={(val: any) => onChange(val)}
|
|
@@ -706,9 +707,6 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
706
707
|
<OButton
|
|
707
708
|
onClick={handleSubmit(onSubmit)}
|
|
708
709
|
text={loginTab !== 'otp' ? loginButtonText : t('GET_VERIFY_CODE', 'Get verify code')}
|
|
709
|
-
bgColor={theme.colors.primary}
|
|
710
|
-
borderColor={theme.colors.primary}
|
|
711
|
-
textStyle={{ color: 'white' }}
|
|
712
710
|
imgRightSrc={null}
|
|
713
711
|
isLoading={formState.loading}
|
|
714
712
|
style={{ borderRadius: 7.6, marginTop: 10, marginBottom: 25 }}
|
|
@@ -747,7 +745,6 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
747
745
|
<OButton
|
|
748
746
|
onClick={handleVerifyCodeClick}
|
|
749
747
|
text={t('GET_VERIFY_CODE', 'Get Verify Code')}
|
|
750
|
-
borderColor={theme.colors.primary}
|
|
751
748
|
style={loginStyle.btnOutline}
|
|
752
749
|
imgRightSrc={null}
|
|
753
750
|
isLoading={isLoadingVerifyModal}
|
|
@@ -802,7 +799,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
802
799
|
handleSuccessGoogleLogin={handleSuccessFacebook}
|
|
803
800
|
/>
|
|
804
801
|
)}
|
|
805
|
-
{(configs?.apple_login_client_id?.value !== '' && configs?.
|
|
802
|
+
{(configs?.apple_login_client_id?.value !== '' && configs?.apple_login_client_id?.value !== null) && appleLoginEnabled && (
|
|
806
803
|
<AppleLogin
|
|
807
804
|
notificationState={notificationState}
|
|
808
805
|
handleErrors={(err: any) => { showToast(ToastType.Error, err), vibrateApp() }}
|
|
@@ -200,7 +200,7 @@ export const OrderListing = (props: OrdersOptionParams) => {
|
|
|
200
200
|
const OrderListingProps = {
|
|
201
201
|
...props,
|
|
202
202
|
UIComponent: OrdersOptionUI,
|
|
203
|
-
orderStatus: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23],
|
|
203
|
+
orderStatus: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26],
|
|
204
204
|
useDefualtSessionManager: true,
|
|
205
205
|
paginationSettings: {
|
|
206
206
|
initialPage: 1,
|
|
@@ -237,6 +237,7 @@ export const MessageListing = (props: MessageListingParams) => {
|
|
|
237
237
|
const [seletedOrder, setSeletedOrder] = useState<any>()
|
|
238
238
|
const [openMessages, setOpenMessges] = useState(false)
|
|
239
239
|
const [, t] = useLanguage()
|
|
240
|
+
const theme = useTheme()
|
|
240
241
|
|
|
241
242
|
const goToBack = () => {
|
|
242
243
|
navigation?.canGoBack() && navigation.goBack()
|
|
@@ -39,7 +39,10 @@ const ORDER_STATUS: any = {
|
|
|
39
39
|
20: 'ORDER_CUSTOMER_ALMOST_ARRIVED_BUSINESS',
|
|
40
40
|
21: 'ORDER_CUSTOMER_ARRIVED_BUSINESS',
|
|
41
41
|
22: 'ORDER_LOOKING_FOR_DRIVER',
|
|
42
|
-
23: 'ORDER_DRIVER_ON_WAY'
|
|
42
|
+
23: 'ORDER_DRIVER_ON_WAY',
|
|
43
|
+
24: 'ORDER_DRIVER_WAITING_FOR_ORDER',
|
|
44
|
+
25: 'ORDER_ACCEPTED_BY_DRIVER_COMPANY',
|
|
45
|
+
26: 'ORDER_DRIVER_ARRIVED_CUSTOMER'
|
|
43
46
|
}
|
|
44
47
|
|
|
45
48
|
const filterSpecialStatus = ['prepared_in', 'delivered_in', 'delivery_datetime']
|
|
@@ -73,7 +76,7 @@ const MessagesUI = (props: MessagesParams) => {
|
|
|
73
76
|
|
|
74
77
|
const [formattedMessages, setFormattedMessages] = useState<Array<any>>([])
|
|
75
78
|
const [isKeyboardShow, setIsKeyboardShow] = useState(false)
|
|
76
|
-
const previousStatus = [1, 2, 5, 6, 10, 11, 12, 16, 17]
|
|
79
|
+
const previousStatus = [1, 2, 5, 6, 10, 11, 12, 15, 16, 17]
|
|
77
80
|
const chatDisabled = previousStatus.includes(order?.status)
|
|
78
81
|
const { height } = useWindowDimensions();
|
|
79
82
|
const { top, bottom } = useSafeAreaInsets();
|
|
@@ -127,12 +130,12 @@ const MessagesUI = (props: MessagesParams) => {
|
|
|
127
130
|
return message.change?.attribute !== 'driver_id'
|
|
128
131
|
?
|
|
129
132
|
`${t('ORDER', 'Order')} ${t(message.change.attribute.toUpperCase(), message.change.attribute.replace('_', ' '))} ${t('CHANGED_FROM', 'Changed from')} ${filterSpecialStatus.includes(message.change.attribute)
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
133
|
+
? `${message.change.old === null ? '0' : message.change.old} ${t('TO', 'to')} ${message.change.new} ${t('MINUTES', 'Minutes')}`
|
|
134
|
+
: `${message.change?.attribute !== 'logistic_status'
|
|
135
|
+
? message.change.old !== null && t(ORDER_STATUS[parseInt(message.change.old, 10)])
|
|
136
|
+
: message.change.old !== null && getLogisticTag(message.change.old)} ${t('TO', 'to')} ${message.change?.attribute !== 'logistic_status'
|
|
137
|
+
? t(ORDER_STATUS[parseInt(message.change.new, 10)])
|
|
138
|
+
: getLogisticTag(message.change.new)}`
|
|
136
139
|
}`
|
|
137
140
|
: message.change.new
|
|
138
141
|
?
|
|
@@ -461,7 +464,7 @@ const MessagesUI = (props: MessagesParams) => {
|
|
|
461
464
|
active={business}
|
|
462
465
|
>
|
|
463
466
|
<OIcon
|
|
464
|
-
url={order?.business?.logo
|
|
467
|
+
url={order?.business?.logo}
|
|
465
468
|
width={32}
|
|
466
469
|
height={32}
|
|
467
470
|
style={{ borderRadius: 32 }}
|
|
@@ -503,6 +506,7 @@ const MessagesUI = (props: MessagesParams) => {
|
|
|
503
506
|
scrollToBottom
|
|
504
507
|
renderAvatarOnTop
|
|
505
508
|
renderUsernameOnMessage
|
|
509
|
+
renderAvatar={() => null}
|
|
506
510
|
renderInputToolbar={renderInputToolbar}
|
|
507
511
|
renderComposer={renderComposer}
|
|
508
512
|
renderSend={renderSend}
|
|
@@ -29,7 +29,7 @@ import {
|
|
|
29
29
|
TimeItem
|
|
30
30
|
} from './styles';
|
|
31
31
|
import { useSafeAreaInsets } from 'react-native-safe-area-context';
|
|
32
|
-
import {
|
|
32
|
+
import { monthsEnum, setLocalMoment } from '../../utils';
|
|
33
33
|
|
|
34
34
|
const MomentOptionUI = (props: MomentOptionParams) => {
|
|
35
35
|
const {
|
|
@@ -323,6 +323,10 @@ const MomentOptionUI = (props: MomentOptionParams) => {
|
|
|
323
323
|
}
|
|
324
324
|
}, [dateSelected, JSON.stringify(hoursList), JSON.stringify(datesWhitelist), cateringPreorder, JSON.stringify(business)])
|
|
325
325
|
|
|
326
|
+
useEffect(() => {
|
|
327
|
+
setLocalMoment(moment, t)
|
|
328
|
+
}, [])
|
|
329
|
+
|
|
326
330
|
return (
|
|
327
331
|
<>
|
|
328
332
|
<Container
|
|
@@ -468,7 +472,14 @@ const MomentOptionUI = (props: MomentOptionParams) => {
|
|
|
468
472
|
</Container>
|
|
469
473
|
{!isCart && !cateringPreorder && (
|
|
470
474
|
<View style={{ position: 'absolute', bottom: bottom, paddingBottom: 20, paddingHorizontal: 20, backgroundColor: 'white', width: '100%' }}>
|
|
471
|
-
<OButton
|
|
475
|
+
<OButton
|
|
476
|
+
onClick={() => handleChangeMoment()}
|
|
477
|
+
isDisabled={!selectedTime}
|
|
478
|
+
text={t('CONTINUE', 'Continue')}
|
|
479
|
+
style={{ borderRadius: 7.6, height: 44, shadowOpacity: 0 }}
|
|
480
|
+
textStyle={{ fontSize: 14 }}
|
|
481
|
+
showNextIcon
|
|
482
|
+
/>
|
|
472
483
|
</View>
|
|
473
484
|
)}
|
|
474
485
|
</>
|
|
@@ -51,7 +51,7 @@ const MultiCartsPaymethodsAndWalletsUI = (props: any) => {
|
|
|
51
51
|
const { confirmApplePayPayment } = useApplePay()
|
|
52
52
|
|
|
53
53
|
const [addCardOpen, setAddCardOpen] = useState({ stripe: false, stripeConnect: false });
|
|
54
|
-
|
|
54
|
+
const [newCardAdded, setNewCardAdded] = useState(null)
|
|
55
55
|
const isWalletCashEnabled = configs?.wallet_cash_enabled?.value === '1'
|
|
56
56
|
const isWalletPointsEnabled = configs?.wallet_credit_point_enabled?.value === '1'
|
|
57
57
|
|
|
@@ -223,6 +223,8 @@ const MultiCartsPaymethodsAndWalletsUI = (props: any) => {
|
|
|
223
223
|
handlePaymethodDataChange={handlePaymethodDataChange}
|
|
224
224
|
clientSecret={props.clientSecret}
|
|
225
225
|
onPaymentChange={handlePaymethodDataChange}
|
|
226
|
+
newCardAdded={newCardAdded}
|
|
227
|
+
addNewCardAsDefault
|
|
226
228
|
/>
|
|
227
229
|
</View>
|
|
228
230
|
)}
|
|
@@ -233,6 +235,7 @@ const MultiCartsPaymethodsAndWalletsUI = (props: any) => {
|
|
|
233
235
|
toSave
|
|
234
236
|
businessId={businessIds[0]}
|
|
235
237
|
businessIds={businessIds}
|
|
238
|
+
businessNames={openCarts?.map?.((cart: any) => cart?.business?.name)}
|
|
236
239
|
publicKey={paymethodSelected?.data?.publishable}
|
|
237
240
|
requirements={props.clientSecret}
|
|
238
241
|
handleSource={handlePaymethodDataChange}
|
|
@@ -306,7 +309,7 @@ const MultiCartsPaymethodsAndWalletsUI = (props: any) => {
|
|
|
306
309
|
</>
|
|
307
310
|
)}
|
|
308
311
|
|
|
309
|
-
|
|
312
|
+
<OModal
|
|
310
313
|
entireModal
|
|
311
314
|
title={t('ADD_CREDIT_OR_DEBIT_CARD', 'Add credit or debit card')}
|
|
312
315
|
open={addCardOpen.stripe}
|
|
@@ -326,10 +329,11 @@ const MultiCartsPaymethodsAndWalletsUI = (props: any) => {
|
|
|
326
329
|
publicKey={paymethodSelected?.data?.publishable}
|
|
327
330
|
requirements={props.clientSecret}
|
|
328
331
|
onSelectCard={handlePaymethodDataChange}
|
|
332
|
+
setNewCardAdded={setNewCardAdded}
|
|
329
333
|
onCancel={() => setAddCardOpen({ ...addCardOpen, stripe: false })}
|
|
330
334
|
/>
|
|
331
335
|
</KeyboardAvoidingView>
|
|
332
|
-
</OModal>
|
|
336
|
+
</OModal>
|
|
333
337
|
</PMContainer>
|
|
334
338
|
)
|
|
335
339
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, { useState, useEffect } from 'react'
|
|
1
|
+
import React, { useState, useEffect, useCallback, useMemo } from 'react'
|
|
2
2
|
import {
|
|
3
3
|
useLanguage,
|
|
4
4
|
useConfig,
|
|
@@ -70,7 +70,8 @@ const MultiCheckoutUI = (props: any) => {
|
|
|
70
70
|
walletState,
|
|
71
71
|
onNavigationRedirectReplace,
|
|
72
72
|
merchantId,
|
|
73
|
-
cartsInvalid
|
|
73
|
+
cartsInvalid,
|
|
74
|
+
checkoutFieldsState
|
|
74
75
|
} = props
|
|
75
76
|
|
|
76
77
|
const theme = useTheme();
|
|
@@ -82,12 +83,12 @@ const MultiCheckoutUI = (props: any) => {
|
|
|
82
83
|
wrapperNavbar: {
|
|
83
84
|
paddingHorizontal: 20,
|
|
84
85
|
backgroundColor: theme?.colors?.white,
|
|
85
|
-
|
|
86
|
+
borderWidth: 0
|
|
86
87
|
},
|
|
87
88
|
detailWrapper: {
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
89
|
+
paddingHorizontal: 20,
|
|
90
|
+
width: '100%'
|
|
91
|
+
},
|
|
91
92
|
})
|
|
92
93
|
|
|
93
94
|
const [, { showToast }] = useToast();
|
|
@@ -96,8 +97,9 @@ const MultiCheckoutUI = (props: any) => {
|
|
|
96
97
|
const [{ parsePrice, parseDate }] = useUtils();
|
|
97
98
|
const [{ options, carts, loading }, { confirmCart }] = useOrder();
|
|
98
99
|
const [validationFields] = useValidationFields();
|
|
99
|
-
const [{ user }, { login }] = useSession()
|
|
100
|
+
const [{ user, loading: userLoading }, { login }] = useSession()
|
|
100
101
|
|
|
102
|
+
const notFields = ['coupon', 'driver_tip', 'mobile_phone', 'address', 'zipcode', 'address_notes', 'comments']
|
|
101
103
|
const configTypes = configs?.order_types_allowed?.value.split('|').map((value: any) => Number(value)) || []
|
|
102
104
|
const isPreOrder = configs?.preorder_status_enabled?.value === '1'
|
|
103
105
|
const isMultiDriverTips = configs?.checkout_multi_business_enabled?.value === '1'
|
|
@@ -121,6 +123,7 @@ const MultiCheckoutUI = (props: any) => {
|
|
|
121
123
|
|
|
122
124
|
const creditPointGeneralPlan = loyaltyPlansState?.result?.find((loyal: any) => loyal.type === 'credit_point')
|
|
123
125
|
const loyalBusinessAvailable = creditPointGeneralPlan?.businesses?.filter((b: any) => b.accumulates) ?? []
|
|
126
|
+
const checkoutFields = useMemo(() => checkoutFieldsState?.fields?.filter((field : any) => field.order_type_id === options?.type), [checkoutFieldsState, options])
|
|
124
127
|
|
|
125
128
|
const accumulationRateBusiness = (businessId: number) => {
|
|
126
129
|
const value = loyalBusinessAvailable?.find((loyal: any) => loyal.business_id === businessId)?.accumulation_rate ?? 0
|
|
@@ -143,16 +146,17 @@ const MultiCheckoutUI = (props: any) => {
|
|
|
143
146
|
?.reduce((sum: any, cart: any) => sum + clearAmount((cart?.subtotal + getIncludedTaxes(cart)) * accumulationRateBusiness(cart?.business_id)), 0)
|
|
144
147
|
?.toFixed(configs.format_number_decimal_length?.value ?? 2)
|
|
145
148
|
|
|
146
|
-
|
|
149
|
+
const [showTitle, setShowTitle] = useState(false)
|
|
147
150
|
const [isUserDetailsEdit, setIsUserDetailsEdit] = useState(false);
|
|
148
151
|
const [phoneUpdate, setPhoneUpdate] = useState(false);
|
|
149
152
|
const [userErrors, setUserErrors] = useState<any>([]);
|
|
153
|
+
const [cartsOpened, setCartsOpened] = useState([])
|
|
150
154
|
const [placeByMethodPay, setPlaceByMethodPay] = useState(false)
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
155
|
+
const [allowedGuest, setAllowedGuest] = useState(false)
|
|
156
|
+
const [isOpen, setIsOpen] = useState(false)
|
|
157
|
+
const [requiredFields, setRequiredFields] = useState<any>([])
|
|
158
|
+
const stripePaymethods: any = ['stripe', 'stripe_direct', 'stripe_connect', 'stripe_redirect']
|
|
159
|
+
const [openModal, setOpenModal] = useState({ login: false, signup: false, isGuest: false })
|
|
156
160
|
const [methodPaySupported, setMethodPaySupported] = useState({ enabled: false, message: null, loading: true })
|
|
157
161
|
const methodsPay = ['global_google_pay', 'global_apple_pay']
|
|
158
162
|
const isDisablePlaceOrderButton = cartGroup?.loading || placing || (!(paymethodSelected?.paymethod_id || paymethodSelected?.wallet_id) && cartGroup?.result?.balance > 0) ||
|
|
@@ -168,53 +172,73 @@ const MultiCheckoutUI = (props: any) => {
|
|
|
168
172
|
|
|
169
173
|
const checkValidationFields = () => {
|
|
170
174
|
setUserErrors([])
|
|
171
|
-
const errors = []
|
|
172
|
-
const
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
175
|
+
const errors: Array<string> = []
|
|
176
|
+
const userSelected = user
|
|
177
|
+
const _requiredFields: Array<string> = []
|
|
178
|
+
Object.values(checkoutFieldsState?.fields).map((field: any) => {
|
|
179
|
+
if (options?.type === field?.order_type_id &&
|
|
180
|
+
field?.enabled &&
|
|
181
|
+
field?.required &&
|
|
182
|
+
!notFields.includes(field?.validation_field?.code)
|
|
183
|
+
) {
|
|
184
|
+
if (userSelected && !userSelected[field?.validation_field?.code]) {
|
|
185
|
+
_requiredFields.push(field?.validation_field?.code)
|
|
179
186
|
}
|
|
180
187
|
}
|
|
181
188
|
})
|
|
182
|
-
|
|
189
|
+
const mobilePhoneField: any = Object.values(checkoutFieldsState?.fields)?.find((field: any) => field?.order_type_id === options?.type && field?.validation_field?.code === 'mobile_phone')
|
|
183
190
|
if (
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
191
|
+
userSelected &&
|
|
192
|
+
!userSelected?.cellphone &&
|
|
193
|
+
((mobilePhoneField?.enabled &&
|
|
194
|
+
mobilePhoneField?.required) ||
|
|
187
195
|
configs?.verification_phone_required?.value === '1')
|
|
188
196
|
) {
|
|
189
197
|
_requiredFields.push('cellphone')
|
|
190
198
|
}
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
if (phoneUpdate) {
|
|
194
|
-
errors.push(t('NECESSARY_UPDATE_COUNTRY_PHONE_CODE', 'It is necessary to update your phone number'))
|
|
195
|
-
}
|
|
199
|
+
setRequiredFields(_requiredFields)
|
|
196
200
|
|
|
197
201
|
setUserErrors(errors)
|
|
198
202
|
}
|
|
199
203
|
|
|
204
|
+
const checkGuestValidationFields = () => {
|
|
205
|
+
const userSelected = user
|
|
206
|
+
const _requiredFields = checkoutFieldsState?.fields
|
|
207
|
+
.filter((field) => (field?.order_type_id === options?.type) && field?.enabled && field?.required_with_guest &&
|
|
208
|
+
!notFields.includes(field?.validation_field?.code) &&
|
|
209
|
+
userSelected && !userSelected[field?.validation_field?.code])
|
|
210
|
+
const requiredFieldsCode = _requiredFields.map((item) => item?.validation_field?.code)
|
|
211
|
+
const guestCheckoutCellPhone = checkoutFieldsState?.fields?.find((field) => field.order_type_id === options?.type && field?.validation_field?.code === 'mobile_phone')
|
|
212
|
+
if (
|
|
213
|
+
userSelected &&
|
|
214
|
+
!userSelected?.cellphone &&
|
|
215
|
+
((guestCheckoutCellPhone?.enabled &&
|
|
216
|
+
guestCheckoutCellPhone?.required_with_guest) ||
|
|
217
|
+
configs?.verification_phone_required?.value === '1')
|
|
218
|
+
) {
|
|
219
|
+
requiredFieldsCode.push('cellphone')
|
|
220
|
+
}
|
|
221
|
+
setRequiredFields(requiredFieldsCode)
|
|
222
|
+
}
|
|
223
|
+
|
|
200
224
|
const togglePhoneUpdate = (val: boolean) => {
|
|
201
225
|
setPhoneUpdate(val)
|
|
202
226
|
}
|
|
203
227
|
|
|
204
228
|
const handlePlaceOrder = (confirmPayment?: any) => {
|
|
205
229
|
if (stripePaymethods.includes(paymethodSelected?.gateway) && user?.guest_id) {
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
230
|
+
setOpenModal({ ...openModal, signup: true, isGuest: true })
|
|
231
|
+
return
|
|
232
|
+
}
|
|
209
233
|
|
|
210
|
-
if (!userErrors.length &&
|
|
234
|
+
if (!userErrors.length && !requiredFields?.length) {
|
|
211
235
|
handleGroupPlaceOrder && handleGroupPlaceOrder(confirmPayment)
|
|
212
236
|
return
|
|
213
237
|
}
|
|
214
238
|
if (requiredFields?.length) {
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
239
|
+
setIsOpen(true)
|
|
240
|
+
return
|
|
241
|
+
}
|
|
218
242
|
let stringError = ''
|
|
219
243
|
Object.values(userErrors).map((item: any, i: number) => {
|
|
220
244
|
stringError += (i + 1) === userErrors.length ? `- ${item?.message || item}` : `- ${item?.message || item}\n`
|
|
@@ -224,32 +248,43 @@ const MultiCheckoutUI = (props: any) => {
|
|
|
224
248
|
}
|
|
225
249
|
|
|
226
250
|
const handlePlaceOrderAsGuest = () => {
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
251
|
+
setIsOpen(false)
|
|
252
|
+
handleGroupPlaceOrder && handleGroupPlaceOrder()
|
|
253
|
+
}
|
|
230
254
|
|
|
231
255
|
const handleSuccessSignup = (user: any) => {
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
256
|
+
login({
|
|
257
|
+
user,
|
|
258
|
+
token: user?.session?.access_token
|
|
259
|
+
})
|
|
260
|
+
openModal?.isGuest && handlePlaceOrderAsGuest()
|
|
261
|
+
setOpenModal({ ...openModal, signup: false, isGuest: false })
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
const handleSuccessLogin = (user: any) => {
|
|
265
|
+
if (user) setOpenModal({ ...openModal, login: false })
|
|
266
|
+
}
|
|
243
267
|
|
|
244
268
|
const handleScroll = ({ nativeEvent: { contentOffset } }: any) => {
|
|
245
|
-
|
|
246
|
-
|
|
269
|
+
setShowTitle(contentOffset.y > 30)
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
const handleGoBack = () => {
|
|
273
|
+
if (navigation?.canGoBack()) {
|
|
274
|
+
navigation.goBack()
|
|
275
|
+
} else {
|
|
276
|
+
navigation.navigate('BottomTab', { screen: 'Cart' })
|
|
277
|
+
}
|
|
278
|
+
}
|
|
247
279
|
|
|
248
280
|
useEffect(() => {
|
|
249
|
-
if (
|
|
281
|
+
if (checkoutFieldsState?.loading || userLoading) return
|
|
282
|
+
if (user?.guest_id) {
|
|
283
|
+
checkGuestValidationFields()
|
|
284
|
+
} else {
|
|
250
285
|
checkValidationFields()
|
|
251
286
|
}
|
|
252
|
-
}, [
|
|
287
|
+
}, [checkoutFieldsState, user, options?.type])
|
|
253
288
|
|
|
254
289
|
useEffect(() => {
|
|
255
290
|
if (cartsToShow?.length === 1) {
|
|
@@ -283,13 +318,25 @@ const MultiCheckoutUI = (props: any) => {
|
|
|
283
318
|
}
|
|
284
319
|
}, [paymethodSelected])
|
|
285
320
|
|
|
321
|
+
const changeActiveState = useCallback((isClosed: boolean, uuid: string) => {
|
|
322
|
+
const isActive = cartsOpened?.includes?.(uuid)
|
|
323
|
+
if (isActive || !isClosed) {
|
|
324
|
+
setCartsOpened(cartsOpened?.filter?.((_uuid) => _uuid !== uuid))
|
|
325
|
+
} else {
|
|
326
|
+
setCartsOpened([
|
|
327
|
+
...cartsOpened,
|
|
328
|
+
uuid
|
|
329
|
+
])
|
|
330
|
+
}
|
|
331
|
+
}, [cartsOpened])
|
|
332
|
+
|
|
286
333
|
return (
|
|
287
334
|
<>
|
|
288
335
|
<SafeAreaView style={{ backgroundColor: theme.colors.backgroundPage }}>
|
|
289
336
|
<View style={styles.wrapperNavbar}>
|
|
290
337
|
<TopHeader>
|
|
291
338
|
<>
|
|
292
|
-
<TopActions onPress={() =>
|
|
339
|
+
<TopActions onPress={() => handleGoBack()}>
|
|
293
340
|
<IconAntDesign
|
|
294
341
|
name='arrowleft'
|
|
295
342
|
size={26}
|
|
@@ -310,7 +357,7 @@ const MultiCheckoutUI = (props: any) => {
|
|
|
310
357
|
</TopHeader>
|
|
311
358
|
</View>
|
|
312
359
|
</SafeAreaView>
|
|
313
|
-
<Container pt={0} noPadding onScroll={handleScroll}>
|
|
360
|
+
<Container pt={0} noPadding onScroll={handleScroll} showsVerticalScrollIndicator={false}>
|
|
314
361
|
<View style={styles.wrapperNavbar}>
|
|
315
362
|
<NavBar
|
|
316
363
|
hideArrowLeft
|
|
@@ -321,8 +368,8 @@ const MultiCheckoutUI = (props: any) => {
|
|
|
321
368
|
paddingTop={Platform.OS === 'ios' ? 0 : 4}
|
|
322
369
|
btnStyle={{ paddingLeft: 0 }}
|
|
323
370
|
titleWrapStyle={{ paddingHorizontal: 0 }}
|
|
324
|
-
|
|
325
|
-
|
|
371
|
+
titleStyle={{ marginRight: 0, marginLeft: 0 }}
|
|
372
|
+
style={{ marginTop: 20 }}
|
|
326
373
|
/>
|
|
327
374
|
</View>
|
|
328
375
|
<ChContainer style={styles.pagePadding}>
|
|
@@ -373,15 +420,11 @@ const MultiCheckoutUI = (props: any) => {
|
|
|
373
420
|
</OText>
|
|
374
421
|
<OButton
|
|
375
422
|
text={t('SIGN_UP', 'Sign up')}
|
|
376
|
-
textStyle={{ color: theme.colors.white }}
|
|
377
423
|
style={{ borderRadius: 7.6, marginTop: 20 }}
|
|
378
424
|
onClick={() => setOpenModal({ ...openModal, signup: true })}
|
|
379
425
|
/>
|
|
380
426
|
<OButton
|
|
381
427
|
text={t('LOGIN', 'Login')}
|
|
382
|
-
textStyle={{ color: theme.colors.primary }}
|
|
383
|
-
bgColor={theme.colors.white}
|
|
384
|
-
borderColor={theme.colors.primary}
|
|
385
428
|
style={{ borderRadius: 7.6, marginTop: 20 }}
|
|
386
429
|
onClick={() => setOpenModal({ ...openModal, login: true })}
|
|
387
430
|
/>
|
|
@@ -403,6 +446,9 @@ const MultiCheckoutUI = (props: any) => {
|
|
|
403
446
|
isCheckout
|
|
404
447
|
phoneUpdate={phoneUpdate}
|
|
405
448
|
togglePhoneUpdate={togglePhoneUpdate}
|
|
449
|
+
isOrderTypeValidationField
|
|
450
|
+
requiredFields={requiredFields}
|
|
451
|
+
checkoutFields={checkoutFields}
|
|
406
452
|
/>
|
|
407
453
|
)}
|
|
408
454
|
</ChUserDetails>
|
|
@@ -514,6 +560,9 @@ const MultiCheckoutUI = (props: any) => {
|
|
|
514
560
|
hideDriverTip={configs?.multi_business_checkout_show_combined_driver_tip?.value === '1'}
|
|
515
561
|
onNavigationRedirect={(route: string, params: any) => props.navigation.navigate(route, params)}
|
|
516
562
|
businessConfigs={cart?.business?.configs}
|
|
563
|
+
cartsOpened={cartsOpened}
|
|
564
|
+
changeActiveState={changeActiveState}
|
|
565
|
+
isActive={cartsOpened?.includes?.(cart?.uuid)}
|
|
517
566
|
/>
|
|
518
567
|
{openCarts.length > 1 && (
|
|
519
568
|
<View style={{ height: 8, backgroundColor: theme.colors.backgroundGray100, marginTop: 13, marginHorizontal: -40 }} />
|
|
@@ -623,30 +672,33 @@ const MultiCheckoutUI = (props: any) => {
|
|
|
623
672
|
</ScrollView>
|
|
624
673
|
</OModal>
|
|
625
674
|
<OModal
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
675
|
+
open={isOpen}
|
|
676
|
+
onClose={() => setIsOpen(false)}
|
|
677
|
+
>
|
|
678
|
+
<View style={styles.detailWrapper}>
|
|
679
|
+
<UserDetails
|
|
680
|
+
isUserDetailsEdit
|
|
681
|
+
useValidationFields
|
|
682
|
+
useDefualtSessionManager
|
|
683
|
+
useSessionUser
|
|
684
|
+
isCheckout
|
|
685
|
+
isEdit
|
|
686
|
+
phoneUpdate={phoneUpdate}
|
|
687
|
+
togglePhoneUpdate={togglePhoneUpdate}
|
|
688
|
+
hideUpdateButton
|
|
689
|
+
handlePlaceOrderAsGuest={handlePlaceOrderAsGuest}
|
|
690
|
+
isCheckoutPlace
|
|
691
|
+
isOrderTypeValidationField
|
|
692
|
+
requiredFields={requiredFields}
|
|
693
|
+
checkoutFields={checkoutFields}
|
|
694
|
+
onClose={() => {
|
|
695
|
+
setIsOpen(false)
|
|
696
|
+
handlePlaceOrder()
|
|
697
|
+
}}
|
|
698
|
+
setIsOpen={setIsOpen}
|
|
699
|
+
/>
|
|
700
|
+
</View>
|
|
701
|
+
</OModal>
|
|
650
702
|
</Container>
|
|
651
703
|
|
|
652
704
|
<FloatingButton
|
|
@@ -72,7 +72,7 @@ export const MultiOrdersDetailsUI = (props: any) => {
|
|
|
72
72
|
navigation?.canGoBack() && navigation.goBack();
|
|
73
73
|
return;
|
|
74
74
|
}
|
|
75
|
-
navigation.navigate('
|
|
75
|
+
navigation.navigate('BottomTab');
|
|
76
76
|
return true
|
|
77
77
|
}
|
|
78
78
|
|
|
@@ -101,6 +101,7 @@ export const MultiOrdersDetailsUI = (props: any) => {
|
|
|
101
101
|
style={styles.btnBackArrow}
|
|
102
102
|
onClick={() => handleArrowBack()}
|
|
103
103
|
icon={AntDesignIcon}
|
|
104
|
+
useArrow
|
|
104
105
|
iconProps={{
|
|
105
106
|
name: 'arrowleft',
|
|
106
107
|
size: 26
|