ordering-ui-react-native 0.17.71 → 0.17.72-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/BusinessInformation/index.tsx +10 -9
- 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 +3 -2
- 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 +28 -24
- package/themes/business/src/components/BusinessController/index.tsx +0 -1
- package/themes/business/src/components/Chat/index.tsx +149 -118
- package/themes/business/src/components/DriverMap/index.tsx +17 -6
- package/themes/business/src/components/DriverSchedule/index.tsx +45 -8
- 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/MessagesOption/index.tsx +20 -93
- 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 +103 -39
- package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +61 -60
- 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 +114 -123
- package/themes/business/src/components/OrdersOption/index.tsx +17 -15
- package/themes/business/src/components/PreviousMessages/FooterMessageComponent.tsx +103 -0
- package/themes/business/src/components/PreviousMessages/index.tsx +97 -55
- package/themes/business/src/components/PreviousOrders/OrderItem.tsx +17 -12
- package/themes/business/src/components/PreviousOrders/OrderList.tsx +88 -0
- package/themes/business/src/components/PreviousOrders/OrdersGroupedItem.tsx +1 -1
- package/themes/business/src/components/PreviousOrders/index.tsx +186 -114
- package/themes/business/src/components/PreviousOrders/styles.tsx +1 -1
- package/themes/business/src/components/ProductItemAccordion/index.tsx +27 -3
- package/themes/business/src/components/ReviewCustomer/index.tsx +18 -13
- package/themes/business/src/components/StoresList/index.tsx +3 -4
- package/themes/business/src/components/UserProfileForm/index.tsx +14 -15
- package/themes/business/src/components/shared/OLink.tsx +11 -3
- package/themes/business/src/components/shared/OModal.tsx +16 -9
- package/themes/business/src/components/shared/OText.tsx +6 -1
- package/themes/business/src/types/index.tsx +25 -10
- 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 +1 -1
- package/themes/original/src/components/AddressDetails/index.tsx +19 -3
- package/themes/original/src/components/AddressForm/index.tsx +61 -39
- package/themes/original/src/components/AddressList/index.tsx +25 -24
- 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 +80 -66
- package/themes/original/src/components/BusinessController/styles.tsx +12 -5
- 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 +139 -85
- package/themes/original/src/components/BusinessItemAccordion/index.tsx +15 -20
- package/themes/original/src/components/BusinessListingSearch/index.tsx +349 -339
- 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 +15 -7
- package/themes/original/src/components/BusinessProductsList/styles.tsx +8 -3
- package/themes/original/src/components/BusinessProductsListing/UpsellingRedirect.tsx +1 -1
- package/themes/original/src/components/BusinessProductsListing/index.tsx +684 -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/Original/index.tsx +69 -38
- package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +0 -1
- package/themes/original/src/components/BusinessesListing/index.tsx +0 -1
- package/themes/original/src/components/Cart/index.tsx +77 -79
- 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 +356 -124
- package/themes/original/src/components/CitiesControl/index.tsx +1 -1
- 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 +2 -6
- package/themes/original/src/components/FavoriteList/index.tsx +1 -35
- package/themes/original/src/components/FloatingButton/index.tsx +10 -13
- package/themes/original/src/components/GPSButton/index.tsx +6 -4
- 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 +60 -5
- package/themes/original/src/components/Help/index.tsx +2 -2
- 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 +91 -25
- package/themes/original/src/components/LoginForm/index.tsx +64 -34
- package/themes/original/src/components/LottieAnimation/index.tsx +88 -63
- package/themes/original/src/components/MessageListing/index.tsx +16 -42
- package/themes/original/src/components/Messages/index.tsx +14 -7
- package/themes/original/src/components/MomentOption/index.tsx +193 -90
- package/themes/original/src/components/MomentSelector/index.tsx +1 -1
- package/themes/original/src/components/MultiCart/index.tsx +41 -54
- package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +162 -50
- package/themes/original/src/components/MultiCheckout/index.tsx +329 -100
- 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 +54 -21
- package/themes/original/src/components/MultiOrdersDetails/styles.tsx +1 -1
- package/themes/original/src/components/MyOrders/index.tsx +40 -29
- package/themes/original/src/components/NavBar/index.tsx +20 -17
- package/themes/original/src/components/NotFoundSource/index.tsx +14 -10
- package/themes/original/src/components/Notifications/index.tsx +42 -52
- 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 +21 -5
- package/themes/original/src/components/OrderDetails/index.tsx +191 -363
- 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 +30 -56
- package/themes/original/src/components/OrderSummary/index.tsx +88 -59
- package/themes/original/src/components/OrderTypeSelector/index.tsx +2 -1
- package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +14 -14
- package/themes/original/src/components/OrdersOption/index.tsx +68 -87
- package/themes/original/src/components/OrdersOption/styles.tsx +1 -1
- package/themes/original/src/components/PageBanner/index.tsx +98 -38
- package/themes/original/src/components/PageBanner/styles.tsx +0 -10
- 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 +78 -35
- package/themes/original/src/components/PhoneInputNumber/index.tsx +18 -4
- package/themes/original/src/components/ProductForm/index.tsx +104 -29
- package/themes/original/src/components/ProductForm/styles.tsx +5 -5
- package/themes/original/src/components/ProductItemAccordion/index.tsx +12 -9
- package/themes/original/src/components/ProductOptionSubOption/index.tsx +20 -18
- package/themes/original/src/components/ProductOptionSubOption/styles.tsx +5 -9
- 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 +2 -2
- package/themes/original/src/components/Promotions/styles.tsx +3 -1
- package/themes/original/src/components/ReviewProducts/index.tsx +16 -7
- package/themes/original/src/components/ScheduleAccordion/index.tsx +3 -3
- 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 -27
- package/themes/original/src/components/SingleOrderCard/index.tsx +102 -63
- package/themes/original/src/components/SingleOrderCard/styles.tsx +1 -1
- package/themes/original/src/components/SingleProductCard/index.tsx +72 -31
- package/themes/original/src/components/SingleProductCard/styles.tsx +20 -4
- package/themes/original/src/components/SingleProductReview/styles.tsx +1 -1
- package/themes/original/src/components/StripeCardsList/index.tsx +49 -5
- package/themes/original/src/components/StripeElementsForm/index.tsx +48 -34
- package/themes/original/src/components/StripeElementsForm/naked.tsx +12 -1
- 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 +3 -1
- 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 +17 -21
- package/themes/original/src/components/UserProfileForm/styles.tsx +7 -0
- package/themes/original/src/components/UserVerification/index.tsx +55 -50
- 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 +66 -30
- package/themes/original/src/components/Wallets/styles.tsx +3 -4
- 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/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,8 +1,9 @@
|
|
|
1
|
-
import React, { useState, useEffect } from 'react';
|
|
2
|
-
import { View, StyleSheet, TouchableOpacity, Platform, I18nManager,
|
|
1
|
+
import React, { useState, useEffect, useCallback } from 'react';
|
|
2
|
+
import { View, StyleSheet, TouchableOpacity, Platform, I18nManager, ScrollView } from 'react-native';
|
|
3
3
|
import { initStripe, useConfirmPayment } from '@stripe/stripe-react-native';
|
|
4
4
|
import Picker from 'react-native-country-picker-modal';
|
|
5
5
|
import MaterialIcons from 'react-native-vector-icons/MaterialIcons'
|
|
6
|
+
import ReactNativeHapticFeedback from "react-native-haptic-feedback";
|
|
6
7
|
import {
|
|
7
8
|
Checkout as CheckoutController,
|
|
8
9
|
useOrder,
|
|
@@ -14,9 +15,10 @@ import {
|
|
|
14
15
|
useConfig,
|
|
15
16
|
useToast,
|
|
16
17
|
ToastType,
|
|
18
|
+
useEvent
|
|
17
19
|
} from 'ordering-components/native';
|
|
18
20
|
import { useTheme } from 'styled-components/native';
|
|
19
|
-
import { OText, OIcon, OModal } from '../shared';
|
|
21
|
+
import { OText, OIcon, OModal, OButton } from '../shared';
|
|
20
22
|
|
|
21
23
|
import { AddressDetails } from '../AddressDetails';
|
|
22
24
|
import { PaymentOptions } from '../PaymentOptions';
|
|
@@ -25,6 +27,8 @@ import { NotFoundSource } from '../NotFoundSource';
|
|
|
25
27
|
import { UserDetails } from '../UserDetails';
|
|
26
28
|
import { PaymentOptionWallet } from '../PaymentOptionWallet';
|
|
27
29
|
import { PlaceSpot } from '../PlaceSpot'
|
|
30
|
+
import { SignupForm } from '../SignupForm'
|
|
31
|
+
import { LoginForm } from '../LoginForm'
|
|
28
32
|
|
|
29
33
|
import {
|
|
30
34
|
ChContainer,
|
|
@@ -52,6 +56,8 @@ import { OrderSummary } from '../OrderSummary';
|
|
|
52
56
|
import { getTypesText } from '../../utils';
|
|
53
57
|
import { CartStoresListing } from '../CartStoresListing';
|
|
54
58
|
import { PaymentOptionsWebView } from '../../../../../src/components/PaymentOptionsWebView';
|
|
59
|
+
import { DeviceOrientationMethods } from '../../../../../src/hooks/DeviceOrientation'
|
|
60
|
+
const { useDeviceOrientation } = DeviceOrientationMethods
|
|
55
61
|
|
|
56
62
|
const mapConfigs = {
|
|
57
63
|
mapZoom: 16,
|
|
@@ -78,6 +84,7 @@ const CheckoutUI = (props: any) => {
|
|
|
78
84
|
placing,
|
|
79
85
|
cartState,
|
|
80
86
|
cartUuid,
|
|
87
|
+
loyaltyPlansState,
|
|
81
88
|
businessDetails,
|
|
82
89
|
paymethodSelected,
|
|
83
90
|
handlePaymethodChange,
|
|
@@ -88,7 +95,8 @@ const CheckoutUI = (props: any) => {
|
|
|
88
95
|
handleChangeDeliveryOption,
|
|
89
96
|
currency,
|
|
90
97
|
merchantId,
|
|
91
|
-
setPlaceSpotNumber
|
|
98
|
+
setPlaceSpotNumber,
|
|
99
|
+
maxDate
|
|
92
100
|
} = props
|
|
93
101
|
|
|
94
102
|
const theme = useTheme();
|
|
@@ -128,12 +136,17 @@ const CheckoutUI = (props: any) => {
|
|
|
128
136
|
|
|
129
137
|
const [, { showToast }] = useToast();
|
|
130
138
|
const [, t] = useLanguage();
|
|
131
|
-
const [{ user, token }] = useSession();
|
|
139
|
+
const [{ user, token }, { login }] = useSession();
|
|
132
140
|
const [ordering] = useApi()
|
|
133
141
|
const [{ configs }] = useConfig();
|
|
134
142
|
const [{ parsePrice, parseDate }] = useUtils();
|
|
135
143
|
const [{ options, carts, loading }, { confirmCart }] = useOrder();
|
|
136
144
|
const [validationFields] = useValidationFields();
|
|
145
|
+
const [events] = useEvent()
|
|
146
|
+
const [orientationState] = useDeviceOrientation();
|
|
147
|
+
const [isReadMore, setIsReadMore] = useState(false)
|
|
148
|
+
const [lengthMore, setLengthMore] = useState(false)
|
|
149
|
+
const WIDTH_SCREEN = orientationState?.dimensions?.width
|
|
137
150
|
|
|
138
151
|
const [errorCash, setErrorCash] = useState(false);
|
|
139
152
|
const [userErrors, setUserErrors] = useState<any>([]);
|
|
@@ -145,15 +158,29 @@ const CheckoutUI = (props: any) => {
|
|
|
145
158
|
const [webviewPaymethod, setWebviewPaymethod] = useState<any>(null)
|
|
146
159
|
const [isOpen, setIsOpen] = useState(false)
|
|
147
160
|
const [requiredFields, setRequiredFields] = useState<any>([])
|
|
148
|
-
|
|
161
|
+
const [openModal, setOpenModal] = useState({ login: false, signup: false })
|
|
162
|
+
const [allowedGuest, setAllowedGuest] = useState(false)
|
|
163
|
+
const [placeByMethodPay, setPlaceByMethodPay] = useState(false)
|
|
164
|
+
const [methodPaySupported, setMethodPaySupported] = useState({ enabled: false, message: null, loading: true })
|
|
165
|
+
const [cardList, setCardList] = useState<any>({ cards: [], loading: false, error: null })
|
|
166
|
+
const cardsMethods = ['credomatic']
|
|
149
167
|
const placeSpotTypes = [3, 4, 5]
|
|
150
168
|
const placeSpotsEnabled = placeSpotTypes.includes(options?.type)
|
|
169
|
+
const isGiftCardCart = !cart?.business_id
|
|
151
170
|
const businessConfigs = businessDetails?.business?.configs ?? []
|
|
152
171
|
const isWalletCashEnabled = businessConfigs.find((config: any) => config.key === 'wallet_cash_enabled')?.value === '1'
|
|
153
172
|
const isWalletCreditPointsEnabled = businessConfigs.find((config: any) => config.key === 'wallet_credit_point_enabled')?.value === '1'
|
|
154
173
|
const isWalletEnabled = configs?.cash_wallet?.value && configs?.wallet_enabled?.value === '1' && (isWalletCashEnabled || isWalletCreditPointsEnabled)
|
|
155
174
|
const isBusinessChangeEnabled = configs?.cart_change_business_validation?.value === '1'
|
|
156
|
-
const isChewLayout = theme?.
|
|
175
|
+
const isChewLayout = theme?.header?.components?.layout?.type?.toLowerCase() === 'chew'
|
|
176
|
+
const hideBusinessAddress = theme?.checkout?.components?.business?.components?.address?.hidden
|
|
177
|
+
const hideBusinessDetails = theme?.checkout?.components?.business?.hidden
|
|
178
|
+
const hideBusinessMap = theme?.checkout?.components?.business?.components?.map?.hidden
|
|
179
|
+
const hideCustomerDetails = theme?.checkout?.components?.customer?.hidden
|
|
180
|
+
|
|
181
|
+
const creditPointPlan = loyaltyPlansState?.result?.find((loyal: any) => loyal.type === 'credit_point')
|
|
182
|
+
const creditPointPlanOnBusiness = creditPointPlan?.businesses?.find((b: any) => b.business_id === cart?.business_id && b.accumulates)
|
|
183
|
+
const methodsPay = ['google_pay', 'apple_pay']
|
|
157
184
|
|
|
158
185
|
const isPreOrder = configs?.preorder_status_enabled?.value === '1'
|
|
159
186
|
const subtotalWithTaxes = cart?.taxes?.reduce((acc: any, item: any) => {
|
|
@@ -161,12 +188,18 @@ const CheckoutUI = (props: any) => {
|
|
|
161
188
|
return acc = acc + item?.summary?.tax
|
|
162
189
|
return acc = acc
|
|
163
190
|
}, cart?.subtotal)
|
|
191
|
+
|
|
192
|
+
const validateCommentsCartField = validationFields?.fields?.checkout?.comments?.enabled && validationFields?.fields?.checkout?.comments?.required && (cart?.comment === null || cart?.comment?.trim().length === 0)
|
|
193
|
+
|
|
164
194
|
const isDisabledButtonPlace = loading || !cart?.valid || (!paymethodSelected && cart?.balance > 0) ||
|
|
165
195
|
placing || errorCash || subtotalWithTaxes < cart?.minimum ||
|
|
196
|
+
(cardsMethods.includes(paymethodSelected?.gateway) && cardList?.cards?.length === 0) ||
|
|
166
197
|
(options.type === 1 &&
|
|
167
198
|
validationFields?.fields?.checkout?.driver_tip?.enabled &&
|
|
168
199
|
validationFields?.fields?.checkout?.driver_tip?.required &&
|
|
169
|
-
(Number(cart?.driver_tip) <= 0))
|
|
200
|
+
(Number(cart?.driver_tip) <= 0)) ||
|
|
201
|
+
(validateCommentsCartField)
|
|
202
|
+
|| (methodsPay.includes(paymethodSelected?.gateway) && (!methodPaySupported.enabled || methodPaySupported.loading))
|
|
170
203
|
|
|
171
204
|
const driverTipsOptions = typeof configs?.driver_tip_options?.value === 'string'
|
|
172
205
|
? JSON.parse(configs?.driver_tip_options?.value) || []
|
|
@@ -176,6 +209,9 @@ const CheckoutUI = (props: any) => {
|
|
|
176
209
|
|
|
177
210
|
const cartsWithProducts = carts && Object.values(carts).filter((cart: any) => cart.products.length) || null
|
|
178
211
|
|
|
212
|
+
const isSandboxCredomatic = configs?.credomatic_integration_sandbox?.value === '1'
|
|
213
|
+
const credomaticKeyId = isSandboxCredomatic ? configs?.credomatic_integration_public_sandbox_key?.value : configs?.credomatic_integration_public_production_key?.value
|
|
214
|
+
const credomaticUrl = `https://integrations.ordering.co/credomatic/front/auth_mobile.html?title=${t('CREDOMATIC_PAYMENT', 'Credomatic payment')}&body=${t('CREDOMATIC_PROCESSING', 'Processing transaction')}`
|
|
179
215
|
const deliveryOptions = instructionsOptions?.result && instructionsOptions?.result?.filter((option: any) => option?.enabled)?.map((option: any) => {
|
|
180
216
|
return {
|
|
181
217
|
value: option?.id, key: option?.id, label: t(option?.name.toUpperCase().replace(/\s/g, '_'), option?.name)
|
|
@@ -188,9 +224,30 @@ const CheckoutUI = (props: any) => {
|
|
|
188
224
|
}
|
|
189
225
|
}
|
|
190
226
|
|
|
227
|
+
const vibrateApp = (impact?: string) => {
|
|
228
|
+
const options = {
|
|
229
|
+
enableVibrateFallback: true,
|
|
230
|
+
ignoreAndroidSystemSettings: false
|
|
231
|
+
};
|
|
232
|
+
ReactNativeHapticFeedback.trigger(impact || "impactLight", options);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
const handleSuccessSignup = (user: any) => {
|
|
236
|
+
login({
|
|
237
|
+
user,
|
|
238
|
+
token: user?.session?.access_token
|
|
239
|
+
})
|
|
240
|
+
setOpenModal({ ...openModal, signup: false })
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
const handleSuccessLogin = (user: any) => {
|
|
244
|
+
if (user) setOpenModal({ ...openModal, login: false })
|
|
245
|
+
}
|
|
246
|
+
|
|
191
247
|
const handlePlaceOrder = (confirmPayment: any, forcePlace: boolean = false) => {
|
|
192
|
-
if (!userErrors.length && !requiredFields?.length || forcePlace) {
|
|
193
|
-
|
|
248
|
+
if (!userErrors.length && (!requiredFields?.length || allowedGuest) || forcePlace) {
|
|
249
|
+
vibrateApp()
|
|
250
|
+
handlerClickPlaceOrder && handlerClickPlaceOrder(null, { isNative: true }, confirmPayment)
|
|
194
251
|
return
|
|
195
252
|
}
|
|
196
253
|
if (requiredFields?.length) {
|
|
@@ -205,6 +262,11 @@ const CheckoutUI = (props: any) => {
|
|
|
205
262
|
setIsUserDetailsEdit(true)
|
|
206
263
|
}
|
|
207
264
|
|
|
265
|
+
const handlePlaceOrderAsGuest = () => {
|
|
266
|
+
setIsOpen(false)
|
|
267
|
+
handlerClickPlaceOrder && handlerClickPlaceOrder()
|
|
268
|
+
}
|
|
269
|
+
|
|
208
270
|
const handlePaymentMethodClick = (paymethod: any) => {
|
|
209
271
|
setShowGateway({ closedByUser: false, open: true })
|
|
210
272
|
setWebviewPaymethod(paymethod)
|
|
@@ -223,7 +285,7 @@ const CheckoutUI = (props: any) => {
|
|
|
223
285
|
const checkValidationFields = () => {
|
|
224
286
|
setUserErrors([])
|
|
225
287
|
const errors = []
|
|
226
|
-
const notFields = ['coupon', 'driver_tip', 'mobile_phone', 'address', 'zipcode', 'address_notes']
|
|
288
|
+
const notFields = ['coupon', 'driver_tip', 'mobile_phone', 'address', 'zipcode', 'address_notes', 'comments']
|
|
227
289
|
const _requiredFields: any = []
|
|
228
290
|
|
|
229
291
|
Object.values(validationFields?.fields?.checkout).map((field: any) => {
|
|
@@ -270,7 +332,11 @@ const CheckoutUI = (props: any) => {
|
|
|
270
332
|
|
|
271
333
|
useEffect(() => {
|
|
272
334
|
if (cart?.products?.length === 0) {
|
|
273
|
-
|
|
335
|
+
if (cart?.business?.slug) {
|
|
336
|
+
onNavigationRedirect('Business', { store: cart?.business?.slug, header: null, logo: null, fromMulti: props.fromMulti })
|
|
337
|
+
} else {
|
|
338
|
+
onNavigationRedirect('Wallets')
|
|
339
|
+
}
|
|
274
340
|
}
|
|
275
341
|
}, [cart?.products])
|
|
276
342
|
|
|
@@ -293,6 +359,24 @@ const CheckoutUI = (props: any) => {
|
|
|
293
359
|
)
|
|
294
360
|
}
|
|
295
361
|
|
|
362
|
+
useEffect(() => {
|
|
363
|
+
cart && events.emit('checkout_started', cart)
|
|
364
|
+
}, [])
|
|
365
|
+
|
|
366
|
+
useEffect(() => {
|
|
367
|
+
if (cart?.paymethod_data?.gateway === 'credomatic') {
|
|
368
|
+
if (cart?.paymethod_data?.status === 2) {
|
|
369
|
+
setShowGateway({ ...showGateway, open: true })
|
|
370
|
+
} else if (cart?.paymethod_data?.gateway === 'credomatic' && cart?.paymethod_data?.status === 4) {
|
|
371
|
+
setShowGateway({ ...showGateway, open: false })
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
}, [cart?.paymethod_data])
|
|
375
|
+
|
|
376
|
+
const onTextLayout = useCallback((e: any) => {
|
|
377
|
+
setLengthMore((e.nativeEvent.lines.length == 3 && e.nativeEvent.lines[2].width > WIDTH_SCREEN * .76) || e.nativeEvent.lines.length > 3)
|
|
378
|
+
}, [])
|
|
379
|
+
|
|
296
380
|
return (
|
|
297
381
|
<>
|
|
298
382
|
<Container noPadding>
|
|
@@ -300,11 +384,12 @@ const CheckoutUI = (props: any) => {
|
|
|
300
384
|
<NavBar
|
|
301
385
|
title={t('CHECKOUT', 'Checkout')}
|
|
302
386
|
titleAlign={'center'}
|
|
303
|
-
onActionLeft={() =>
|
|
387
|
+
onActionLeft={() => onNavigationRedirect('BottomTab', { screen: 'Cart' }, !props.fromMulti)}
|
|
304
388
|
showCall={false}
|
|
305
|
-
btnStyle={{ paddingLeft: 0 }}
|
|
389
|
+
btnStyle={{ paddingLeft: 0, paddingTop: Platform.OS == 'ios' ? 0 : 2 }}
|
|
306
390
|
titleWrapStyle={{ paddingHorizontal: 0 }}
|
|
307
391
|
titleStyle={{ marginRight: 0, marginLeft: 0 }}
|
|
392
|
+
style={{ marginTop: 20 }}
|
|
308
393
|
/>
|
|
309
394
|
</View>
|
|
310
395
|
<ChContainer style={styles.pagePadding}>
|
|
@@ -347,82 +432,135 @@ const CheckoutUI = (props: any) => {
|
|
|
347
432
|
<View style={{ height: 8, backgroundColor: theme.colors.backgroundGray100, marginTop: 18, marginHorizontal: -40 }} />
|
|
348
433
|
</ChSection>
|
|
349
434
|
|
|
350
|
-
|
|
351
|
-
<
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
435
|
+
{!isGiftCardCart && !hideBusinessDetails && (
|
|
436
|
+
<ChSection>
|
|
437
|
+
<ChBusinessDetails>
|
|
438
|
+
{
|
|
439
|
+
(businessDetails?.loading || cartState.loading || !businessDetails?.business || Object.values(businessDetails?.business).length === 0) &&
|
|
440
|
+
!businessDetails?.error &&
|
|
441
|
+
(
|
|
442
|
+
<Placeholder Animation={Fade}>
|
|
443
|
+
<PlaceholderLine height={20} />
|
|
444
|
+
<PlaceholderLine height={12} />
|
|
445
|
+
<PlaceholderLine height={12} />
|
|
446
|
+
<PlaceholderLine height={12} style={{ marginBottom: 20 }} />
|
|
447
|
+
</Placeholder>
|
|
448
|
+
)}
|
|
449
|
+
{
|
|
450
|
+
!cartState.loading &&
|
|
451
|
+
businessDetails?.business &&
|
|
452
|
+
Object.values(businessDetails?.business).length > 0 &&
|
|
453
|
+
(
|
|
454
|
+
<>
|
|
455
|
+
<HeaderTitle text={t('BUSINESS_DETAILS', 'Business Details')} />
|
|
456
|
+
<View>
|
|
457
|
+
<OText size={12} lineHeight={18} weight={'400'}>
|
|
458
|
+
{businessDetails?.business?.name}
|
|
459
|
+
</OText>
|
|
460
|
+
<OText size={12} lineHeight={18} weight={'400'}>
|
|
461
|
+
{businessDetails?.business?.email}
|
|
462
|
+
</OText>
|
|
463
|
+
<OText size={12} lineHeight={18} weight={'400'}>
|
|
464
|
+
{businessDetails?.business?.cellphone}
|
|
465
|
+
</OText>
|
|
466
|
+
{!hideBusinessAddress && (
|
|
467
|
+
<OText size={12} lineHeight={18} weight={'400'}>
|
|
468
|
+
{businessDetails?.business?.address}
|
|
469
|
+
</OText>
|
|
470
|
+
)}
|
|
471
|
+
{businessDetails?.business?.address_notes && (
|
|
472
|
+
<>
|
|
473
|
+
<OText
|
|
474
|
+
size={12}
|
|
475
|
+
lineHeight={18}
|
|
476
|
+
numberOfLines={isReadMore ? 20 : 3}
|
|
477
|
+
onTextLayout={onTextLayout}
|
|
478
|
+
>
|
|
479
|
+
{businessDetails?.business?.address_notes}
|
|
480
|
+
</OText>
|
|
481
|
+
{lengthMore && (
|
|
482
|
+
<TouchableOpacity
|
|
483
|
+
onPress={() => setIsReadMore(!isReadMore)}
|
|
484
|
+
>
|
|
485
|
+
<OText size={12} color={theme.colors.primary}>{isReadMore ? t('SHOW_LESS', 'Show less') : t('READ_MORE', 'Read more')}</OText>
|
|
486
|
+
</TouchableOpacity>
|
|
487
|
+
)}
|
|
488
|
+
</>
|
|
489
|
+
)}
|
|
490
|
+
</View>
|
|
491
|
+
</>
|
|
492
|
+
)}
|
|
493
|
+
{businessDetails?.error && businessDetails?.error?.length > 0 && (
|
|
494
|
+
<View>
|
|
495
|
+
<HeaderTitle text={t('BUSINESS_DETAILS', 'Business Details')} />
|
|
496
|
+
<NotFoundSource
|
|
497
|
+
content={businessDetails?.error[0]?.message || businessDetails?.error[0]}
|
|
498
|
+
/>
|
|
499
|
+
</View>
|
|
500
|
+
)}
|
|
501
|
+
</ChBusinessDetails>
|
|
502
|
+
<View style={{ height: 8, backgroundColor: theme.colors.backgroundGray100, marginHorizontal: -40 }} />
|
|
503
|
+
</ChSection>
|
|
504
|
+
)}
|
|
505
|
+
{!hideCustomerDetails && (
|
|
506
|
+
|
|
507
|
+
<ChSection>
|
|
508
|
+
<ChUserDetails>
|
|
509
|
+
{cartState.loading ? (
|
|
356
510
|
<Placeholder Animation={Fade}>
|
|
357
511
|
<PlaceholderLine height={20} />
|
|
358
512
|
<PlaceholderLine height={12} />
|
|
359
513
|
<PlaceholderLine height={12} />
|
|
360
514
|
<PlaceholderLine height={12} style={{ marginBottom: 20 }} />
|
|
361
515
|
</Placeholder>
|
|
362
|
-
)
|
|
363
|
-
|
|
364
|
-
!cartState.loading &&
|
|
365
|
-
businessDetails?.business &&
|
|
366
|
-
Object.values(businessDetails?.business).length > 0 &&
|
|
367
|
-
(
|
|
368
|
-
<>
|
|
369
|
-
<HeaderTitle text={t('BUSINESS_DETAILS', 'Business Details')} />
|
|
516
|
+
) : (
|
|
517
|
+
(user?.guest_id && !allowedGuest) ? (
|
|
370
518
|
<View>
|
|
371
|
-
<
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
{
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
{
|
|
382
|
-
|
|
519
|
+
<HeaderTitle text={t('CUSTOMER_DETAILS', 'Customer details')} />
|
|
520
|
+
<OButton
|
|
521
|
+
text={t('SIGN_UP', 'Sign up')}
|
|
522
|
+
textStyle={{ color: theme.colors.white }}
|
|
523
|
+
style={{ borderRadius: 7.6, marginTop: 20 }}
|
|
524
|
+
onClick={() => setOpenModal({ ...openModal, signup: true })}
|
|
525
|
+
/>
|
|
526
|
+
<OButton
|
|
527
|
+
text={t('LOGIN', 'Login')}
|
|
528
|
+
textStyle={{ color: theme.colors.primary }}
|
|
529
|
+
bgColor={theme.colors.white}
|
|
530
|
+
borderColor={theme.colors.primary}
|
|
531
|
+
style={{ borderRadius: 7.6, marginTop: 20 }}
|
|
532
|
+
onClick={() => setOpenModal({ ...openModal, login: true })}
|
|
533
|
+
/>
|
|
534
|
+
<OButton
|
|
535
|
+
text={t('CONTINUE_AS_GUEST', 'Continue as guest')}
|
|
536
|
+
textStyle={{ color: theme.colors.black }}
|
|
537
|
+
bgColor={theme.colors.white}
|
|
538
|
+
borderColor={theme.colors.black}
|
|
539
|
+
style={{ borderRadius: 7.6, marginTop: 20 }}
|
|
540
|
+
onClick={() => setAllowedGuest(true)}
|
|
541
|
+
/>
|
|
383
542
|
</View>
|
|
384
|
-
|
|
543
|
+
) : (
|
|
544
|
+
<UserDetails
|
|
545
|
+
isUserDetailsEdit={isUserDetailsEdit}
|
|
546
|
+
HeaderTitle={<HeaderTitle text={t('CUSTOMER_DETAILS', 'Customer Details')} mb={0} />}
|
|
547
|
+
cartStatus={cart?.status}
|
|
548
|
+
businessId={cart?.business_id}
|
|
549
|
+
useValidationFields
|
|
550
|
+
useDefualtSessionManager
|
|
551
|
+
useSessionUser
|
|
552
|
+
isCheckout
|
|
553
|
+
phoneUpdate={phoneUpdate}
|
|
554
|
+
togglePhoneUpdate={togglePhoneUpdate}
|
|
555
|
+
/>
|
|
556
|
+
)
|
|
385
557
|
)}
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
content={businessDetails?.error[0]?.message || businessDetails?.error[0]}
|
|
391
|
-
/>
|
|
392
|
-
</View>
|
|
393
|
-
)}
|
|
394
|
-
</ChBusinessDetails>
|
|
395
|
-
<View style={{ height: 8, backgroundColor: theme.colors.backgroundGray100, marginHorizontal: -40 }} />
|
|
396
|
-
</ChSection>
|
|
397
|
-
|
|
398
|
-
<ChSection>
|
|
399
|
-
<ChUserDetails>
|
|
400
|
-
{cartState.loading ? (
|
|
401
|
-
<Placeholder Animation={Fade}>
|
|
402
|
-
<PlaceholderLine height={20} />
|
|
403
|
-
<PlaceholderLine height={12} />
|
|
404
|
-
<PlaceholderLine height={12} />
|
|
405
|
-
<PlaceholderLine height={12} style={{ marginBottom: 20 }} />
|
|
406
|
-
</Placeholder>
|
|
407
|
-
) : (
|
|
408
|
-
<UserDetails
|
|
409
|
-
isUserDetailsEdit={isUserDetailsEdit}
|
|
410
|
-
HeaderTitle={<HeaderTitle text={t('CUSTOMER_DETAILS', 'Customer Details')} mb={0} />}
|
|
411
|
-
cartStatus={cart?.status}
|
|
412
|
-
businessId={cart?.business_id}
|
|
413
|
-
useValidationFields
|
|
414
|
-
useDefualtSessionManager
|
|
415
|
-
useSessionUser
|
|
416
|
-
isCheckout
|
|
417
|
-
phoneUpdate={phoneUpdate}
|
|
418
|
-
togglePhoneUpdate={togglePhoneUpdate}
|
|
419
|
-
/>
|
|
420
|
-
)}
|
|
421
|
-
</ChUserDetails>
|
|
422
|
-
<View style={{ height: 8, backgroundColor: theme.colors.backgroundGray100, marginHorizontal: -40 }} />
|
|
423
|
-
</ChSection>
|
|
558
|
+
</ChUserDetails>
|
|
559
|
+
<View style={{ height: 8, backgroundColor: theme.colors.backgroundGray100, marginHorizontal: -40 }} />
|
|
560
|
+
</ChSection>
|
|
561
|
+
)}
|
|
424
562
|
|
|
425
|
-
{options?.type === 1 && (
|
|
563
|
+
{options?.type === 1 && !isGiftCardCart && (
|
|
426
564
|
<DeliveryOptionsContainer>
|
|
427
565
|
{cartState.loading || deliveryOptionSelected === undefined ? (
|
|
428
566
|
<View style={{ height: 110 }}>
|
|
@@ -452,7 +590,7 @@ const CheckoutUI = (props: any) => {
|
|
|
452
590
|
<OText
|
|
453
591
|
size={14}
|
|
454
592
|
>
|
|
455
|
-
{deliveryOptions.find((option: any) => option.value === deliveryOptionSelected)
|
|
593
|
+
{deliveryOptions.find((option: any) => option.value === deliveryOptionSelected)?.label}
|
|
456
594
|
</OText>
|
|
457
595
|
<MaterialIcons name='keyboard-arrow-down' style={styles.icon} />
|
|
458
596
|
</DeliveryOptionItem>
|
|
@@ -463,7 +601,7 @@ const CheckoutUI = (props: any) => {
|
|
|
463
601
|
data: deliveryOptions || [],
|
|
464
602
|
renderItem: ({ item }: any) => (
|
|
465
603
|
<TouchableOpacity
|
|
466
|
-
onPress={() => changeDeliveryOption(item.value)}
|
|
604
|
+
onPress={() => !!cart?.uuid && changeDeliveryOption(item.value)}
|
|
467
605
|
disabled={
|
|
468
606
|
deliveryOptionSelected === item.value
|
|
469
607
|
}
|
|
@@ -501,28 +639,30 @@ const CheckoutUI = (props: any) => {
|
|
|
501
639
|
</ChSection>
|
|
502
640
|
)}
|
|
503
641
|
|
|
504
|
-
|
|
505
|
-
<
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
<
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
642
|
+
{!isGiftCardCart && !hideBusinessMap && (
|
|
643
|
+
<ChSection>
|
|
644
|
+
<ChAddress>
|
|
645
|
+
{(businessDetails?.loading || cartState.loading) ? (
|
|
646
|
+
<Placeholder Animation={Fade}>
|
|
647
|
+
<PlaceholderLine height={20} style={{ marginBottom: 50 }} />
|
|
648
|
+
<PlaceholderLine height={100} />
|
|
649
|
+
</Placeholder>
|
|
650
|
+
) : (
|
|
651
|
+
<AddressDetails
|
|
652
|
+
navigation={navigation}
|
|
653
|
+
location={options?.address?.location}
|
|
654
|
+
businessLogo={businessDetails?.business?.logo}
|
|
655
|
+
isCartPending={cart?.status === 2}
|
|
656
|
+
uuid={cartUuid}
|
|
657
|
+
apiKey={configs?.google_maps_api_key?.value}
|
|
658
|
+
mapConfigs={mapConfigs}
|
|
659
|
+
HeaderTitle={<HeaderTitle text={t('DELIVERY_ADDRESS', 'Delivery address')} mb={0} />}
|
|
660
|
+
/>
|
|
661
|
+
)}
|
|
662
|
+
</ChAddress>
|
|
663
|
+
<View style={{ height: 8, backgroundColor: theme.colors.backgroundGray100, marginTop: 13, marginHorizontal: -40 }} />
|
|
664
|
+
</ChSection>
|
|
665
|
+
)}
|
|
526
666
|
|
|
527
667
|
{!cartState.loading &&
|
|
528
668
|
cart &&
|
|
@@ -531,6 +671,7 @@ const CheckoutUI = (props: any) => {
|
|
|
531
671
|
cart?.status !== 2 &&
|
|
532
672
|
validationFields?.fields?.checkout?.driver_tip?.enabled &&
|
|
533
673
|
driverTipsOptions && driverTipsOptions?.length > 0 &&
|
|
674
|
+
!isGiftCardCart &&
|
|
534
675
|
(
|
|
535
676
|
<ChSection>
|
|
536
677
|
<ChDriverTips>
|
|
@@ -538,13 +679,14 @@ const CheckoutUI = (props: any) => {
|
|
|
538
679
|
<DriverTips
|
|
539
680
|
uuid={cartUuid}
|
|
540
681
|
businessId={cart?.business_id}
|
|
541
|
-
driverTipsOptions={driverTipsOptions}
|
|
542
|
-
isFixedPrice={parseInt(configs?.driver_tip_type?.value, 10) === 1
|
|
682
|
+
driverTipsOptions={!driverTipsOptions.includes(0) ? [0, ...driverTipsOptions] : driverTipsOptions}
|
|
683
|
+
isFixedPrice={parseInt(configs?.driver_tip_type?.value, 10) === 1}
|
|
543
684
|
isDriverTipUseCustom={!!parseInt(configs?.driver_tip_use_custom?.value, 10)}
|
|
544
|
-
driverTip={parseInt(configs?.driver_tip_type?.value, 10) === 1
|
|
685
|
+
driverTip={parseInt(configs?.driver_tip_type?.value, 10) === 1
|
|
545
686
|
? cart?.driver_tip
|
|
546
687
|
: cart?.driver_tip_rate}
|
|
547
688
|
useOrderContext
|
|
689
|
+
cart={cart}
|
|
548
690
|
/>
|
|
549
691
|
</ChDriverTips>
|
|
550
692
|
</ChSection>
|
|
@@ -566,8 +708,8 @@ const CheckoutUI = (props: any) => {
|
|
|
566
708
|
<PaymentOptions
|
|
567
709
|
cart={cart}
|
|
568
710
|
isDisabled={cart?.status === 2}
|
|
569
|
-
businessId={businessDetails?.business?.id}
|
|
570
|
-
isLoading={businessDetails.loading}
|
|
711
|
+
businessId={!isGiftCardCart ? businessDetails?.business?.id : -1}
|
|
712
|
+
isLoading={!isGiftCardCart ? businessDetails.loading : false}
|
|
571
713
|
paymethods={businessDetails?.business?.paymethods}
|
|
572
714
|
onPaymentChange={handlePaymethodChange}
|
|
573
715
|
errorCash={errorCash}
|
|
@@ -577,6 +719,12 @@ const CheckoutUI = (props: any) => {
|
|
|
577
719
|
handlePaymentMethodClickCustom={handlePaymentMethodClick}
|
|
578
720
|
handlePlaceOrder={handlePlaceOrder}
|
|
579
721
|
merchantId={merchantId}
|
|
722
|
+
setMethodPaySupported={setMethodPaySupported}
|
|
723
|
+
methodPaySupported={methodPaySupported}
|
|
724
|
+
placeByMethodPay={placeByMethodPay}
|
|
725
|
+
setPlaceByMethodPay={setPlaceByMethodPay}
|
|
726
|
+
cardList={cardList}
|
|
727
|
+
setCardList={setCardList}
|
|
580
728
|
/>
|
|
581
729
|
</ChPaymethods>
|
|
582
730
|
</ChSection>
|
|
@@ -586,6 +734,7 @@ const CheckoutUI = (props: any) => {
|
|
|
586
734
|
<WalletPaymentOptionContainer>
|
|
587
735
|
<PaymentOptionWallet
|
|
588
736
|
cart={cart}
|
|
737
|
+
loyaltyPlansState={loyaltyPlansState}
|
|
589
738
|
businessId={cart?.business_id}
|
|
590
739
|
businessConfigs={businessDetails?.business?.configs}
|
|
591
740
|
/>
|
|
@@ -593,7 +742,7 @@ const CheckoutUI = (props: any) => {
|
|
|
593
742
|
)}
|
|
594
743
|
|
|
595
744
|
|
|
596
|
-
{!cartState.loading && placeSpotsEnabled && (
|
|
745
|
+
{!cartState.loading && placeSpotsEnabled && !isGiftCardCart && (
|
|
597
746
|
<>
|
|
598
747
|
<View style={{ height: 8, backgroundColor: theme.colors.backgroundGray100, marginTop: 30, marginHorizontal: -40 }} />
|
|
599
748
|
<PlaceSpot
|
|
@@ -620,18 +769,20 @@ const CheckoutUI = (props: any) => {
|
|
|
620
769
|
<>
|
|
621
770
|
<CartHeader>
|
|
622
771
|
<HeaderTitle text={t('MOBILE_FRONT_YOUR_ORDER', 'Your order')} mb={0} />
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
<OText
|
|
627
|
-
size={12}
|
|
628
|
-
lineHeight={15}
|
|
629
|
-
color={theme.colors.primary}
|
|
630
|
-
style={{ textDecorationLine: 'underline' }}
|
|
772
|
+
{!isGiftCardCart && (
|
|
773
|
+
<TouchableOpacity
|
|
774
|
+
onPress={() => onNavigationRedirect('Business', { store: cart?.business?.slug })}
|
|
631
775
|
>
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
776
|
+
<OText
|
|
777
|
+
size={12}
|
|
778
|
+
lineHeight={15}
|
|
779
|
+
color={theme.colors.primary}
|
|
780
|
+
style={{ textDecorationLine: 'underline' }}
|
|
781
|
+
>
|
|
782
|
+
{t('ADD_PRODUCTS', 'Add products')}
|
|
783
|
+
</OText>
|
|
784
|
+
</TouchableOpacity>
|
|
785
|
+
)}
|
|
635
786
|
</CartHeader>
|
|
636
787
|
{isBusinessChangeEnabled && (
|
|
637
788
|
<TouchableOpacity
|
|
@@ -653,6 +804,12 @@ const CheckoutUI = (props: any) => {
|
|
|
653
804
|
isCartPending={cart?.status === 2}
|
|
654
805
|
onNavigationRedirect={onNavigationRedirect}
|
|
655
806
|
placeSpotTypes={placeSpotTypes}
|
|
807
|
+
businessConfigs={businessConfigs}
|
|
808
|
+
maxDate={maxDate}
|
|
809
|
+
loyaltyRewardRate={
|
|
810
|
+
creditPointPlanOnBusiness?.accumulation_rate ??
|
|
811
|
+
(!!creditPointPlanOnBusiness && creditPointPlan?.accumulation_rate) ?? 0
|
|
812
|
+
}
|
|
656
813
|
/>
|
|
657
814
|
</>
|
|
658
815
|
)}
|
|
@@ -662,7 +819,7 @@ const CheckoutUI = (props: any) => {
|
|
|
662
819
|
|
|
663
820
|
{!cartState.loading && cart && (
|
|
664
821
|
<View>
|
|
665
|
-
<ChErrors style={{ marginBottom: 10 }}>
|
|
822
|
+
<ChErrors style={{ marginBottom: Platform.OS === 'ios' ? 35 : 10 }}>
|
|
666
823
|
{!cart?.valid_address && cart?.status !== 2 && (
|
|
667
824
|
<OText
|
|
668
825
|
color={theme.colors.error}
|
|
@@ -689,6 +846,14 @@ const CheckoutUI = (props: any) => {
|
|
|
689
846
|
{t('WARNING_INVALID_PRODUCTS_CHECKOUT', 'To continue with your checkout, please remove from your cart the products that are not available.')}
|
|
690
847
|
</OText>
|
|
691
848
|
)}
|
|
849
|
+
{cart?.valid_preorder !== undefined && !cart?.valid_preorder && (
|
|
850
|
+
<OText
|
|
851
|
+
color={theme.colors.error}
|
|
852
|
+
size={12}
|
|
853
|
+
>
|
|
854
|
+
{t('INVALID_CART_MOMENT', 'Selected schedule time is invalid, please select a schedule into the business schedule interval.')}
|
|
855
|
+
</OText>
|
|
856
|
+
)}
|
|
692
857
|
{options.type === 1 &&
|
|
693
858
|
validationFields?.fields?.checkout?.driver_tip?.enabled &&
|
|
694
859
|
validationFields?.fields?.checkout?.driver_tip?.required &&
|
|
@@ -700,6 +865,15 @@ const CheckoutUI = (props: any) => {
|
|
|
700
865
|
{t('WARNING_INVALID_DRIVER_TIP', 'Driver Tip is required.')}
|
|
701
866
|
</OText>
|
|
702
867
|
)}
|
|
868
|
+
|
|
869
|
+
{validateCommentsCartField && (
|
|
870
|
+
<OText
|
|
871
|
+
color={theme.colors.error}
|
|
872
|
+
size={12}
|
|
873
|
+
>
|
|
874
|
+
{t('WARNING_INVALID_CART_COMMENTS', 'Cart comments is required.')}
|
|
875
|
+
</OText>
|
|
876
|
+
)}
|
|
703
877
|
</ChErrors>
|
|
704
878
|
</View>
|
|
705
879
|
)}
|
|
@@ -732,18 +906,52 @@ const CheckoutUI = (props: any) => {
|
|
|
732
906
|
togglePhoneUpdate={togglePhoneUpdate}
|
|
733
907
|
requiredFields={requiredFields}
|
|
734
908
|
hideUpdateButton
|
|
909
|
+
handlePlaceOrderAsGuest={handlePlaceOrderAsGuest}
|
|
735
910
|
onClose={() => {
|
|
736
911
|
setIsOpen(false)
|
|
737
912
|
handlePlaceOrder(null, true)
|
|
738
913
|
}}
|
|
914
|
+
setIsOpen={setIsOpen}
|
|
739
915
|
/>
|
|
740
916
|
</View>
|
|
741
917
|
</OModal>
|
|
918
|
+
<OModal
|
|
919
|
+
open={openModal.signup}
|
|
920
|
+
onClose={() => setOpenModal({ ...openModal, signup: false })}
|
|
921
|
+
>
|
|
922
|
+
<ScrollView style={{ paddingHorizontal: 20, width: '100%' }}>
|
|
923
|
+
<SignupForm
|
|
924
|
+
handleSuccessSignup={handleSuccessSignup}
|
|
925
|
+
isGuest
|
|
926
|
+
signupButtonText={t('SIGNUP', 'Signup')}
|
|
927
|
+
useSignupByEmail
|
|
928
|
+
useChekoutFileds
|
|
929
|
+
/>
|
|
930
|
+
</ScrollView>
|
|
931
|
+
</OModal>
|
|
932
|
+
<OModal
|
|
933
|
+
open={openModal.login}
|
|
934
|
+
onClose={() => setOpenModal({ ...openModal, login: false })}
|
|
935
|
+
>
|
|
936
|
+
<ScrollView style={{ paddingHorizontal: 20, width: '100%' }}>
|
|
937
|
+
<LoginForm
|
|
938
|
+
handleSuccessLogin={handleSuccessLogin}
|
|
939
|
+
isGuest
|
|
940
|
+
loginButtonText={t('LOGIN', 'Login')}
|
|
941
|
+
loginButtonBackground={theme.colors.primary}
|
|
942
|
+
/>
|
|
943
|
+
</ScrollView>
|
|
944
|
+
</OModal>
|
|
742
945
|
</ChContainer>
|
|
743
946
|
</Container>
|
|
744
947
|
{!cartState.loading && cart && cart?.status !== 2 && (
|
|
745
948
|
<FloatingButton
|
|
746
|
-
handleClick={
|
|
949
|
+
handleClick={
|
|
950
|
+
isDisabledButtonPlace
|
|
951
|
+
? () => vibrateApp()
|
|
952
|
+
: methodsPay.includes(paymethodSelected?.gateway)
|
|
953
|
+
? () => setPlaceByMethodPay(true)
|
|
954
|
+
: () => handlePlaceOrder(null)}
|
|
747
955
|
isSecondaryBtn={isDisabledButtonPlace}
|
|
748
956
|
disabled={isDisabledButtonPlace}
|
|
749
957
|
btnText={subtotalWithTaxes >= cart?.minimum
|
|
@@ -786,6 +994,29 @@ const CheckoutUI = (props: any) => {
|
|
|
786
994
|
locationId={'L1NGAY5M6KJRX'}
|
|
787
995
|
/>
|
|
788
996
|
)}
|
|
997
|
+
{cart?.paymethod_data?.gateway === 'credomatic' && cart?.paymethod_data?.status === 2 && showGateway.open && (
|
|
998
|
+
<PaymentOptionsWebView
|
|
999
|
+
title={t('CREDOMATIC_PAYMENT', 'Credomatic payment')}
|
|
1000
|
+
onNavigationRedirect={onNavigationRedirect}
|
|
1001
|
+
uri={credomaticUrl}
|
|
1002
|
+
user={user}
|
|
1003
|
+
cart={cart}
|
|
1004
|
+
additionalParams={{
|
|
1005
|
+
type: 'auth',
|
|
1006
|
+
key_id: credomaticKeyId,
|
|
1007
|
+
hash: cart?.paymethod_data?.result?.hash,
|
|
1008
|
+
time: cart?.paymethod_data?.result?.time,
|
|
1009
|
+
amount: cart?.total,
|
|
1010
|
+
orderid: cart?.uuid,
|
|
1011
|
+
ccnumber: cardList?.cards?.[0]?.number,
|
|
1012
|
+
ccexp: cardList?.cards?.[0]?.expiryString,
|
|
1013
|
+
cvv: cardList?.cards?.[0]?.cvc,
|
|
1014
|
+
redirect: credomaticUrl
|
|
1015
|
+
}}
|
|
1016
|
+
webviewPaymethod={webviewPaymethod}
|
|
1017
|
+
setShowGateway={setShowGateway}
|
|
1018
|
+
/>
|
|
1019
|
+
)}
|
|
789
1020
|
</>
|
|
790
1021
|
)
|
|
791
1022
|
}
|
|
@@ -812,7 +1043,8 @@ export const Checkout = (props: any) => {
|
|
|
812
1043
|
const getOrder = async (cartId: any) => {
|
|
813
1044
|
try {
|
|
814
1045
|
let result: any = {}
|
|
815
|
-
const
|
|
1046
|
+
const cartsWithProducts = orderState?.carts && (Object.values(orderState?.carts)?.filter(cart => cart?.products && cart?.products?.length) || null)
|
|
1047
|
+
const cart = cartsWithProducts?.find((cart: any) => cart.uuid === cartId)
|
|
816
1048
|
if (cart) {
|
|
817
1049
|
result = { ...cart }
|
|
818
1050
|
} else {
|