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.
Files changed (169) hide show
  1. package/_bundles/main.css +294 -26
  2. package/_bundles/{ordering-ui-admin.88341b2ec95c8949082e.js → ordering-ui-admin.452c5996b9b7ebdf8016.js} +2 -2
  3. package/_bundles/{ordering-ui-admin.88341b2ec95c8949082e.js.LICENSE.txt → ordering-ui-admin.452c5996b9b7ebdf8016.js.LICENSE.txt} +8 -0
  4. package/_modules/components/Delivery/AddressForm/styles.js +2 -2
  5. package/_modules/components/Delivery/AddressList/index.js +9 -56
  6. package/_modules/components/Delivery/AddressList/styles.js +1 -1
  7. package/_modules/components/Delivery/DriversGroupLogs/index.js +5 -2
  8. package/_modules/components/Delivery/UserAddForm/index.js +16 -4
  9. package/_modules/components/Delivery/UserFormDetails/index.js +17 -5
  10. package/_modules/components/Home/HomePage/index.js +5 -1
  11. package/_modules/components/MyProducts/OrderingWebsite/index.js +5 -1
  12. package/_modules/components/OrderingProducts/SiteTheme/index.js +1 -1
  13. package/_modules/components/Orders/CreateCustomOrder/CardForm/index.js +96 -0
  14. package/_modules/components/Orders/CreateCustomOrder/CardForm/styles.js +35 -0
  15. package/_modules/components/Orders/CreateCustomOrder/CardFormCustom/cardUtils.js +102 -0
  16. package/_modules/components/Orders/CreateCustomOrder/CardFormCustom/index.js +148 -0
  17. package/_modules/components/Orders/CreateCustomOrder/CardFormCustom/styles.js +16 -0
  18. package/_modules/components/Orders/CreateCustomOrder/CartBill/index.js +275 -0
  19. package/_modules/components/Orders/CreateCustomOrder/CartBill/styles.js +23 -0
  20. package/_modules/components/Orders/CreateCustomOrder/Checkout/index.js +498 -0
  21. package/_modules/components/Orders/CreateCustomOrder/Checkout/styles.js +31 -0
  22. package/_modules/components/Orders/CreateCustomOrder/CouponControl/index.js +100 -0
  23. package/_modules/components/Orders/CreateCustomOrder/CouponControl/styles.js +17 -0
  24. package/_modules/components/Orders/CreateCustomOrder/CustomOrderDetails/index.js +139 -0
  25. package/_modules/components/Orders/CreateCustomOrder/CustomOrderDetails/styles.js +17 -0
  26. package/_modules/components/Orders/CreateCustomOrder/DriverTips/index.js +101 -0
  27. package/_modules/components/Orders/CreateCustomOrder/DriverTips/styles.js +37 -0
  28. package/_modules/components/Orders/CreateCustomOrder/Map/index.js +131 -0
  29. package/_modules/components/Orders/CreateCustomOrder/Map/styles.js +12 -0
  30. package/_modules/components/Orders/CreateCustomOrder/PaymentOptionCard/index.js +83 -0
  31. package/_modules/components/Orders/CreateCustomOrder/PaymentOptionCash/index.js +81 -0
  32. package/_modules/components/Orders/CreateCustomOrder/PaymentOptionCash/styles.js +23 -0
  33. package/_modules/components/Orders/CreateCustomOrder/PaymentOptionPaypal/index.js +45 -0
  34. package/_modules/components/Orders/CreateCustomOrder/PaymentOptionPaypal/styles.js +12 -0
  35. package/_modules/components/Orders/CreateCustomOrder/PaymentOptionSquare/index.js +112 -0
  36. package/_modules/components/Orders/CreateCustomOrder/PaymentOptionSquare/styles.js +21 -0
  37. package/_modules/components/Orders/CreateCustomOrder/PaymentOptionStripe/index.js +259 -0
  38. package/_modules/components/Orders/CreateCustomOrder/PaymentOptionStripe/styles.js +66 -0
  39. package/_modules/components/Orders/CreateCustomOrder/PaymentOptionWallet/index.js +173 -0
  40. package/_modules/components/Orders/CreateCustomOrder/PaymentOptionWallet/styles.js +26 -0
  41. package/_modules/components/Orders/CreateCustomOrder/PaymentOptions/index.js +400 -0
  42. package/_modules/components/Orders/CreateCustomOrder/PaymentOptions/styles.js +40 -0
  43. package/_modules/components/Orders/CreateCustomOrder/ProductForm/index.js +613 -0
  44. package/_modules/components/Orders/CreateCustomOrder/ProductForm/styles.js +109 -0
  45. package/_modules/components/Orders/CreateCustomOrder/ProductIngredient/index.js +39 -0
  46. package/_modules/components/Orders/CreateCustomOrder/ProductIngredient/styles.js +23 -0
  47. package/_modules/components/Orders/CreateCustomOrder/ProductOption/index.js +51 -0
  48. package/_modules/components/Orders/CreateCustomOrder/ProductOption/styles.js +29 -0
  49. package/_modules/components/Orders/CreateCustomOrder/ProductOptionSubOption/index.js +148 -0
  50. package/_modules/components/Orders/CreateCustomOrder/ProductOptionSubOption/styles.js +79 -0
  51. package/_modules/components/Orders/CreateCustomOrder/SelectBusinesses/index.js +82 -0
  52. package/_modules/components/Orders/CreateCustomOrder/SelectBusinesses/styles.js +21 -0
  53. package/_modules/components/Orders/CreateCustomOrder/SelectCustomer/index.js +191 -0
  54. package/_modules/components/Orders/CreateCustomOrder/SelectCustomer/styles.js +68 -0
  55. package/_modules/components/Orders/CreateCustomOrder/SelectProducts/index.js +234 -0
  56. package/_modules/components/Orders/CreateCustomOrder/SelectProducts/styles.js +54 -0
  57. package/_modules/components/Orders/CreateCustomOrder/SingleProductCard/index.js +99 -0
  58. package/_modules/components/Orders/CreateCustomOrder/SingleProductCard/styles.js +131 -0
  59. package/_modules/components/Orders/CreateCustomOrder/StripeElementsForm/index.js +73 -0
  60. package/_modules/components/Orders/CreateCustomOrder/StripeElementsForm/styles.js +17 -0
  61. package/_modules/components/Orders/CreateCustomOrder/StripeMethodForm/index.js +124 -0
  62. package/_modules/components/Orders/CreateCustomOrder/StripeMethodForm/styles.js +12 -0
  63. package/_modules/components/Orders/CreateCustomOrder/StripeRedirectForm/index.js +83 -0
  64. package/_modules/components/Orders/CreateCustomOrder/StripeRedirectForm/styles.js +21 -0
  65. package/_modules/components/Orders/CreateCustomOrder/TaxInformation/index.js +48 -0
  66. package/_modules/components/Orders/CreateCustomOrder/TaxInformation/styles.js +14 -0
  67. package/_modules/components/Orders/CreateCustomOrder/index.js +59 -0
  68. package/_modules/components/Orders/OrderToPrintTicket/index.js +2 -2
  69. package/_modules/components/Orders/OrdersDashboardControls/index.js +6 -2
  70. package/_modules/components/Orders/OrdersDashboardControls/styles.js +3 -3
  71. package/_modules/components/Orders/OrdersExportCSV/styles.js +14 -8
  72. package/_modules/components/Orders/OrdersManager/index.js +6 -4
  73. package/_modules/components/Orders/OrdersManager/styles.js +1 -1
  74. package/_modules/components/Shared/AutoScroll/index.js +1 -0
  75. package/_modules/components/Shared/LinkableText/index.js +22 -0
  76. package/_modules/components/Shared/Tabs/index.js +32 -0
  77. package/_modules/components/Shared/index.js +20 -0
  78. package/_modules/components/SidebarMenu/index.js +2 -1
  79. package/_modules/components/Stores/BusinessProductsListing/index.js +7 -3
  80. package/_modules/components/Stores/BusinessQRCodeOption/index.js +6 -2
  81. package/_modules/components/Stores/BusinessSummary/index.js +7 -3
  82. package/_modules/components/Users/UserAddForm/index.js +13 -5
  83. package/_modules/components/Users/UserAddForm/styles.js +1 -1
  84. package/_modules/styles/Selects/index.js +1 -1
  85. package/_modules/utils/index.js +9 -2
  86. package/index-template.js +1 -1
  87. package/package.json +6 -4
  88. package/src/components/Delivery/AddressForm/styles.js +3 -3
  89. package/src/components/Delivery/AddressList/index.js +6 -61
  90. package/src/components/Delivery/AddressList/styles.js +1 -1
  91. package/src/components/Delivery/DriversGroupLogs/index.js +8 -2
  92. package/src/components/Delivery/UserAddForm/index.js +32 -13
  93. package/src/components/Delivery/UserFormDetails/index.js +30 -13
  94. package/src/components/Home/HomePage/index.js +3 -2
  95. package/src/components/MyProducts/OrderingWebsite/index.js +9 -8
  96. package/src/components/OrderingProducts/SiteTheme/index.js +1 -1
  97. package/src/components/Orders/CreateCustomOrder/CardForm/index.js +135 -0
  98. package/src/components/Orders/CreateCustomOrder/CardForm/styles.js +135 -0
  99. package/src/components/Orders/CreateCustomOrder/CardFormCustom/cardUtils.js +111 -0
  100. package/src/components/Orders/CreateCustomOrder/CardFormCustom/index.js +161 -0
  101. package/src/components/Orders/CreateCustomOrder/CardFormCustom/styles.js +20 -0
  102. package/src/components/Orders/CreateCustomOrder/CartBill/index.js +267 -0
  103. package/src/components/Orders/CreateCustomOrder/CartBill/styles.js +67 -0
  104. package/src/components/Orders/CreateCustomOrder/Checkout/index.js +519 -0
  105. package/src/components/Orders/CreateCustomOrder/Checkout/styles.js +85 -0
  106. package/src/components/Orders/CreateCustomOrder/CouponControl/index.js +90 -0
  107. package/src/components/Orders/CreateCustomOrder/CouponControl/styles.js +22 -0
  108. package/src/components/Orders/CreateCustomOrder/CustomOrderDetails/index.js +132 -0
  109. package/src/components/Orders/CreateCustomOrder/CustomOrderDetails/styles.js +28 -0
  110. package/src/components/Orders/CreateCustomOrder/DriverTips/index.js +113 -0
  111. package/src/components/Orders/CreateCustomOrder/DriverTips/styles.js +91 -0
  112. package/src/components/Orders/CreateCustomOrder/Map/index.js +115 -0
  113. package/src/components/Orders/CreateCustomOrder/Map/styles.js +10 -0
  114. package/src/components/Orders/CreateCustomOrder/PaymentOptionCard/index.js +70 -0
  115. package/src/components/Orders/CreateCustomOrder/PaymentOptionCash/index.js +83 -0
  116. package/src/components/Orders/CreateCustomOrder/PaymentOptionCash/styles.js +50 -0
  117. package/src/components/Orders/CreateCustomOrder/PaymentOptionPaypal/index.js +43 -0
  118. package/src/components/Orders/CreateCustomOrder/PaymentOptionPaypal/styles.js +5 -0
  119. package/src/components/Orders/CreateCustomOrder/PaymentOptionSquare/index.js +105 -0
  120. package/src/components/Orders/CreateCustomOrder/PaymentOptionSquare/styles.js +27 -0
  121. package/src/components/Orders/CreateCustomOrder/PaymentOptionStripe/index.js +261 -0
  122. package/src/components/Orders/CreateCustomOrder/PaymentOptionStripe/styles.js +159 -0
  123. package/src/components/Orders/CreateCustomOrder/PaymentOptionWallet/index.js +172 -0
  124. package/src/components/Orders/CreateCustomOrder/PaymentOptionWallet/styles.js +33 -0
  125. package/src/components/Orders/CreateCustomOrder/PaymentOptions/index.js +440 -0
  126. package/src/components/Orders/CreateCustomOrder/PaymentOptions/styles.js +132 -0
  127. package/src/components/Orders/CreateCustomOrder/ProductForm/index.js +701 -0
  128. package/src/components/Orders/CreateCustomOrder/ProductForm/styles.js +540 -0
  129. package/src/components/Orders/CreateCustomOrder/ProductIngredient/index.js +43 -0
  130. package/src/components/Orders/CreateCustomOrder/ProductIngredient/styles.js +29 -0
  131. package/src/components/Orders/CreateCustomOrder/ProductOption/index.js +58 -0
  132. package/src/components/Orders/CreateCustomOrder/ProductOption/styles.js +76 -0
  133. package/src/components/Orders/CreateCustomOrder/ProductOptionSubOption/index.js +182 -0
  134. package/src/components/Orders/CreateCustomOrder/ProductOptionSubOption/styles.js +195 -0
  135. package/src/components/Orders/CreateCustomOrder/SelectBusinesses/index.js +67 -0
  136. package/src/components/Orders/CreateCustomOrder/SelectBusinesses/styles.js +63 -0
  137. package/src/components/Orders/CreateCustomOrder/SelectCustomer/index.js +241 -0
  138. package/src/components/Orders/CreateCustomOrder/SelectCustomer/styles.js +235 -0
  139. package/src/components/Orders/CreateCustomOrder/SelectProducts/index.js +237 -0
  140. package/src/components/Orders/CreateCustomOrder/SelectProducts/styles.js +161 -0
  141. package/src/components/Orders/CreateCustomOrder/SingleProductCard/index.js +105 -0
  142. package/src/components/Orders/CreateCustomOrder/SingleProductCard/styles.js +314 -0
  143. package/src/components/Orders/CreateCustomOrder/StripeElementsForm/index.js +71 -0
  144. package/src/components/Orders/CreateCustomOrder/StripeElementsForm/styles.js +13 -0
  145. package/src/components/Orders/CreateCustomOrder/StripeMethodForm/index.js +90 -0
  146. package/src/components/Orders/CreateCustomOrder/StripeMethodForm/styles.js +9 -0
  147. package/src/components/Orders/CreateCustomOrder/StripeRedirectForm/index.js +96 -0
  148. package/src/components/Orders/CreateCustomOrder/StripeRedirectForm/styles.js +73 -0
  149. package/src/components/Orders/CreateCustomOrder/TaxInformation/index.js +69 -0
  150. package/src/components/Orders/CreateCustomOrder/TaxInformation/styles.js +25 -0
  151. package/src/components/Orders/CreateCustomOrder/index.js +45 -0
  152. package/src/components/Orders/OrderToPrintTicket/index.js +1 -1
  153. package/src/components/Orders/OrdersDashboardControls/index.js +4 -1
  154. package/src/components/Orders/OrdersDashboardControls/styles.js +13 -11
  155. package/src/components/Orders/OrdersExportCSV/styles.js +16 -0
  156. package/src/components/Orders/OrdersManager/index.js +5 -1
  157. package/src/components/Orders/OrdersManager/styles.js +2 -0
  158. package/src/components/Shared/AutoScroll/index.js +1 -0
  159. package/src/components/Shared/LinkableText/index.js +17 -0
  160. package/src/components/Shared/Tabs/index.js +28 -0
  161. package/src/components/Shared/index.js +5 -0
  162. package/src/components/SidebarMenu/index.js +1 -1
  163. package/src/components/Stores/BusinessProductsListing/index.js +6 -3
  164. package/src/components/Stores/BusinessQRCodeOption/index.js +5 -3
  165. package/src/components/Stores/BusinessSummary/index.js +6 -4
  166. package/src/components/Users/UserAddForm/index.js +12 -3
  167. package/src/components/Users/UserAddForm/styles.js +2 -2
  168. package/src/styles/Selects/index.js +1 -1
  169. package/src/utils/index.js +5 -0
