ordering-ui-admin-external 1.28.0 → 1.29.0
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/_bundles/main.css +294 -26
- package/_bundles/{ordering-ui-admin.88341b2ec95c8949082e.js → ordering-ui-admin.452c5996b9b7ebdf8016.js} +2 -2
- package/_bundles/{ordering-ui-admin.88341b2ec95c8949082e.js.LICENSE.txt → ordering-ui-admin.452c5996b9b7ebdf8016.js.LICENSE.txt} +8 -0
- package/_modules/components/Delivery/AddressForm/styles.js +2 -2
- package/_modules/components/Delivery/AddressList/index.js +9 -56
- package/_modules/components/Delivery/AddressList/styles.js +1 -1
- package/_modules/components/Delivery/DriversGroupLogs/index.js +5 -2
- package/_modules/components/Delivery/UserAddForm/index.js +16 -4
- package/_modules/components/Delivery/UserFormDetails/index.js +17 -5
- package/_modules/components/Home/HomePage/index.js +5 -1
- package/_modules/components/MyProducts/OrderingWebsite/index.js +5 -1
- package/_modules/components/OrderingProducts/SiteTheme/index.js +1 -1
- package/_modules/components/Orders/CreateCustomOrder/CardForm/index.js +96 -0
- package/_modules/components/Orders/CreateCustomOrder/CardForm/styles.js +35 -0
- package/_modules/components/Orders/CreateCustomOrder/CardFormCustom/cardUtils.js +102 -0
- package/_modules/components/Orders/CreateCustomOrder/CardFormCustom/index.js +148 -0
- package/_modules/components/Orders/CreateCustomOrder/CardFormCustom/styles.js +16 -0
- package/_modules/components/Orders/CreateCustomOrder/CartBill/index.js +275 -0
- package/_modules/components/Orders/CreateCustomOrder/CartBill/styles.js +23 -0
- package/_modules/components/Orders/CreateCustomOrder/Checkout/index.js +498 -0
- package/_modules/components/Orders/CreateCustomOrder/Checkout/styles.js +31 -0
- package/_modules/components/Orders/CreateCustomOrder/CouponControl/index.js +100 -0
- package/_modules/components/Orders/CreateCustomOrder/CouponControl/styles.js +17 -0
- package/_modules/components/Orders/CreateCustomOrder/CustomOrderDetails/index.js +139 -0
- package/_modules/components/Orders/CreateCustomOrder/CustomOrderDetails/styles.js +17 -0
- package/_modules/components/Orders/CreateCustomOrder/DriverTips/index.js +101 -0
- package/_modules/components/Orders/CreateCustomOrder/DriverTips/styles.js +37 -0
- package/_modules/components/Orders/CreateCustomOrder/Map/index.js +131 -0
- package/_modules/components/Orders/CreateCustomOrder/Map/styles.js +12 -0
- package/_modules/components/Orders/CreateCustomOrder/PaymentOptionCard/index.js +83 -0
- package/_modules/components/Orders/CreateCustomOrder/PaymentOptionCash/index.js +81 -0
- package/_modules/components/Orders/CreateCustomOrder/PaymentOptionCash/styles.js +23 -0
- package/_modules/components/Orders/CreateCustomOrder/PaymentOptionPaypal/index.js +45 -0
- package/_modules/components/Orders/CreateCustomOrder/PaymentOptionPaypal/styles.js +12 -0
- package/_modules/components/Orders/CreateCustomOrder/PaymentOptionSquare/index.js +112 -0
- package/_modules/components/Orders/CreateCustomOrder/PaymentOptionSquare/styles.js +21 -0
- package/_modules/components/Orders/CreateCustomOrder/PaymentOptionStripe/index.js +259 -0
- package/_modules/components/Orders/CreateCustomOrder/PaymentOptionStripe/styles.js +66 -0
- package/_modules/components/Orders/CreateCustomOrder/PaymentOptionWallet/index.js +173 -0
- package/_modules/components/Orders/CreateCustomOrder/PaymentOptionWallet/styles.js +26 -0
- package/_modules/components/Orders/CreateCustomOrder/PaymentOptions/index.js +400 -0
- package/_modules/components/Orders/CreateCustomOrder/PaymentOptions/styles.js +40 -0
- package/_modules/components/Orders/CreateCustomOrder/ProductForm/index.js +613 -0
- package/_modules/components/Orders/CreateCustomOrder/ProductForm/styles.js +109 -0
- package/_modules/components/Orders/CreateCustomOrder/ProductIngredient/index.js +39 -0
- package/_modules/components/Orders/CreateCustomOrder/ProductIngredient/styles.js +23 -0
- package/_modules/components/Orders/CreateCustomOrder/ProductOption/index.js +51 -0
- package/_modules/components/Orders/CreateCustomOrder/ProductOption/styles.js +29 -0
- package/_modules/components/Orders/CreateCustomOrder/ProductOptionSubOption/index.js +148 -0
- package/_modules/components/Orders/CreateCustomOrder/ProductOptionSubOption/styles.js +79 -0
- package/_modules/components/Orders/CreateCustomOrder/SelectBusinesses/index.js +82 -0
- package/_modules/components/Orders/CreateCustomOrder/SelectBusinesses/styles.js +21 -0
- package/_modules/components/Orders/CreateCustomOrder/SelectCustomer/index.js +191 -0
- package/_modules/components/Orders/CreateCustomOrder/SelectCustomer/styles.js +68 -0
- package/_modules/components/Orders/CreateCustomOrder/SelectProducts/index.js +234 -0
- package/_modules/components/Orders/CreateCustomOrder/SelectProducts/styles.js +54 -0
- package/_modules/components/Orders/CreateCustomOrder/SingleProductCard/index.js +99 -0
- package/_modules/components/Orders/CreateCustomOrder/SingleProductCard/styles.js +131 -0
- package/_modules/components/Orders/CreateCustomOrder/StripeElementsForm/index.js +73 -0
- package/_modules/components/Orders/CreateCustomOrder/StripeElementsForm/styles.js +17 -0
- package/_modules/components/Orders/CreateCustomOrder/StripeMethodForm/index.js +124 -0
- package/_modules/components/Orders/CreateCustomOrder/StripeMethodForm/styles.js +12 -0
- package/_modules/components/Orders/CreateCustomOrder/StripeRedirectForm/index.js +83 -0
- package/_modules/components/Orders/CreateCustomOrder/StripeRedirectForm/styles.js +21 -0
- package/_modules/components/Orders/CreateCustomOrder/TaxInformation/index.js +48 -0
- package/_modules/components/Orders/CreateCustomOrder/TaxInformation/styles.js +14 -0
- package/_modules/components/Orders/CreateCustomOrder/index.js +59 -0
- package/_modules/components/Orders/OrderToPrintTicket/index.js +2 -2
- package/_modules/components/Orders/OrdersDashboardControls/index.js +6 -2
- package/_modules/components/Orders/OrdersDashboardControls/styles.js +3 -3
- package/_modules/components/Orders/OrdersExportCSV/styles.js +14 -8
- package/_modules/components/Orders/OrdersManager/index.js +6 -4
- package/_modules/components/Orders/OrdersManager/styles.js +1 -1
- package/_modules/components/Shared/AutoScroll/index.js +1 -0
- package/_modules/components/Shared/LinkableText/index.js +22 -0
- package/_modules/components/Shared/Tabs/index.js +32 -0
- package/_modules/components/Shared/index.js +20 -0
- package/_modules/components/SidebarMenu/index.js +2 -1
- package/_modules/components/Stores/BusinessProductsListing/index.js +7 -3
- package/_modules/components/Stores/BusinessQRCodeOption/index.js +6 -2
- package/_modules/components/Stores/BusinessSummary/index.js +7 -3
- package/_modules/components/Users/UserAddForm/index.js +13 -5
- package/_modules/components/Users/UserAddForm/styles.js +1 -1
- package/_modules/styles/Selects/index.js +1 -1
- package/_modules/utils/index.js +9 -2
- package/index-template.js +1 -1
- package/package.json +6 -4
- package/src/components/Delivery/AddressForm/styles.js +3 -3
- package/src/components/Delivery/AddressList/index.js +6 -61
- package/src/components/Delivery/AddressList/styles.js +1 -1
- package/src/components/Delivery/DriversGroupLogs/index.js +8 -2
- package/src/components/Delivery/UserAddForm/index.js +32 -13
- package/src/components/Delivery/UserFormDetails/index.js +30 -13
- package/src/components/Home/HomePage/index.js +3 -2
- package/src/components/MyProducts/OrderingWebsite/index.js +9 -8
- package/src/components/OrderingProducts/SiteTheme/index.js +1 -1
- package/src/components/Orders/CreateCustomOrder/CardForm/index.js +135 -0
- package/src/components/Orders/CreateCustomOrder/CardForm/styles.js +135 -0
- package/src/components/Orders/CreateCustomOrder/CardFormCustom/cardUtils.js +111 -0
- package/src/components/Orders/CreateCustomOrder/CardFormCustom/index.js +161 -0
- package/src/components/Orders/CreateCustomOrder/CardFormCustom/styles.js +20 -0
- package/src/components/Orders/CreateCustomOrder/CartBill/index.js +267 -0
- package/src/components/Orders/CreateCustomOrder/CartBill/styles.js +67 -0
- package/src/components/Orders/CreateCustomOrder/Checkout/index.js +519 -0
- package/src/components/Orders/CreateCustomOrder/Checkout/styles.js +85 -0
- package/src/components/Orders/CreateCustomOrder/CouponControl/index.js +90 -0
- package/src/components/Orders/CreateCustomOrder/CouponControl/styles.js +22 -0
- package/src/components/Orders/CreateCustomOrder/CustomOrderDetails/index.js +132 -0
- package/src/components/Orders/CreateCustomOrder/CustomOrderDetails/styles.js +28 -0
- package/src/components/Orders/CreateCustomOrder/DriverTips/index.js +113 -0
- package/src/components/Orders/CreateCustomOrder/DriverTips/styles.js +91 -0
- package/src/components/Orders/CreateCustomOrder/Map/index.js +115 -0
- package/src/components/Orders/CreateCustomOrder/Map/styles.js +10 -0
- package/src/components/Orders/CreateCustomOrder/PaymentOptionCard/index.js +70 -0
- package/src/components/Orders/CreateCustomOrder/PaymentOptionCash/index.js +83 -0
- package/src/components/Orders/CreateCustomOrder/PaymentOptionCash/styles.js +50 -0
- package/src/components/Orders/CreateCustomOrder/PaymentOptionPaypal/index.js +43 -0
- package/src/components/Orders/CreateCustomOrder/PaymentOptionPaypal/styles.js +5 -0
- package/src/components/Orders/CreateCustomOrder/PaymentOptionSquare/index.js +105 -0
- package/src/components/Orders/CreateCustomOrder/PaymentOptionSquare/styles.js +27 -0
- package/src/components/Orders/CreateCustomOrder/PaymentOptionStripe/index.js +261 -0
- package/src/components/Orders/CreateCustomOrder/PaymentOptionStripe/styles.js +159 -0
- package/src/components/Orders/CreateCustomOrder/PaymentOptionWallet/index.js +172 -0
- package/src/components/Orders/CreateCustomOrder/PaymentOptionWallet/styles.js +33 -0
- package/src/components/Orders/CreateCustomOrder/PaymentOptions/index.js +440 -0
- package/src/components/Orders/CreateCustomOrder/PaymentOptions/styles.js +132 -0
- package/src/components/Orders/CreateCustomOrder/ProductForm/index.js +701 -0
- package/src/components/Orders/CreateCustomOrder/ProductForm/styles.js +540 -0
- package/src/components/Orders/CreateCustomOrder/ProductIngredient/index.js +43 -0
- package/src/components/Orders/CreateCustomOrder/ProductIngredient/styles.js +29 -0
- package/src/components/Orders/CreateCustomOrder/ProductOption/index.js +58 -0
- package/src/components/Orders/CreateCustomOrder/ProductOption/styles.js +76 -0
- package/src/components/Orders/CreateCustomOrder/ProductOptionSubOption/index.js +182 -0
- package/src/components/Orders/CreateCustomOrder/ProductOptionSubOption/styles.js +195 -0
- package/src/components/Orders/CreateCustomOrder/SelectBusinesses/index.js +67 -0
- package/src/components/Orders/CreateCustomOrder/SelectBusinesses/styles.js +63 -0
- package/src/components/Orders/CreateCustomOrder/SelectCustomer/index.js +241 -0
- package/src/components/Orders/CreateCustomOrder/SelectCustomer/styles.js +235 -0
- package/src/components/Orders/CreateCustomOrder/SelectProducts/index.js +237 -0
- package/src/components/Orders/CreateCustomOrder/SelectProducts/styles.js +161 -0
- package/src/components/Orders/CreateCustomOrder/SingleProductCard/index.js +105 -0
- package/src/components/Orders/CreateCustomOrder/SingleProductCard/styles.js +314 -0
- package/src/components/Orders/CreateCustomOrder/StripeElementsForm/index.js +71 -0
- package/src/components/Orders/CreateCustomOrder/StripeElementsForm/styles.js +13 -0
- package/src/components/Orders/CreateCustomOrder/StripeMethodForm/index.js +90 -0
- package/src/components/Orders/CreateCustomOrder/StripeMethodForm/styles.js +9 -0
- package/src/components/Orders/CreateCustomOrder/StripeRedirectForm/index.js +96 -0
- package/src/components/Orders/CreateCustomOrder/StripeRedirectForm/styles.js +73 -0
- package/src/components/Orders/CreateCustomOrder/TaxInformation/index.js +69 -0
- package/src/components/Orders/CreateCustomOrder/TaxInformation/styles.js +25 -0
- package/src/components/Orders/CreateCustomOrder/index.js +45 -0
- package/src/components/Orders/OrderToPrintTicket/index.js +1 -1
- package/src/components/Orders/OrdersDashboardControls/index.js +4 -1
- package/src/components/Orders/OrdersDashboardControls/styles.js +13 -11
- package/src/components/Orders/OrdersExportCSV/styles.js +16 -0
- package/src/components/Orders/OrdersManager/index.js +5 -1
- package/src/components/Orders/OrdersManager/styles.js +2 -0
- package/src/components/Shared/AutoScroll/index.js +1 -0
- package/src/components/Shared/LinkableText/index.js +17 -0
- package/src/components/Shared/Tabs/index.js +28 -0
- package/src/components/Shared/index.js +5 -0
- package/src/components/SidebarMenu/index.js +1 -1
- package/src/components/Stores/BusinessProductsListing/index.js +6 -3
- package/src/components/Stores/BusinessQRCodeOption/index.js +5 -3
- package/src/components/Stores/BusinessSummary/index.js +6 -4
- package/src/components/Users/UserAddForm/index.js +12 -3
- package/src/components/Users/UserAddForm/styles.js +2 -2
- package/src/styles/Selects/index.js +1 -1
- package/src/utils/index.js +5 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import styled, { css } from 'styled-components'
|
|
2
|
+
|
|
3
|
+
export const CouponContainer = styled.div`
|
|
4
|
+
/* width: 80%; */
|
|
5
|
+
/* margin: auto; */
|
|
6
|
+
display: flex;
|
|
7
|
+
justify-content: flex-start;
|
|
8
|
+
button {
|
|
9
|
+
margin-left: 5px;
|
|
10
|
+
${props => props.theme?.rtl && css`
|
|
11
|
+
margin-right: 5px;
|
|
12
|
+
margin-left: 0px;
|
|
13
|
+
`}
|
|
14
|
+
&:disabled {
|
|
15
|
+
opacity: 0.5;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
input {
|
|
20
|
+
width: 50%;
|
|
21
|
+
}
|
|
22
|
+
`
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import React, { useState, useEffect, useMemo } from 'react'
|
|
2
|
+
import { useLanguage, useOrder, CustomOrderDetails as CustomOrderDetailsController } from 'ordering-components-admin-external'
|
|
3
|
+
import { SelectCustomer } from '../SelectCustomer'
|
|
4
|
+
import { SelectBusinesses } from '../SelectBusinesses'
|
|
5
|
+
import { Map } from '../Map'
|
|
6
|
+
import { SelectProducts } from '../SelectProducts'
|
|
7
|
+
import { Checkout } from '../Checkout'
|
|
8
|
+
import { Alert } from '../../../Shared'
|
|
9
|
+
|
|
10
|
+
import {
|
|
11
|
+
DetailsContainer
|
|
12
|
+
} from './styles'
|
|
13
|
+
|
|
14
|
+
const CustomOrderDetailsUI = (props) => {
|
|
15
|
+
const {
|
|
16
|
+
phone,
|
|
17
|
+
onChangeNumber,
|
|
18
|
+
customersPhones,
|
|
19
|
+
setCustomersPhones,
|
|
20
|
+
handleParentSidebarMove,
|
|
21
|
+
businessList,
|
|
22
|
+
getBusinessList,
|
|
23
|
+
selectedUser,
|
|
24
|
+
selectedBusiness,
|
|
25
|
+
setSelectedUser,
|
|
26
|
+
setSelectedBusiness,
|
|
27
|
+
productList,
|
|
28
|
+
getProducts,
|
|
29
|
+
handeUpdateProductCart,
|
|
30
|
+
cart,
|
|
31
|
+
onClose,
|
|
32
|
+
handleOpenCustomOrderDetail
|
|
33
|
+
} = props
|
|
34
|
+
|
|
35
|
+
const [, t] = useLanguage()
|
|
36
|
+
const [, { changeAddress }] = useOrder()
|
|
37
|
+
|
|
38
|
+
const [alertState, setAlertState] = useState({ open: false, content: [] })
|
|
39
|
+
|
|
40
|
+
const handleCloseAlert = () => {
|
|
41
|
+
setCustomersPhones({ ...customersPhones, error: null })
|
|
42
|
+
setAlertState({ open: false, content: [] })
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const customerAddress = useMemo(() => {
|
|
46
|
+
let address = null
|
|
47
|
+
if (selectedUser?.addresses) {
|
|
48
|
+
address = selectedUser.addresses.find(address => address?.default)
|
|
49
|
+
}
|
|
50
|
+
return address
|
|
51
|
+
}, [selectedUser])
|
|
52
|
+
|
|
53
|
+
useEffect(() => {
|
|
54
|
+
if (!customerAddress?.id) return
|
|
55
|
+
changeAddress(customerAddress.id)
|
|
56
|
+
}, [customerAddress?.id])
|
|
57
|
+
|
|
58
|
+
useEffect(() => {
|
|
59
|
+
if (!customerAddress?.location) return
|
|
60
|
+
getBusinessList(customerAddress.location)
|
|
61
|
+
}, [customerAddress?.location])
|
|
62
|
+
|
|
63
|
+
useEffect(() => {
|
|
64
|
+
if (customersPhones?.error) {
|
|
65
|
+
setAlertState({ open: true, content: [customersPhones?.error] })
|
|
66
|
+
}
|
|
67
|
+
}, [customersPhones?.error])
|
|
68
|
+
|
|
69
|
+
return (
|
|
70
|
+
<>
|
|
71
|
+
<DetailsContainer className='custom-order-content'>
|
|
72
|
+
<h2>{t('CREATE_CUSTOM_ORDER', 'Create custom order')}</h2>
|
|
73
|
+
<SelectCustomer
|
|
74
|
+
phone={phone}
|
|
75
|
+
customersPhones={customersPhones}
|
|
76
|
+
selectedUser={selectedUser}
|
|
77
|
+
setSelectedUser={setSelectedUser}
|
|
78
|
+
onChangeNumber={onChangeNumber}
|
|
79
|
+
handleParentSidebarMove={handleParentSidebarMove}
|
|
80
|
+
customerAddress={customerAddress}
|
|
81
|
+
/>
|
|
82
|
+
{customerAddress?.location && (
|
|
83
|
+
<>
|
|
84
|
+
<SelectBusinesses
|
|
85
|
+
businessList={businessList}
|
|
86
|
+
selectedBusiness={selectedBusiness}
|
|
87
|
+
setSelectedBusiness={setSelectedBusiness}
|
|
88
|
+
/>
|
|
89
|
+
<Map
|
|
90
|
+
customer={selectedUser}
|
|
91
|
+
customerLocation={customerAddress?.location}
|
|
92
|
+
business={selectedBusiness}
|
|
93
|
+
/>
|
|
94
|
+
{selectedBusiness && (
|
|
95
|
+
<SelectProducts
|
|
96
|
+
productList={productList}
|
|
97
|
+
getProducts={getProducts}
|
|
98
|
+
handeUpdateProductCart={handeUpdateProductCart}
|
|
99
|
+
cart={cart}
|
|
100
|
+
business={selectedBusiness}
|
|
101
|
+
/>
|
|
102
|
+
)}
|
|
103
|
+
{cart && cart?.products.length > 0 && (
|
|
104
|
+
<Checkout
|
|
105
|
+
cartUuid={cart.uuid}
|
|
106
|
+
onPlaceOrderClick={(data, paymethod, cart) => {
|
|
107
|
+
cart?.uuid && handleOpenCustomOrderDetail(cart.uuid)
|
|
108
|
+
onClose()
|
|
109
|
+
}}
|
|
110
|
+
/>
|
|
111
|
+
)}
|
|
112
|
+
</>
|
|
113
|
+
)}
|
|
114
|
+
<Alert
|
|
115
|
+
title={t('ERROR', 'Error')}
|
|
116
|
+
open={alertState.open}
|
|
117
|
+
content={alertState.content}
|
|
118
|
+
onClose={handleCloseAlert}
|
|
119
|
+
onAccept={handleCloseAlert}
|
|
120
|
+
/>
|
|
121
|
+
</DetailsContainer>
|
|
122
|
+
</>
|
|
123
|
+
)
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
export const CustomOrderDetails = (props) => {
|
|
127
|
+
const customOrderProps = {
|
|
128
|
+
...props,
|
|
129
|
+
UIComponent: CustomOrderDetailsUI
|
|
130
|
+
}
|
|
131
|
+
return <CustomOrderDetailsController {...customOrderProps} />
|
|
132
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import styled, { css } from 'styled-components'
|
|
2
|
+
|
|
3
|
+
export const DetailsContainer = styled.div`
|
|
4
|
+
width: 100%;
|
|
5
|
+
padding: 25px 20px;
|
|
6
|
+
overflow: auto;
|
|
7
|
+
|
|
8
|
+
> h2 {
|
|
9
|
+
font-size: 20px;
|
|
10
|
+
font-weight: 700;
|
|
11
|
+
margin-top: 0;
|
|
12
|
+
margin-bottom: 20px;
|
|
13
|
+
|
|
14
|
+
${props => props.theme?.rtl ? css`
|
|
15
|
+
margin-left: 40px;
|
|
16
|
+
` : css`
|
|
17
|
+
margin-right: 40px;
|
|
18
|
+
`}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
h3 {
|
|
22
|
+
font-size: 16px;
|
|
23
|
+
font-weight: 600;
|
|
24
|
+
line-height: 24px;
|
|
25
|
+
margin-top: 0;
|
|
26
|
+
margin-bottom: 4px;
|
|
27
|
+
}
|
|
28
|
+
`
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import React, { useState } from 'react'
|
|
2
|
+
import { DriverTips as DriverTipsController, useUtils, useLanguage, useConfig } from 'ordering-components-admin-external'
|
|
3
|
+
import { Button, Input } from '../../../../styles'
|
|
4
|
+
|
|
5
|
+
import {
|
|
6
|
+
DriverTipContainer,
|
|
7
|
+
TipCard,
|
|
8
|
+
FormDriverTip,
|
|
9
|
+
WrapperInput,
|
|
10
|
+
DriverTipMessage,
|
|
11
|
+
WrapperTips
|
|
12
|
+
} from './styles'
|
|
13
|
+
|
|
14
|
+
const DriverTipsUI = (props) => {
|
|
15
|
+
const {
|
|
16
|
+
isMulti,
|
|
17
|
+
driverTip,
|
|
18
|
+
driverTipsOptions,
|
|
19
|
+
cart,
|
|
20
|
+
carts,
|
|
21
|
+
isDriverTipUseCustom,
|
|
22
|
+
handlerChangeOption
|
|
23
|
+
} = props
|
|
24
|
+
const [{ parsePrice }] = useUtils()
|
|
25
|
+
const [, t] = useLanguage()
|
|
26
|
+
const [{ configs }] = useConfig()
|
|
27
|
+
|
|
28
|
+
const [customTip, setCustomTip] = useState((isDriverTipUseCustom && !driverTipsOptions.includes(driverTip)) ?? false)
|
|
29
|
+
const [value, setvalue] = useState('')
|
|
30
|
+
const isFixedPriceType = parseInt(configs?.driver_tip_type?.value, 10) === 1
|
|
31
|
+
const currentTip = customTip ? parseFloat(driverTip || 0) > 0 : (!customTip && !driverTipsOptions.includes(driverTip) && parseFloat(driverTip || 0)) > 0
|
|
32
|
+
|
|
33
|
+
const handleChangeDriverTip = (e) => {
|
|
34
|
+
const tip = Number(e?.target?.value)
|
|
35
|
+
if ((isNaN(tip) || tip < 0)) return
|
|
36
|
+
setvalue(e?.target?.value)
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const placeholderCurrency = !isFixedPriceType ? '0%' : (configs?.currency_position?.value || 'left') === 'left'
|
|
40
|
+
? `${configs?.format_number_currency?.value}0`
|
|
41
|
+
: `0${configs?.format_number_currency?.value}`
|
|
42
|
+
|
|
43
|
+
const multiCartTipsAmmout = carts?.reduce((total, cart) => {
|
|
44
|
+
return total + parseFloat(cart?.driver_tip || 0)
|
|
45
|
+
}, 0)
|
|
46
|
+
|
|
47
|
+
return (
|
|
48
|
+
<DriverTipContainer id='driver-tip-container'>
|
|
49
|
+
<h3>{t('DRIVER_TIPS', 'Driver Tips')}</h3>
|
|
50
|
+
<p>{t('100%_OF_THE_TIP_YOUR_DRIVER', '100% of the tip goes to your driver')}</p>
|
|
51
|
+
<WrapperTips>
|
|
52
|
+
{driverTipsOptions.map((option, i) => (
|
|
53
|
+
<TipCard
|
|
54
|
+
key={i}
|
|
55
|
+
className={`${(option === driverTip && !customTip) ? 'active' : ''}`}
|
|
56
|
+
onClick={() => {
|
|
57
|
+
handlerChangeOption(option)
|
|
58
|
+
setCustomTip(false)
|
|
59
|
+
}}
|
|
60
|
+
>
|
|
61
|
+
{`${isFixedPriceType ? parsePrice(option) : `${option}%`}`}
|
|
62
|
+
</TipCard>
|
|
63
|
+
))}
|
|
64
|
+
{isDriverTipUseCustom && (
|
|
65
|
+
<TipCard
|
|
66
|
+
className={`${customTip ? 'active' : ''}`}
|
|
67
|
+
onClick={() => setCustomTip(true)}
|
|
68
|
+
>
|
|
69
|
+
{t('CUSTOM_TIP', 'Custom')}
|
|
70
|
+
</TipCard>
|
|
71
|
+
)}
|
|
72
|
+
<FormDriverTip>
|
|
73
|
+
{customTip &&
|
|
74
|
+
<WrapperInput>
|
|
75
|
+
<Input
|
|
76
|
+
name='drivertip'
|
|
77
|
+
type='text'
|
|
78
|
+
value={value}
|
|
79
|
+
placeholder={placeholderCurrency}
|
|
80
|
+
onChange={handleChangeDriverTip}
|
|
81
|
+
/>
|
|
82
|
+
<Button
|
|
83
|
+
borderRadius='8px'
|
|
84
|
+
color='primary'
|
|
85
|
+
disabled={parseFloat(value || 0) < 0 || parseFloat(value || 0) === driverTip || value === ''}
|
|
86
|
+
onClick={() => {
|
|
87
|
+
handlerChangeOption(value)
|
|
88
|
+
setvalue('')
|
|
89
|
+
}}
|
|
90
|
+
>
|
|
91
|
+
{t('APPLY_TIP', 'Apply Tip')}
|
|
92
|
+
</Button>
|
|
93
|
+
</WrapperInput>}
|
|
94
|
+
</FormDriverTip>
|
|
95
|
+
{currentTip && (
|
|
96
|
+
<DriverTipMessage>
|
|
97
|
+
{t('CURRENT_DRIVER_TIP_AMOUNT', 'Current driver tip amount')}{!isFixedPriceType &&
|
|
98
|
+
` (${driverTip}%)`}: {parsePrice(isMulti ? multiCartTipsAmmout : isFixedPriceType ? driverTip : cart?.driver_tip)}
|
|
99
|
+
</DriverTipMessage>
|
|
100
|
+
)}
|
|
101
|
+
</WrapperTips>
|
|
102
|
+
</DriverTipContainer>
|
|
103
|
+
)
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export const DriverTips = (props) => {
|
|
107
|
+
const driverTipsProps = {
|
|
108
|
+
...props,
|
|
109
|
+
UIComponent: DriverTipsUI
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
return <DriverTipsController {...driverTipsProps} />
|
|
113
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import styled, { css } from 'styled-components'
|
|
2
|
+
|
|
3
|
+
export const DriverTipContainer = styled.div`
|
|
4
|
+
margin-top: 50px;
|
|
5
|
+
|
|
6
|
+
> p {
|
|
7
|
+
font-size: 14px;
|
|
8
|
+
line-height: 24px;
|
|
9
|
+
margin-top: 0;
|
|
10
|
+
margin-bottom: 24px;
|
|
11
|
+
}
|
|
12
|
+
`
|
|
13
|
+
|
|
14
|
+
export const TipCard = styled.div`
|
|
15
|
+
display: flex;
|
|
16
|
+
justify-content: center;
|
|
17
|
+
align-items: center;
|
|
18
|
+
border-radius: 50%;
|
|
19
|
+
border: 1px solid ${props => props.theme.colors.borderColor};
|
|
20
|
+
width: 62px;
|
|
21
|
+
height: 62px;
|
|
22
|
+
min-width: 62px;
|
|
23
|
+
cursor: pointer;
|
|
24
|
+
text-transform: capitalize;
|
|
25
|
+
font-size: 14px;
|
|
26
|
+
color: #B1BCCC;
|
|
27
|
+
transition: all 0.3s;
|
|
28
|
+
text-align: center;
|
|
29
|
+
&.active {
|
|
30
|
+
background-color: ${props => props.theme.colors.primary};
|
|
31
|
+
color: ${props => props.theme.colors.primaryContrast};
|
|
32
|
+
}
|
|
33
|
+
`
|
|
34
|
+
|
|
35
|
+
export const FormDriverTip = styled.div`
|
|
36
|
+
width: 100%;
|
|
37
|
+
display: flex;
|
|
38
|
+
flex-direction: column;
|
|
39
|
+
align-items: center;
|
|
40
|
+
justify-content: center;
|
|
41
|
+
`
|
|
42
|
+
|
|
43
|
+
export const DriverTipLabel = styled.label`
|
|
44
|
+
font-size: 16px;
|
|
45
|
+
align-self: flex-start;
|
|
46
|
+
|
|
47
|
+
${props => props.theme?.rtl && css`
|
|
48
|
+
margin-left: 20px;
|
|
49
|
+
margin-right: 0;
|
|
50
|
+
`}
|
|
51
|
+
`
|
|
52
|
+
|
|
53
|
+
export const WrapperInput = styled.div`
|
|
54
|
+
display: flex;
|
|
55
|
+
justify-content: space-between;
|
|
56
|
+
align-items: center;
|
|
57
|
+
width: 100%;
|
|
58
|
+
margin-top: 10px;
|
|
59
|
+
|
|
60
|
+
input {
|
|
61
|
+
width: 65%;
|
|
62
|
+
padding: 4px 15px;
|
|
63
|
+
box-sizing: border-box;
|
|
64
|
+
flex: 1;
|
|
65
|
+
margin-right: 10px;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
@media (min-width: 768px) {
|
|
69
|
+
input {
|
|
70
|
+
width: 80%;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
`
|
|
74
|
+
|
|
75
|
+
export const DriverTipMessage = styled.p`
|
|
76
|
+
color: ${props => props.theme.colors.primary};
|
|
77
|
+
font-weight: 600;
|
|
78
|
+
`
|
|
79
|
+
|
|
80
|
+
export const WrapperTips = styled.div`
|
|
81
|
+
display: flex;
|
|
82
|
+
width: 100%;
|
|
83
|
+
justify-content: flex-start;
|
|
84
|
+
align-items: center;
|
|
85
|
+
flex-wrap: wrap;
|
|
86
|
+
|
|
87
|
+
> div {
|
|
88
|
+
margin: 5px;
|
|
89
|
+
text-align: center;
|
|
90
|
+
}
|
|
91
|
+
`
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import React, { useMemo, useRef, useState, useEffect } from 'react'
|
|
2
|
+
import { useConfig } from 'ordering-components-admin-external'
|
|
3
|
+
import GoogleMapReact, { fitBounds } from 'google-map-react'
|
|
4
|
+
import { InterActOrderMarker } from '../../InterActOrderMarker'
|
|
5
|
+
|
|
6
|
+
import { Container } from './styles'
|
|
7
|
+
|
|
8
|
+
export const Map = (props) => {
|
|
9
|
+
const {
|
|
10
|
+
business,
|
|
11
|
+
customer,
|
|
12
|
+
customerLocation
|
|
13
|
+
} = props
|
|
14
|
+
const [{ configs }] = useConfig()
|
|
15
|
+
|
|
16
|
+
const mapRef = useRef(null)
|
|
17
|
+
const googleMapsApiKey = useMemo(() => configs?.google_maps_api_key?.value, [configs])
|
|
18
|
+
const defaultLatitude = Number(configs?.location_default_latitude?.value)
|
|
19
|
+
const defaultLongitude = Number(configs?.location_default_longitude?.value)
|
|
20
|
+
const isInvalidDefaultLocation = isNaN(defaultLatitude) || isNaN(defaultLongitude)
|
|
21
|
+
const defaultCenter = {
|
|
22
|
+
lat: !isInvalidDefaultLocation ? defaultLatitude : 40.7744146,
|
|
23
|
+
lng: !isInvalidDefaultLocation ? defaultLongitude : -73.9678064
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const defaultZoom = 10
|
|
27
|
+
const [mapLoaded, setMapLoaded] = useState(true)
|
|
28
|
+
const [mapCenter, setMapCenter] = useState(defaultCenter)
|
|
29
|
+
const [mapZoom, setMapZoom] = useState(10)
|
|
30
|
+
|
|
31
|
+
const handleMapChange = (data) => {
|
|
32
|
+
if (!data?.zoom) return
|
|
33
|
+
setMapZoom(data?.zoom)
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const mapFit = () => {
|
|
37
|
+
const bounds = new window.google.maps.LatLngBounds()
|
|
38
|
+
|
|
39
|
+
if (!business?.location) {
|
|
40
|
+
setMapCenter(customerLocation)
|
|
41
|
+
setMapZoom(defaultZoom)
|
|
42
|
+
return
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
let marker, newPoint
|
|
46
|
+
marker = business?.location
|
|
47
|
+
newPoint = new window.google.maps.LatLng(marker.lat, marker.lng)
|
|
48
|
+
bounds.extend(newPoint)
|
|
49
|
+
|
|
50
|
+
marker = customerLocation
|
|
51
|
+
newPoint = new window.google.maps.LatLng(marker.lat, marker.lng)
|
|
52
|
+
bounds.extend(newPoint)
|
|
53
|
+
|
|
54
|
+
const newBounds = {
|
|
55
|
+
ne: {
|
|
56
|
+
lat: bounds.getNorthEast()?.lat?.(),
|
|
57
|
+
lng: bounds.getNorthEast()?.lng?.()
|
|
58
|
+
},
|
|
59
|
+
sw: {
|
|
60
|
+
lat: bounds.getSouthWest()?.lat?.(),
|
|
61
|
+
lng: bounds.getSouthWest()?.lng?.()
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
const mapSize = {
|
|
66
|
+
width: mapRef.current.clientWidth,
|
|
67
|
+
height: mapRef.current.clientHeight
|
|
68
|
+
}
|
|
69
|
+
const { center, zoom } = fitBounds(newBounds, mapSize)
|
|
70
|
+
setMapZoom(zoom)
|
|
71
|
+
setMapCenter(center)
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
useEffect(() => {
|
|
75
|
+
if (mapLoaded) return
|
|
76
|
+
mapFit()
|
|
77
|
+
}, [customerLocation, business?.location, mapLoaded])
|
|
78
|
+
|
|
79
|
+
return (
|
|
80
|
+
<Container ref={mapRef}>
|
|
81
|
+
{googleMapsApiKey && (
|
|
82
|
+
<GoogleMapReact
|
|
83
|
+
bootstrapURLKeys={{
|
|
84
|
+
key: window.document.getElementById('__googleMapsScriptId') ? null : googleMapsApiKey,
|
|
85
|
+
libraries: ['places', 'geometry', 'drawing', 'visualization']
|
|
86
|
+
}}
|
|
87
|
+
onGoogleApiLoaded={() => setMapLoaded(false)}
|
|
88
|
+
defaultCenter={defaultCenter}
|
|
89
|
+
center={mapCenter}
|
|
90
|
+
defaultZoom={defaultZoom}
|
|
91
|
+
zoom={mapZoom}
|
|
92
|
+
options={{ fullscreenControl: true }}
|
|
93
|
+
className='map'
|
|
94
|
+
onChange={(data) => handleMapChange(data)}
|
|
95
|
+
yesIWantToUseGoogleMapApiInternals
|
|
96
|
+
>
|
|
97
|
+
{business?.location && (
|
|
98
|
+
<InterActOrderMarker
|
|
99
|
+
business={business}
|
|
100
|
+
lat={business?.location?.lat}
|
|
101
|
+
lng={business?.location?.lng}
|
|
102
|
+
image={business?.logo}
|
|
103
|
+
/>
|
|
104
|
+
)}
|
|
105
|
+
<InterActOrderMarker
|
|
106
|
+
customer={customer}
|
|
107
|
+
lat={customerLocation?.lat}
|
|
108
|
+
lng={customerLocation?.lng}
|
|
109
|
+
image={customer?.photo}
|
|
110
|
+
/>
|
|
111
|
+
</GoogleMapReact>
|
|
112
|
+
)}
|
|
113
|
+
</Container>
|
|
114
|
+
)
|
|
115
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { PaymentOptionStripe, useLanguage, useSession } from 'ordering-components-admin-external'
|
|
2
|
+
import React, { useEffect, useState } from 'react'
|
|
3
|
+
import { CardFormCustom } from '../CardFormCustom'
|
|
4
|
+
import { PaymentOptionStripeUI } from '../PaymentOptionStripe'
|
|
5
|
+
import { Modal } from '../../../Shared'
|
|
6
|
+
import { AddNewCard } from '../PaymentOptionStripe/styles'
|
|
7
|
+
|
|
8
|
+
const PaymentOptionCardUI = (props) => {
|
|
9
|
+
const {
|
|
10
|
+
deleteCard,
|
|
11
|
+
cardsList,
|
|
12
|
+
handleCardClick,
|
|
13
|
+
handleNewCard,
|
|
14
|
+
paymethodSelected,
|
|
15
|
+
cardSelected,
|
|
16
|
+
gateway,
|
|
17
|
+
paymethodsWithoutSaveCards,
|
|
18
|
+
onSelectCard
|
|
19
|
+
} = props
|
|
20
|
+
|
|
21
|
+
const [, t] = useLanguage()
|
|
22
|
+
const [{ token }] = useSession()
|
|
23
|
+
|
|
24
|
+
const [addCardOpen, setAddCardOpen] = useState(false)
|
|
25
|
+
|
|
26
|
+
useEffect(() => {
|
|
27
|
+
if (cardsList?.cards?.length > 0) {
|
|
28
|
+
setAddCardOpen(true)
|
|
29
|
+
}
|
|
30
|
+
}, [cardsList?.cards])
|
|
31
|
+
|
|
32
|
+
return (
|
|
33
|
+
<>
|
|
34
|
+
<PaymentOptionStripeUI
|
|
35
|
+
deleteCard={deleteCard}
|
|
36
|
+
cardsList={cardsList}
|
|
37
|
+
handleCardClick={handleCardClick}
|
|
38
|
+
handleNewCard={handleNewCard}
|
|
39
|
+
paymethodSelected={paymethodSelected}
|
|
40
|
+
cardSelected={cardSelected}
|
|
41
|
+
gateway={gateway}
|
|
42
|
+
onSelectCard={onSelectCard}
|
|
43
|
+
/>
|
|
44
|
+
|
|
45
|
+
{token && !cardsList.loading && (!cardSelected || !paymethodsWithoutSaveCards.includes(gateway)) && (
|
|
46
|
+
<AddNewCard>
|
|
47
|
+
<span onClick={() => setAddCardOpen(true)}>{t('ADD_NEW_CARD', 'Add new card')}</span>
|
|
48
|
+
</AddNewCard>
|
|
49
|
+
)}
|
|
50
|
+
|
|
51
|
+
<Modal
|
|
52
|
+
open={addCardOpen}
|
|
53
|
+
onClose={() => setAddCardOpen(false)}
|
|
54
|
+
title={t('ADD_NEW_CARD', 'Add new card')}
|
|
55
|
+
>
|
|
56
|
+
<CardFormCustom handleNewCard={handleNewCard} setAddCardOpen={setAddCardOpen} />
|
|
57
|
+
</Modal>
|
|
58
|
+
</>
|
|
59
|
+
)
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export const PaymentOptionCard = (props) => {
|
|
63
|
+
const paymentOptionStripeProps = {
|
|
64
|
+
...props,
|
|
65
|
+
UIComponent: PaymentOptionCardUI
|
|
66
|
+
}
|
|
67
|
+
return (
|
|
68
|
+
<PaymentOptionStripe {...paymentOptionStripeProps} />
|
|
69
|
+
)
|
|
70
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import React, { useEffect, useState, useRef } from 'react'
|
|
2
|
+
import { useUtils, useLanguage } from 'ordering-components-admin-external'
|
|
3
|
+
import { Input } from '../../../../styles'
|
|
4
|
+
|
|
5
|
+
import {
|
|
6
|
+
PaymentCashContainer,
|
|
7
|
+
FormCash,
|
|
8
|
+
WrapperInput,
|
|
9
|
+
ErrorText
|
|
10
|
+
} from './styles'
|
|
11
|
+
|
|
12
|
+
export const PaymentOptionCash = (props) => {
|
|
13
|
+
const {
|
|
14
|
+
defaultValue,
|
|
15
|
+
orderTotal,
|
|
16
|
+
onChangeData,
|
|
17
|
+
setErrorCash
|
|
18
|
+
} = props
|
|
19
|
+
const [, t] = useLanguage()
|
|
20
|
+
const [{ parsePrice }] = useUtils()
|
|
21
|
+
|
|
22
|
+
const [value, setvalue] = useState(defaultValue)
|
|
23
|
+
const el = useRef()
|
|
24
|
+
let timeout = null
|
|
25
|
+
const onChangeCash = (e) => {
|
|
26
|
+
if (!/^(?=.)([+-]?([0-9]*)(\.([0-9]+))?)$/.test(e?.target?.value)) return
|
|
27
|
+
clearTimeout(timeout)
|
|
28
|
+
timeout = setTimeout(() => {
|
|
29
|
+
let cash = parseFloat(e?.target?.value)
|
|
30
|
+
cash = isNaN(cash) ? null : cash
|
|
31
|
+
setvalue(cash)
|
|
32
|
+
if (cash >= orderTotal || !cash) {
|
|
33
|
+
onChangeData && onChangeData({ cash })
|
|
34
|
+
}
|
|
35
|
+
}, 1000)
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
useEffect(() => {
|
|
39
|
+
el.current.onkeyup = onChangeCash
|
|
40
|
+
}, [])
|
|
41
|
+
|
|
42
|
+
useEffect(() => {
|
|
43
|
+
el.current.value = value || ''
|
|
44
|
+
}, [value])
|
|
45
|
+
|
|
46
|
+
useEffect(() => {
|
|
47
|
+
if (value && parseFloat(value) < orderTotal) {
|
|
48
|
+
setErrorCash && setErrorCash(true)
|
|
49
|
+
} else {
|
|
50
|
+
setErrorCash && setErrorCash(false)
|
|
51
|
+
}
|
|
52
|
+
}, [value, orderTotal])
|
|
53
|
+
|
|
54
|
+
return (
|
|
55
|
+
<>
|
|
56
|
+
<PaymentCashContainer>
|
|
57
|
+
<FormCash>
|
|
58
|
+
<WrapperInput>
|
|
59
|
+
<label>{t('NOT_EXACT_CASH_AMOUNT', 'Don\'t have exact amount? Let us know with how much will you pay')}</label>
|
|
60
|
+
<Input
|
|
61
|
+
ref={el}
|
|
62
|
+
name='cash'
|
|
63
|
+
type='text'
|
|
64
|
+
placeholder='$0.00'
|
|
65
|
+
onKeyPress={(e) => {
|
|
66
|
+
if (!/^[0-9 .]$/.test(e.key)) {
|
|
67
|
+
e.preventDefault()
|
|
68
|
+
}
|
|
69
|
+
}}
|
|
70
|
+
/>
|
|
71
|
+
</WrapperInput>
|
|
72
|
+
{value && parseFloat(value) < orderTotal && (
|
|
73
|
+
<ErrorText>{t('VALUE_GREATER_THAN_TOTAL', 'This value must be greater than order total')}: {parsePrice(orderTotal)}</ErrorText>
|
|
74
|
+
)}
|
|
75
|
+
</FormCash>
|
|
76
|
+
</PaymentCashContainer>
|
|
77
|
+
</>
|
|
78
|
+
)
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
PaymentOptionCash.defaultProps = {
|
|
82
|
+
defaultValue: null
|
|
83
|
+
}
|