ordering-ui-react-native 0.21.89 → 0.21.90-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/context/OfflineActions/index.tsx +236 -0
- 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 +62 -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 +43 -25
- 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 +11 -0
- package/themes/original/src/components/AddressDetails/index.tsx +18 -8
- 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 +2 -4
- package/themes/original/src/components/Checkout/index.tsx +104 -58
- 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/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/VerticalGiftCardOrdersLayout/index.tsx +11 -12
- 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 +130 -86
- package/themes/original/src/components/MultiOrdersDetails/index.tsx +2 -1
- package/themes/original/src/components/MyOrders/index.tsx +10 -23
- 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 +16 -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 +3 -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 +6 -4
- 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 +9 -1
- package/themes/original/src/components/Wallets/index.tsx +6 -3
- package/themes/original/src/components/WebsocketStatus/index.tsx +1 -4
- 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,4 +1,4 @@
|
|
|
1
|
-
import React, { useState, useEffect, useCallback, useRef } from 'react';
|
|
1
|
+
import React, { useState, useEffect, useCallback, useRef, useMemo } from 'react';
|
|
2
2
|
import { View, StyleSheet, TouchableOpacity, Platform, I18nManager, ScrollView, Keyboard, BackHandler, SafeAreaView } from 'react-native';
|
|
3
3
|
import { initStripe, useConfirmPayment } from '@stripe/stripe-react-native';
|
|
4
4
|
import NativeStripeSdk from '@stripe/stripe-react-native/src/NativeStripeSdk'
|
|
@@ -7,7 +7,7 @@ import MaterialIcons from 'react-native-vector-icons/MaterialIcons'
|
|
|
7
7
|
import IconAntDesign from 'react-native-vector-icons/AntDesign';
|
|
8
8
|
import { useIsFocused } from '@react-navigation/native';
|
|
9
9
|
|
|
10
|
-
import ReactNativeHapticFeedback from "react-native-haptic-feedback";
|
|
10
|
+
import ReactNativeHapticFeedback, { HapticFeedbackTypes } from "react-native-haptic-feedback";
|
|
11
11
|
import {
|
|
12
12
|
Checkout as CheckoutController,
|
|
13
13
|
useOrder,
|
|
@@ -15,7 +15,6 @@ import {
|
|
|
15
15
|
useApi,
|
|
16
16
|
useLanguage,
|
|
17
17
|
useUtils,
|
|
18
|
-
useValidationFields,
|
|
19
18
|
useConfig,
|
|
20
19
|
useToast,
|
|
21
20
|
ToastType,
|
|
@@ -101,7 +100,10 @@ const CheckoutUI = (props: any) => {
|
|
|
101
100
|
currency,
|
|
102
101
|
merchantId,
|
|
103
102
|
setPlaceSpotNumber,
|
|
104
|
-
maxDate
|
|
103
|
+
maxDate,
|
|
104
|
+
androidAppId,
|
|
105
|
+
urlscheme,
|
|
106
|
+
checkoutFieldsState
|
|
105
107
|
} = props
|
|
106
108
|
|
|
107
109
|
const theme = useTheme();
|
|
@@ -143,12 +145,11 @@ const CheckoutUI = (props: any) => {
|
|
|
143
145
|
|
|
144
146
|
const [, { showToast }] = useToast();
|
|
145
147
|
const [, t] = useLanguage();
|
|
146
|
-
const [{ user, token }, { login }] = useSession();
|
|
148
|
+
const [{ user, token, loading: userLoading }, { login }] = useSession();
|
|
147
149
|
const [ordering] = useApi()
|
|
148
150
|
const [{ configs }] = useConfig();
|
|
149
151
|
const [{ parsePrice, parseDate }] = useUtils();
|
|
150
152
|
const [{ options, carts, loading }, { confirmCart }] = useOrder();
|
|
151
|
-
const [validationFields] = useValidationFields();
|
|
152
153
|
const [events] = useEvent()
|
|
153
154
|
const [orientationState] = useDeviceOrientation();
|
|
154
155
|
const [isReadMore, setIsReadMore] = useState(false)
|
|
@@ -165,6 +166,7 @@ const CheckoutUI = (props: any) => {
|
|
|
165
166
|
const [webviewPaymethod, setWebviewPaymethod] = useState<any>(null)
|
|
166
167
|
const [isOpen, setIsOpen] = useState(false)
|
|
167
168
|
const [requiredFields, setRequiredFields] = useState<any>([])
|
|
169
|
+
const [orderTypeValidationFields, setOrderTypeValidationFields] = useState<any>([])
|
|
168
170
|
const [openModal, setOpenModal] = useState({ login: false, signup: false, isGuest: false })
|
|
169
171
|
const [allowedGuest, setAllowedGuest] = useState(false)
|
|
170
172
|
const [placeByMethodPay, setPlaceByMethodPay] = useState(false)
|
|
@@ -176,6 +178,14 @@ const CheckoutUI = (props: any) => {
|
|
|
176
178
|
const containerRef = useRef<any>()
|
|
177
179
|
const cardsMethods = ['credomatic']
|
|
178
180
|
const stripePaymethods: any = ['stripe', 'stripe_direct', 'stripe_connect', 'stripe_redirect']
|
|
181
|
+
const notFields = ['coupon', 'driver_tip', 'mobile_phone', 'address', 'zipcode', 'address_notes', 'comments']
|
|
182
|
+
|
|
183
|
+
const checkoutFields = useMemo(() => checkoutFieldsState?.fields?.filter((field : any) => field.order_type_id === options?.type), [checkoutFieldsState, options])
|
|
184
|
+
const guestCheckoutDriveTip = useMemo(() => checkoutFields?.find((field : any) => field.order_type_id === 1 && field?.validation_field?.code === 'driver_tip'), [JSON.stringify(checkoutFields), options])
|
|
185
|
+
const guestCheckoutComment = useMemo(() => checkoutFields?.find((field : any) => field.order_type_id === options?.type && field?.validation_field?.code === 'comments'), [JSON.stringify(checkoutFields), options])
|
|
186
|
+
const guestCheckoutCoupon = useMemo(() => checkoutFields?.find((field : any) => field.order_type_id === options?.type && field?.validation_field?.code === 'coupon'), [JSON.stringify(checkoutFields), options])
|
|
187
|
+
const guestCheckoutZipcode = useMemo(() => checkoutFields?.find((field : any) => field.order_type_id === options?.type && field?.validation_field?.code === 'zipcode'), [JSON.stringify(checkoutFields), options])
|
|
188
|
+
|
|
179
189
|
const placeSpotTypes = [3, 4, 5]
|
|
180
190
|
const placeSpotsEnabled = placeSpotTypes.includes(options?.type)
|
|
181
191
|
const businessConfigs = businessDetails?.business?.configs ?? []
|
|
@@ -200,27 +210,28 @@ const CheckoutUI = (props: any) => {
|
|
|
200
210
|
return acc = acc
|
|
201
211
|
}, cart?.subtotal)
|
|
202
212
|
|
|
203
|
-
const validateCommentsCartField =
|
|
204
|
-
const
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
!paymethodSelected?.data?.card?.zipcode &&
|
|
208
|
-
paymethodSelected?.gateway === 'stripe'
|
|
213
|
+
const validateCommentsCartField = (guestCheckoutComment?.enabled && (user?.guest_id ? guestCheckoutComment?.required_with_guest : guestCheckoutComment?.required)) && (cart?.comment === null || cart?.comment?.trim().length === 0)
|
|
214
|
+
const validateDriverTipField = options.type === 1 && (guestCheckoutDriveTip?.enabled && (user?.guest_id ? guestCheckoutDriveTip?.required_with_guest : guestCheckoutDriveTip?.required)) && (Number(cart?.driver_tip) <= 0)
|
|
215
|
+
const validateCouponField = (guestCheckoutCoupon?.enabled && (user?.guest_id ? guestCheckoutCoupon?.required_with_guest : guestCheckoutCoupon?.required)) && !cart?.offers?.some((offer : any) => offer?.type === 2)
|
|
216
|
+
const validateZipcodeCard = (guestCheckoutZipcode?.enabled && (user?.guest_id ? guestCheckoutZipcode?.required_with_guest : guestCheckoutZipcode?.required)) && paymethodSelected?.gateway === 'stripe' && paymethodSelected?.data?.card && !paymethodSelected?.data?.card?.zipcode
|
|
209
217
|
|
|
210
218
|
const isDisabledButtonPlace = loading || !cart?.valid || (!paymethodSelected && cart?.balance > 0) ||
|
|
211
219
|
placing || errorCash || subtotalWithTaxes < cart?.minimum ||
|
|
212
220
|
(cardsMethods.includes(paymethodSelected?.gateway) && cardList?.cards?.length === 0) ||
|
|
213
|
-
(options.type === 1 &&
|
|
214
|
-
validationFields?.fields?.checkout?.driver_tip?.enabled &&
|
|
215
|
-
validationFields?.fields?.checkout?.driver_tip?.required &&
|
|
216
|
-
(Number(cart?.driver_tip) <= 0)) ||
|
|
217
221
|
(validateCommentsCartField) ||
|
|
218
|
-
(
|
|
219
|
-
|
|
222
|
+
(validateDriverTipField && !isGiftCardCart) ||
|
|
223
|
+
(validateZipcodeCard) ||
|
|
224
|
+
(methodsPay.includes(paymethodSelected?.gateway) && (!methodPaySupported.enabled || methodPaySupported.loading)) ||
|
|
225
|
+
validateCommentsCartField ||
|
|
226
|
+
validateDriverTipField ||
|
|
227
|
+
validateCouponField ||
|
|
228
|
+
validateZipcodeCard
|
|
229
|
+
|
|
220
230
|
|
|
221
231
|
const driverTipsOptions = typeof configs?.driver_tip_options?.value === 'string'
|
|
222
232
|
? JSON.parse(configs?.driver_tip_options?.value) || []
|
|
223
233
|
: configs?.driver_tip_options?.value || []
|
|
234
|
+
const driverTipsField = !cartState.loading && cart && cart?.business_id && options.type === 1 && cart?.status !== 2 && (guestCheckoutDriveTip?.enabled) && driverTipsOptions.length > 0
|
|
224
235
|
|
|
225
236
|
const configTypes = configs?.order_types_allowed?.value.split('|').map((value: any) => Number(value)) || []
|
|
226
237
|
|
|
@@ -241,7 +252,7 @@ const CheckoutUI = (props: any) => {
|
|
|
241
252
|
}
|
|
242
253
|
}
|
|
243
254
|
|
|
244
|
-
const vibrateApp = (impact?:
|
|
255
|
+
const vibrateApp = (impact?: HapticFeedbackTypes) => {
|
|
245
256
|
const options = {
|
|
246
257
|
enableVibrateFallback: true,
|
|
247
258
|
ignoreAndroidSystemSettings: false
|
|
@@ -268,7 +279,7 @@ const CheckoutUI = (props: any) => {
|
|
|
268
279
|
return
|
|
269
280
|
}
|
|
270
281
|
|
|
271
|
-
if (!userErrors.length && (!requiredFields?.length
|
|
282
|
+
if (!userErrors.length && (!requiredFields?.length) || forcePlace) {
|
|
272
283
|
vibrateApp()
|
|
273
284
|
handlerClickPlaceOrder && handlerClickPlaceOrder(null, { isNative: true }, confirmPayment, NativeStripeSdk?.dismissPlatformPay)
|
|
274
285
|
return
|
|
@@ -307,35 +318,55 @@ const CheckoutUI = (props: any) => {
|
|
|
307
318
|
|
|
308
319
|
const checkValidationFields = () => {
|
|
309
320
|
setUserErrors([])
|
|
310
|
-
const errors = []
|
|
311
|
-
const
|
|
312
|
-
const _requiredFields:
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
321
|
+
const errors: Array<string> = []
|
|
322
|
+
const userSelected = user
|
|
323
|
+
const _requiredFields: Array<string> = []
|
|
324
|
+
Object.values(checkoutFieldsState?.fields).map((field: any) => {
|
|
325
|
+
if (options?.type === field?.order_type_id &&
|
|
326
|
+
field?.enabled &&
|
|
327
|
+
field?.required &&
|
|
328
|
+
!notFields.includes(field?.validation_field?.code)
|
|
329
|
+
) {
|
|
330
|
+
if (userSelected && !userSelected[field?.validation_field?.code]) {
|
|
331
|
+
_requiredFields.push(field?.validation_field?.code)
|
|
318
332
|
}
|
|
319
333
|
}
|
|
320
334
|
})
|
|
321
|
-
|
|
335
|
+
const mobilePhoneField: any = Object.values(checkoutFieldsState?.fields)?.find((field: any) => field?.order_type_id === options?.type && field?.validation_field?.code === 'mobile_phone')
|
|
322
336
|
if (
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
337
|
+
userSelected &&
|
|
338
|
+
!userSelected?.cellphone &&
|
|
339
|
+
((mobilePhoneField?.enabled &&
|
|
340
|
+
mobilePhoneField?.required) ||
|
|
326
341
|
configs?.verification_phone_required?.value === '1')
|
|
327
342
|
) {
|
|
328
343
|
_requiredFields.push('cellphone')
|
|
329
344
|
}
|
|
330
345
|
setRequiredFields(_requiredFields)
|
|
331
346
|
|
|
332
|
-
if (phoneUpdate) {
|
|
333
|
-
errors.push(t('NECESSARY_UPDATE_COUNTRY_PHONE_CODE', 'It is necessary to update your phone number'))
|
|
334
|
-
}
|
|
335
|
-
|
|
336
347
|
setUserErrors(errors)
|
|
337
348
|
}
|
|
338
349
|
|
|
350
|
+
const checkGuestValidationFields = () => {
|
|
351
|
+
const userSelected = user
|
|
352
|
+
const _requiredFields = checkoutFieldsState?.fields
|
|
353
|
+
.filter((field) => (field?.order_type_id === options?.type) && field?.enabled && field?.required_with_guest &&
|
|
354
|
+
!notFields.includes(field?.validation_field?.code) &&
|
|
355
|
+
userSelected && !userSelected[field?.validation_field?.code])
|
|
356
|
+
const requiredFieldsCode = _requiredFields.map((item) => item?.validation_field?.code)
|
|
357
|
+
const guestCheckoutCellPhone = checkoutFieldsState?.fields?.find((field) => field.order_type_id === options?.type && field?.validation_field?.code === 'mobile_phone')
|
|
358
|
+
if (
|
|
359
|
+
userSelected &&
|
|
360
|
+
!userSelected?.cellphone &&
|
|
361
|
+
((guestCheckoutCellPhone?.enabled &&
|
|
362
|
+
guestCheckoutCellPhone?.required_with_guest) ||
|
|
363
|
+
configs?.verification_phone_required?.value === '1')
|
|
364
|
+
) {
|
|
365
|
+
requiredFieldsCode.push('cellphone')
|
|
366
|
+
}
|
|
367
|
+
setRequiredFields(requiredFieldsCode)
|
|
368
|
+
}
|
|
369
|
+
|
|
339
370
|
const togglePhoneUpdate = (val: boolean) => {
|
|
340
371
|
setPhoneUpdate(val)
|
|
341
372
|
}
|
|
@@ -344,11 +375,20 @@ const CheckoutUI = (props: any) => {
|
|
|
344
375
|
setShowTitle(contentOffset.y > 30)
|
|
345
376
|
}
|
|
346
377
|
|
|
378
|
+
const handleRedirect = () => {
|
|
379
|
+
props.fromProductsList
|
|
380
|
+
? navigation?.goBack()
|
|
381
|
+
: onNavigationRedirect('BottomTab', { screen: 'Cart' }, !props.fromMulti)
|
|
382
|
+
}
|
|
383
|
+
|
|
347
384
|
useEffect(() => {
|
|
348
|
-
if (
|
|
385
|
+
if (checkoutFieldsState?.loading || userLoading) return
|
|
386
|
+
if (user?.guest_id) {
|
|
387
|
+
checkGuestValidationFields()
|
|
388
|
+
} else {
|
|
349
389
|
checkValidationFields()
|
|
350
390
|
}
|
|
351
|
-
}, [
|
|
391
|
+
}, [checkoutFieldsState, user, options?.type])
|
|
352
392
|
|
|
353
393
|
useEffect(() => {
|
|
354
394
|
if (errors) {
|
|
@@ -454,7 +494,7 @@ const CheckoutUI = (props: any) => {
|
|
|
454
494
|
<SafeAreaView style={{ backgroundColor: theme.colors.backgroundPage }}>
|
|
455
495
|
<View style={styles.wrapperNavbar}>
|
|
456
496
|
<TopHeader>
|
|
457
|
-
<TopActions onPress={() =>
|
|
497
|
+
<TopActions onPress={() => handleRedirect()}>
|
|
458
498
|
<IconAntDesign
|
|
459
499
|
name='arrowleft'
|
|
460
500
|
size={26}
|
|
@@ -480,7 +520,7 @@ const CheckoutUI = (props: any) => {
|
|
|
480
520
|
hideArrowLeft
|
|
481
521
|
title={t('CHECKOUT', 'Checkout')}
|
|
482
522
|
titleAlign={'center'}
|
|
483
|
-
onActionLeft={() =>
|
|
523
|
+
onActionLeft={() => handleRedirect()}
|
|
484
524
|
showCall={false}
|
|
485
525
|
btnStyle={{ paddingLeft: 0, paddingTop: Platform.OS == 'ios' ? 0 : 2 }}
|
|
486
526
|
titleWrapStyle={{ paddingHorizontal: 0 }}
|
|
@@ -617,15 +657,11 @@ const CheckoutUI = (props: any) => {
|
|
|
617
657
|
<HeaderTitle text={t('CUSTOMER_DETAILS', 'Customer details')} />
|
|
618
658
|
<OButton
|
|
619
659
|
text={t('SIGN_UP', 'Sign up')}
|
|
620
|
-
textStyle={{ color: theme.colors.white }}
|
|
621
660
|
style={{ borderRadius: 7.6, marginTop: 20 }}
|
|
622
661
|
onClick={() => setOpenModal({ ...openModal, signup: true })}
|
|
623
662
|
/>
|
|
624
663
|
<OButton
|
|
625
664
|
text={t('LOGIN', 'Login')}
|
|
626
|
-
textStyle={{ color: theme.colors.primary }}
|
|
627
|
-
bgColor={theme.colors.white}
|
|
628
|
-
borderColor={theme.colors.primary}
|
|
629
665
|
style={{ borderRadius: 7.6, marginTop: 20 }}
|
|
630
666
|
onClick={() => setOpenModal({ ...openModal, login: true })}
|
|
631
667
|
/>
|
|
@@ -650,6 +686,9 @@ const CheckoutUI = (props: any) => {
|
|
|
650
686
|
isCheckout
|
|
651
687
|
phoneUpdate={phoneUpdate}
|
|
652
688
|
togglePhoneUpdate={togglePhoneUpdate}
|
|
689
|
+
isOrderTypeValidationField
|
|
690
|
+
requiredFields={requiredFields}
|
|
691
|
+
checkoutFields={checkoutFields}
|
|
653
692
|
/>
|
|
654
693
|
)
|
|
655
694
|
)}
|
|
@@ -747,6 +786,7 @@ const CheckoutUI = (props: any) => {
|
|
|
747
786
|
</Placeholder>
|
|
748
787
|
) : (
|
|
749
788
|
<AddressDetails
|
|
789
|
+
cart={cart}
|
|
750
790
|
navigation={navigation}
|
|
751
791
|
location={options?.address?.location}
|
|
752
792
|
businessLogo={businessDetails?.business?.logo}
|
|
@@ -762,14 +802,7 @@ const CheckoutUI = (props: any) => {
|
|
|
762
802
|
</ChSection>
|
|
763
803
|
)}
|
|
764
804
|
|
|
765
|
-
{
|
|
766
|
-
cart &&
|
|
767
|
-
cart?.valid &&
|
|
768
|
-
options.type === 1 &&
|
|
769
|
-
cart?.status !== 2 &&
|
|
770
|
-
validationFields?.fields?.checkout?.driver_tip?.enabled &&
|
|
771
|
-
driverTipsOptions && driverTipsOptions?.length > 0 &&
|
|
772
|
-
!isGiftCardCart &&
|
|
805
|
+
{driverTipsField &&
|
|
773
806
|
(
|
|
774
807
|
<ChSection>
|
|
775
808
|
<ChDriverTips>
|
|
@@ -817,6 +850,8 @@ const CheckoutUI = (props: any) => {
|
|
|
817
850
|
handlePaymentMethodClickCustom={handlePaymentMethodClick}
|
|
818
851
|
handlePlaceOrder={handlePlaceOrder}
|
|
819
852
|
merchantId={merchantId}
|
|
853
|
+
urlscheme={urlscheme}
|
|
854
|
+
androidAppId={androidAppId}
|
|
820
855
|
setMethodPaySupported={setMethodPaySupported}
|
|
821
856
|
methodPaySupported={methodPaySupported}
|
|
822
857
|
placeByMethodPay={placeByMethodPay}
|
|
@@ -912,6 +947,8 @@ const CheckoutUI = (props: any) => {
|
|
|
912
947
|
creditPointPlanOnBusiness?.accumulation_rate ??
|
|
913
948
|
(!!creditPointPlanOnBusiness && creditPointPlan?.accumulation_rate) ?? 0
|
|
914
949
|
}
|
|
950
|
+
hideCommentsByValidationCheckout={!guestCheckoutComment?.enabled}
|
|
951
|
+
hideCouponByValidationCheckout={!guestCheckoutCoupon?.enabled}
|
|
915
952
|
/>
|
|
916
953
|
</>
|
|
917
954
|
)}
|
|
@@ -958,10 +995,8 @@ const CheckoutUI = (props: any) => {
|
|
|
958
995
|
{t('INVALID_CART_MOMENT', 'Selected schedule time is invalid, please select a schedule into the business schedule interval.')}
|
|
959
996
|
</OText>
|
|
960
997
|
)}
|
|
961
|
-
{
|
|
962
|
-
|
|
963
|
-
validationFields?.fields?.checkout?.driver_tip?.required &&
|
|
964
|
-
(Number(cart?.driver_tip) <= 0) && (
|
|
998
|
+
{validateDriverTipField && !isGiftCardCart &&
|
|
999
|
+
(
|
|
965
1000
|
<OText
|
|
966
1001
|
color={theme.colors.error}
|
|
967
1002
|
size={12}
|
|
@@ -969,7 +1004,6 @@ const CheckoutUI = (props: any) => {
|
|
|
969
1004
|
{t('WARNING_INVALID_DRIVER_TIP', 'Driver Tip is required.')}
|
|
970
1005
|
</OText>
|
|
971
1006
|
)}
|
|
972
|
-
|
|
973
1007
|
{validateCommentsCartField && (
|
|
974
1008
|
<OText
|
|
975
1009
|
color={theme.colors.error}
|
|
@@ -987,6 +1021,15 @@ const CheckoutUI = (props: any) => {
|
|
|
987
1021
|
{t('WARNING_CARD_ZIPCODE_REQUIRED', 'Your card selected has not zipcode')}
|
|
988
1022
|
</OText>
|
|
989
1023
|
)}
|
|
1024
|
+
{validateCouponField &&
|
|
1025
|
+
(
|
|
1026
|
+
<OText
|
|
1027
|
+
color={theme.colors.error}
|
|
1028
|
+
size={12}
|
|
1029
|
+
>
|
|
1030
|
+
{t('WARNING_INVALID_COUPON_FIELD', 'Coupon is required.')}
|
|
1031
|
+
</OText>
|
|
1032
|
+
)}
|
|
990
1033
|
</ChErrors>
|
|
991
1034
|
</View>
|
|
992
1035
|
)}
|
|
@@ -1004,20 +1047,23 @@ const CheckoutUI = (props: any) => {
|
|
|
1004
1047
|
<OModal
|
|
1005
1048
|
open={isOpen}
|
|
1006
1049
|
onClose={() => setIsOpen(false)}
|
|
1050
|
+
showToastInsideModal
|
|
1007
1051
|
>
|
|
1008
1052
|
<View style={styles.detailWrapper}>
|
|
1009
1053
|
<UserDetails
|
|
1010
1054
|
isUserDetailsEdit
|
|
1011
1055
|
cartStatus={cart?.status}
|
|
1012
1056
|
businessId={cart?.business_id}
|
|
1013
|
-
useValidationFields
|
|
1014
1057
|
useDefualtSessionManager
|
|
1015
1058
|
useSessionUser
|
|
1016
1059
|
isCheckout
|
|
1017
1060
|
isEdit
|
|
1018
1061
|
phoneUpdate={phoneUpdate}
|
|
1019
1062
|
togglePhoneUpdate={togglePhoneUpdate}
|
|
1063
|
+
isOrderTypeValidationField
|
|
1020
1064
|
requiredFields={requiredFields}
|
|
1065
|
+
checkoutFields={checkoutFields}
|
|
1066
|
+
isCheckoutPlace
|
|
1021
1067
|
hideUpdateButton
|
|
1022
1068
|
handlePlaceOrderAsGuest={handlePlaceOrderAsGuest}
|
|
1023
1069
|
onClose={() => {
|
|
@@ -69,10 +69,7 @@ export const CitiesControl = (props: any) => {
|
|
|
69
69
|
</View>
|
|
70
70
|
<OButton
|
|
71
71
|
text={t('CONTINUE', 'Continue')}
|
|
72
|
-
bgColor={theme.colors.primary}
|
|
73
|
-
borderColor={theme.colors.primary}
|
|
74
72
|
style={styles.btnStyle}
|
|
75
|
-
textStyle={{ color: 'white' }}
|
|
76
73
|
onClick={() => handleClick()}
|
|
77
74
|
/>
|
|
78
75
|
</Container>
|
|
@@ -102,9 +102,7 @@ const CouponControlUI = (props: any) => {
|
|
|
102
102
|
/>
|
|
103
103
|
<OButton
|
|
104
104
|
onClick={() => onButtonApplyClick()}
|
|
105
|
-
|
|
106
|
-
borderColor={theme.colors.primary}
|
|
107
|
-
textStyle={{ color: 'white', fontSize: 12 }}
|
|
105
|
+
textStyle={{ fontSize: 12 }}
|
|
108
106
|
imgRightSrc={null}
|
|
109
107
|
text={t('APPLY', 'Apply')}
|
|
110
108
|
isDisabled={!couponInput}
|
|
@@ -125,9 +125,7 @@ const DriverTipsUI = (props: any) => {
|
|
|
125
125
|
/>
|
|
126
126
|
<OButton
|
|
127
127
|
text={t('APPLY_TIP', 'Apply Tip')}
|
|
128
|
-
|
|
129
|
-
borderColor={theme.colors.primary}
|
|
130
|
-
textStyle={{ color: 'white', fontSize: 14 }}
|
|
128
|
+
textStyle={{ fontSize: 14 }}
|
|
131
129
|
imgRightSrc={null}
|
|
132
130
|
style={{ borderRadius: 5, height: 44 }}
|
|
133
131
|
isDisabled={parseFloat(value || '0') < 0 || parseFloat(value || '0') === driverTip || value === ''}
|
|
@@ -14,8 +14,7 @@ import {
|
|
|
14
14
|
|
|
15
15
|
export const Favorite = (props: any) => {
|
|
16
16
|
const {
|
|
17
|
-
navigation
|
|
18
|
-
franchiseId
|
|
17
|
+
navigation
|
|
19
18
|
} = props
|
|
20
19
|
const [, t] = useLanguage()
|
|
21
20
|
const theme = useTheme()
|
|
@@ -72,7 +71,6 @@ export const Favorite = (props: any) => {
|
|
|
72
71
|
originalURL='business'
|
|
73
72
|
location={`${orderState.options?.address?.location?.lat},${orderState.options?.address?.location?.lng}`}
|
|
74
73
|
propsToFetch={['id', 'name', 'header', 'logo', 'location', 'address', 'ribbon', 'timezone', 'schedule', 'open', 'delivery_price', 'distance', 'delivery_time', 'pickup_time', 'reviews', 'featured', 'offers', 'food', 'laundry', 'alcohol', 'groceries', 'slug']}
|
|
75
|
-
franchiseId={franchiseId}
|
|
76
74
|
/>
|
|
77
75
|
)}
|
|
78
76
|
{tabSelected === 'products' && (
|
|
@@ -81,7 +79,6 @@ export const Favorite = (props: any) => {
|
|
|
81
79
|
originalURL='products'
|
|
82
80
|
onNavigationRedirect={onRedirect}
|
|
83
81
|
isProduct
|
|
84
|
-
franchiseId={franchiseId}
|
|
85
82
|
/>
|
|
86
83
|
)}
|
|
87
84
|
{tabSelected === 'orders' && (
|
|
@@ -90,7 +87,6 @@ export const Favorite = (props: any) => {
|
|
|
90
87
|
favoriteURL='favorite_orders'
|
|
91
88
|
originalURL='orders'
|
|
92
89
|
isOrder
|
|
93
|
-
franchiseId={franchiseId}
|
|
94
90
|
/>
|
|
95
91
|
)}
|
|
96
92
|
</Container>
|
|
@@ -270,7 +270,6 @@ const FavoriteListUI = (props: FavoriteParams) => {
|
|
|
270
270
|
onClick={() => getFavoriteList(pagination?.currentPage + 1)}
|
|
271
271
|
text={t('LOAD_MORE_ITEMS', 'Load more items')}
|
|
272
272
|
imgRightSrc={null}
|
|
273
|
-
textStyle={{ color: theme.colors.white }}
|
|
274
273
|
style={{ borderRadius: 7.6, shadowOpacity: 0, marginTop: 20 }}
|
|
275
274
|
/>
|
|
276
275
|
</WrappButton>
|
|
@@ -64,7 +64,7 @@ const ForgotPasswordUI = (props: any) => {
|
|
|
64
64
|
handleReCaptcha(null)
|
|
65
65
|
if (reCaptchaValue) return
|
|
66
66
|
|
|
67
|
-
|
|
67
|
+
if (!recaptchaConfig?.siteKey) {
|
|
68
68
|
showToast(ToastType.Error, t('NO_RECAPTCHA_SITE_KEY', 'The config doesn\'t have recaptcha site key'));
|
|
69
69
|
return
|
|
70
70
|
}
|
|
@@ -73,7 +73,7 @@ const ForgotPasswordUI = (props: any) => {
|
|
|
73
73
|
return
|
|
74
74
|
}
|
|
75
75
|
recaptchaRef.current.open()
|
|
76
|
-
|
|
76
|
+
}
|
|
77
77
|
|
|
78
78
|
const onRecaptchaVerify = (token: any) => {
|
|
79
79
|
setRecaptchaVerified(true)
|
|
@@ -92,8 +92,8 @@ const ForgotPasswordUI = (props: any) => {
|
|
|
92
92
|
formState.result?.result && showToast(
|
|
93
93
|
ToastType.Error,
|
|
94
94
|
typeof formState.result?.result === 'string'
|
|
95
|
-
|
|
96
|
-
|
|
95
|
+
? formState.result?.result
|
|
96
|
+
: formState.result?.result[0]
|
|
97
97
|
)
|
|
98
98
|
return
|
|
99
99
|
}
|
|
@@ -208,9 +208,7 @@ const ForgotPasswordUI = (props: any) => {
|
|
|
208
208
|
|
|
209
209
|
<OButton
|
|
210
210
|
text={emailSent && !formState.result?.error ? t('LINK_SEND_FORGOT_PASSWORD', 'Link Sent') : t('FRONT_RECOVER_PASSWORD', 'Recover Password')}
|
|
211
|
-
|
|
212
|
-
bgColor={emailSent && !formState.result?.error ? theme.colors.disabled : theme.colors.primary}
|
|
213
|
-
borderColor={emailSent && !formState.result?.error ? theme.colors.disabled : theme.colors.primary}
|
|
211
|
+
isDisabled={formState.loading || emailSent && !formState.result?.error}
|
|
214
212
|
isLoading={formState.loading}
|
|
215
213
|
imgRightSrc={null}
|
|
216
214
|
onClick={emailSent && !formState.result?.error ? () => { } : handleSubmit(onSubmit)}
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
Container
|
|
13
13
|
} from './styles'
|
|
14
14
|
|
|
15
|
-
export const GiftCardUI =
|
|
15
|
+
export const GiftCardUI = React.memo((props: any) => {
|
|
16
16
|
const {
|
|
17
17
|
navigation
|
|
18
18
|
} = props
|
|
@@ -57,9 +57,7 @@ export const GiftCardUI = React.memo((props: any) => {
|
|
|
57
57
|
<OButton
|
|
58
58
|
onClick={() => setOpenModal('purchase')}
|
|
59
59
|
text={t('PURCHASE', 'Purchase')}
|
|
60
|
-
|
|
61
|
-
borderColor={theme.colors.primary}
|
|
62
|
-
textStyle={{ color: 'white', fontSize: 13 }}
|
|
60
|
+
textStyle={{ fontSize: 13 }}
|
|
63
61
|
imgRightSrc={null}
|
|
64
62
|
style={{ ...style.btnStyle, marginRight: 14 }}
|
|
65
63
|
/>
|
|
@@ -76,26 +74,26 @@ export const GiftCardUI = React.memo((props: any) => {
|
|
|
76
74
|
</View>
|
|
77
75
|
|
|
78
76
|
<OModal
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
77
|
+
open={openModal === 'purchase'}
|
|
78
|
+
onClose={() => setOpenModal(null)}
|
|
79
|
+
entireModal
|
|
82
80
|
customClose
|
|
83
|
-
|
|
84
|
-
|
|
81
|
+
>
|
|
82
|
+
<PurchaseGiftCard
|
|
85
83
|
handleCustomGoToCheckout={handleCustomGoToCheckout}
|
|
86
84
|
onClose={() => setOpenModal(null)}
|
|
87
85
|
/>
|
|
88
|
-
|
|
86
|
+
</OModal>
|
|
89
87
|
<OModal
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
88
|
+
open={openModal === 'redeem'}
|
|
89
|
+
onClose={() => setOpenModal(null)}
|
|
90
|
+
entireModal
|
|
93
91
|
customClose
|
|
94
|
-
|
|
95
|
-
|
|
92
|
+
>
|
|
93
|
+
<RedeemGiftCard
|
|
96
94
|
onClose={() => setOpenModal(null)}
|
|
97
95
|
/>
|
|
98
|
-
|
|
96
|
+
</OModal>
|
|
99
97
|
</Container>
|
|
100
98
|
)
|
|
101
|
-
})
|
|
99
|
+
})
|
|
@@ -58,12 +58,10 @@ const PurchaseGiftCardUI = (props: any) => {
|
|
|
58
58
|
borderWidth: 0,
|
|
59
59
|
width: 26,
|
|
60
60
|
height: 26,
|
|
61
|
-
backgroundColor: '#FFF',
|
|
62
|
-
borderColor: '#FFF',
|
|
63
|
-
shadowColor: '#FFF',
|
|
64
61
|
paddingLeft: 0,
|
|
65
62
|
paddingRight: 0,
|
|
66
63
|
}}
|
|
64
|
+
useArrow
|
|
67
65
|
onClick={onClose}
|
|
68
66
|
icon={AntDesignIcon}
|
|
69
67
|
iconProps={{
|
|
@@ -113,9 +111,7 @@ const PurchaseGiftCardUI = (props: any) => {
|
|
|
113
111
|
<OButton
|
|
114
112
|
onClick={() => handleAccept()}
|
|
115
113
|
text={t('ACCEPT', 'Accept')}
|
|
116
|
-
|
|
117
|
-
borderColor={theme.colors.primary}
|
|
118
|
-
textStyle={{ color: 'white', fontSize: 13 }}
|
|
114
|
+
textStyle={{ fontSize: 13 }}
|
|
119
115
|
imgRightSrc={null}
|
|
120
116
|
style={style.btnStyle}
|
|
121
117
|
isDisabled={!selectedProduct}
|
|
@@ -130,4 +126,4 @@ export const PurchaseGiftCard = (props: any) => {
|
|
|
130
126
|
UIComponent: PurchaseGiftCardUI
|
|
131
127
|
}
|
|
132
128
|
return <PurchaseGiftCardController {...purchaseGiftCardProps} />
|
|
133
|
-
}
|
|
129
|
+
}
|