@@ -0,0 +1,76 @@
1
+ import styled from 'styled-components'
2
+
3
+ export const Container = styled.div`
4
+ &.error {
5
+ background-color: orange;
6
+ }
7
+ `
8
+
9
+ export const WrapHeader = styled.div`
10
+ padding: 7px 0px;
11
+ margin-top: 15px;
12
+ display: flex;
13
+ justify-content: space-between;
14
+ align-items: center;
15
+ background-color: #FFF;
16
+ `
17
+
18
+ export const TitleContainer = styled.div`
19
+ margin: 0px;
20
+ text-overflow: ellipsis;
21
+ overflow: hidden;
22
+ white-space: nowrap;
23
+ width: 60%;
24
+ display: flex;
25
+ align-items: center;
26
+
27
+ *:first-child {
28
+ margin-right: 8px;
29
+ }
30
+
31
+ @media (min-width: 576px) {
32
+ width: 70%;
33
+ }
34
+ `
35
+
36
+ export const Title = styled.h3`
37
+ font-weight: 600;
38
+ font-size: 16px;
39
+ line-height: 24px;
40
+ display: flex;
41
+ flex-direction: column;
42
+ margin: 0px;
43
+ white-space: normal;
44
+ span {
45
+ &:not(:first-child) {
46
+ color: ${props => props.theme.colors.grayTextColor};
47
+ font-size: 12px;
48
+ font-weight: 400;
49
+ }
50
+ }
51
+ `
52
+
53
+ export const Flag = styled.span`
54
+ font-size: 13px;
55
+ margin: 0px;
56
+ text-transform: capitalize;
57
+ color: ${props => props.required ? '#E63757' : props.theme.colors.grayTextColor};
58
+ font-weight: 500;
59
+
60
+ @media (min-width: 381px) {
61
+ font-size: 14px;
62
+ }
63
+ `
64
+ export const OptionThumbnail = styled.div`
65
+ display: inline-block;
66
+ border-radius: 8px;
67
+ background-image: url(${({ src }) => src});
68
+ background-repeat: no-repeat, repeat;
69
+ width: 40px;
70
+ height: 40px;
71
+ background-size: cover;
72
+ object-fit: cover;
73
+ background-position: center;
74
+ justify-content: center;
75
+ align-items: center;
76
+ `
@@ -0,0 +1,182 @@
1
+ import React, { useState, useEffect, useRef } from 'react'
2
+ import {
3
+ ProductOptionSuboption as ProductSubOptionController,
4
+ useUtils,
5
+ useLanguage
6
+ } from 'ordering-components-admin-external'
7
+ import BsCircleFill from '@meronex/icons/bs/BsCircleFill'
8
+ import BsCircleHalf from '@meronex/icons/bs/BsCircleHalf'
9
+ import BsDashCircle from '@meronex/icons/bs/BsDashCircle'
10
+ import BsPlusCircle from '@meronex/icons/bs/BsPlusCircle'
11
+
12
+ import {
13
+ Container,
14
+ SuboptionPrice,
15
+ QuantityControl,
16
+ PositionControl,
17
+ IconControl,
18
+ Text,
19
+ SubOptionThumbnail,
20
+ LeftOptionContainer,
21
+ RightOptionContainer
22
+ } from './styles'
23
+ import MdCheckBox from '@meronex/icons/md/MdCheckBox'
24
+ import MdCheckBoxOutlineBlank from '@meronex/icons/md/MdCheckBoxOutlineBlank'
25
+ import RiRadioButtonFill from '@meronex/icons/ri/RiRadioButtonFill'
26
+ import MdRadioButtonUnchecked from '@meronex/icons/md/MdRadioButtonUnchecked'
27
+
28
+ const ProductOptionSubOptionUI = (props) => {
29
+ const {
30
+ state,
31
+ increment,
32
+ decrement,
33
+ balance,
34
+ option,
35
+ suboption,
36
+ toggleSelect,
37
+ changePosition,
38
+ isSoldOut,
39
+ setIsScrollAvailable,
40
+ onChange
41
+ } = props
42
+
43
+ const disableIncrement = option?.limit_suboptions_by_max ? (balance === option?.max || state.quantity === suboption.max) : state.quantity === suboption?.max || (!state.selected && balance === option?.max)
44
+ const price = option?.with_half_option && suboption?.half_price && state.position !== 'whole' ? suboption?.half_price : suboption?.price
45
+ const [, t] = useLanguage()
46
+ const [{ parsePrice }] = useUtils()
47
+ const [showMessage, setShowMessage] = useState(false)
48
+ const dirtyRef = useRef(null)
49
+
50
+ const handleIncrement = (e) => {
51
+ e.stopPropagation()
52
+ increment()
53
+ }
54
+
55
+ const handleDecrement = (e) => {
56
+ e.stopPropagation()
57
+ decrement()
58
+ }
59
+
60
+ const handlePosition = (e, position) => {
61
+ e.stopPropagation()
62
+ changePosition(position)
63
+ }
64
+
65
+ const handleSuboptionClick = () => {
66
+ dirtyRef.current = true
67
+ toggleSelect()
68
+ if (balance === option?.max && option?.suboptions?.length > balance && !(option?.min === 1 && option?.max === 1) && !state.selected) {
69
+ setShowMessage(true)
70
+ }
71
+ }
72
+
73
+ useEffect(() => {
74
+ if (!(balance === option?.max && option?.suboptions?.length > balance && !(option?.min === 1 && option?.max === 1) && !state.selected)) {
75
+ setShowMessage(false)
76
+ }
77
+ }, [balance])
78
+
79
+ useEffect(() => {
80
+ if (balance === option?.max && state?.selected && dirtyRef) {
81
+ if (dirtyRef?.current !== null) {
82
+ dirtyRef.current = false
83
+ setIsScrollAvailable(true)
84
+ }
85
+ }
86
+ }, [state?.selected])
87
+
88
+ useEffect(() => {
89
+ if (dirtyRef?.current || !suboption?.preselected || !option?.respect_to) return
90
+ const newState = { ...state, selected: suboption?.preselected, quantity: state.selected ? 0 : 1 }
91
+ onChange(newState, suboption, option)
92
+ }, [suboption, dirtyRef, option])
93
+ return (
94
+ <>
95
+ <Container onClick={() => handleSuboptionClick()}>
96
+ <LeftOptionContainer>
97
+ <IconControl>
98
+ {((option?.min === 0 && option?.max === 1) || option?.max > 1) ? (
99
+ state?.selected ? (
100
+ <MdCheckBox />
101
+ ) : (
102
+ <MdCheckBoxOutlineBlank disabled />
103
+ )
104
+ ) : (
105
+ state?.selected ? (
106
+ <RiRadioButtonFill />
107
+ ) : (
108
+ <MdRadioButtonUnchecked disabled />
109
+ )
110
+ )}
111
+ </IconControl>
112
+ {suboption.image && suboption.image !== '-' && (
113
+ <SubOptionThumbnail src={suboption.image} />
114
+ )}
115
+ <Text>
116
+ <div>{suboption?.name}</div>
117
+ </Text>
118
+ </LeftOptionContainer>
119
+ <RightOptionContainer>
120
+
121
+ <QuantityControl>
122
+ {option?.allow_suboption_quantity && state?.selected && (
123
+ <>
124
+ <BsDashCircle
125
+ disabled={state.quantity === 0 || isSoldOut}
126
+ onClick={handleDecrement}
127
+ />
128
+ {state.quantity}
129
+ <BsPlusCircle
130
+ disabled={disableIncrement || isSoldOut}
131
+ onClick={handleIncrement}
132
+ />
133
+ </>
134
+ )}
135
+ </QuantityControl>
136
+ <PositionControl>
137
+ {
138
+ option?.with_half_option && state?.selected && (
139
+ <>
140
+ <BsCircleHalf
141
+ className={['reverse', state.selected && state.position === 'left' ? 'selected' : null].filter(classname => classname).join(' ')}
142
+ onClick={(e) => handlePosition(e, 'left')}
143
+ />
144
+ <BsCircleFill
145
+ className={[state.selected && state.position === 'whole' ? 'selected' : null].filter(classname => classname).join(' ')}
146
+ onClick={(e) => handlePosition(e, 'whole')}
147
+ />
148
+ <BsCircleHalf
149
+ className={[state.selected && state.position === 'right' ? 'selected' : null].filter(classname => classname).join(' ')}
150
+ onClick={(e) => handlePosition(e, 'right')}
151
+ />
152
+ </>
153
+ )
154
+ }
155
+ </PositionControl>
156
+ </RightOptionContainer>
157
+ <SuboptionPrice>
158
+ {price > 0 && (
159
+ <>+ {parsePrice(price)}</>
160
+ )}
161
+ </SuboptionPrice>
162
+ </Container>
163
+ {showMessage && (
164
+ <Text noMargin>
165
+ <span>{`${t('OPTIONS_MAX_LIMIT', 'Maximum options to choose')}: ${option?.max}`}</span>
166
+ </Text>
167
+ )}
168
+ </>
169
+ )
170
+ }
171
+
172
+ export const ProductOptionSubOption = (props) => {
173
+ const productOptionSubOptionProps = {
174
+ ...props,
175
+ UIComponent: ProductOptionSubOptionUI,
176
+ isOrigin: true
177
+ }
178
+
179
+ return (
180
+ <ProductSubOptionController {...productOptionSubOptionProps} />
181
+ )
182
+ }
@@ -0,0 +1,195 @@
1
+ import styled, { css } from 'styled-components'
2
+
3
+ export const Container = styled.div`
4
+ display: flex;
5
+ align-items: center;
6
+ justify-content: space-between;
7
+ padding: 10px 0px;
8
+ cursor: pointer;
9
+
10
+ -webkit-touch-callout: none;
11
+ -webkit-user-select: none;
12
+ -khtml-user-select: none;
13
+ -moz-user-select: none;
14
+ -ms-user-select: none;
15
+ user-select: none;
16
+ `
17
+
18
+ export const IconControl = styled.div`
19
+ display: flex;
20
+ color: ${props => props.theme.colors.primary};
21
+ margin-right: 5px;
22
+ ${props => props.theme?.rtl && css`
23
+ margin-left: 5px;
24
+ margin-right: 0px;
25
+ `}
26
+ svg {
27
+ font-size: 24px;
28
+ }
29
+
30
+ svg[disabled] {
31
+ color: ${props => props.theme.colors.lightGray};
32
+ }
33
+ `
34
+ export const Text = styled.div`
35
+ flex: 1 1 auto;
36
+ display: flex;
37
+ font-weight: 300;
38
+ color: #555;
39
+ overflow: hidden;
40
+ text-overflow: ellipsis;
41
+ margin: 0 8px;
42
+
43
+ div {
44
+ overflow: hidden;
45
+ text-overflow: ellipsis;
46
+ font-size: 14px;
47
+ color: ${props => props.theme.colors.darkGray};
48
+ }
49
+
50
+ span {
51
+ margin-left: 10px;
52
+ font-weight: 500;
53
+ color: ${props => props.theme.colors.primary};
54
+ white-space: nowrap;
55
+ overflow: hidden;
56
+ text-overflow: ellipsis;
57
+ ${props => props.theme?.rtl && css`
58
+ margin-left: 0;
59
+ margin-right: 10px;
60
+ `}
61
+ }
62
+
63
+ ${({ noMargin }) => noMargin && css`
64
+ span {
65
+ margin: 0;
66
+ }
67
+ `}
68
+ `
69
+
70
+ export const SubOptionThumbnail = styled.div`
71
+ display: inline-block;
72
+ border-radius: 8px;
73
+ background-image: url(${({ src }) => src});
74
+ background-repeat: no-repeat, repeat;
75
+ width: 40px;
76
+ height: 40px;
77
+ min-width: 40px;
78
+ min-height: 40px;
79
+ background-size: cover;
80
+ object-fit: cover;
81
+ background-position: center;
82
+ justify-content: center;
83
+ align-items: center;
84
+ `
85
+
86
+ export const QuantityControl = styled.div`
87
+ display: flex;
88
+ color: ${props => props.theme.colors.darkGray};
89
+ align-items: center;
90
+ font-weight: 300;
91
+ font-size: 18px;
92
+ margin: 0 5px;
93
+
94
+ svg {
95
+ color: ${props => props.theme.colors.primary};
96
+ font-size: 20px;
97
+ margin-right: 6px;
98
+ ${props => props.theme?.rtl && css`
99
+ margin-left: 6px;
100
+ margin-right: 0px;
101
+ `}
102
+ @media (min-width: 425px) {
103
+ margin-right: 3px
104
+ ${props => props.theme?.rtl && css`
105
+ margin-right: 3px;
106
+ margin-left: 0px;
107
+ `}
108
+ }
109
+ }
110
+
111
+ svg[disabled] {
112
+ color: #CBCBCB;
113
+ }
114
+
115
+ svg:last-child {
116
+ margin-left: 6px;
117
+ margin-right: 0;
118
+ ${props => props.theme?.rtl && css`
119
+ margin-right: 6px;
120
+ margin-left: 0px;
121
+ `}
122
+ @media (min-width: 425px) {
123
+ margin-left: 3px;
124
+ margin-right: 0;
125
+ ${props => props.theme?.rtl && css`
126
+ margin-right: 3px;
127
+ margin-left: 0px;
128
+ `}
129
+ }
130
+ }
131
+ `
132
+
133
+ export const PositionControl = styled.div`
134
+ display: flex;
135
+ align-items: center;
136
+ color: #CBCBCB;
137
+ font-weight: 300;
138
+ font-size: 18px;
139
+ margin: 0 5px;
140
+
141
+ svg {
142
+ font-size: 20px;
143
+ margin-right: 3px;
144
+ ${props => props.theme?.rtl && css`
145
+ margin-left: 3px;
146
+ margin-right: 0px;
147
+ `}
148
+ &.reverse {
149
+ transform: rotate(180deg);
150
+ }
151
+
152
+ &.selected {
153
+ color: ${props => props.theme.colors.primary};
154
+ }
155
+
156
+ &:last-child {
157
+ margin-right: 0;
158
+ ${props => props.theme?.rtl && css`
159
+ margin-left: 0;
160
+ `}
161
+ }
162
+ }
163
+ `
164
+
165
+ export const SuboptionPrice = styled.div`
166
+ display: flex;
167
+ white-space: nowrap;
168
+ font-weight: 300;
169
+ font-size: 14px;
170
+ color: ${props => props.theme.colors.darkGray};
171
+ margin-left: 5px;
172
+ min-width: 60px;
173
+ ${props => props.theme?.rtl && css`
174
+ margin-right: 5px;
175
+ margin-left: 0px;
176
+ `}
177
+ `
178
+
179
+ export const LeftOptionContainer = styled.div`
180
+ display: flex;
181
+ width: 70%;
182
+ align-items: center;
183
+ `
184
+
185
+ export const RightOptionContainer = styled.div`
186
+ display: flex;
187
+ flex-direction: column;
188
+ width: 25%;
189
+ align-items: center;
190
+ justify-content: space-between;
191
+
192
+ @media (min-width: 425px) {
193
+ flex-direction: row;
194
+ }
195
+ `
@@ -0,0 +1,67 @@
1
+ import React, { useEffect, useState } from 'react'
2
+ import { useLanguage, useUtils } from 'ordering-components-admin-external'
3
+ import { useTheme } from 'styled-components'
4
+ import { DefaultSelect as Select } from '../../../../styles'
5
+ import {
6
+ SelectWrapper,
7
+ Option
8
+ } from './styles'
9
+
10
+ export const SelectBusinesses = (props) => {
11
+ const {
12
+ businessList,
13
+ selectedBusiness,
14
+ setSelectedBusiness
15
+ } = props
16
+
17
+ const theme = useTheme()
18
+ const [, t] = useLanguage()
19
+ const [{ optimizeImage }] = useUtils()
20
+ const [businessOptions, setBusinessOptions] = useState([])
21
+ const [searchValue, setSearchValue] = useState('')
22
+
23
+ const onChange = (val) => {
24
+ const findStore = businessList?.businesses.find(store => store?.slug === val)
25
+ setSelectedBusiness(findStore)
26
+ setSearchValue('')
27
+ }
28
+
29
+ useEffect(() => {
30
+ if (businessList?.loading || !businessList?.businesses) return
31
+ const _businessOptions = []
32
+ businessList.businesses.filter(business => (business?.name || '').toLocaleLowerCase().includes(searchValue.toLocaleLowerCase())).map(business => {
33
+ _businessOptions.push({
34
+ value: business?.slug,
35
+ content: (
36
+ <Option>
37
+ <img src={optimizeImage(business?.logo || theme.images?.dummies?.businessLogo, 'h_50,c_limit')} alt='' />
38
+ <span>{business?.name}</span>
39
+ </Option>
40
+ )
41
+ })
42
+ })
43
+ setBusinessOptions(_businessOptions)
44
+ }, [businessList, searchValue])
45
+
46
+ useEffect(() => {
47
+ if (!selectedBusiness || businessList?.loading || !businessList?.businesses) return
48
+ const found = businessList.businesses.find(store => store?.slug === selectedBusiness?.slug)
49
+ if (!found) setSelectedBusiness(null)
50
+ }, [businessList, selectedBusiness])
51
+
52
+ return (
53
+ <SelectWrapper>
54
+ <p>{t('SELECT_BUSINESS', 'Select business')}</p>
55
+ <Select
56
+ placeholder={<Option>{t('SELECT_BUSINESS', 'Select business')}</Option>}
57
+ options={businessOptions}
58
+ defaultValue={selectedBusiness?.slug}
59
+ onChange={onChange}
60
+ optionInnerMaxHeight='300px'
61
+ isShowSearchBar
62
+ searchValue={searchValue}
63
+ handleChangeSearch={setSearchValue}
64
+ />
65
+ </SelectWrapper>
66
+ )
67
+ }
@@ -0,0 +1,63 @@
1
+ import styled, { css } from 'styled-components'
2
+
3
+ export const SelectWrapper = styled.div`
4
+ margin: 50px 0 30px 0;
5
+
6
+ > p {
7
+ font-size: 16px;
8
+ font-weight: 600;
9
+ line-height: 24px;
10
+ margin-top: 0;
11
+ margin-bottom: 11px;
12
+ }
13
+
14
+ .select {
15
+ width: 100%;
16
+ background: ${props => props.theme.colors.secundary};
17
+ border: none;
18
+ font-size: 14px;
19
+
20
+ > div:first-child {
21
+ padding-top: 4px;
22
+ padding-bottom: 4px;
23
+ }
24
+ .list {
25
+ max-width: 100%;
26
+ }
27
+ }
28
+ `
29
+ export const Option = styled.div`
30
+ display: flex;
31
+ align-items: center;
32
+ cursor: pointer;
33
+ padding: 5px;
34
+ border-radius: 7.6px;
35
+ img {
36
+ min-height: 38px;
37
+ min-width: 38px;
38
+ height: 38px;
39
+ width: 38px;
40
+ border-radius: 8px;
41
+ object-fit: cover;
42
+ box-shadow: rgba(99, 99, 99, 0.2) 0px 2px 8px 0px;
43
+ ${props => props.theme?.rtl ? css`
44
+ margin-left: 8px;
45
+ ` : css`
46
+ margin-right: 8px;
47
+ `}
48
+ }
49
+ > span {
50
+ max-width: 200px;
51
+ font-size: 14px;
52
+ font-weight: 700;
53
+ text-overflow: ellipsis;
54
+ white-space: nowrap;
55
+ overflow: hidden;
56
+ }
57
+
58
+ @media (min-width: 768px) {
59
+ > span {
60
+ max-width: 560px;
61
+ }
62
+ }
63
+ `