ordering-ui-react-native 0.14.82 → 0.14.83-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 -3
- package/src/DeliveryApp.tsx +34 -2
- package/src/assets/images/no-network.png +0 -0
- package/src/components/BusinessTypeFilter/index.tsx +9 -2
- package/src/components/BusinessTypeFilter/styles.tsx +1 -1
- package/src/components/BusinessesListing/index.tsx +2 -2
- package/src/components/Cart/index.tsx +1 -1
- package/src/components/Checkout/index.tsx +1 -2
- package/src/components/Home/index.tsx +3 -5
- package/src/components/LanguageSelector/index.tsx +65 -97
- package/src/components/LanguageSelector/styles.tsx +4 -17
- package/src/components/Messages/index.tsx +38 -30
- package/src/components/MomentOption/index.tsx +3 -1
- package/src/components/OrderDetails/index.tsx +29 -6
- package/src/components/OrdersOption/index.tsx +4 -2
- package/src/components/PaymentOptions/index.tsx +7 -16
- package/src/components/PaymentOptionsWebView/index.tsx +123 -124
- package/src/components/ProductForm/index.tsx +1 -1
- package/src/components/ProductForm/styles.tsx +1 -0
- package/src/components/StripeElementsForm/index.tsx +27 -48
- package/src/components/UserProfileForm/index.tsx +35 -1
- package/src/components/VerifyPhone/styles.tsx +1 -2
- package/src/config.json +0 -2
- package/src/pages/Checkout.tsx +1 -1
- package/src/providers/AlertProvider.tsx +4 -1
- package/src/theme.json +2 -1
- package/src/types/index.tsx +2 -9
- package/src/utils/index.tsx +196 -1
- package/themes/business/index.tsx +4 -0
- package/themes/business/src/components/Chat/index.tsx +32 -31
- package/themes/business/src/components/NetworkError/index.tsx +61 -0
- package/themes/business/src/components/NetworkError/styles.tsx +11 -0
- package/themes/business/src/components/OrderDetails/Business.tsx +1 -0
- package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +85 -17
- package/themes/business/src/components/OrdersListManager/index.tsx +871 -0
- package/themes/business/src/components/OrdersListManager/styles.tsx +123 -0
- package/themes/business/src/components/OrdersListManager/utils.tsx +216 -0
- package/themes/business/src/components/OrdersOption/index.tsx +354 -54
- package/themes/business/src/components/OrdersOption/styles.tsx +95 -7
- package/themes/business/src/components/PreviousMessages/index.tsx +12 -0
- package/themes/business/src/components/PreviousOrders/index.tsx +65 -46
- package/themes/business/src/components/PreviousOrders/styles.tsx +5 -10
- package/themes/business/src/components/ReviewCustomer/index.tsx +11 -8
- package/themes/business/src/types/index.tsx +4 -0
- package/themes/business/src/utils/index.tsx +12 -0
- package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
- package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
- package/themes/doordash/src/components/OrderDetails/index.tsx +3 -1
- package/themes/doordash/src/components/OrdersOption/index.tsx +4 -2
- package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
- package/themes/instacart/src/components/OrderDetails/index.tsx +3 -1
- package/themes/instacart/src/components/OrdersOption/index.tsx +4 -2
- package/themes/kiosk/index.tsx +2 -0
- package/themes/kiosk/src/components/BusinessController/index.tsx +27 -6
- package/themes/kiosk/src/components/BusinessController/styles.tsx +1 -1
- package/themes/kiosk/src/components/BusinessProductsListing/index.tsx +51 -24
- package/themes/kiosk/src/components/Cart/index.tsx +1 -1
- package/themes/kiosk/src/components/CartBottomSheet/index.tsx +1 -1
- package/themes/kiosk/src/components/CartBottomSheet/styles.tsx +1 -1
- package/themes/kiosk/src/components/CartContent/index.tsx +13 -3
- package/themes/kiosk/src/components/CartItem/index.tsx +20 -8
- package/themes/kiosk/src/components/CategoriesMenu/index.tsx +7 -5
- package/themes/kiosk/src/components/CustomerName/index.tsx +89 -88
- package/themes/kiosk/src/components/Intro/index.tsx +13 -13
- package/themes/kiosk/src/components/LanguageSelector/index.tsx +12 -8
- package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
- package/themes/kiosk/src/components/NetworkError/index.tsx +60 -0
- package/themes/kiosk/src/components/NetworkError/styles.tsx +11 -0
- package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
- package/themes/kiosk/src/components/OrderDetails/index.tsx +2 -2
- package/themes/kiosk/src/components/OrderSummary/index.tsx +1 -1
- package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +10 -12
- package/themes/kiosk/src/components/ProductForm/index.tsx +172 -124
- package/themes/kiosk/src/components/ProductForm/styles.tsx +1 -1
- package/themes/kiosk/src/components/ProductOption/index.tsx +1 -0
- package/themes/kiosk/src/components/ProductOption/styles.tsx +1 -0
- package/themes/kiosk/src/components/UpsellingProducts/index.tsx +48 -34
- package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
- package/themes/kiosk/src/components/shared/OCard.tsx +112 -78
- package/themes/kiosk/src/types/index.d.ts +4 -0
- package/themes/original/index.tsx +28 -6
- package/themes/original/src/components/AnalyticsSegment/index.tsx +127 -0
- package/themes/original/src/components/BusinessBasicInformation/index.tsx +12 -39
- package/themes/original/src/components/BusinessController/index.tsx +2 -2
- package/themes/original/src/components/BusinessMenuList/index.tsx +4 -2
- package/themes/original/src/components/BusinessPreorder/index.tsx +3 -2
- package/themes/original/src/components/BusinessProductsList/index.tsx +50 -6
- package/themes/original/src/components/BusinessProductsListing/index.tsx +13 -10
- package/themes/original/src/components/BusinessReviews/index.tsx +4 -3
- package/themes/original/src/components/BusinessesListing/index.tsx +22 -18
- package/themes/original/src/components/Cart/index.tsx +43 -10
- package/themes/original/src/components/Checkout/index.tsx +55 -20
- package/themes/original/src/components/Checkout/styles.tsx +7 -0
- package/themes/original/src/components/CouponControl/index.tsx +1 -0
- package/themes/original/src/components/DriverTips/index.tsx +1 -1
- package/themes/original/src/components/ForgotPasswordForm/index.tsx +8 -12
- package/themes/original/src/components/HighestRatedBusinesses/index.tsx +9 -2
- package/themes/original/src/components/LastOrder/index.tsx +3 -1
- package/themes/original/src/components/LoginForm/index.tsx +83 -68
- package/themes/original/src/components/MessageListing/index.tsx +4 -2
- package/themes/original/src/components/Messages/index.tsx +19 -21
- package/themes/original/src/components/MomentOption/index.tsx +127 -152
- package/themes/original/src/components/MomentOption/styles.tsx +42 -18
- package/themes/original/src/components/NetworkError/index.tsx +61 -0
- package/themes/original/src/components/NetworkError/styles.tsx +11 -0
- package/themes/original/src/components/OrderDetails/index.tsx +106 -113
- package/themes/original/src/components/OrderProgress/index.tsx +6 -5
- package/themes/original/src/components/OrderSummary/index.tsx +34 -1
- package/themes/original/src/components/OrdersOption/index.tsx +20 -42
- package/themes/original/src/components/OrdersOption/styles.tsx +0 -5
- package/themes/original/src/components/PaymentOptionWallet/index.tsx +1 -1
- package/themes/original/src/components/PaymentOptions/index.tsx +20 -23
- package/themes/original/src/components/PhoneInputNumber/index.tsx +15 -8
- package/themes/original/src/components/PlaceSpot/index.tsx +114 -0
- package/themes/original/src/components/PlaceSpot/styles.tsx +11 -0
- package/themes/original/src/components/PreviousOrders/index.tsx +4 -0
- package/themes/original/src/components/ProductForm/index.tsx +33 -18
- package/themes/original/src/components/ProductForm/styles.tsx +0 -1
- package/themes/original/src/components/ProductOptionSubOption/index.tsx +81 -74
- package/themes/original/src/components/ReviewDriver/index.tsx +315 -0
- package/themes/original/src/components/ReviewDriver/styles.tsx +38 -0
- package/themes/original/src/components/ReviewOrder/index.tsx +307 -186
- package/themes/original/src/components/ReviewOrder/styles.tsx +24 -13
- package/themes/original/src/components/ReviewProducts/index.tsx +116 -0
- package/themes/original/src/components/ReviewProducts/styles.tsx +16 -0
- package/themes/original/src/components/SignupForm/index.tsx +173 -154
- package/themes/original/src/components/SingleProductCard/index.tsx +6 -13
- package/themes/original/src/components/SingleProductCard/styles.tsx +1 -1
- package/themes/original/src/components/SingleProductReview/index.tsx +166 -0
- package/themes/original/src/components/SingleProductReview/styles.tsx +27 -0
- package/themes/original/src/components/StripeElementsForm/index.tsx +55 -72
- package/themes/original/src/components/UpsellingProducts/index.tsx +6 -6
- package/themes/original/src/components/UserDetails/index.tsx +4 -95
- package/themes/original/src/components/UserFormDetails/index.tsx +2 -14
- package/themes/original/src/components/UserProfile/index.tsx +13 -6
- package/themes/original/src/components/UserProfileForm/index.tsx +16 -8
- package/themes/original/src/components/VerifyPhone/index.tsx +10 -7
- package/themes/original/src/components/VerifyPhone/styles.tsx +2 -1
- package/themes/original/src/components/WalletTransactionItem/index.tsx +3 -2
- package/themes/original/src/components/Wallets/index.tsx +16 -8
- package/themes/original/src/layouts/FloatingBottomContainer.tsx +26 -0
- package/themes/original/src/types/index.tsx +47 -10
- package/themes/single-business/src/components/LastOrder/index.tsx +3 -1
- package/themes/single-business/src/components/OrderDetails/index.tsx +15 -0
- package/themes/single-business/src/components/OrderTypeSelector/index.tsx +5 -5
- package/themes/single-business/src/components/OrdersOption/index.tsx +4 -2
- package/themes/single-business/src/utils/index.tsx +7 -1
- package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
- package/themes/uber-eats/src/components/OrderDetails/index.tsx +3 -1
- package/themes/uber-eats/src/components/OrdersOption/index.tsx +4 -2
- package/src/components/StripeMethodForm/index.tsx +0 -163
|
@@ -2,12 +2,12 @@ import React, { useState, useEffect } from 'react'
|
|
|
2
2
|
import { OrderList, useLanguage, useOrder, ToastType, useToast } from 'ordering-components/native'
|
|
3
3
|
import { useTheme } from 'styled-components/native';
|
|
4
4
|
import { useFocusEffect } from '@react-navigation/native'
|
|
5
|
-
import { OText
|
|
5
|
+
import { OText } from '../shared'
|
|
6
6
|
import { NotFoundSource } from '../NotFoundSource'
|
|
7
7
|
import { ActiveOrders } from '../ActiveOrders'
|
|
8
8
|
import { PreviousOrders } from '../PreviousOrders'
|
|
9
9
|
|
|
10
|
-
import { OptionTitle
|
|
10
|
+
import { OptionTitle } from './styles'
|
|
11
11
|
import { OrdersOptionParams } from '../../types'
|
|
12
12
|
|
|
13
13
|
import {
|
|
@@ -32,8 +32,6 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
|
|
|
32
32
|
loadMoreStatus,
|
|
33
33
|
loadMoreOrders,
|
|
34
34
|
loadOrders,
|
|
35
|
-
setOrdersLength,
|
|
36
|
-
ordersLength
|
|
37
35
|
} = props
|
|
38
36
|
|
|
39
37
|
const theme = useTheme();
|
|
@@ -93,7 +91,9 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
|
|
|
93
91
|
{ key: 18, value: t('DRIVER_ALMOST_ARRIVED_TO_BUSINESS', 'Driver almost arrived to business') },
|
|
94
92
|
{ key: 19, value: t('DRIVER_ALMOST_ARRIVED_TO_CUSTOMER', 'Driver almost arrived to customer') },
|
|
95
93
|
{ key: 20, value: t('ORDER_CUSTOMER_ALMOST_ARRIVED_BUSINESS', 'Customer almost arrived to business') },
|
|
96
|
-
{ key: 21, value: t('ORDER_CUSTOMER_ARRIVED_BUSINESS', 'Customer arrived to business') }
|
|
94
|
+
{ key: 21, value: t('ORDER_CUSTOMER_ARRIVED_BUSINESS', 'Customer arrived to business') },
|
|
95
|
+
{ key: 22, value: t('ORDER_LOOKING_FOR_DRIVER', 'Looking for driver') },
|
|
96
|
+
{ key: 23, value: t('ORDER_DRIVER_ON_WAY', 'Driver on way') }
|
|
97
97
|
]
|
|
98
98
|
|
|
99
99
|
const objectStatus = orderStatus.find((o) => o.key === status)
|
|
@@ -114,50 +114,28 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
|
|
|
114
114
|
}
|
|
115
115
|
}, [loadMoreStatus, loading, pagination])
|
|
116
116
|
|
|
117
|
-
useEffect(() => {
|
|
118
|
-
if (loading) return
|
|
119
|
-
|
|
120
|
-
const updateOrders = orders.filter((order: any) => orderStatus.includes(order.status))
|
|
121
|
-
|
|
122
|
-
if (activeOrders) {
|
|
123
|
-
setOrdersLength && setOrdersLength({ ...ordersLength, activeOrdersLength: updateOrders?.length })
|
|
124
|
-
} else if (!preOrders) {
|
|
125
|
-
setOrdersLength && setOrdersLength({ ...ordersLength, previousOrdersLength: updateOrders?.length })
|
|
126
|
-
}
|
|
127
|
-
}, [orders?.length])
|
|
128
|
-
|
|
129
117
|
return (
|
|
130
118
|
<>
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
119
|
+
{(orders.length > 0) && (
|
|
120
|
+
<>
|
|
121
|
+
<OptionTitle>
|
|
122
|
+
<OText size={16} lineHeight={24} weight={'500'} color={theme.colors.textNormal} mBottom={10} >
|
|
123
|
+
{titleContent || (activeOrders
|
|
124
|
+
? t('ACTIVE', 'Active')
|
|
125
|
+
: preOrders
|
|
126
|
+
? t('PREORDERS', 'Preorders')
|
|
127
|
+
: t('PAST', 'Past'))}
|
|
128
|
+
</OText>
|
|
129
|
+
</OptionTitle>
|
|
130
|
+
</>
|
|
131
|
+
)}
|
|
132
|
+
{!loading && orders.length === 0 && (
|
|
141
133
|
<NotFoundSource
|
|
142
134
|
content={t('NO_RESULTS_FOUND', 'Sorry, no results found')}
|
|
143
135
|
image={imageFails}
|
|
144
136
|
conditioned
|
|
145
137
|
/>
|
|
146
138
|
)}
|
|
147
|
-
{!loading && ordersLength.activeOrdersLength === 0 && ordersLength.previousOrdersLength === 0 && activeOrders && (
|
|
148
|
-
<NoOrdersWrapper>
|
|
149
|
-
<OText size={14} numberOfLines={1}>
|
|
150
|
-
{t('YOU_DONT_HAVE_ORDERS', 'You don\'t have any orders')}
|
|
151
|
-
</OText>
|
|
152
|
-
<OButton
|
|
153
|
-
text={t('ORDER_NOW', 'Order now')}
|
|
154
|
-
onClick={() => onNavigationRedirect && onNavigationRedirect('BusinessList')}
|
|
155
|
-
textStyle={{ color: 'white', fontSize: 14 }}
|
|
156
|
-
style={{ borderRadius: 7.6, marginBottom: 10, marginTop: 10, height: 44, paddingLeft: 10, paddingRight: 10 }}
|
|
157
|
-
/>
|
|
158
|
-
|
|
159
|
-
</NoOrdersWrapper>
|
|
160
|
-
)}
|
|
161
139
|
{loading && (
|
|
162
140
|
<>
|
|
163
141
|
{!activeOrders ? (
|
|
@@ -230,7 +208,7 @@ export const OrdersOption = (props: OrdersOptionParams) => {
|
|
|
230
208
|
...props,
|
|
231
209
|
UIComponent: OrdersOptionUI,
|
|
232
210
|
orderStatus: props.preOrders ? [13] : props.activeOrders
|
|
233
|
-
? [0, 3, 4, 7, 8, 9, 14, 15, 18, 19, 20, 21]
|
|
211
|
+
? [0, 3, 4, 7, 8, 9, 14, 15, 18, 19, 20, 21, 22, 23]
|
|
234
212
|
: [1, 2, 5, 6, 10, 11, 12, 16, 17],
|
|
235
213
|
useDefualtSessionManager: true,
|
|
236
214
|
}
|
|
@@ -48,7 +48,7 @@ const PaymentOptionWalletUI = (props: any) => {
|
|
|
48
48
|
new Array(walletsState.result?.length).fill(false)
|
|
49
49
|
);
|
|
50
50
|
|
|
51
|
-
const creditBalance: any = (wallet: any) => ` = ${parsePrice(
|
|
51
|
+
const creditBalance: any = (wallet: any) => ` = ${parsePrice(wallet.balance / wallet.redemption_rate)}`
|
|
52
52
|
|
|
53
53
|
const walletName: any = {
|
|
54
54
|
cash: {
|
|
@@ -9,6 +9,8 @@ import {
|
|
|
9
9
|
import {
|
|
10
10
|
PaymentOptions as PaymentOptionsController,
|
|
11
11
|
useLanguage,
|
|
12
|
+
ToastType,
|
|
13
|
+
useToast,
|
|
12
14
|
} from 'ordering-components/native';
|
|
13
15
|
import { useTheme } from 'styled-components/native';
|
|
14
16
|
import { PaymentOptionCash } from '../PaymentOptionCash';
|
|
@@ -30,8 +32,6 @@ import {
|
|
|
30
32
|
import { getIconCard, flatArray } from '../../utils';
|
|
31
33
|
|
|
32
34
|
const stripeOptions: any = ['stripe_direct', 'stripe', 'stripe_connect']
|
|
33
|
-
const methodsPay = ['google_pay', 'apple_pay']
|
|
34
|
-
const stripeDirectMethods = ['stripe_direct', ...methodsPay]
|
|
35
35
|
// const stripeRedirectOptions = [
|
|
36
36
|
// { name: 'Bancontact', value: 'bancontact' },
|
|
37
37
|
// { name: 'Alipay', value: 'alipay' },
|
|
@@ -54,12 +54,11 @@ const PaymentOptionsUI = (props: any) => {
|
|
|
54
54
|
handlePaymethodClick,
|
|
55
55
|
handlePaymethodDataChange,
|
|
56
56
|
isOpenMethod,
|
|
57
|
-
handlePaymentMethodClickCustom
|
|
58
|
-
handlePlaceOrder
|
|
57
|
+
handlePaymentMethodClickCustom
|
|
59
58
|
} = props
|
|
60
59
|
|
|
61
60
|
const theme = useTheme();
|
|
62
|
-
|
|
61
|
+
const [, { showToast }] = useToast();
|
|
63
62
|
|
|
64
63
|
const getPayIcon = (method: string) => {
|
|
65
64
|
switch (method) {
|
|
@@ -95,11 +94,18 @@ const PaymentOptionsUI = (props: any) => {
|
|
|
95
94
|
// ]
|
|
96
95
|
|
|
97
96
|
const handlePaymentMethodClick = (paymethod: any) => {
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
97
|
+
if (cart?.balance > 0) {
|
|
98
|
+
const isPopupMethod = ['stripe', 'stripe_direct', 'stripe_connect', 'stripe_redirect', 'paypal'].includes(paymethod?.gateway)
|
|
99
|
+
if (webViewPaymentGateway.includes(paymethod?.gateway)) {
|
|
100
|
+
handlePaymentMethodClickCustom(paymethod)
|
|
101
|
+
}
|
|
102
|
+
handlePaymethodClick(paymethod, isPopupMethod)
|
|
103
|
+
return
|
|
104
|
+
}
|
|
105
|
+
showToast(
|
|
106
|
+
ToastType.Error,
|
|
107
|
+
t('CART_BALANCE_ZERO', 'Sorry, the amount to pay is equal to zero and it is not necessary to select a payment method'))
|
|
108
|
+
;
|
|
103
109
|
}
|
|
104
110
|
|
|
105
111
|
useEffect(() => {
|
|
@@ -120,12 +126,6 @@ const PaymentOptionsUI = (props: any) => {
|
|
|
120
126
|
}
|
|
121
127
|
}, [props.paySelected])
|
|
122
128
|
|
|
123
|
-
useEffect(() => {
|
|
124
|
-
if (methodsPay.includes(paymethodSelected?.gateway) && paymethodData?.id && paymethodSelected?.data?.card) {
|
|
125
|
-
handlePlaceOrder()
|
|
126
|
-
}
|
|
127
|
-
}, [paymethodData, paymethodSelected])
|
|
128
|
-
|
|
129
129
|
const renderPaymethods = ({ item }: any) => {
|
|
130
130
|
return (
|
|
131
131
|
<TouchableOpacity
|
|
@@ -287,11 +287,11 @@ const PaymentOptionsUI = (props: any) => {
|
|
|
287
287
|
</KeyboardAvoidingView>
|
|
288
288
|
</OModal>
|
|
289
289
|
|
|
290
|
-
{/* Stripe direct
|
|
290
|
+
{/* Stripe direct */}
|
|
291
291
|
<OModal
|
|
292
292
|
entireModal
|
|
293
293
|
title={t('ADD_CREDIT_OR_DEBIT_CARD', 'Add credit or debit card')}
|
|
294
|
-
open={
|
|
294
|
+
open={isOpenMethod?.paymethod?.gateway === 'stripe_direct' && !paymethodData?.id}
|
|
295
295
|
onClose={() => handlePaymethodClick(null)}
|
|
296
296
|
>
|
|
297
297
|
<KeyboardAvoidingView
|
|
@@ -300,13 +300,10 @@ const PaymentOptionsUI = (props: any) => {
|
|
|
300
300
|
enabled={Platform.OS === 'ios' ? true : false}
|
|
301
301
|
>
|
|
302
302
|
<StripeElementsForm
|
|
303
|
-
cart={cart}
|
|
304
|
-
paymethod={isOpenMethod?.paymethod?.gateway}
|
|
305
|
-
methodsPay={methodsPay}
|
|
306
303
|
businessId={props.businessId}
|
|
307
|
-
publicKey={isOpenMethod?.paymethod?.credentials?.publishable
|
|
304
|
+
publicKey={isOpenMethod?.paymethod?.credentials?.publishable}
|
|
308
305
|
handleSource={handlePaymethodDataChange}
|
|
309
|
-
onCancel={() => handlePaymethodClick(
|
|
306
|
+
onCancel={() => handlePaymethodClick(false)}
|
|
310
307
|
/>
|
|
311
308
|
</KeyboardAvoidingView>
|
|
312
309
|
</OModal>
|
|
@@ -22,18 +22,23 @@ export const PhoneInputNumber = (props: PhoneInputParams) => {
|
|
|
22
22
|
textStyle,
|
|
23
23
|
flagStyle,
|
|
24
24
|
noDropIcon,
|
|
25
|
-
isDisabled
|
|
25
|
+
isDisabled,
|
|
26
|
+
isStartValidation
|
|
26
27
|
} = props
|
|
27
28
|
|
|
28
29
|
const theme = useTheme();
|
|
29
30
|
|
|
31
|
+
const [, t] = useLanguage()
|
|
32
|
+
const [{ configs }] = useConfig()
|
|
33
|
+
const phoneInput = useRef<PhoneInput>(null);
|
|
34
|
+
const [userphoneNumber, setUserphoneNumber] = useState('');
|
|
30
35
|
|
|
31
36
|
const style = StyleSheet.create({
|
|
32
37
|
input: {
|
|
33
38
|
backgroundColor: theme.colors.white,
|
|
34
39
|
borderRadius: 7.6,
|
|
35
40
|
borderWidth: 1,
|
|
36
|
-
borderColor: theme.colors.border,
|
|
41
|
+
borderColor: (isStartValidation && userphoneNumber === '') ? theme.colors.danger5 : theme.colors.border,
|
|
37
42
|
paddingBottom: 0,
|
|
38
43
|
paddingTop: 0,
|
|
39
44
|
flexGrow: 1,
|
|
@@ -48,12 +53,6 @@ export const PhoneInputNumber = (props: PhoneInputParams) => {
|
|
|
48
53
|
}
|
|
49
54
|
})
|
|
50
55
|
|
|
51
|
-
|
|
52
|
-
const [, t] = useLanguage()
|
|
53
|
-
const [{ configs }] = useConfig()
|
|
54
|
-
const phoneInput = useRef<PhoneInput>(null);
|
|
55
|
-
const [userphoneNumber, setUserphoneNumber] = useState('');
|
|
56
|
-
|
|
57
56
|
const handleChangeNumber = (number: any) => {
|
|
58
57
|
setUserphoneNumber(number)
|
|
59
58
|
}
|
|
@@ -97,6 +96,14 @@ export const PhoneInputNumber = (props: PhoneInputParams) => {
|
|
|
97
96
|
|
|
98
97
|
return (
|
|
99
98
|
<Wrapper onPress={() => forwardRef?.current?.focus?.()}>
|
|
99
|
+
{(isStartValidation && userphoneNumber === '') && (
|
|
100
|
+
<OText
|
|
101
|
+
size={14}
|
|
102
|
+
color={theme.colors.danger5}
|
|
103
|
+
>
|
|
104
|
+
{t('VALIDATION_ERROR_MOBILE_PHONE_REQUIRED', 'The field Mobile phone is required').replace('_attribute_', t('CELLPHONE', 'Cellphone'))}*
|
|
105
|
+
</OText>
|
|
106
|
+
)}
|
|
100
107
|
<PhoneInput
|
|
101
108
|
ref={phoneInput}
|
|
102
109
|
disabled={isDisabled}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import React, { useEffect, useState } from 'react'
|
|
2
|
+
import { View } from 'react-native'
|
|
3
|
+
import { PlaceSpot as PlaceSpotController, useLanguage } from 'ordering-components/native'
|
|
4
|
+
import { PlaceGroupContainer, PlaceSpotContainer } from './styles'
|
|
5
|
+
import { NotFoundSource } from '../NotFoundSource'
|
|
6
|
+
import { OText, ODropDown } from '../shared'
|
|
7
|
+
import { Placeholder, PlaceholderLine } from 'rn-placeholder'
|
|
8
|
+
import { PlaceSpotParams } from '../../types'
|
|
9
|
+
|
|
10
|
+
const PlaceSpotUI = (props: PlaceSpotParams) => {
|
|
11
|
+
const {
|
|
12
|
+
isOpenPlaceSpot,
|
|
13
|
+
cart,
|
|
14
|
+
placesState,
|
|
15
|
+
handleChangePlace,
|
|
16
|
+
getPlacesList,
|
|
17
|
+
setOpenPlaceModal
|
|
18
|
+
} = props
|
|
19
|
+
|
|
20
|
+
const [, t] = useLanguage()
|
|
21
|
+
const [placeGroupSelected, setPlaceGroupSelected] = useState<any>(null)
|
|
22
|
+
|
|
23
|
+
const getPlacesGroups = () => {
|
|
24
|
+
const groups = placesState.placeGroups?.filter((group: any) => group?.enabled && placesState?.places?.find((place: any) => place?.enabled && place?.place_group_id === group?.id))
|
|
25
|
+
return groups.map((group: any) => ({
|
|
26
|
+
value: group,
|
|
27
|
+
content: group?.name,
|
|
28
|
+
showOnSelected: group?.name
|
|
29
|
+
}))
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const getPlaces = () => {
|
|
33
|
+
const places = placeGroupSelected && placesState?.places?.filter((place: any) => place?.enabled && place?.place_group_id === placeGroupSelected?.id)
|
|
34
|
+
return places.map((place: any) => ({
|
|
35
|
+
value: place,
|
|
36
|
+
content: place.name,
|
|
37
|
+
showOnSelected: place.name
|
|
38
|
+
}))
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const handlerChangePlace = (place: any) => {
|
|
42
|
+
setOpenPlaceModal(false)
|
|
43
|
+
handleChangePlace(place)
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
useEffect(() => {
|
|
48
|
+
if (!placesState?.loading) {
|
|
49
|
+
const placeGroupOnCart = placesState?.placeGroups.find((group: any) => group?.id === cart?.place?.place_group_id)
|
|
50
|
+
setPlaceGroupSelected(placeGroupOnCart)
|
|
51
|
+
}
|
|
52
|
+
}, [placesState])
|
|
53
|
+
|
|
54
|
+
useEffect(() => {
|
|
55
|
+
getPlacesList()
|
|
56
|
+
}, [isOpenPlaceSpot])
|
|
57
|
+
|
|
58
|
+
return (
|
|
59
|
+
<PlaceSpotContainer>
|
|
60
|
+
{(placesState.error || placesState?.placeGroups?.length === 0) && !placesState?.loading && (
|
|
61
|
+
<NotFoundSource
|
|
62
|
+
content={t('NO_PLACES_THIS_BUSINESS', 'There are not places for this business')}
|
|
63
|
+
/>
|
|
64
|
+
)}
|
|
65
|
+
{placesState?.loading && (
|
|
66
|
+
<Placeholder>
|
|
67
|
+
<PlaceGroupContainer>
|
|
68
|
+
<PlaceholderLine width={100} height={25} />
|
|
69
|
+
<PlaceholderLine height={30} />
|
|
70
|
+
</PlaceGroupContainer>
|
|
71
|
+
<View>
|
|
72
|
+
<PlaceholderLine width={120} height={25} />
|
|
73
|
+
<PlaceholderLine height={30} />
|
|
74
|
+
</View>
|
|
75
|
+
</Placeholder>
|
|
76
|
+
)}
|
|
77
|
+
{!(placesState.error || placesState?.placeGroups?.length === 0) && !placesState?.loading && (
|
|
78
|
+
<>
|
|
79
|
+
<PlaceGroupContainer>
|
|
80
|
+
<OText size={16} mBottom={10}>{t('PLACE_GROUP', 'Place group')}</OText>
|
|
81
|
+
<ODropDown
|
|
82
|
+
placeholder={t('PLACE_GROUP', 'Place group')}
|
|
83
|
+
options={getPlacesGroups()}
|
|
84
|
+
onSelect={(group: any) => setPlaceGroupSelected(group)}
|
|
85
|
+
defaultValue={placeGroupSelected ?? cart?.place}
|
|
86
|
+
isModal
|
|
87
|
+
/>
|
|
88
|
+
</PlaceGroupContainer>
|
|
89
|
+
{placeGroupSelected && (
|
|
90
|
+
<View>
|
|
91
|
+
<OText size={16} mBottom={10}>{t('SELECT_YOUR_SPOT', 'Select your spot')}</OText>
|
|
92
|
+
<ODropDown
|
|
93
|
+
onSelect={(place: any) => handlerChangePlace(place)}
|
|
94
|
+
placeholder={t('SELECT_YOUR_SPOT', 'Select your spot')}
|
|
95
|
+
options={getPlaces()}
|
|
96
|
+
defaultValue={placesState?.places?.find((place : any) => place?.id === cart?.place_id)}
|
|
97
|
+
isModal
|
|
98
|
+
/>
|
|
99
|
+
</View>
|
|
100
|
+
)}
|
|
101
|
+
</>
|
|
102
|
+
)}
|
|
103
|
+
</PlaceSpotContainer>
|
|
104
|
+
)
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
export const PlaceSpot = (props: PlaceSpotParams) => {
|
|
108
|
+
const placeSpotProps = {
|
|
109
|
+
...props,
|
|
110
|
+
UIComponent: PlaceSpotUI
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
return <PlaceSpotController {...placeSpotProps} />
|
|
114
|
+
}
|
|
@@ -86,6 +86,10 @@ export const PreviousOrders = (props: PreviousOrdersParams) => {
|
|
|
86
86
|
id: order?.id,
|
|
87
87
|
business_id: order?.business_id,
|
|
88
88
|
logo: order.business?.logo,
|
|
89
|
+
driver: order?.driver,
|
|
90
|
+
products: order?.products,
|
|
91
|
+
review: order?.review,
|
|
92
|
+
user_review: order?.user_review
|
|
89
93
|
},
|
|
90
94
|
});
|
|
91
95
|
};
|
|
@@ -264,7 +264,15 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
264
264
|
}
|
|
265
265
|
if (img?.video) {
|
|
266
266
|
const keys = img?.video.split('/')
|
|
267
|
-
|
|
267
|
+
let _videoId = keys[keys.length - 1]
|
|
268
|
+
if (_videoId.includes('watch')) {
|
|
269
|
+
const __url = _videoId.split('=')[1]
|
|
270
|
+
_videoId = __url
|
|
271
|
+
}
|
|
272
|
+
if (_videoId.includes('?')) {
|
|
273
|
+
const __url = _videoId.split('?')[0]
|
|
274
|
+
_videoId = __url
|
|
275
|
+
}
|
|
268
276
|
videoList.push(_videoId)
|
|
269
277
|
}
|
|
270
278
|
}
|
|
@@ -396,7 +404,7 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
396
404
|
<FastImage
|
|
397
405
|
style={{ height: '100%', opacity: isSoldOut ? 0.5 : 1 }}
|
|
398
406
|
source={{
|
|
399
|
-
uri: optimizeImage(img, '
|
|
407
|
+
uri: optimizeImage(img, 'h_1024,c_limit'),
|
|
400
408
|
priority: FastImage.priority.normal,
|
|
401
409
|
}}
|
|
402
410
|
/>
|
|
@@ -436,7 +444,7 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
436
444
|
>
|
|
437
445
|
{img.includes('image') ? (
|
|
438
446
|
<OIcon
|
|
439
|
-
url={img}
|
|
447
|
+
url={optimizeImage(img, 'h_250,c_limit')}
|
|
440
448
|
style={{
|
|
441
449
|
borderColor: theme.colors.lightGray,
|
|
442
450
|
borderRadius: 8,
|
|
@@ -834,9 +842,13 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
834
842
|
</ScrollView>
|
|
835
843
|
{!loading && !error && product && (
|
|
836
844
|
<ProductActions ios={Platform?.OS === 'ios'}>
|
|
837
|
-
<
|
|
838
|
-
{
|
|
839
|
-
|
|
845
|
+
<View>
|
|
846
|
+
<OText size={16} lineHeight={24} weight={'600'}>
|
|
847
|
+
{productCart.total ? parsePrice(productCart?.total) : ''}
|
|
848
|
+
</OText>
|
|
849
|
+
{product?.minimum_per_order && productCart?.quantity < product?.minimum_per_order && <OText size={12} color={theme.colors?.red}>{t('MOBILE_MINIMUM_TO_ORDER', 'Min. _number_ ').replace('_number_', product?.minimum_per_order)}</OText>}
|
|
850
|
+
{product?.maximum_per_order && productCart?.quantity > product?.maximum_per_order && <OText size={12} color={theme.colors?.red}>{t('MOBILE_MAXIMUM_TO_ORDER', 'Max. _number_'.replace('_number_', product?.maximum_per_order))}</OText>}
|
|
851
|
+
</View>
|
|
840
852
|
{productCart && !isSoldOut && maxProductQuantity > 0 && (
|
|
841
853
|
<View style={styles.quantityControl}>
|
|
842
854
|
<TouchableOpacity
|
|
@@ -845,6 +857,7 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
845
857
|
<OIcon
|
|
846
858
|
src={theme.images.general.minus}
|
|
847
859
|
width={16}
|
|
860
|
+
style={{ borderWidth: 1, borderColor: 'red' }}
|
|
848
861
|
color={
|
|
849
862
|
productCart.quantity === 1 || isSoldOut
|
|
850
863
|
? theme.colors.backgroundGray
|
|
@@ -888,6 +901,7 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
888
901
|
<OIcon
|
|
889
902
|
src={theme.images.general.plus}
|
|
890
903
|
width={16}
|
|
904
|
+
style={{ borderWidth: 1, borderColor: 'red' }}
|
|
891
905
|
color={
|
|
892
906
|
maxProductQuantity <= 0 ||
|
|
893
907
|
productCart.quantity >= maxProductQuantity ||
|
|
@@ -935,28 +949,29 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
935
949
|
style={{
|
|
936
950
|
width: isSoldOut || maxProductQuantity <= 0 ? '60%' : '40%',
|
|
937
951
|
}}>
|
|
938
|
-
{productCart &&
|
|
939
|
-
!isSoldOut &&
|
|
940
|
-
maxProductQuantity > 0 &&
|
|
952
|
+
{((productCart &&
|
|
941
953
|
auth &&
|
|
942
|
-
orderState.options?.address_id && (
|
|
954
|
+
orderState.options?.address_id) || (isSoldOut || maxProductQuantity <= 0)) && (
|
|
943
955
|
<OButton
|
|
944
956
|
onClick={() => handleSaveProduct()}
|
|
945
957
|
imgRightSrc=""
|
|
946
958
|
text={`${orderState.loading
|
|
947
959
|
? t('LOADING', 'Loading')
|
|
948
|
-
:
|
|
949
|
-
? t('
|
|
950
|
-
:
|
|
960
|
+
: (isSoldOut || maxProductQuantity <= 0)
|
|
961
|
+
? t('SOLD_OUT', 'Sold out')
|
|
962
|
+
: editMode
|
|
963
|
+
? t('UPDATE', 'Update')
|
|
964
|
+
: t('ADD', 'Add')
|
|
951
965
|
}`}
|
|
966
|
+
isDisabled={isSoldOut || maxProductQuantity <= 0 || (product?.minimum_per_order && (productCart?.quantity < product?.minimum_per_order)) || (product?.maximum_per_order && (productCart?.quantity > product?.maximum_per_order))}
|
|
952
967
|
textStyle={{
|
|
953
|
-
color:
|
|
968
|
+
color: saveErrors || isSoldOut || maxProductQuantity <= 0 ? theme.colors.primary : theme.colors.white,
|
|
954
969
|
fontSize: orderState.loading || editMode ? 10 : 14
|
|
955
970
|
}}
|
|
956
971
|
style={{
|
|
957
|
-
backgroundColor:
|
|
958
|
-
borderColor:
|
|
959
|
-
opacity:
|
|
972
|
+
backgroundColor: saveErrors || isSoldOut || maxProductQuantity <= 0 || (product?.minimum_per_order && (productCart?.quantity < product?.minimum_per_order)) || (product?.maximum_per_order && (productCart?.quantity > product?.maximum_per_order)) ? theme.colors.lightGray : theme.colors.primary,
|
|
973
|
+
borderColor: saveErrors || isSoldOut || maxProductQuantity <= 0 || (product?.minimum_per_order && (productCart?.quantity < product?.minimum_per_order)) || (product?.maximum_per_order && (productCart?.quantity > product?.maximum_per_order)) ? theme.colors.white : theme.colors.primary,
|
|
974
|
+
opacity: saveErrors || isSoldOut || maxProductQuantity <= 0 ? 0.3 : 1,
|
|
960
975
|
borderRadius: 7.6,
|
|
961
976
|
height: 44,
|
|
962
977
|
shadowOpacity: 0,
|
|
@@ -976,7 +991,7 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
976
991
|
) : (
|
|
977
992
|
<OButton onClick={navigation.navigate('AddressList')} />
|
|
978
993
|
))}
|
|
979
|
-
{
|
|
994
|
+
{!auth && (
|
|
980
995
|
<OButton
|
|
981
996
|
isDisabled={isSoldOut || maxProductQuantity <= 0}
|
|
982
997
|
onClick={() => handleRedirectLogin()}
|