ordering-ui-react-native 0.17.64 → 0.17.65-release
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +8 -7
- package/src/DeliveryApp.tsx +43 -1
- package/src/components/BusinessesListing/index.tsx +1 -1
- package/src/components/OrderCreating/index.tsx +1 -21
- package/src/components/PaymentOptionsWebView/index.tsx +29 -8
- package/src/components/PhoneInputNumber/index.tsx +6 -2
- package/src/components/StripeMethodForm/index.tsx +136 -102
- package/src/components/VerifyPhone/styles.tsx +1 -2
- package/src/components/shared/OToast.tsx +2 -1
- 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 +270 -245
- package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +6 -4
- package/themes/business/src/components/BusinessController/index.tsx +0 -1
- package/themes/business/src/components/Chat/index.tsx +123 -111
- package/themes/business/src/components/DriverMap/index.tsx +17 -6
- package/themes/business/src/components/DriverSchedule/index.tsx +42 -5
- package/themes/business/src/components/GoogleMap/index.tsx +58 -57
- package/themes/business/src/components/LoginForm/Otp/index.tsx +31 -3
- package/themes/business/src/components/LoginForm/index.tsx +15 -22
- package/themes/business/src/components/MapView/index.tsx +10 -10
- package/themes/business/src/components/NewOrderNotification/index.tsx +35 -21
- package/themes/business/src/components/NotFoundSource/index.tsx +2 -2
- package/themes/business/src/components/OrderDetails/Business.tsx +1 -1
- package/themes/business/src/components/OrderDetails/Delivery.tsx +191 -6
- package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +133 -65
- package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +64 -63
- package/themes/business/src/components/OrderDetailsLogistic/index.tsx +195 -0
- package/themes/business/src/components/OrderDetailsLogistic/styles.tsx +5 -0
- package/themes/business/src/components/OrderMessage/index.tsx +19 -18
- package/themes/business/src/components/OrderSummary/index.tsx +114 -123
- package/themes/business/src/components/OrdersOption/index.tsx +32 -75
- package/themes/business/src/components/PreviousOrders/OrderItem.tsx +249 -0
- package/themes/business/src/components/PreviousOrders/OrdersGroupedItem.tsx +115 -0
- package/themes/business/src/components/PreviousOrders/index.tsx +444 -242
- package/themes/business/src/components/PreviousOrders/styles.tsx +31 -3
- package/themes/business/src/components/ProductItemAccordion/index.tsx +27 -3
- package/themes/business/src/components/ReviewCustomer/index.tsx +30 -15
- package/themes/business/src/components/StoresList/index.tsx +3 -4
- package/themes/business/src/components/UserProfileForm/index.tsx +11 -13
- package/themes/business/src/components/shared/OLink.tsx +33 -13
- package/themes/business/src/components/shared/OModal.tsx +16 -9
- package/themes/business/src/components/shared/OText.tsx +8 -2
- package/themes/business/src/types/index.tsx +28 -12
- package/themes/business/src/utils/index.tsx +29 -2
- package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
- package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
- package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
- package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
- package/themes/kiosk/src/components/Intro/index.tsx +16 -1
- package/themes/kiosk/src/components/LoginForm/index.tsx +7 -9
- package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
- package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
- package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
- package/themes/kiosk/src/components/PhoneInputNumber/index.tsx +2 -2
- package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
- package/themes/original/index.tsx +4 -0
- package/themes/original/src/components/AddressDetails/index.tsx +19 -3
- package/themes/original/src/components/AddressForm/index.tsx +61 -39
- package/themes/original/src/components/AddressList/index.tsx +27 -22
- package/themes/original/src/components/AddressList/styles.tsx +4 -2
- package/themes/original/src/components/AnalyticsSegment/index.tsx +193 -10
- package/themes/original/src/components/AppleLogin/index.tsx +4 -4
- package/themes/original/src/components/AppleLogin/styles.tsx +3 -1
- package/themes/original/src/components/BusinessBasicInformation/index.tsx +153 -96
- package/themes/original/src/components/BusinessBasicInformation/styles.tsx +10 -12
- package/themes/original/src/components/BusinessController/index.tsx +94 -66
- package/themes/original/src/components/BusinessController/styles.tsx +22 -3
- 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 +142 -109
- 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/Appointment/index.tsx +1 -1
- package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +83 -48
- 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 -50
- package/themes/original/src/components/CartContent/index.tsx +117 -20
- package/themes/original/src/components/CartContent/styles.tsx +17 -7
- package/themes/original/src/components/Checkout/index.tsx +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 +8 -9
- package/themes/original/src/components/Favorite/styles.tsx +1 -1
- package/themes/original/src/components/FavoriteList/index.tsx +1 -35
- package/themes/original/src/components/FloatingButton/index.tsx +1 -2
- package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
- package/themes/original/src/components/GPSButton/index.tsx +6 -4
- package/themes/original/src/components/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 +8 -8
- package/themes/original/src/components/HelpAccountAndPayment/index.tsx +10 -31
- package/themes/original/src/components/HelpAccountAndPayment/styles.tsx +5 -3
- package/themes/original/src/components/HelpGuide/index.tsx +6 -6
- package/themes/original/src/components/HelpGuide/styles.tsx +6 -0
- package/themes/original/src/components/HelpOrder/index.tsx +6 -15
- package/themes/original/src/components/HelpOrder/styles.tsx +8 -1
- package/themes/original/src/components/Home/index.tsx +13 -4
- package/themes/original/src/components/LastOrder/index.tsx +1 -34
- package/themes/original/src/components/LoginForm/Otp/index.tsx +54 -15
- package/themes/original/src/components/LoginForm/Otp/styles.tsx +0 -1
- package/themes/original/src/components/LoginForm/index.tsx +59 -34
- package/themes/original/src/components/LottieAnimation/index.tsx +89 -55
- package/themes/original/src/components/MessageListing/index.tsx +16 -42
- package/themes/original/src/components/Messages/index.tsx +29 -7
- package/themes/original/src/components/MomentOption/index.tsx +195 -90
- package/themes/original/src/components/MomentSelector/index.tsx +1 -1
- package/themes/original/src/components/MultiCart/index.tsx +50 -0
- package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +162 -51
- package/themes/original/src/components/MultiCheckout/index.tsx +308 -88
- package/themes/original/src/components/MultiCheckout/styles.tsx +3 -1
- package/themes/original/src/components/MultiOrdersDetails/SingleOrderCard.tsx +37 -224
- package/themes/original/src/components/MultiOrdersDetails/index.tsx +68 -21
- package/themes/original/src/components/MultiOrdersDetails/styles.tsx +1 -1
- package/themes/original/src/components/MyOrders/index.tsx +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 +46 -50
- package/themes/original/src/components/Notifications/styles.tsx +6 -3
- package/themes/original/src/components/OrderDetails/OrderEta.tsx +76 -0
- package/themes/original/src/components/OrderDetails/OrderHistory.tsx +15 -3
- package/themes/original/src/components/OrderDetails/index.tsx +190 -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 +33 -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/PreviousBusinessOrdered/index.tsx +24 -19
- package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +14 -14
- package/themes/original/src/components/OrdersOption/index.tsx +78 -67
- package/themes/original/src/components/OrdersOption/styles.tsx +1 -1
- package/themes/original/src/components/PageBanner/index.tsx +106 -31
- package/themes/original/src/components/PageBanner/styles.tsx +4 -4
- package/themes/original/src/components/PaymentOptionCard/index.tsx +180 -0
- package/themes/original/src/components/PaymentOptionStripe/styles.tsx +1 -1
- package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
- package/themes/original/src/components/PaymentOptions/index.tsx +78 -35
- package/themes/original/src/components/PhoneInputNumber/index.tsx +3 -3
- package/themes/original/src/components/ProductForm/index.tsx +105 -30
- package/themes/original/src/components/ProductForm/styles.tsx +5 -5
- package/themes/original/src/components/ProductItemAccordion/index.tsx +14 -11
- 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 +5 -4
- package/themes/original/src/components/Promotions/styles.tsx +3 -1
- package/themes/original/src/components/ReviewOrder/index.tsx +26 -9
- package/themes/original/src/components/ReviewOrder/styles.tsx +7 -0
- package/themes/original/src/components/ReviewProducts/index.tsx +16 -7
- package/themes/original/src/components/ReviewTrigger/index.tsx +27 -9
- package/themes/original/src/components/ReviewTrigger/styles.tsx +8 -1
- package/themes/original/src/components/ScheduleAccordion/index.tsx +68 -0
- package/themes/original/src/components/ScheduleAccordion/styles.tsx +14 -0
- package/themes/original/src/components/ServiceForm/index.tsx +66 -17
- package/themes/original/src/components/Sessions/index.tsx +11 -8
- package/themes/original/src/components/Sessions/styles.tsx +5 -0
- package/themes/original/src/components/SignupForm/index.tsx +43 -27
- package/themes/original/src/components/SingleOrderCard/index.tsx +130 -56
- package/themes/original/src/components/SingleOrderCard/styles.tsx +11 -2
- 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 +27 -29
- package/themes/original/src/components/UserProfileForm/styles.tsx +7 -0
- package/themes/original/src/components/UserVerification/index.tsx +52 -49
- 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 +36 -10
- package/themes/original/src/utils/index.tsx +273 -1
- package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React, { useState, useEffect, useRef } from 'react'
|
|
2
2
|
import { useTheme } from 'styled-components/native'
|
|
3
|
-
import { Platform, View, StyleSheet, Dimensions, ScrollView, TouchableOpacity } from 'react-native'
|
|
3
|
+
import { Platform, View, StyleSheet, Dimensions, ScrollView, TouchableOpacity, Text } from 'react-native'
|
|
4
4
|
import { OText, OButton, OModal, OIcon } from '../shared'
|
|
5
5
|
import FastImage from 'react-native-fast-image'
|
|
6
6
|
import IconAntDesign from 'react-native-vector-icons/AntDesign'
|
|
@@ -11,6 +11,8 @@ import FeatherIcon from 'react-native-vector-icons/Feather';
|
|
|
11
11
|
import { useSafeAreaInsets } from 'react-native-safe-area-context'
|
|
12
12
|
import { ServiceFormParams } from '../../types'
|
|
13
13
|
import { Placeholder, PlaceholderLine, Fade } from 'rn-placeholder';
|
|
14
|
+
import uuid from 'react-native-uuid';
|
|
15
|
+
import { orderTypeList } from '../../utils'
|
|
14
16
|
|
|
15
17
|
import {
|
|
16
18
|
ProductForm as ProductFormController,
|
|
@@ -45,7 +47,9 @@ const ServiceFormUI = (props: ServiceFormParams) => {
|
|
|
45
47
|
maxProductQuantity,
|
|
46
48
|
onClose,
|
|
47
49
|
professionalListState,
|
|
48
|
-
isCartProduct
|
|
50
|
+
isCartProduct,
|
|
51
|
+
actionStatus,
|
|
52
|
+
handleCreateGuestUser
|
|
49
53
|
} = props
|
|
50
54
|
|
|
51
55
|
const theme = useTheme()
|
|
@@ -65,6 +69,9 @@ const ServiceFormUI = (props: ServiceFormParams) => {
|
|
|
65
69
|
const [isOpen, setIsOpen] = useState(false)
|
|
66
70
|
const [currentProfessional, setCurrentProfessional] = useState<any>(null)
|
|
67
71
|
|
|
72
|
+
const guestCheckoutEnabled = configs?.guest_checkout_enabled?.value === '1'
|
|
73
|
+
const orderTypeEnabled = !orderTypeList[orderState?.options?.type - 1] || configs?.allowed_order_types_guest_checkout?.value?.includes(orderTypeList[orderState?.options?.type - 1])
|
|
74
|
+
|
|
68
75
|
const dropdownRef = useRef<any>(null)
|
|
69
76
|
|
|
70
77
|
const styles = StyleSheet.create({
|
|
@@ -103,17 +110,41 @@ const ServiceFormUI = (props: ServiceFormParams) => {
|
|
|
103
110
|
height: 40,
|
|
104
111
|
marginBottom: 30
|
|
105
112
|
},
|
|
113
|
+
dropDownRow: {
|
|
114
|
+
color: theme.colors.primary,
|
|
115
|
+
fontSize: 14,
|
|
116
|
+
marginHorizontal: 0
|
|
117
|
+
},
|
|
106
118
|
professionalList: {
|
|
107
119
|
paddingHorizontal: 40,
|
|
108
|
-
paddingVertical: 30
|
|
120
|
+
paddingVertical: 30,
|
|
109
121
|
}
|
|
110
122
|
})
|
|
111
123
|
|
|
112
|
-
const
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
124
|
+
const getMomentTime = (time) => {
|
|
125
|
+
const _moment = moment(`${moment(selectDate).format('YYYY-MM-DD')} ${time}`, 'YYYY-MM-DD HH:mm').toDate()
|
|
126
|
+
return _moment
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
const isBusyTime = (professional, selectedMoment) => {
|
|
130
|
+
if (!selectedMoment) return false
|
|
131
|
+
const startDay = moment(selectedMoment).utc().format('d')
|
|
132
|
+
const isStartScheduleEnabled = professional?.schedule?.[startDay]?.enabled
|
|
133
|
+
const duration = product?.duration ?? 0
|
|
134
|
+
const endDay = moment(selectedMoment).add(duration - 1, 'minutes').utc().format('d')
|
|
135
|
+
const isEndScheduleEnabled = professional?.schedule?.[endDay]?.enabled
|
|
136
|
+
if (!isStartScheduleEnabled || !isEndScheduleEnabled) return true
|
|
137
|
+
|
|
138
|
+
if (professional?.busy_times?.length === 0) return false
|
|
139
|
+
|
|
140
|
+
const busyTimes = isCartProduct
|
|
141
|
+
? professional?.busy_times.filter(item => !(item.start === productCart?.calendar_event?.start && item.end === productCart?.calendar_event?.end))
|
|
142
|
+
: [...professional?.busy_times]
|
|
143
|
+
const valid = busyTimes.some(item => {
|
|
144
|
+
return (moment.utc(item?.start).local().valueOf() <= moment(selectedMoment).valueOf() &&
|
|
145
|
+
moment(selectedMoment).valueOf() < moment.utc(item?.end).local().valueOf()) ||
|
|
146
|
+
(moment.utc(item?.start).local().valueOf() < moment(selectedMoment).add(duration, 'minutes').valueOf() &&
|
|
147
|
+
moment(selectedMoment).add(duration, 'minutes').valueOf() < moment.utc(item?.end).local().valueOf())
|
|
117
148
|
})
|
|
118
149
|
return valid
|
|
119
150
|
}
|
|
@@ -134,6 +165,11 @@ const ServiceFormUI = (props: ServiceFormParams) => {
|
|
|
134
165
|
)
|
|
135
166
|
}
|
|
136
167
|
|
|
168
|
+
const handleUpdateGuest = () => {
|
|
169
|
+
const guestToken = uuid.v4()
|
|
170
|
+
if (guestToken) handleCreateGuestUser({ guest_token: guestToken })
|
|
171
|
+
}
|
|
172
|
+
|
|
137
173
|
const customDayHeaderStylesCallback = () => {
|
|
138
174
|
return {
|
|
139
175
|
textStyle: {
|
|
@@ -365,9 +401,9 @@ const ServiceFormUI = (props: ServiceFormParams) => {
|
|
|
365
401
|
size={12}
|
|
366
402
|
weight={'400'}
|
|
367
403
|
lineHeight={17}
|
|
368
|
-
color={isBusyTime(currentProfessional) ? theme.colors.danger5 : theme.colors.success500}
|
|
404
|
+
color={isBusyTime(currentProfessional, dateSelected) ? theme.colors.danger5 : theme.colors.success500}
|
|
369
405
|
>
|
|
370
|
-
{isBusyTime(currentProfessional)
|
|
406
|
+
{isBusyTime(currentProfessional, dateSelected)
|
|
371
407
|
? t('BUSY_ON_SELECTED_TIME', 'Busy on selected time')
|
|
372
408
|
: t('AVAILABLE', 'Available')
|
|
373
409
|
}
|
|
@@ -447,10 +483,12 @@ const ServiceFormUI = (props: ServiceFormParams) => {
|
|
|
447
483
|
paddingTop: 8,
|
|
448
484
|
paddingHorizontal: 12
|
|
449
485
|
}}
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
486
|
+
renderCustomizedRowChild={(item, index) => {
|
|
487
|
+
return (
|
|
488
|
+
<Text style={[styles.dropDownRow, { color: isBusyTime(currentProfessional, getMomentTime(item.value)) ? theme.colors.lightGray : theme.colors.primary } ]}>
|
|
489
|
+
{item.text}
|
|
490
|
+
</Text>
|
|
491
|
+
)
|
|
454
492
|
}}
|
|
455
493
|
renderDropdownIcon={() => dropDownIcon()}
|
|
456
494
|
dropdownOverlayColor='transparent'
|
|
@@ -523,7 +561,7 @@ const ServiceFormUI = (props: ServiceFormParams) => {
|
|
|
523
561
|
? t('SOLD_OUT', 'Sold out')
|
|
524
562
|
: t('BOOK', 'Book'))}
|
|
525
563
|
style={styles.buttonStyle}
|
|
526
|
-
isDisabled={isSoldOut || maxProductQuantity <= 0 || !currentProfessional?.id || !dateSelected}
|
|
564
|
+
isDisabled={isSoldOut || maxProductQuantity <= 0 || !currentProfessional?.id || !dateSelected || isBusyTime(currentProfessional, dateSelected)}
|
|
527
565
|
textStyle={{ fontSize: 14, color: theme.colors.white }}
|
|
528
566
|
/>
|
|
529
567
|
)}
|
|
@@ -557,6 +595,17 @@ const ServiceFormUI = (props: ServiceFormParams) => {
|
|
|
557
595
|
}}
|
|
558
596
|
/>
|
|
559
597
|
)}
|
|
598
|
+
{!auth && guestCheckoutEnabled && orderTypeEnabled && (
|
|
599
|
+
<TouchableOpacity style={{ marginTop: 10 }} onPress={handleUpdateGuest}>
|
|
600
|
+
{actionStatus?.loading ? (
|
|
601
|
+
<Placeholder Animation={Fade}>
|
|
602
|
+
<PlaceholderLine width={60} height={20} />
|
|
603
|
+
</Placeholder>
|
|
604
|
+
) : (
|
|
605
|
+
<OText color={theme.colors.primary} size={13}>{t('WITH_GUEST_USER', 'With Guest user')}</OText>
|
|
606
|
+
)}
|
|
607
|
+
</TouchableOpacity>
|
|
608
|
+
)}
|
|
560
609
|
</ButtonWrapper>
|
|
561
610
|
</Container>
|
|
562
611
|
)}
|
|
@@ -610,9 +659,9 @@ const ServiceFormUI = (props: ServiceFormParams) => {
|
|
|
610
659
|
size={12}
|
|
611
660
|
weight={'400'}
|
|
612
661
|
lineHeight={17}
|
|
613
|
-
color={isBusyTime(professional) ? theme.colors.danger5 : theme.colors.success500}
|
|
662
|
+
color={isBusyTime(professional, dateSelected) ? theme.colors.danger5 : theme.colors.success500}
|
|
614
663
|
>
|
|
615
|
-
{isBusyTime(professional)
|
|
664
|
+
{isBusyTime(professional, dateSelected)
|
|
616
665
|
? t('BUSY_ON_SELECTED_TIME', 'Busy on selected time')
|
|
617
666
|
: t('AVAILABLE', 'Available')
|
|
618
667
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React, { useState } from 'react'
|
|
2
|
-
import { View, TouchableOpacity } from 'react-native'
|
|
2
|
+
import { View, TouchableOpacity, Platform } from 'react-native'
|
|
3
3
|
import { useLanguage, useSession, useUtils, Sessions as SessionsController } from 'ordering-components/native'
|
|
4
4
|
import NavBar from '../NavBar'
|
|
5
5
|
import { SessionsParams } from '../../types'
|
|
@@ -12,7 +12,8 @@ import AntIcon from 'react-native-vector-icons/AntDesign'
|
|
|
12
12
|
import {
|
|
13
13
|
SessionsWrapper,
|
|
14
14
|
SessionItem,
|
|
15
|
-
DurationWrapper
|
|
15
|
+
DurationWrapper,
|
|
16
|
+
Container
|
|
16
17
|
} from './styles'
|
|
17
18
|
|
|
18
19
|
export const SessionsUI = (props: SessionsParams) => {
|
|
@@ -27,7 +28,7 @@ export const SessionsUI = (props: SessionsParams) => {
|
|
|
27
28
|
const [, t] = useLanguage()
|
|
28
29
|
const [{ user }] = useSession()
|
|
29
30
|
const [{ parseDate }] = useUtils()
|
|
30
|
-
|
|
31
|
+
const theme = useTheme()
|
|
31
32
|
const [confirm, setConfirm] = useState<any>({ open: false, content: null, handleOnAccept: null, id: null, title: null })
|
|
32
33
|
const goToBack = () => navigation?.canGoBack() && navigation.goBack()
|
|
33
34
|
|
|
@@ -61,7 +62,9 @@ export const SessionsUI = (props: SessionsParams) => {
|
|
|
61
62
|
}
|
|
62
63
|
|
|
63
64
|
return (
|
|
64
|
-
|
|
65
|
+
<Container
|
|
66
|
+
pdng={Platform.OS === 'ios' ? '10px' : '0'}
|
|
67
|
+
>
|
|
65
68
|
<NavBar
|
|
66
69
|
title={t('SESSIONS', 'Sessions')}
|
|
67
70
|
titleAlign={'center'}
|
|
@@ -77,11 +80,11 @@ export const SessionsUI = (props: SessionsParams) => {
|
|
|
77
80
|
<SessionItem key={i}>
|
|
78
81
|
<Placeholder Animation={Fade}>
|
|
79
82
|
<View style={{ flexDirection: 'row', alignItems: 'center' }}>
|
|
80
|
-
<View style={{ flex: 1}}>
|
|
83
|
+
<View style={{ flex: 1 }}>
|
|
81
84
|
<PlaceholderLine width={40} />
|
|
82
85
|
<PlaceholderLine width={40} />
|
|
83
86
|
</View>
|
|
84
|
-
<PlaceholderLine width={5}/>
|
|
87
|
+
<PlaceholderLine width={5} />
|
|
85
88
|
</View>
|
|
86
89
|
</Placeholder>
|
|
87
90
|
</SessionItem>
|
|
@@ -120,7 +123,7 @@ export const SessionsUI = (props: SessionsParams) => {
|
|
|
120
123
|
style={{ borderRadius: 7.6, marginTop: 20 }}
|
|
121
124
|
/>
|
|
122
125
|
</SessionsWrapper>
|
|
123
|
-
|
|
126
|
+
) : (
|
|
124
127
|
<OText>{t('YOU_DONT_HAVE_ANY_SESSIONS', 'You don\'t have any sessions')}</OText>
|
|
125
128
|
)
|
|
126
129
|
)}
|
|
@@ -147,7 +150,7 @@ export const SessionsUI = (props: SessionsParams) => {
|
|
|
147
150
|
onCancel={() => setConfirm({ ...confirm, open: false, title: null })}
|
|
148
151
|
onClose={() => setConfirm({ ...confirm, open: false, title: null })}
|
|
149
152
|
/>
|
|
150
|
-
|
|
153
|
+
</Container>
|
|
151
154
|
)
|
|
152
155
|
}
|
|
153
156
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React, { useEffect, useRef, useState } from 'react';
|
|
2
|
-
import { View, Pressable, StyleSheet, Linking, Platform, TouchableOpacity
|
|
2
|
+
import { View, Pressable, StyleSheet, Linking, Platform, TouchableOpacity } from 'react-native';
|
|
3
3
|
import { useForm, Controller } from 'react-hook-form';
|
|
4
4
|
import Spinner from 'react-native-loading-spinner-overlay';
|
|
5
5
|
import MaterialCommunityIcons from 'react-native-vector-icons/MaterialCommunityIcons';
|
|
@@ -8,6 +8,7 @@ import { PhoneInputNumber } from '../PhoneInputNumber';
|
|
|
8
8
|
import { FacebookLogin } from '../FacebookLogin';
|
|
9
9
|
import Recaptcha from 'react-native-recaptcha-that-works'
|
|
10
10
|
import ReCaptcha from '@fatnlazycat/react-native-recaptcha-v3'
|
|
11
|
+
import ReactNativeHapticFeedback from "react-native-haptic-feedback";
|
|
11
12
|
|
|
12
13
|
import {
|
|
13
14
|
SignupForm as SignUpController,
|
|
@@ -83,7 +84,8 @@ const SignupFormUI = (props: SignupParams) => {
|
|
|
83
84
|
signUpTab,
|
|
84
85
|
useSignUpFullDetails,
|
|
85
86
|
useSignUpOtpEmail,
|
|
86
|
-
useSignUpOtpCellphone
|
|
87
|
+
useSignUpOtpCellphone,
|
|
88
|
+
isGuest
|
|
87
89
|
} = props;
|
|
88
90
|
|
|
89
91
|
const theme = useTheme();
|
|
@@ -163,6 +165,14 @@ const SignupFormUI = (props: SignupParams) => {
|
|
|
163
165
|
})
|
|
164
166
|
}
|
|
165
167
|
|
|
168
|
+
const vibrateApp = (impact?: string) => {
|
|
169
|
+
const options = {
|
|
170
|
+
enableVibrateFallback: true,
|
|
171
|
+
ignoreAndroidSystemSettings: false
|
|
172
|
+
};
|
|
173
|
+
ReactNativeHapticFeedback.trigger(impact || "impactLight", options);
|
|
174
|
+
}
|
|
175
|
+
|
|
166
176
|
const handleRefs = (ref: any, code: string) => {
|
|
167
177
|
switch (code) {
|
|
168
178
|
case 'name': {
|
|
@@ -245,7 +255,7 @@ const SignupFormUI = (props: SignupParams) => {
|
|
|
245
255
|
const onSubmit = (values?: any) => {
|
|
246
256
|
if (phoneInputData.error && signUpTab !== 'otpEmail') {
|
|
247
257
|
showToast(ToastType.Error, phoneInputData.error);
|
|
248
|
-
|
|
258
|
+
vibrateApp()
|
|
249
259
|
return;
|
|
250
260
|
}
|
|
251
261
|
if (
|
|
@@ -263,7 +273,7 @@ const SignupFormUI = (props: SignupParams) => {
|
|
|
263
273
|
'The field Mobile phone is required.',
|
|
264
274
|
),
|
|
265
275
|
);
|
|
266
|
-
|
|
276
|
+
vibrateApp()
|
|
267
277
|
return;
|
|
268
278
|
}
|
|
269
279
|
if (signUpTab === 'otpEmail' || signUpTab === 'otpCellphone') {
|
|
@@ -322,7 +332,7 @@ const SignupFormUI = (props: SignupParams) => {
|
|
|
322
332
|
};
|
|
323
333
|
|
|
324
334
|
const handleChangeInputEmail = (value: string, onChange: any) => {
|
|
325
|
-
onChange(value.toLowerCase().replace(/[&,()%";:ç?<>{}\\[\]\s]/g, ''));
|
|
335
|
+
onChange(value.toLowerCase().trim().replace(/[&,()%";:ç?<>{}\\[\]\s]/g, ''));
|
|
326
336
|
};
|
|
327
337
|
|
|
328
338
|
const handleOpenTermsUrl = async (url: any) => {
|
|
@@ -332,7 +342,7 @@ const SignupFormUI = (props: SignupParams) => {
|
|
|
332
342
|
await Linking.openURL(url);
|
|
333
343
|
} else {
|
|
334
344
|
showToast(ToastType.Error, t('VALIDATION_ERROR_ACTIVE_URL', 'The _attribute_ is not a valid URL.').replace('_attribute_', t('URL', 'URL')))
|
|
335
|
-
|
|
345
|
+
vibrateApp()
|
|
336
346
|
}
|
|
337
347
|
}
|
|
338
348
|
|
|
@@ -340,12 +350,12 @@ const SignupFormUI = (props: SignupParams) => {
|
|
|
340
350
|
setRecaptchaVerified(false)
|
|
341
351
|
if (!recaptchaConfig?.siteKey) {
|
|
342
352
|
showToast(ToastType.Error, t('NO_RECAPTCHA_SITE_KEY', 'The config doesn\'t have recaptcha site key'));
|
|
343
|
-
|
|
353
|
+
vibrateApp()
|
|
344
354
|
return
|
|
345
355
|
}
|
|
346
356
|
if (!recaptchaConfig?.baseUrl) {
|
|
347
357
|
showToast(ToastType.Error, t('NO_RECAPTCHA_BASE_URL', 'The config doesn\'t have recaptcha base url'));
|
|
348
|
-
|
|
358
|
+
vibrateApp()
|
|
349
359
|
return
|
|
350
360
|
}
|
|
351
361
|
recaptchaRef.current.open()
|
|
@@ -389,11 +399,13 @@ const SignupFormUI = (props: SignupParams) => {
|
|
|
389
399
|
baseUrl: configs?.security_recaptcha_base_url?.value || null
|
|
390
400
|
})
|
|
391
401
|
showToast(ToastType.Info, t('TRY_AGAIN', 'Please try again'))
|
|
392
|
-
|
|
402
|
+
vibrateApp()
|
|
393
403
|
return
|
|
394
404
|
}
|
|
395
|
-
formState.result?.result &&
|
|
396
|
-
|
|
405
|
+
formState.result?.result && formState.result?.result[0]?.includes("_") ?
|
|
406
|
+
showToast(ToastType.Error, t(`${formState.result?.result[0]}`, 'Phone number already used')) :
|
|
407
|
+
showToast(ToastType.Error, formState.result?.result[0])
|
|
408
|
+
formState.result?.result && vibrateApp()
|
|
397
409
|
setIsLoadingVerifyModal(false);
|
|
398
410
|
}
|
|
399
411
|
}, [formState]);
|
|
@@ -401,7 +413,7 @@ const SignupFormUI = (props: SignupParams) => {
|
|
|
401
413
|
useEffect(() => {
|
|
402
414
|
if (Object.keys(errors).length > 0) {
|
|
403
415
|
setIsLoadingVerifyModal(false);
|
|
404
|
-
|
|
416
|
+
vibrateApp()
|
|
405
417
|
}
|
|
406
418
|
}, [errors])
|
|
407
419
|
|
|
@@ -430,7 +442,7 @@ const SignupFormUI = (props: SignupParams) => {
|
|
|
430
442
|
? verifyPhoneState?.result?.result
|
|
431
443
|
: verifyPhoneState?.result?.result[0];
|
|
432
444
|
verifyPhoneState.result?.result && showToast(ToastType.Error, message);
|
|
433
|
-
verifyPhoneState.result?.result &&
|
|
445
|
+
verifyPhoneState.result?.result && vibrateApp()
|
|
434
446
|
setIsLoadingVerifyModal(false);
|
|
435
447
|
return;
|
|
436
448
|
}
|
|
@@ -465,15 +477,19 @@ const SignupFormUI = (props: SignupParams) => {
|
|
|
465
477
|
|
|
466
478
|
return (
|
|
467
479
|
<View>
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
480
|
+
{isGuest ? (
|
|
481
|
+
<OText style={{ textAlign: 'center', marginBottom: 10 }} size={18}>{t('SIGNUP', 'Signup')}</OText>
|
|
482
|
+
) : (
|
|
483
|
+
<NavBar
|
|
484
|
+
title={t('SIGNUP', 'Signup')}
|
|
485
|
+
titleAlign={'center'}
|
|
486
|
+
onActionLeft={() => navigation?.canGoBack() && navigation.goBack()}
|
|
487
|
+
showCall={false}
|
|
488
|
+
btnStyle={{ paddingLeft: 0 }}
|
|
489
|
+
titleWrapStyle={{ paddingHorizontal: 0 }}
|
|
490
|
+
titleStyle={{ marginLeft: 0, marginRight: 0 }}
|
|
491
|
+
/>
|
|
492
|
+
)}
|
|
477
493
|
<FormSide>
|
|
478
494
|
{((Number(useSignUpFullDetails) + Number(useSignUpOtpEmail) + Number(useSignUpOtpCellphone)) > 1) && (
|
|
479
495
|
<SignupWith>
|
|
@@ -586,7 +602,7 @@ const SignupFormUI = (props: SignupParams) => {
|
|
|
586
602
|
control={control}
|
|
587
603
|
render={({ onChange, value }: any) => (
|
|
588
604
|
<OInput
|
|
589
|
-
placeholder={t(field.name)}
|
|
605
|
+
placeholder={t(field.name?.replace(/\s/g, '_')?.toUpperCase(), field.name)}
|
|
590
606
|
style={style.inputStyle}
|
|
591
607
|
icon={
|
|
592
608
|
field.code === 'email'
|
|
@@ -893,7 +909,7 @@ const SignupFormUI = (props: SignupParams) => {
|
|
|
893
909
|
</View>
|
|
894
910
|
)
|
|
895
911
|
}
|
|
896
|
-
{configs && Object.keys(configs).length > 0 && (
|
|
912
|
+
{configs && Object.keys(configs).length > 0 && !isGuest && (
|
|
897
913
|
(((configs?.facebook_login?.value === 'true' || configs?.facebook_login?.value === '1') && configs?.facebook_id?.value && facebookLoginEnabled) ||
|
|
898
914
|
((configs?.google_login_client_id?.value !== '' && configs?.google_login_client_id?.value !== null) && googleLoginEnabled) ||
|
|
899
915
|
((configs?.apple_login_client_id?.value !== '' && configs?.apple_login_client_id?.value !== null) && appleLoginEnabled)) &&
|
|
@@ -925,7 +941,7 @@ const SignupFormUI = (props: SignupParams) => {
|
|
|
925
941
|
(
|
|
926
942
|
<FacebookLogin
|
|
927
943
|
notificationState={notificationState}
|
|
928
|
-
handleErrors={(err: any) => { showToast(ToastType.Error, err),
|
|
944
|
+
handleErrors={(err: any) => { showToast(ToastType.Error, err), vibrateApp() }}
|
|
929
945
|
handleLoading={(val: boolean) => setIsFBLoading(val)}
|
|
930
946
|
handleSuccessFacebookLogin={handleSuccessFacebook}
|
|
931
947
|
/>
|
|
@@ -934,7 +950,7 @@ const SignupFormUI = (props: SignupParams) => {
|
|
|
934
950
|
<GoogleLogin
|
|
935
951
|
notificationState={notificationState}
|
|
936
952
|
webClientId={configs?.google_login_client_id?.value}
|
|
937
|
-
handleErrors={(err: any) => { showToast(ToastType.Error, err),
|
|
953
|
+
handleErrors={(err: any) => { showToast(ToastType.Error, err), vibrateApp() }}
|
|
938
954
|
handleLoading={(val: boolean) => setIsFBLoading(val)}
|
|
939
955
|
handleSuccessGoogleLogin={handleSuccessFacebook}
|
|
940
956
|
/>
|
|
@@ -942,7 +958,7 @@ const SignupFormUI = (props: SignupParams) => {
|
|
|
942
958
|
{(configs?.apple_login_client_id?.value !== '' && configs?.apple_login_client_id?.value !== null) && appleLoginEnabled && (
|
|
943
959
|
<AppleLogin
|
|
944
960
|
notificationState={notificationState}
|
|
945
|
-
handleErrors={(err: any) => { showToast(ToastType.Error, err),
|
|
961
|
+
handleErrors={(err: any) => { showToast(ToastType.Error, err), vibrateApp() }}
|
|
946
962
|
handleLoading={(val: boolean) => setIsFBLoading(val)}
|
|
947
963
|
handleSuccessAppleLogin={handleSuccessFacebook}
|
|
948
964
|
/>
|