ordering-ui-react-native 0.14.40 → 0.14.42-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 +2 -2
- package/src/components/BusinessItemAccordion/index.tsx +2 -2
- package/src/components/Cart/index.tsx +135 -42
- package/src/components/Cart/styles.tsx +7 -0
- package/src/components/Checkout/index.tsx +28 -166
- package/src/components/OrderDetails/index.tsx +102 -34
- package/src/components/OrderDetails/styles.tsx +7 -0
- package/src/components/OrderSummary/index.tsx +140 -37
- package/src/components/OrderSummary/styles.tsx +10 -2
- package/src/components/PaymentOptions/index.tsx +3 -1
- package/src/components/PaymentOptionsWebView/index.tsx +150 -0
- package/src/components/ProductForm/index.tsx +6 -6
- package/src/components/SingleProductCard/index.tsx +1 -1
- package/src/components/StripeElementsForm/index.tsx +28 -13
- package/src/components/TaxInformation/index.tsx +58 -26
- package/src/components/VerifyPhone/styles.tsx +1 -2
- package/src/components/shared/OIcon.tsx +4 -1
- package/src/index.tsx +2 -0
- package/src/navigators/HomeNavigator.tsx +6 -0
- package/src/pages/ProductDetails.tsx +55 -0
- package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
- package/themes/kiosk/src/components/Cart/index.tsx +14 -21
- package/themes/kiosk/src/components/CartItem/index.tsx +9 -7
- package/themes/kiosk/src/components/CustomerName/index.tsx +2 -1
- package/themes/kiosk/src/components/Intro/index.tsx +4 -4
- package/themes/kiosk/src/components/OptionCard/index.tsx +11 -6
- package/themes/kiosk/src/components/PaymentOptions/index.tsx +46 -44
- package/themes/original/src/components/BusinessController/index.tsx +3 -3
- package/themes/original/src/components/BusinessFeaturedController/index.tsx +2 -2
- package/themes/original/src/components/BusinessItemAccordion/index.tsx +12 -9
- package/themes/original/src/components/BusinessItemAccordion/styles.tsx +3 -2
- package/themes/original/src/components/BusinessProductsListing/index.tsx +8 -4
- package/themes/original/src/components/BusinessesListing/index.tsx +129 -94
- package/themes/original/src/components/Cart/index.tsx +122 -24
- package/themes/original/src/components/Cart/styles.tsx +8 -1
- package/themes/original/src/components/Checkout/index.tsx +38 -3
- package/themes/original/src/components/Help/index.tsx +1 -1
- package/themes/original/src/components/HighestRatedBusinesses/index.tsx +1 -0
- package/themes/original/src/components/MessageListing/index.tsx +4 -2
- package/themes/original/src/components/MomentOption/index.tsx +150 -158
- package/themes/original/src/components/OrderDetails/index.tsx +114 -42
- package/themes/original/src/components/OrderDetails/styles.tsx +8 -1
- package/themes/original/src/components/OrderProgress/index.tsx +2 -1
- package/themes/original/src/components/OrderSummary/index.tsx +132 -23
- package/themes/original/src/components/OrderSummary/styles.tsx +7 -0
- package/themes/original/src/components/PaymentOptionWallet/index.tsx +6 -2
- package/themes/original/src/components/PaymentOptions/index.tsx +8 -2
- package/themes/original/src/components/ProductForm/index.tsx +63 -56
- package/themes/original/src/components/ProductOptionSubOption/index.tsx +54 -51
- package/themes/original/src/components/ProductOptionSubOption/styles.tsx +8 -1
- package/themes/original/src/components/SingleProductCard/index.tsx +36 -19
- package/themes/original/src/components/SingleProductCard/styles.tsx +4 -0
- package/themes/original/src/components/StripeElementsForm/index.tsx +28 -13
- package/themes/original/src/components/TaxInformation/index.tsx +59 -27
- package/themes/original/src/components/UpsellingProducts/index.tsx +26 -18
- package/themes/original/src/types/index.tsx +2 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ordering-ui-react-native",
|
|
3
|
-
"version": "0.14.
|
|
3
|
+
"version": "0.14.42-release",
|
|
4
4
|
"description": "Reusable components made in react native",
|
|
5
5
|
"main": "src/index.tsx",
|
|
6
6
|
"author": "ordering.inc",
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
"@types/styled-components": "^5.1.3",
|
|
56
56
|
"axios": "^0.21.0",
|
|
57
57
|
"moment": "^2.29.1",
|
|
58
|
-
"ordering-components": "github:Ordering-Inc/ordering-components#
|
|
58
|
+
"ordering-components": "github:Ordering-Inc/ordering-components#release",
|
|
59
59
|
"patch-package": "^6.4.7",
|
|
60
60
|
"postinstall-postinstall": "^2.1.0",
|
|
61
61
|
"prop-types": "^15.7.2",
|
|
@@ -80,9 +80,9 @@ export const BusinessItemAccordion = (props: any) => {
|
|
|
80
80
|
</BIContentInfo>
|
|
81
81
|
</BIInfo>
|
|
82
82
|
|
|
83
|
-
{!isClosed && !!isProducts && cart?.valid_products &&
|
|
83
|
+
{!isClosed && !!isProducts && cart?.valid_products && (
|
|
84
84
|
<BITotal>
|
|
85
|
-
<OText color='#000'>{parsePrice(cart?.total)}</OText>
|
|
85
|
+
<OText color='#000'>{parsePrice(cart?.total >= 0 ? cart?.total : 0)}</OText>
|
|
86
86
|
<OText>{t('CART_TOTAL', 'Total')}</OText>
|
|
87
87
|
</BITotal>
|
|
88
88
|
)}
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
useValidationFields,
|
|
9
9
|
} from 'ordering-components/native';
|
|
10
10
|
|
|
11
|
-
import { CContainer, CheckoutAction, } from './styles';
|
|
11
|
+
import { CContainer, CheckoutAction, Divider } from './styles';
|
|
12
12
|
|
|
13
13
|
import { OSBill, OSTable, OSCoupon, OSTotal, OSRow } from '../OrderSummary/styles';
|
|
14
14
|
|
|
@@ -16,7 +16,7 @@ import { ProductItemAccordion } from '../ProductItemAccordion';
|
|
|
16
16
|
import { BusinessItemAccordion } from '../BusinessItemAccordion';
|
|
17
17
|
import { CouponControl } from '../CouponControl';
|
|
18
18
|
|
|
19
|
-
import { OButton, OModal, OText, OInput } from '../shared';
|
|
19
|
+
import { OButton, OModal, OText, OInput, OAlert } from '../shared';
|
|
20
20
|
import { UpsellingProducts } from '../UpsellingProducts';
|
|
21
21
|
import { verifyDecimals } from '../../utils';
|
|
22
22
|
import { useTheme } from 'styled-components/native';
|
|
@@ -35,7 +35,8 @@ const CartUI = (props: any) => {
|
|
|
35
35
|
handleCartOpen,
|
|
36
36
|
setIsCartsLoading,
|
|
37
37
|
handleChangeComment,
|
|
38
|
-
commentState
|
|
38
|
+
commentState,
|
|
39
|
+
handleRemoveOfferClick
|
|
39
40
|
} = props
|
|
40
41
|
|
|
41
42
|
const theme = useTheme()
|
|
@@ -48,6 +49,7 @@ const CartUI = (props: any) => {
|
|
|
48
49
|
const [openUpselling, setOpenUpselling] = useState(false)
|
|
49
50
|
const [canOpenUpselling, setCanOpenUpselling] = useState(false)
|
|
50
51
|
const [openTaxModal, setOpenTaxModal] = useState<any>({ open: false, data: null })
|
|
52
|
+
const [confirm, setConfirm] = useState<any>({ open: false, content: null, handleOnAccept: null, id: null, title: null })
|
|
51
53
|
|
|
52
54
|
const isCartPending = cart?.status === 2
|
|
53
55
|
const isCouponEnabled = validationFields?.fields?.checkout?.coupon?.enabled
|
|
@@ -62,14 +64,14 @@ const CartUI = (props: any) => {
|
|
|
62
64
|
|
|
63
65
|
const handleEditProduct = (product: any) => {
|
|
64
66
|
props?.onNavigationRedirect &&
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
67
|
+
props?.onNavigationRedirect('ProductDetails', {
|
|
68
|
+
businessId: cart?.business_id,
|
|
69
|
+
isCartProduct: true,
|
|
70
|
+
productCart: product,
|
|
71
|
+
businessSlug: cart?.business?.slug,
|
|
72
|
+
categoryId: product?.category_id,
|
|
73
|
+
productId: product?.id,
|
|
74
|
+
})
|
|
73
75
|
}
|
|
74
76
|
|
|
75
77
|
const handleClearProducts = async () => {
|
|
@@ -104,6 +106,22 @@ const CartUI = (props: any) => {
|
|
|
104
106
|
}
|
|
105
107
|
}
|
|
106
108
|
|
|
109
|
+
const getIncludedTaxesDiscounts = () => {
|
|
110
|
+
return cart?.taxes?.filter((tax : any) => tax?.type === 1)?.reduce((carry : number, tax : any) => carry + (tax?.summary?.tax_after_discount ?? tax?.summary?.tax), 0)
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
const onRemoveOffer = (id: number) => {
|
|
114
|
+
setConfirm({
|
|
115
|
+
open: true,
|
|
116
|
+
content: [t('QUESTION_DELETE_OFFER', 'Are you sure that you want to delete the offer?')],
|
|
117
|
+
title: t('OFFER', 'Offer'),
|
|
118
|
+
handleOnAccept: () => {
|
|
119
|
+
setConfirm({ ...confirm, open: false })
|
|
120
|
+
handleRemoveOfferClick(id)
|
|
121
|
+
}
|
|
122
|
+
})
|
|
123
|
+
}
|
|
124
|
+
|
|
107
125
|
return (
|
|
108
126
|
<CContainer>
|
|
109
127
|
<BusinessItemAccordion
|
|
@@ -135,11 +153,11 @@ const CartUI = (props: any) => {
|
|
|
135
153
|
{parsePrice(cart?.subtotal + getIncludedTaxes())}
|
|
136
154
|
</OText>
|
|
137
155
|
</OSTable>
|
|
138
|
-
{cart?.discount > 0 && cart?.total >= 0 && (
|
|
156
|
+
{cart?.discount > 0 && cart?.total >= 0 && cart?.offers?.length === 0 && (
|
|
139
157
|
<OSTable>
|
|
140
158
|
{cart?.discount_type === 1 ? (
|
|
141
159
|
<OText>
|
|
142
|
-
{t('DISCOUNT', 'Discount')}
|
|
160
|
+
{t('DISCOUNT', 'Discount')}{' '}
|
|
143
161
|
<OText>{`(${verifyDecimals(cart?.discount_rate, parsePrice)}%)`}</OText>
|
|
144
162
|
</OText>
|
|
145
163
|
) : (
|
|
@@ -148,18 +166,35 @@ const CartUI = (props: any) => {
|
|
|
148
166
|
<OText>- {parsePrice(cart?.discount || 0)}</OText>
|
|
149
167
|
</OSTable>
|
|
150
168
|
)}
|
|
169
|
+
{
|
|
170
|
+
cart?.offers?.length > 0 && cart?.offers?.filter((offer: any) => offer?.target === 1)?.map((offer: any) => (
|
|
171
|
+
<OSTable key={offer.id}>
|
|
172
|
+
<OSRow>
|
|
173
|
+
<OText>{offer.name}</OText>
|
|
174
|
+
{offer.rate_type === 1 && (
|
|
175
|
+
<OText>{`(${verifyDecimals(offer?.rate, parsePrice)}%)`}</OText>
|
|
176
|
+
)}
|
|
177
|
+
<TouchableOpacity style={{ marginLeft: 3 }} onPress={() => setOpenTaxModal({ open: true, data: offer, type: 'offer_target_1' })}>
|
|
178
|
+
<AntIcon name='exclamationcircleo' size={18} color={theme.colors.primary} />
|
|
179
|
+
</TouchableOpacity>
|
|
180
|
+
<TouchableOpacity style={{ marginLeft: 3 }} onPress={() => onRemoveOffer(offer?.id)}>
|
|
181
|
+
<AntIcon name='closecircle' size={18} color={theme.colors.primary} />
|
|
182
|
+
</TouchableOpacity>
|
|
183
|
+
</OSRow>
|
|
184
|
+
<OText>
|
|
185
|
+
- {parsePrice(offer?.summary?.discount)}
|
|
186
|
+
</OText>
|
|
187
|
+
</OSTable>
|
|
188
|
+
))
|
|
189
|
+
}
|
|
190
|
+
<Divider />
|
|
151
191
|
{cart?.subtotal_with_discount > 0 && cart?.discount > 0 && cart?.total >= 0 && (
|
|
152
192
|
<OSTable>
|
|
153
|
-
{
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
<OText>{parsePrice(cart?.subtotal_with_discount + cart?.tax || 0)}</OText>
|
|
157
|
-
</>
|
|
193
|
+
<OText numberOfLines={1}>{t('SUBTOTAL_WITH_DISCOUNT', 'Subtotal with discount')}</OText>
|
|
194
|
+
{cart?.business?.tax_type === 1 ? (
|
|
195
|
+
<OText>{parsePrice(cart?.subtotal_with_discount + getIncludedTaxesDiscounts() ?? 0)}</OText>
|
|
158
196
|
) : (
|
|
159
|
-
|
|
160
|
-
<OText>{t('SUBTOTAL_WITH_DISCOUNT', 'Subtotal with discount')}</OText>
|
|
161
|
-
<OText>{parsePrice(cart?.subtotal_with_discount || 0)}</OText>
|
|
162
|
-
</>
|
|
197
|
+
<OText>{parsePrice(cart?.subtotal_with_discount ?? 0)}</OText>
|
|
163
198
|
)}
|
|
164
199
|
</OSTable>
|
|
165
200
|
)}
|
|
@@ -171,11 +206,11 @@ const CartUI = (props: any) => {
|
|
|
171
206
|
{tax.name || t('INHERIT_FROM_BUSINESS', 'Inherit from business')}{' '}
|
|
172
207
|
{`(${verifyDecimals(tax?.rate, parseNumber)}%)`}{' '}
|
|
173
208
|
</OText>
|
|
174
|
-
<TouchableOpacity onPress={() => setOpenTaxModal({ open: true, data: tax })} >
|
|
209
|
+
<TouchableOpacity onPress={() => setOpenTaxModal({ open: true, data: tax, type: 'tax' })} >
|
|
175
210
|
<AntIcon name='exclamationcircleo' size={18} color={theme.colors.primary} />
|
|
176
211
|
</TouchableOpacity>
|
|
177
212
|
</OSRow>
|
|
178
|
-
<OText>{parsePrice(tax?.summary?.tax
|
|
213
|
+
<OText>{parsePrice(tax?.summary?.tax_after_discount ?? tax?.summary?.tax ?? 0)}</OText>
|
|
179
214
|
</OSTable>
|
|
180
215
|
))
|
|
181
216
|
}
|
|
@@ -187,11 +222,32 @@ const CartUI = (props: any) => {
|
|
|
187
222
|
{fee.name || t('INHERIT_FROM_BUSINESS', 'Inherit from business')}{' '}
|
|
188
223
|
({parsePrice(fee?.fixed)} + {fee?.percentage}%){' '}
|
|
189
224
|
</OText>
|
|
190
|
-
<TouchableOpacity onPress={() => setOpenTaxModal({ open: true, data: fee })} >
|
|
225
|
+
<TouchableOpacity onPress={() => setOpenTaxModal({ open: true, data: fee, type: 'fee' })} >
|
|
191
226
|
<AntIcon name='exclamationcircleo' size={18} color={theme.colors.primary} />
|
|
192
227
|
</TouchableOpacity>
|
|
193
228
|
</OSRow>
|
|
194
|
-
<OText>{parsePrice(fee?.summary?.fixed + fee?.summary?.percentage
|
|
229
|
+
<OText>{parsePrice(fee?.summary?.fixed + (fee?.summary?.percentage_after_discount ?? fee?.summary?.percentage) ?? 0)}</OText>
|
|
230
|
+
</OSTable>
|
|
231
|
+
))
|
|
232
|
+
}
|
|
233
|
+
{
|
|
234
|
+
cart?.offers?.length > 0 && cart?.offers?.filter((offer: any) => offer?.target === 3)?.map((offer: any) => (
|
|
235
|
+
<OSTable key={offer.id}>
|
|
236
|
+
<OSRow>
|
|
237
|
+
<OText>{offer.name}</OText>
|
|
238
|
+
{offer.rate_type === 1 && (
|
|
239
|
+
<OText>{`(${verifyDecimals(offer?.rate, parsePrice)}%)`}</OText>
|
|
240
|
+
)}
|
|
241
|
+
<TouchableOpacity style={{ marginLeft: 3 }} onPress={() => setOpenTaxModal({ open: true, data: offer, type: 'offer_target_3' })}>
|
|
242
|
+
<AntIcon name='exclamationcircleo' size={18} color={theme.colors.primary} />
|
|
243
|
+
</TouchableOpacity>
|
|
244
|
+
<TouchableOpacity style={{ marginLeft: 3 }} onPress={() => onRemoveOffer(offer?.id)}>
|
|
245
|
+
<AntIcon name='closecircle' size={18} color={theme.colors.primary} />
|
|
246
|
+
</TouchableOpacity>
|
|
247
|
+
</OSRow>
|
|
248
|
+
<OText>
|
|
249
|
+
- {parsePrice(offer?.summary?.discount)}
|
|
250
|
+
</OText>
|
|
195
251
|
</OSTable>
|
|
196
252
|
))
|
|
197
253
|
}
|
|
@@ -201,6 +257,27 @@ const CartUI = (props: any) => {
|
|
|
201
257
|
<OText>{parsePrice(cart?.delivery_price)}</OText>
|
|
202
258
|
</OSTable>
|
|
203
259
|
)}
|
|
260
|
+
{
|
|
261
|
+
cart?.offers?.length > 0 && cart?.offers?.filter((offer: any) => offer?.target === 2)?.map((offer: any) => (
|
|
262
|
+
<OSTable key={offer.id}>
|
|
263
|
+
<OSRow>
|
|
264
|
+
<OText>{offer.name}</OText>
|
|
265
|
+
{offer.rate_type === 1 && (
|
|
266
|
+
<OText>{`(${verifyDecimals(offer?.rate, parsePrice)}%)`}</OText>
|
|
267
|
+
)}
|
|
268
|
+
<TouchableOpacity style={{ marginLeft: 3 }} onPress={() => setOpenTaxModal({ open: true, data: offer, type: 'offer_target_2' })}>
|
|
269
|
+
<AntIcon name='exclamationcircleo' size={18} color={theme.colors.primary} />
|
|
270
|
+
</TouchableOpacity>
|
|
271
|
+
<TouchableOpacity style={{ marginLeft: 3 }} onPress={() => onRemoveOffer(offer?.id)}>
|
|
272
|
+
<AntIcon name='closecircle' size={18} color={theme.colors.primary} />
|
|
273
|
+
</TouchableOpacity>
|
|
274
|
+
</OSRow>
|
|
275
|
+
<OText>
|
|
276
|
+
- {parsePrice(offer?.summary?.discount)}
|
|
277
|
+
</OText>
|
|
278
|
+
</OSTable>
|
|
279
|
+
))
|
|
280
|
+
}
|
|
204
281
|
{cart?.driver_tip > 0 && (
|
|
205
282
|
<OSTable>
|
|
206
283
|
<OText>
|
|
@@ -231,7 +308,7 @@ const CartUI = (props: any) => {
|
|
|
231
308
|
{t('TOTAL', 'Total')}
|
|
232
309
|
</OText>
|
|
233
310
|
<OText style={{ fontWeight: 'bold' }} color={theme.colors.primary}>
|
|
234
|
-
{cart?.total >=
|
|
311
|
+
{parsePrice(cart?.total >= 0 ? cart?.total : 0)}
|
|
235
312
|
</OText>
|
|
236
313
|
</OSTable>
|
|
237
314
|
</OSTotal>
|
|
@@ -291,27 +368,43 @@ const CartUI = (props: any) => {
|
|
|
291
368
|
)}
|
|
292
369
|
</BusinessItemAccordion>
|
|
293
370
|
|
|
294
|
-
{
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
371
|
+
{
|
|
372
|
+
openUpselling && (
|
|
373
|
+
<UpsellingProducts
|
|
374
|
+
handleUpsellingPage={handleUpsellingPage}
|
|
375
|
+
openUpselling={openUpselling}
|
|
376
|
+
businessId={cart?.business_id}
|
|
377
|
+
business={cart?.business}
|
|
378
|
+
cartProducts={cart?.products}
|
|
379
|
+
canOpenUpselling={canOpenUpselling}
|
|
380
|
+
setCanOpenUpselling={setCanOpenUpselling}
|
|
381
|
+
setOpenUpselling={setOpenUpselling}
|
|
382
|
+
onRedirect={props.onNavigationRedirect}
|
|
383
|
+
/>
|
|
384
|
+
)
|
|
385
|
+
}
|
|
307
386
|
<OModal
|
|
308
387
|
open={openTaxModal.open}
|
|
309
388
|
onClose={() => setOpenTaxModal({ open: false, data: null })}
|
|
310
389
|
entireModal
|
|
390
|
+
title={`${openTaxModal.data?.name ||
|
|
391
|
+
t('INHERIT_FROM_BUSINESS', 'Inherit from business')} ${openTaxModal.data?.rate_type !== 2 ? `(${typeof openTaxModal.data?.rate === 'number' ? `${openTaxModal.data?.rate}%` : `${parsePrice(openTaxModal.data?.fixed ?? 0)} + ${openTaxModal.data?.percentage}%`})` : ''} `}
|
|
311
392
|
>
|
|
312
|
-
<TaxInformation
|
|
393
|
+
<TaxInformation
|
|
394
|
+
type={openTaxModal.type}
|
|
395
|
+
data={openTaxModal.data}
|
|
396
|
+
products={cart?.products}
|
|
397
|
+
/>
|
|
313
398
|
</OModal>
|
|
314
|
-
|
|
399
|
+
<OAlert
|
|
400
|
+
open={confirm.open}
|
|
401
|
+
title={confirm.title}
|
|
402
|
+
content={confirm.content}
|
|
403
|
+
onAccept={confirm.handleOnAccept}
|
|
404
|
+
onCancel={() => setConfirm({ ...confirm, open: false, title: null })}
|
|
405
|
+
onClose={() => setConfirm({ ...confirm, open: false, title: null })}
|
|
406
|
+
/>
|
|
407
|
+
</CContainer >
|
|
315
408
|
)
|
|
316
409
|
}
|
|
317
410
|
|
|
@@ -55,6 +55,7 @@ import { ActivityIndicator } from 'react-native-paper';
|
|
|
55
55
|
import WebView from 'react-native-webview';
|
|
56
56
|
import Icon from 'react-native-vector-icons/Feather';
|
|
57
57
|
import { OrderCreating } from '../OrderCreating';
|
|
58
|
+
import { PaymentOptionsWebView } from '../PaymentOptionsWebView';
|
|
58
59
|
|
|
59
60
|
const mapConfigs = {
|
|
60
61
|
mapZoom: 16,
|
|
@@ -129,16 +130,12 @@ const CheckoutUI = (props: any) => {
|
|
|
129
130
|
const [{ options, carts, loading }, { confirmCart }] = useOrder();
|
|
130
131
|
const [validationFields] = useValidationFields();
|
|
131
132
|
const [ordering] = useApi()
|
|
132
|
-
const webviewRef = useRef<any>(null)
|
|
133
|
-
const webviewRefSquare = useRef<any>(null)
|
|
134
133
|
const [errorCash, setErrorCash] = useState(false);
|
|
135
134
|
const [userErrors, setUserErrors] = useState<any>([]);
|
|
136
135
|
const [isUserDetailsEdit, setIsUserDetailsEdit] = useState(false);
|
|
137
136
|
const [phoneUpdate, setPhoneUpdate] = useState(false);
|
|
138
137
|
const [showGateway, setShowGateway] = useState<any>({ closedByUsed: false, open: false });
|
|
139
138
|
const [webviewPaymethod, setWebviewPaymethod] = useState<any>(null)
|
|
140
|
-
const [progClr, setProgClr] = useState('#424242');
|
|
141
|
-
const [prog, setProg] = useState(true);
|
|
142
139
|
const [openOrderCreating, setOpenOrderCreating] = useState(false)
|
|
143
140
|
const [cardData, setCardData] = useState(null)
|
|
144
141
|
const [isDeliveryOptionModalVisible, setIsDeliveryOptionModalVisible] = useState(false)
|
|
@@ -202,29 +199,6 @@ const CheckoutUI = (props: any) => {
|
|
|
202
199
|
setPhoneUpdate(val)
|
|
203
200
|
}
|
|
204
201
|
|
|
205
|
-
const onMessage = (e: any) => {
|
|
206
|
-
if (e?.nativeEvent?.data && e?.nativeEvent?.data !== 'undefined') {
|
|
207
|
-
let payment = JSON.parse(e.nativeEvent.data);
|
|
208
|
-
|
|
209
|
-
if (payment === 'api error') {
|
|
210
|
-
setShowGateway({ closedByUser: true, open: false })
|
|
211
|
-
setProg(true);
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
if (payment) {
|
|
215
|
-
if (payment.error) {
|
|
216
|
-
showToast(ToastType.Error, payment.result)
|
|
217
|
-
setOpenOrderCreating(false)
|
|
218
|
-
} else if (payment?.result?.order?.uuid) {
|
|
219
|
-
showToast(ToastType.Success, t('ORDER_PLACED_SUCCESSfULLY', 'The order was placed successfully'))
|
|
220
|
-
onNavigationRedirect && onNavigationRedirect('OrderDetails', { orderId: payment?.result?.order?.uuid, goToBusinessList: true })
|
|
221
|
-
}
|
|
222
|
-
setProg(true);
|
|
223
|
-
setShowGateway({ closedByUser: false, open: false })
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
|
|
228
202
|
const onFailPaypal = async () => {
|
|
229
203
|
if (showGateway.closedByUser === true) {
|
|
230
204
|
await confirmCart(cart.uuid)
|
|
@@ -236,11 +210,6 @@ const CheckoutUI = (props: any) => {
|
|
|
236
210
|
setWebviewPaymethod(paymethod)
|
|
237
211
|
}
|
|
238
212
|
|
|
239
|
-
const handleCloseWebview = () => {
|
|
240
|
-
setProg(true);
|
|
241
|
-
setShowGateway({ open: false, closedByUser: true })
|
|
242
|
-
}
|
|
243
|
-
|
|
244
213
|
const changeDeliveryOption = (option: any) => {
|
|
245
214
|
handleChangeDeliveryOption(option)
|
|
246
215
|
setIsDeliveryOptionModalVisible(false)
|
|
@@ -309,9 +278,11 @@ const CheckoutUI = (props: any) => {
|
|
|
309
278
|
<OText size={22} numberOfLines={2} ellipsizeMode='tail' >
|
|
310
279
|
{businessName || businessDetails?.business?.name}
|
|
311
280
|
</OText>
|
|
312
|
-
|
|
313
|
-
{
|
|
314
|
-
|
|
281
|
+
{!cartState.loading && (
|
|
282
|
+
<OText size={22}>
|
|
283
|
+
{parsePrice(cart?.total >= 0 ? cart?.total : 0) || parsePrice(cartTotal >= 0 ? cartTotal : 0)}
|
|
284
|
+
</OText>
|
|
285
|
+
)}
|
|
315
286
|
</View>
|
|
316
287
|
</ChTotal>
|
|
317
288
|
</ChSection>
|
|
@@ -647,141 +618,32 @@ const CheckoutUI = (props: any) => {
|
|
|
647
618
|
</>
|
|
648
619
|
)}
|
|
649
620
|
{webviewPaymethod?.gateway === 'paypal' && showGateway.open && (
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
fontSize: 16,
|
|
661
|
-
fontWeight: 'bold',
|
|
662
|
-
color: '#00457C',
|
|
663
|
-
marginBottom: 5,
|
|
664
|
-
marginTop: 10
|
|
665
|
-
}}>
|
|
666
|
-
{t('PAYPAL_GATEWAY', 'PayPal GateWay')}
|
|
667
|
-
</OText>
|
|
668
|
-
<View style={{ padding: 20, opacity: prog ? 1 : 0, backgroundColor: 'white' }}>
|
|
669
|
-
<ActivityIndicator size={24} color={progClr} />
|
|
670
|
-
</View>
|
|
671
|
-
<WebView
|
|
672
|
-
source={{ uri: `${ordering.root}/html/paypal_react_native` }}
|
|
673
|
-
onMessage={onMessage}
|
|
674
|
-
ref={webviewRef}
|
|
675
|
-
javaScriptEnabled={true}
|
|
676
|
-
javaScriptEnabledAndroid={true}
|
|
677
|
-
cacheEnabled={false}
|
|
678
|
-
cacheMode='LOAD_NO_CACHE'
|
|
679
|
-
style={{ flex: 1 }}
|
|
680
|
-
onLoadStart={() => {
|
|
681
|
-
setProg(true);
|
|
682
|
-
setProgClr('#424242');
|
|
683
|
-
}}
|
|
684
|
-
onLoadProgress={() => {
|
|
685
|
-
setProg(true);
|
|
686
|
-
setProgClr('#00457C');
|
|
687
|
-
}}
|
|
688
|
-
onLoad={() => {
|
|
689
|
-
setProg(true);
|
|
690
|
-
setProgClr('#00457C');
|
|
691
|
-
}}
|
|
692
|
-
onLoadEnd={(e) => {
|
|
693
|
-
const message = {
|
|
694
|
-
action: 'init',
|
|
695
|
-
data: {
|
|
696
|
-
urlPlace: `${ordering.root}/carts/${cart?.uuid}/place`,
|
|
697
|
-
urlConfirm: `${ordering.root}/carts/${cart?.uuid}/confirm`,
|
|
698
|
-
payData: {
|
|
699
|
-
paymethod_id: webviewPaymethod?.id,
|
|
700
|
-
amount: cart?.total,
|
|
701
|
-
delivery_zone_id: cart?.delivery_zone_id,
|
|
702
|
-
user_id: user?.id
|
|
703
|
-
},
|
|
704
|
-
currency: configs?.stripe_currency?.value || currency,
|
|
705
|
-
userToken: token,
|
|
706
|
-
clientId: webviewPaymethod?.credentials?.client_id
|
|
707
|
-
}
|
|
708
|
-
}
|
|
709
|
-
setProg(false);
|
|
710
|
-
webviewRef?.current?.postMessage?.(JSON.stringify(message))
|
|
711
|
-
}}
|
|
621
|
+
<PaymentOptionsWebView
|
|
622
|
+
onNavigationRedirect={onNavigationRedirect}
|
|
623
|
+
uri={`${ordering.root}/html/paypal_react_native`}
|
|
624
|
+
user={user}
|
|
625
|
+
token={token}
|
|
626
|
+
cart={cart}
|
|
627
|
+
currency={currency}
|
|
628
|
+
webviewPaymethod={webviewPaymethod}
|
|
629
|
+
setShowGateway={setShowGateway}
|
|
630
|
+
setOpenOrderCreating={setOpenOrderCreating}
|
|
712
631
|
/>
|
|
713
|
-
</View>
|
|
714
632
|
)}
|
|
715
633
|
{webviewPaymethod?.gateway === 'square' && showGateway.open && (
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
634
|
+
<PaymentOptionsWebView
|
|
635
|
+
onNavigationRedirect={onNavigationRedirect}
|
|
636
|
+
uri={`https://test-square-f50f7.web.app`}
|
|
637
|
+
user={user}
|
|
638
|
+
token={token}
|
|
639
|
+
cart={cart}
|
|
640
|
+
currency={currency}
|
|
641
|
+
webviewPaymethod={webviewPaymethod}
|
|
642
|
+
setShowGateway={setShowGateway}
|
|
643
|
+
setOpenOrderCreating={setOpenOrderCreating}
|
|
644
|
+
locationId={'L1NGAY5M6KJRX'}
|
|
722
645
|
/>
|
|
723
|
-
|
|
724
|
-
style={{
|
|
725
|
-
textAlign: 'center',
|
|
726
|
-
fontSize: 16,
|
|
727
|
-
fontWeight: 'bold',
|
|
728
|
-
color: '#00457C',
|
|
729
|
-
marginBottom: 5,
|
|
730
|
-
marginTop: 10
|
|
731
|
-
}}>
|
|
732
|
-
{t('SQUARE_PAYMENT', 'Square payment')}
|
|
733
|
-
</OText>
|
|
734
|
-
<View style={{ padding: 20, opacity: prog ? 1 : 0, backgroundColor: 'white' }}>
|
|
735
|
-
<ActivityIndicator size={24} color={progClr} />
|
|
736
|
-
</View>
|
|
737
|
-
<WebView
|
|
738
|
-
source={{ uri: `https://test-square-f50f7.web.app` }}
|
|
739
|
-
onMessage={onMessage}
|
|
740
|
-
ref={webviewRefSquare}
|
|
741
|
-
javaScriptEnabled={true}
|
|
742
|
-
javaScriptEnabledAndroid={true}
|
|
743
|
-
cacheEnabled={false}
|
|
744
|
-
cacheMode='LOAD_NO_CACHE'
|
|
745
|
-
style={{ flex: 1 }}
|
|
746
|
-
onShouldStartLoadWithRequest={() => true}
|
|
747
|
-
onLoadStart={() => {
|
|
748
|
-
setProg(true);
|
|
749
|
-
setProgClr('#424242');
|
|
750
|
-
}}
|
|
751
|
-
onLoadProgress={() => {
|
|
752
|
-
setProg(true);
|
|
753
|
-
setProgClr('#00457C');
|
|
754
|
-
}}
|
|
755
|
-
onLoad={() => {
|
|
756
|
-
setProg(true);
|
|
757
|
-
setProgClr('#00457C');
|
|
758
|
-
}}
|
|
759
|
-
onLoadEnd={(e) => {
|
|
760
|
-
const message = {
|
|
761
|
-
action: 'init',
|
|
762
|
-
data: {
|
|
763
|
-
urlPlace: `${ordering.root}/carts/${cart?.uuid}/place`,
|
|
764
|
-
urlConfirm: `${ordering.root}/carts/${cart?.uuid}/confirm`,
|
|
765
|
-
payData: {
|
|
766
|
-
paymethod_id: webviewPaymethod?.id,
|
|
767
|
-
amount: cart?.total,
|
|
768
|
-
delivery_zone_id: cart?.delivery_zone_id,
|
|
769
|
-
user_id: user?.id,
|
|
770
|
-
user_name: user?.name
|
|
771
|
-
},
|
|
772
|
-
currency: configs?.stripe_currency?.value || currency,
|
|
773
|
-
userToken: token,
|
|
774
|
-
clientId: 'sandbox-sq0idb-rMLAce87hOfpGvokZCygEw',
|
|
775
|
-
locationId: 'L1NGAY5M6KJRX'
|
|
776
|
-
}
|
|
777
|
-
}
|
|
778
|
-
setProg(false);
|
|
779
|
-
webviewRefSquare?.current?.postMessage?.(JSON.stringify(message))
|
|
780
|
-
}}
|
|
781
|
-
/>
|
|
782
|
-
</View>
|
|
783
|
-
)
|
|
784
|
-
}
|
|
646
|
+
)}
|
|
785
647
|
{openOrderCreating && (
|
|
786
648
|
<View style={{ zIndex: 9999, height: '100%', width: '100%', position: 'absolute', backgroundColor: 'white' }}>
|
|
787
649
|
<OrderCreating
|