ordering-ui-react-native 0.21.47 → 0.21.48-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.
Files changed (207) hide show
  1. package/package.json +8 -8
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/BusinessesListing/index.tsx +1 -1
  4. package/src/components/PaymentOptionsWebView/index.tsx +1 -0
  5. package/src/components/StripeMethodForm/index.tsx +6 -4
  6. package/src/components/VerifyPhone/styles.tsx +1 -2
  7. package/src/types/index.tsx +3 -1
  8. package/src/utils/index.tsx +2 -2
  9. package/themes/business/index.tsx +6 -0
  10. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +4 -3
  11. package/themes/business/src/components/BusinessController/index.tsx +19 -17
  12. package/themes/business/src/components/BusinessProductList/AccordionDropdown.tsx +63 -0
  13. package/themes/business/src/components/BusinessProductList/IterateCategories.tsx +108 -0
  14. package/themes/business/src/components/BusinessProductList/ProductList.tsx +196 -0
  15. package/themes/business/src/components/BusinessProductList/index.tsx +196 -0
  16. package/themes/business/src/components/BusinessProductList/styles.tsx +10 -0
  17. package/themes/business/src/components/DriverMap/index.tsx +36 -23
  18. package/themes/business/src/components/GoogleMap/index.tsx +15 -8
  19. package/themes/business/src/components/Home/index.tsx +5 -1
  20. package/themes/business/src/components/LanguageSelector/index.tsx +1 -2
  21. package/themes/business/src/components/LanguageSelector/lang_country.json +515 -70
  22. package/themes/business/src/components/LogoutButton/index.tsx +1 -1
  23. package/themes/business/src/components/MapView/index.tsx +30 -15
  24. package/themes/business/src/components/MessagesOption/index.tsx +2 -1
  25. package/themes/business/src/components/NewOrderNotification/index.tsx +66 -26
  26. package/themes/business/src/components/OrderDetails/Business.tsx +52 -2
  27. package/themes/business/src/components/OrderDetails/Delivery.tsx +30 -11
  28. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +68 -61
  29. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +40 -20
  30. package/themes/business/src/components/OrderDetails/usePrinterCommands.tsx +220 -0
  31. package/themes/business/src/components/OrderSummary/index.tsx +240 -76
  32. package/themes/business/src/components/OrdersListManager/index.tsx +7 -2
  33. package/themes/business/src/components/OrdersListManager/utils.tsx +1 -1
  34. package/themes/business/src/components/OrdersOption/index.tsx +253 -135
  35. package/themes/business/src/components/PhoneInputNumber/index.tsx +8 -5
  36. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +37 -40
  37. package/themes/business/src/components/PreviousOrders/OrderList.tsx +1 -1
  38. package/themes/business/src/components/PreviousOrders/index.tsx +5 -3
  39. package/themes/business/src/components/PreviousOrders/styles.tsx +10 -0
  40. package/themes/business/src/components/PrinterEdition/index.tsx +363 -0
  41. package/themes/business/src/components/PrinterEdition/styles.tsx +61 -0
  42. package/themes/business/src/components/PrinterSettings/index.tsx +267 -0
  43. package/themes/business/src/components/PrinterSettings/styles.tsx +30 -0
  44. package/themes/business/src/components/ProductItemAccordion/index.tsx +2 -2
  45. package/themes/business/src/components/ReviewCustomer/index.tsx +2 -0
  46. package/themes/business/src/components/SearchBar/index.tsx +2 -1
  47. package/themes/business/src/components/Sessions/index.tsx +187 -0
  48. package/themes/business/src/components/Sessions/styles.tsx +20 -0
  49. package/themes/business/src/components/StoresList/index.tsx +5 -3
  50. package/themes/business/src/components/UserFormDetails/index.tsx +111 -107
  51. package/themes/business/src/components/UserProfileForm/index.tsx +106 -54
  52. package/themes/business/src/components/WebsocketStatus/index.tsx +171 -0
  53. package/themes/business/src/components/WebsocketStatus/styles.tsx +28 -0
  54. package/themes/business/src/components/shared/OInput.tsx +2 -0
  55. package/themes/business/src/components/shared/OTextarea.tsx +8 -9
  56. package/themes/business/src/hooks/useLocation.tsx +5 -4
  57. package/themes/business/src/types/index.tsx +21 -5
  58. package/themes/business/src/utils/index.tsx +5 -0
  59. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  60. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  61. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  62. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  63. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  64. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  65. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  66. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  67. package/themes/original/index.tsx +6 -2
  68. package/themes/original/src/components/AddressDetails/index.tsx +20 -10
  69. package/themes/original/src/components/AddressForm/index.tsx +41 -12
  70. package/themes/original/src/components/AddressForm/styles.tsx +1 -1
  71. package/themes/original/src/components/AddressList/index.tsx +18 -4
  72. package/themes/original/src/components/AddressList/styles.tsx +4 -4
  73. package/themes/original/src/components/AnalyticsSegment/index.tsx +6 -6
  74. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  75. package/themes/original/src/components/BusinessBasicInformation/index.tsx +7 -10
  76. package/themes/original/src/components/BusinessBasicInformation/styles.tsx +1 -1
  77. package/themes/original/src/components/BusinessController/index.tsx +18 -10
  78. package/themes/original/src/components/BusinessController/styles.tsx +8 -7
  79. package/themes/original/src/components/BusinessInformation/styles.tsx +2 -2
  80. package/themes/original/src/components/BusinessItemAccordion/index.tsx +11 -7
  81. package/themes/original/src/components/BusinessListingSearch/BusinessSearchFooter.tsx +317 -0
  82. package/themes/original/src/components/BusinessListingSearch/BusinessSearchHeader.tsx +96 -0
  83. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/index.tsx +1 -1
  84. package/themes/original/src/components/BusinessListingSearch/index.tsx +47 -358
  85. package/themes/original/src/components/BusinessListingSearch/styles.tsx +1 -1
  86. package/themes/original/src/components/BusinessPreorder/index.tsx +4 -3
  87. package/themes/original/src/components/BusinessProductsCategories/index.tsx +1 -1
  88. package/themes/original/src/components/BusinessProductsList/index.tsx +1 -1
  89. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  90. package/themes/original/src/components/BusinessProductsListing/index.tsx +31 -18
  91. package/themes/original/src/components/BusinessProductsListing/styles.tsx +2 -2
  92. package/themes/original/src/components/BusinessReviews/index.tsx +1 -1
  93. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +1 -1
  94. package/themes/original/src/components/BusinessesListing/Layout/Appointment/styles.tsx +5 -5
  95. package/themes/original/src/components/BusinessesListing/Layout/Original/FlatListBusinessListFooter.tsx +1 -1
  96. package/themes/original/src/components/BusinessesListing/Layout/Original/FlatListBusinessListHeader.tsx +7 -7
  97. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +2 -2
  98. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -1
  99. package/themes/original/src/components/BusinessesListing/index.tsx +0 -1
  100. package/themes/original/src/components/Cart/index.tsx +32 -9
  101. package/themes/original/src/components/CartContent/index.tsx +96 -58
  102. package/themes/original/src/components/CartStoresListing/styles.tsx +2 -2
  103. package/themes/original/src/components/Checkout/index.tsx +144 -62
  104. package/themes/original/src/components/Checkout/styles.tsx +17 -0
  105. package/themes/original/src/components/CitiesControl/styles.tsx +1 -1
  106. package/themes/original/src/components/DatePicker/index.tsx +18 -2
  107. package/themes/original/src/components/Favorite/index.tsx +9 -9
  108. package/themes/original/src/components/Favorite/styles.tsx +0 -2
  109. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  110. package/themes/original/src/components/ForgotPasswordForm/index.tsx +5 -0
  111. package/themes/original/src/components/GPSButton/index.tsx +1 -1
  112. package/themes/original/src/components/GiftCard/GiftCardOrdersList/index.tsx +64 -0
  113. package/themes/original/src/components/GiftCard/GiftCardOrdersList/styles.tsx +8 -0
  114. package/themes/original/src/components/GiftCard/PurchaseGiftCard/styles.tsx +1 -1
  115. package/themes/original/src/components/GiftCard/RedeemGiftCard/styles.tsx +1 -1
  116. package/themes/original/src/components/GiftCard/SendGiftCard/index.tsx +2 -2
  117. package/themes/original/src/components/GiftCard/SendGiftCard/styles.tsx +1 -1
  118. package/themes/original/src/components/GiftCard/SingleGiftCard/index.tsx +101 -0
  119. package/themes/original/src/components/GiftCard/SingleGiftCard/styles.tsx +4 -0
  120. package/themes/original/src/components/GiftCard/VerticalGiftCardOrdersLayout/index.tsx +83 -0
  121. package/themes/original/src/components/GiftCard/VerticalGiftCardOrdersLayout/styles.tsx +9 -0
  122. package/themes/original/src/components/GoogleMap/index.tsx +39 -18
  123. package/themes/original/src/components/Help/index.tsx +7 -0
  124. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +5 -0
  125. package/themes/original/src/components/HelpGuide/index.tsx +5 -0
  126. package/themes/original/src/components/HelpOrder/index.tsx +5 -0
  127. package/themes/original/src/components/HighestRatedBusinesses/index.tsx +2 -2
  128. package/themes/original/src/components/HighestRatedBusinesses/styles.tsx +1 -1
  129. package/themes/original/src/components/Home/index.tsx +3 -8
  130. package/themes/original/src/components/LoginForm/Otp/index.tsx +4 -16
  131. package/themes/original/src/components/LoginForm/index.tsx +9 -3
  132. package/themes/original/src/components/MessageListing/index.tsx +6 -0
  133. package/themes/original/src/components/Messages/index.tsx +8 -7
  134. package/themes/original/src/components/Messages/styles.tsx +1 -1
  135. package/themes/original/src/components/MomentOption/index.tsx +19 -4
  136. package/themes/original/src/components/MultiCart/index.tsx +1 -1
  137. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +7 -3
  138. package/themes/original/src/components/MultiCheckout/index.tsx +126 -61
  139. package/themes/original/src/components/MultiCheckout/styles.tsx +17 -0
  140. package/themes/original/src/components/MultiOrdersDetails/index.tsx +20 -15
  141. package/themes/original/src/components/MyOrders/index.tsx +28 -28
  142. package/themes/original/src/components/NavBar/index.tsx +5 -0
  143. package/themes/original/src/components/NetworkError/index.tsx +2 -3
  144. package/themes/original/src/components/NetworkError/styles.tsx +2 -2
  145. package/themes/original/src/components/Notifications/index.tsx +9 -8
  146. package/themes/original/src/components/Notifications/styles.tsx +0 -1
  147. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +1 -1
  148. package/themes/original/src/components/OrderDetails/index.tsx +701 -662
  149. package/themes/original/src/components/OrderDetails/styles.tsx +24 -8
  150. package/themes/original/src/components/OrderProgress/index.tsx +22 -3
  151. package/themes/original/src/components/OrderProgress/styles.tsx +1 -1
  152. package/themes/original/src/components/OrderSummary/index.tsx +3 -1
  153. package/themes/original/src/components/OrderTypeSelector/index.tsx +10 -6
  154. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/styles.tsx +1 -1
  155. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/styles.tsx +1 -1
  156. package/themes/original/src/components/OrdersOption/index.tsx +3 -5
  157. package/themes/original/src/components/OrdersOption/styles.tsx +1 -1
  158. package/themes/original/src/components/PaymentOptionCard/index.tsx +4 -2
  159. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  160. package/themes/original/src/components/PaymentOptions/index.tsx +47 -4
  161. package/themes/original/src/components/PreviousOrders/index.tsx +2 -0
  162. package/themes/original/src/components/ProductForm/ActionButton.tsx +122 -0
  163. package/themes/original/src/components/ProductForm/ExtraOptions.tsx +56 -0
  164. package/themes/original/src/components/ProductForm/index.tsx +170 -252
  165. package/themes/original/src/components/ProductItemAccordion/index.tsx +55 -44
  166. package/themes/original/src/components/ProductItemAccordion/styles.tsx +3 -4
  167. package/themes/original/src/components/ProductOptionSubOption/index.tsx +112 -91
  168. package/themes/original/src/components/ProfessionalProfile/styles.tsx +3 -3
  169. package/themes/original/src/components/Promotions/index.tsx +13 -11
  170. package/themes/original/src/components/Promotions/styles.tsx +0 -2
  171. package/themes/original/src/components/ReviewDriver/index.tsx +5 -0
  172. package/themes/original/src/components/ReviewDriver/styles.tsx +1 -1
  173. package/themes/original/src/components/ReviewOrder/index.tsx +5 -0
  174. package/themes/original/src/components/ReviewOrder/styles.tsx +1 -1
  175. package/themes/original/src/components/ReviewProducts/index.tsx +5 -0
  176. package/themes/original/src/components/ReviewProducts/styles.tsx +1 -1
  177. package/themes/original/src/components/ServiceForm/index.tsx +1 -1
  178. package/themes/original/src/components/ServiceForm/styles.tsx +4 -4
  179. package/themes/original/src/components/Sessions/index.tsx +5 -0
  180. package/themes/original/src/components/SignupForm/index.tsx +67 -59
  181. package/themes/original/src/components/SingleOrderCard/index.tsx +3 -2
  182. package/themes/original/src/components/SingleProductCard/index.tsx +4 -3
  183. package/themes/original/src/components/SingleProductCard/styles.tsx +0 -3
  184. package/themes/original/src/components/StripeCardsList/index.tsx +12 -35
  185. package/themes/original/src/components/StripeElementsForm/index.tsx +79 -59
  186. package/themes/original/src/components/StripeElementsForm/naked.tsx +48 -1
  187. package/themes/original/src/components/UpsellingProducts/UpsellingContent.tsx +170 -0
  188. package/themes/original/src/components/UpsellingProducts/UpsellingLayout.tsx +91 -0
  189. package/themes/original/src/components/UpsellingProducts/index.tsx +15 -199
  190. package/themes/original/src/components/UpsellingProducts/styles.tsx +19 -0
  191. package/themes/original/src/components/UserFormDetails/index.tsx +100 -86
  192. package/themes/original/src/components/UserFormDetails/styles.tsx +7 -0
  193. package/themes/original/src/components/UserProfile/index.tsx +3 -2
  194. package/themes/original/src/components/UserProfileForm/index.tsx +5 -0
  195. package/themes/original/src/components/WalletTransactions/styles.tsx +1 -0
  196. package/themes/original/src/components/Wallets/index.tsx +7 -4
  197. package/themes/original/src/components/Wallets/styles.tsx +2 -1
  198. package/themes/original/src/components/WebsocketStatus/index.tsx +172 -0
  199. package/themes/original/src/components/WebsocketStatus/styles.tsx +28 -0
  200. package/themes/original/src/components/shared/HeaderTitle.tsx +1 -1
  201. package/themes/original/src/components/shared/OButton.tsx +5 -5
  202. package/themes/original/src/components/shared/OInput.tsx +1 -4
  203. package/themes/original/src/components/shared/OModal.tsx +12 -14
  204. package/themes/original/src/layouts/Container.tsx +5 -3
  205. package/themes/original/src/types/index.tsx +4 -1
  206. package/themes/original/src/utils/index.tsx +12 -1
  207. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -1,5 +1,5 @@
1
- import React, { useState } from 'react'
2
- import { View, Animated, StyleSheet, Platform, TouchableOpacity } from 'react-native'
1
+ import React, { useEffect, useState } from 'react'
2
+ import { View, Animated, StyleSheet, TouchableOpacity } from 'react-native'
3
3
  import { useUtils, useLanguage, useOrder } from 'ordering-components/native'
4
4
  import { useTheme } from 'styled-components/native';
5
5
  import MaterialCommunityIcon from 'react-native-vector-icons/MaterialCommunityIcons'
@@ -39,29 +39,43 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
39
39
  } = props
40
40
 
41
41
  const theme = useTheme();
42
+ const hideProductImage = isFromCheckout
43
+ ? theme?.checkout?.components?.cart?.components?.product?.components?.image?.hidden
44
+ : theme?.confirmation?.components?.cart?.components?.products?.components?.photo?.hidden
42
45
 
46
+ const hideProductDummyLogo = theme?.business_view?.components?.products?.components?.product?.components?.dummy?.hidden
47
+ const hideProductCommentHide = isFromCheckout && theme?.checkout?.components?.cart?.components?.product?.components?.comments?.hidden
43
48
 
44
49
  const pickerStyle = StyleSheet.create({
45
50
  inputAndroid: {
46
- width: 34,
51
+ width: 45,
47
52
  textAlign: 'center',
48
53
  overflow: 'visible',
49
54
  fontSize: 12,
50
- height: 20,
51
- padding: 0,
52
- color: theme.colors.textNormal
55
+ height: 30,
56
+ color: theme.colors.textNormal,
57
+ backgroundColor: theme.colors.backgroundGray100,
58
+ paddingVertical: 8,
59
+ paddingRight: 10,
60
+ paddingLeft: 0,
61
+ borderRadius: 7.6,
53
62
  },
54
63
  inputIOS: {
55
- width: 34,
64
+ width: 45,
56
65
  textAlign: 'center',
57
66
  overflow: 'visible',
58
67
  fontSize: 12,
68
+ backgroundColor: theme.colors.backgroundGray100,
69
+ paddingVertical: 8,
70
+ paddingRight: 15,
71
+ paddingLeft: 0,
72
+ borderRadius: 7.6,
59
73
  },
60
74
  icon: {
61
75
  position: 'absolute',
62
76
  zIndex: 1,
63
- top: -4,
64
- end: -4,
77
+ top: 0,
78
+ end: 8,
65
79
  },
66
80
  placeholder: {
67
81
  color: theme.colors.secundaryContrast
@@ -75,9 +89,7 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
75
89
 
76
90
  const [isActive, setActiveState] = useState(false)
77
91
  const [isServiceOpen, setIsServiceOpen] = useState(false)
78
- // const [setHeight, setHeightState] = useState({ height: new Animated.Value(0) })
79
- // const [setRotate, setRotateState] = useState({ angle: new Animated.Value(0) })
80
- const [productQuantity, setProductQuantity] = useState(product.quantity.toString())
92
+ const [productQuantityState, setProductQuantityState] = useState<any>(product.quantity.toString())
81
93
 
82
94
  const productInfo = () => {
83
95
  if (isCartProduct) {
@@ -105,23 +117,9 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
105
117
  setIsServiceOpen(true)
106
118
  }
107
119
 
108
- /* const toggleAccordion = () => {
109
- if ((!product?.valid_menu && isCartProduct)) return
110
- if (isActive) {
111
- Animated.timing(setHeight.height, {
112
- toValue: 100,
113
- duration: 500,
114
- easing: Easing.linear,
115
- useNativeDriver: false,
116
- }).start()
117
- } else {
118
- setHeightState({height: new Animated.Value(0)})
119
- }
120
- }*/
121
-
122
120
  const handleChangeQuantity = (value: string) => {
123
121
  if (!orderState.loading) {
124
- setProductQuantity(value)
122
+ setProductQuantityState(value)
125
123
  if (parseInt(value) === 0) {
126
124
  onDeleteProduct && onDeleteProduct(product)
127
125
  } else {
@@ -135,10 +133,6 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
135
133
  return `${quantity} x ${name} ${pos} +${price}`
136
134
  }
137
135
 
138
- /*useEffect(() => {
139
- toggleAccordion()
140
- }, [isActive])*/
141
-
142
136
  const productOptions = getProductMax && [...Array(getProductMax(product) + 1),].map((_: any, opt: number) => {
143
137
  return {
144
138
  label: opt === 0 ? t('REMOVE', 'Remove') : opt.toString(),
@@ -146,19 +140,27 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
146
140
  }
147
141
  })
148
142
 
143
+ useEffect(() => {
144
+ if (product.quantity.toString() === productQuantityState || productQuantityState) {
145
+ setProductQuantityState(null)
146
+ }
147
+ }, [product.quantity])
148
+
149
149
  return (
150
150
  <>
151
151
  <AccordionSection>
152
152
  <Accordion
153
- isValid={product?.valid ?? true}
154
- onPress={() => (!product?.valid_menu && isCartProduct)
155
- ? {}
156
- : setActiveState(!isActive)}
157
153
  activeOpacity={1}
154
+ isValid={product?.valid ?? true}
155
+ onPress={
156
+ (!product?.valid_menu && isCartProduct) ||
157
+ !(productInfo().ingredients.length > 0 || productInfo().options.length > 0 || !!product.comment)
158
+ ? null : () => setActiveState(!isActive)
159
+ }
158
160
  >
159
161
  <View style={{ flexDirection: 'row', alignItems: 'flex-start' }}>
160
162
  <ContentInfo>
161
- {(product?.images || theme?.images?.dummies?.product) && (
163
+ {(product?.images || (!hideProductDummyLogo && theme?.images?.dummies?.product)) && !hideProductImage && (
162
164
  <ProductImage>
163
165
  {isFromCheckout ? (
164
166
  product?.images ? (
@@ -211,11 +213,20 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
211
213
  <RNPickerSelect
212
214
  items={productOptions}
213
215
  onValueChange={handleChangeQuantity}
214
- value={productQuantity}
216
+ value={productQuantityState ?? product.quantity.toString()}
215
217
  style={pickerStyle}
216
218
  useNativeAndroidPickerStyle={false}
217
219
  placeholder={{}}
218
- Icon={() => <View style={pickerStyle.icon}><OIcon src={theme.images.general.arrow_down} color={theme.colors.textNormal} width={8} /></View>}
220
+ touchableWrapperProps={{ style: { width: 45 } }}
221
+ Icon={() => (
222
+ <View style={pickerStyle.icon}>
223
+ <OIcon
224
+ src={theme.images.general.arrow_down}
225
+ color={theme.colors.textNormal}
226
+ width={8}
227
+ />
228
+ </View>
229
+ )}
219
230
  disabled={orderState.loading}
220
231
  />
221
232
  </ProductInfo>
@@ -276,21 +287,21 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
276
287
  )}
277
288
  </Accordion>
278
289
 
279
- <View style={{ display: isActive ? 'flex' : 'none', paddingStart: 40 }}>
290
+ <View style={{ display: isActive ? 'flex' : 'none', paddingStart: isFromCheckout ? 100 : 40, marginTop: isFromCheckout ? -80 : -30 }}>
280
291
  <Animated.View>
281
292
  <AccordionContent>
282
293
  {productInfo().ingredients.length > 0 && productInfo().ingredients.some((ingredient: any) => !ingredient.selected) && (
283
294
  <ProductOptionsList>
284
295
  <OText size={10} color={theme.colors.textSecondary}>{t('INGREDIENTS', 'Ingredients')}</OText>
285
- {productInfo().ingredients.map((ingredient: any) => !ingredient.selected && (
286
- <OText size={10} color={theme.colors.textThird} key={ingredient.id} style={{ marginLeft: 10 }}>{t('NO', 'No')} {ingredient.name}</OText>
296
+ {productInfo().ingredients.map((ingredient: any, i) => !ingredient.selected && (
297
+ <OText size={10} color={theme.colors.textThird} key={ingredient.id + i} style={{ marginLeft: 10 }}>{t('NO', 'No')} {ingredient.name}</OText>
287
298
  ))}
288
299
  </ProductOptionsList>
289
300
  )}
290
301
  {productInfo().options.length > 0 && (
291
302
  <ProductOptionsList>
292
- {productInfo().options.sort((a: any, b: any) => a.rank - b.rank).map((option: any, i: number) => (
293
- <ProductOption key={option.id + i}>
303
+ {productInfo().options.sort((a: any, b: any) => a.rank - b.rank).map((option: any) => (
304
+ <ProductOption key={option.id}>
294
305
  <OText size={10} color={theme.colors.textSecondary}>{option.name}</OText>
295
306
  {option.suboptions.map((suboption: any) => (
296
307
  <ProductSubOption key={suboption.id}>
@@ -308,7 +319,7 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
308
319
  ))}
309
320
  </ProductOptionsList>
310
321
  )}
311
- {!!product.comment && (
322
+ {!!product.comment && !hideProductCommentHide && (
312
323
  <ProductComment>
313
324
  <OText size={10} color={theme.colors.textSecondary}>{t('SPECIAL_COMMENT', 'Special Comment')}</OText>
314
325
  <OText size={10} color={theme.colors.textThird}>{product.comment}</OText>
@@ -17,9 +17,6 @@ export const Accordion = styled.TouchableOpacity`
17
17
 
18
18
  export const ProductInfo = styled.View`
19
19
  margin-horizontal: 7px;
20
- background-color: ${(props: any) => props.theme.colors.backgroundGray100};
21
- padding: 4px 12px 4px 0px;
22
- border-radius: 7.6px;
23
20
  `
24
21
 
25
22
  export const ProductQuantity = styled.View`
@@ -54,4 +51,6 @@ export const ProductSubOption = styled.View`
54
51
  margin-left: 0px;
55
52
  `
56
53
 
57
- export const ProductComment = styled.View``
54
+ export const ProductComment = styled.View`
55
+ margin-left: 20px;
56
+ `
@@ -19,6 +19,8 @@ import {
19
19
  Logo
20
20
  } from './styles'
21
21
  import { OIcon, OText } from '../shared'
22
+ import { InView } from 'react-native-intersection-observer'
23
+ import { Placeholder, PlaceholderLine } from 'rn-placeholder';
22
24
 
23
25
  export const ProductOptionSubOptionUI = (props: any) => {
24
26
  const {
@@ -32,7 +34,9 @@ export const ProductOptionSubOptionUI = (props: any) => {
32
34
  changePosition,
33
35
  disabled,
34
36
  setIsScrollAvailable,
35
- image
37
+ image,
38
+ enableIntersection,
39
+ onChange
36
40
  } = props
37
41
 
38
42
  const disableIncrement = option?.limit_suboptions_by_max ? balance === option?.max || state.quantity === suboption?.max : state.quantity === suboption?.max || (!state.selected && balance === option?.max)
@@ -43,6 +47,7 @@ export const ProductOptionSubOptionUI = (props: any) => {
43
47
  const [{ parsePrice, optimizeImage }] = useUtils()
44
48
  const [showMessage, setShowMessage] = useState(false)
45
49
  const [isDirty, setIsDirty] = useState(false)
50
+ const [isIntersectionObserver, setIsIntersectionObserver] = useState(!enableIntersection)
46
51
 
47
52
  const iconsSize = 20
48
53
 
@@ -67,6 +72,10 @@ export const ProductOptionSubOptionUI = (props: any) => {
67
72
  }
68
73
  }
69
74
 
75
+ const handleChangeInterSection = (inView: boolean) => {
76
+ setIsIntersectionObserver(inView)
77
+ }
78
+
70
79
  useEffect(() => {
71
80
  if (balance === option?.max && state?.selected && isDirty) {
72
81
  setIsDirty(false)
@@ -80,105 +89,117 @@ export const ProductOptionSubOptionUI = (props: any) => {
80
89
  }
81
90
  }, [balance])
82
91
 
92
+ useEffect(() => {
93
+ if (!suboption?.preselected || !option?.respect_to) return
94
+ const newState = { ...state, selected: suboption?.preselected, quantity: state.selected ? 0 : 1 }
95
+ onChange(newState, suboption, option)
96
+ }, [suboption, option])
97
+
83
98
  return (
84
- <View>
85
- <Container onPress={!(option?.with_half_option || option?.allow_suboption_quantity) ? () => handleSuboptionClick() : null}>
86
- <IconControl disabled={disabled} onPress={() => handleSuboptionClick()}>
87
- {((option?.min === 0 && option?.max === 1) || option?.max > 1) ? (
88
- state?.selected ? (
89
- <OIcon src={theme.images.general.check_act} color={theme.colors.primary} width={16} />
99
+ <InView onChange={(inView: boolean) => handleChangeInterSection(inView)} triggerOnce={true}>
100
+ {isIntersectionObserver ? (
101
+ <Container onPress={!((option?.with_half_option || option?.allow_suboption_quantity) && state?.selected) ? () => handleSuboptionClick() : null}>
102
+ <IconControl disabled={disabled} onPress={() => handleSuboptionClick()}>
103
+ {((option?.min === 0 && option?.max === 1) || option?.max > 1) ? (
104
+ state?.selected ? (
105
+ <OIcon src={theme.images.general.check_act} color={theme.colors.primary} width={16} />
106
+ ) : (
107
+ <OIcon src={theme.images.general.check_nor} color={theme.colors.disabled} width={16} />
108
+ )
90
109
  ) : (
91
- <OIcon src={theme.images.general.check_nor} color={theme.colors.disabled} width={16} />
92
- )
93
- ) : (
94
- state?.selected ? (
95
- <OIcon src={theme.images.general.radio_act} color={theme.colors.primary} width={16} />
96
- ) : (
97
- <OIcon src={theme.images.general.radio_nor} color={theme.colors.disabled} width={16} />
98
- )
110
+ state?.selected ? (
111
+ <OIcon src={theme.images.general.radio_act} color={theme.colors.primary} width={16} />
112
+ ) : (
113
+ <OIcon src={theme.images.general.radio_nor} color={theme.colors.disabled} width={16} />
114
+ )
115
+ )}
116
+ {image && (
117
+ <Logo style={styles.logo}>
118
+ <FastImage
119
+ style={styles.icon}
120
+ source={{
121
+ uri: optimizeImage(image, 'h_100,c_limit'),
122
+ priority: FastImage.priority.normal,
123
+ }}
124
+ resizeMode={FastImage.resizeMode.cover}
125
+ />
126
+ </Logo>
127
+ )}
128
+ <OText size={12} lineHeight={18} color={theme.colors.textSecondary} mLeft={5} style={{ flex: 1 }}>
129
+ {suboption?.name}
130
+ </OText>
131
+ </IconControl>
132
+ {option?.allow_suboption_quantity && state?.selected && (
133
+ <QuantityControl>
134
+ <>
135
+ <Checkbox disabled={disabled || state.quantity === 0} onPress={decrement}>
136
+ <IconAntDesign
137
+ name='minuscircleo'
138
+ size={iconsSize}
139
+ color={state.quantity === 0 || disabled ? theme.colors.disabled : theme.colors.primary}
140
+ />
141
+ </Checkbox>
142
+ <OText size={12}>
143
+ {state.quantity}
144
+ </OText>
145
+ <Checkbox disabled={disabled || disableIncrement} onPress={increment}>
146
+ <IconAntDesign
147
+ name='pluscircleo'
148
+ size={iconsSize}
149
+ color={disableIncrement || disabled ? theme.colors.disabled : theme.colors.primary}
150
+ />
151
+ </Checkbox>
152
+ </>
153
+ </QuantityControl>
99
154
  )}
100
- {image && (
101
- <Logo style={styles.logo}>
102
- <FastImage
103
- style={styles.icon}
104
- source={{
105
- uri: optimizeImage(image, 'h_100,c_limit'),
106
- priority: FastImage.priority.normal,
107
- }}
108
- resizeMode={FastImage.resizeMode.cover}
109
- />
110
- </Logo>
155
+ {option?.with_half_option && state?.selected && (
156
+ <PositionControl>
157
+ <>
158
+ <Circle disabled={disabled} onPress={() => changePosition('left')}>
159
+ <OIcon
160
+ src={theme.images.general.half_l}
161
+ color={state.selected && state.position === 'left' ? theme.colors.primary : '#cbcbcb'}
162
+ width={20}
163
+ height={20}
164
+ style={styles.inverse}
165
+ />
166
+ </Circle>
167
+ <Circle disabled={disabled} onPress={() => changePosition('whole')}>
168
+ <OIcon
169
+ src={theme.images.general.half_f}
170
+ color={state.selected && state.position === 'whole' ? theme.colors.primary : '#cbcbcb'}
171
+ width={20}
172
+ height={20}
173
+ />
174
+ </Circle>
175
+ <Circle disabled={disabled} onPress={() => changePosition('right')}>
176
+ <OIcon
177
+ src={theme.images.general.half_r}
178
+ color={state.selected && state.position === 'right' ? theme.colors.primary : '#cbcbcb'}
179
+ width={20}
180
+ height={20}
181
+ />
182
+ </Circle>
183
+ </>
184
+ </PositionControl>
111
185
  )}
112
- <OText size={12} lineHeight={18} color={theme.colors.textSecondary} mLeft={5} style={{ flex: 1 }}>
113
- {suboption?.name}
114
- </OText>
115
- </IconControl>
116
- {option?.allow_suboption_quantity && state?.selected && (
117
- <QuantityControl>
118
- <>
119
- <Checkbox disabled={disabled || state.quantity === 0} onPress={decrement}>
120
- <IconAntDesign
121
- name='minuscircleo'
122
- size={iconsSize}
123
- color={state.quantity === 0 || disabled ? theme.colors.disabled : theme.colors.primary}
124
- />
125
- </Checkbox>
126
- <OText size={12}>
127
- {state.quantity}
128
- </OText>
129
- <Checkbox disabled={disabled || disableIncrement} onPress={increment}>
130
- <IconAntDesign
131
- name='pluscircleo'
132
- size={iconsSize}
133
- color={disableIncrement || disabled ? theme.colors.disabled : theme.colors.primary}
134
- />
135
- </Checkbox>
136
- </>
137
- </QuantityControl>
138
- )}
139
- {option?.with_half_option && state?.selected && (
140
- <PositionControl>
141
- <>
142
- <Circle disabled={disabled} onPress={() => changePosition('left')}>
143
- <OIcon
144
- src={theme.images.general.half_l}
145
- color={state.selected && state.position === 'left' ? theme.colors.primary : '#cbcbcb'}
146
- width={20}
147
- height={20}
148
- style={styles.inverse}
149
- />
150
- </Circle>
151
- <Circle disabled={disabled} onPress={() => changePosition('whole')}>
152
- <OIcon
153
- src={theme.images.general.half_f}
154
- color={state.selected && state.position === 'whole' ? theme.colors.primary : '#cbcbcb'}
155
- width={20}
156
- height={20}
157
- />
158
- </Circle>
159
- <Circle disabled={disabled} onPress={() => changePosition('right')}>
160
- <OIcon
161
- src={theme.images.general.half_r}
162
- color={state.selected && state.position === 'right' ? theme.colors.primary : '#cbcbcb'}
163
- width={20}
164
- height={20}
165
- />
166
- </Circle>
167
- </>
168
- </PositionControl>
169
- )}
170
- {price > 0 && (
171
- <OText size={12} lineHeight={18} color={theme.colors.textSecondary} style={{ width: 70, maxWidth: 70 }}>
172
- + {parsePrice(price)}
173
- </OText>
174
- )}
175
- </Container>
186
+ {price > 0 && (
187
+ <OText size={12} lineHeight={18} color={theme.colors.textSecondary} style={{ width: 70, maxWidth: 70 }}>
188
+ + {parsePrice(price)}
189
+ </OText>
190
+ )}
191
+ </Container>
192
+ ) : (
193
+ <Placeholder>
194
+ <PlaceholderLine height={25} />
195
+ </Placeholder>
196
+ )}
176
197
  {showMessage && (
177
198
  <OText size={10} mLeft={4} mRight={4} style={{ flex: 1, textAlign: 'center' }} color={theme.colors.primary}>
178
199
  {`${t('OPTIONS_MAX_LIMIT', 'Maximum options to choose')}: ${option?.max}`}
179
200
  </OText>
180
201
  )}
181
- </View>
202
+ </InView>
182
203
  )
183
204
  }
184
205
 
@@ -12,7 +12,7 @@ export const ProfessionalPhoto = styled.ImageBackground`
12
12
 
13
13
  export const InfoWrapper = styled.View`
14
14
  margin-vertical: 30px;
15
- padding-horizontal: 40px;
15
+ padding-horizontal: 20px;
16
16
  `
17
17
 
18
18
  export const Divider = styled.View`
@@ -22,7 +22,7 @@ export const Divider = styled.View`
22
22
  `
23
23
 
24
24
  export const ScheduleWrapper = styled.View`
25
- padding-horizontal: 40px;
25
+ padding-horizontal: 20px;
26
26
  margin-top: 30px;
27
27
  `
28
28
 
@@ -43,4 +43,4 @@ export const CalendarWrapper = styled.View`
43
43
  border-color: ${(props: any) => props.theme.colors.backgroundGray200};
44
44
  border-radius: 7.6px;
45
45
  padding: 15px;
46
- `
46
+ `
@@ -19,7 +19,7 @@ import { useTheme } from 'styled-components/native';
19
19
  import { OButton, OIcon, OModal, OText } from '../shared'
20
20
  import { Placeholder, PlaceholderLine } from 'rn-placeholder'
21
21
  import { NotFoundSource } from '../NotFoundSource'
22
- import { View, StyleSheet, ScrollView, RefreshControl } from 'react-native'
22
+ import { View, StyleSheet, ScrollView, RefreshControl, Platform } from 'react-native'
23
23
  import { PromotionParams } from '../../types'
24
24
  import { Container } from '../../layouts/Container'
25
25
 
@@ -98,8 +98,6 @@ const PromotionsUI = (props: PromotionParams) => {
98
98
 
99
99
  return (
100
100
  <Container
101
- noPadding
102
- pt={20}
103
101
  refreshControl={
104
102
  <RefreshControl
105
103
  refreshing={refreshing}
@@ -112,7 +110,14 @@ const PromotionsUI = (props: PromotionParams) => {
112
110
  titleAlign={'center'}
113
111
  onActionLeft={() => navigation.goBack()}
114
112
  showCall={false}
115
- style={{ paddingVertical: 0, marginLeft: 20 }}
113
+ paddingTop={Platform.OS === 'ios' ? 20 : 10}
114
+ style={{ paddingVertical: 0 }}
115
+ btnStyle={{ paddingLeft: 0 }}
116
+ buttonProps={{
117
+ bgColor: theme.colors.white,
118
+ borderColor: theme.colors.white,
119
+ textStyle: { color: theme.colors.btnFont }
120
+ }}
116
121
  />
117
122
  <PromotionsContainer>
118
123
  <SearchBarContainer>
@@ -182,7 +187,7 @@ const PromotionsUI = (props: PromotionParams) => {
182
187
  title={``}
183
188
  onClose={() => setOpenModal(false)}
184
189
  >
185
- <View style={{ padding: 20 }}>
190
+ <ScrollView style={{ padding: 20 }}>
186
191
  <OText style={{ alignSelf: 'center', fontWeight: '700' }} mBottom={20}>
187
192
  {offerSelected?.name} / {t('VALUE_OF_OFFER', 'Value of offer')}: {offerSelected?.rate_type === 1 ? `${offerSelected?.rate}%` : `${parsePrice(offerSelected?.rate)}`}
188
193
  </OText>
@@ -210,10 +215,7 @@ const PromotionsUI = (props: PromotionParams) => {
210
215
  <OText style={{ marginTop: 10, marginBottom: 10 }}>
211
216
  {t('AVAILABLE_BUSINESSES_FOR_OFFER', 'Available businesses for this offer')}:
212
217
  </OText>
213
- <ScrollView
214
- showsVerticalScrollIndicator={false}
215
- style={{ height: '68%' }}
216
- >
218
+ <View style={{ marginBottom: 70 }}>
217
219
  {offerSelected?.businesses?.map((business: any) => {
218
220
  return (
219
221
  <SingleBusinessOffer key={business.id}>
@@ -244,8 +246,8 @@ const PromotionsUI = (props: PromotionParams) => {
244
246
  </SingleBusinessOffer>
245
247
  )
246
248
  })}
247
- </ScrollView>
248
- </View>
249
+ </View>
250
+ </ScrollView>
249
251
  </OModal>
250
252
  </PromotionsContainer>
251
253
  </Container>
@@ -2,8 +2,6 @@ import styled, { css } from 'styled-components/native'
2
2
 
3
3
  export const PromotionsContainer = styled.View`
4
4
  width: 100%;
5
- padding-left: 40px;
6
- padding-right: 40px;
7
5
  `
8
6
 
9
7
  export const WrapperSingleOffer = styled.View`
@@ -192,6 +192,11 @@ const ReviewDriverUI = (props: ReviewDriverParams) => {
192
192
  style={{ flexDirection: 'column', alignItems: 'flex-start' }}
193
193
  titleWrapStyle={{ paddingHorizontal: 0 }}
194
194
  titleStyle={{ marginRight: 0, marginLeft: 0 }}
195
+ buttonProps={{
196
+ bgColor: theme.colors.white,
197
+ borderColor: theme.colors.white,
198
+ textStyle: { color: theme.colors.btnFont }
199
+ }}
195
200
  />
196
201
  <DriverPhotoContainer>
197
202
  <View
@@ -1,7 +1,7 @@
1
1
  import styled from 'styled-components/native'
2
2
 
3
3
  export const ReviewDriverContainer = styled.ScrollView`
4
- padding: 20px 40px;
4
+ padding: 20px;
5
5
  margin-bottom: 100px;
6
6
  `
7
7
 
@@ -215,6 +215,11 @@ export const ReviewOrderUI = (props: ReviewOrderParams) => {
215
215
  style={{ flexDirection: 'column', alignItems: 'flex-start' }}
216
216
  titleWrapStyle={{ paddingHorizontal: 0 }}
217
217
  titleStyle={{ marginRight: 0, marginLeft: 0 }}
218
+ buttonProps={{
219
+ bgColor: theme.colors.white,
220
+ borderColor: theme.colors.white,
221
+ textStyle: { color: theme.colors.btnFont }
222
+ }}
218
223
  />
219
224
  <BusinessLogo isMulti={order?.business?.length > 1}>
220
225
  {typeof order?.logo === 'string' || !order?.logo ? (
@@ -1,7 +1,7 @@
1
1
  import styled from 'styled-components/native'
2
2
 
3
3
  export const ReviewOrderContainer = styled.ScrollView`
4
- padding: 20px 40px;
4
+ padding: 20px;
5
5
  margin-bottom: 100px;
6
6
  `
7
7
 
@@ -73,6 +73,11 @@ const ReviewProductsUI = (props: ReviewProductParams) => {
73
73
  style={{ flexDirection: 'column', alignItems: 'flex-start' }}
74
74
  titleWrapStyle={{ paddingHorizontal: 0 }}
75
75
  titleStyle={{ marginRight: 0, marginLeft: 0 }}
76
+ buttonProps={{
77
+ bgColor: theme.colors.white,
78
+ borderColor: theme.colors.white,
79
+ textStyle: { color: theme.colors.btnFont }
80
+ }}
76
81
  />
77
82
  {order?.products && order.products.length > 0 && order?.products.map(productsOrder => (
78
83
  productsOrder?.length ? productsOrder?.map((product: any, i: any) => !product?.deleted ?
@@ -1,7 +1,7 @@
1
1
  import styled from 'styled-components/native'
2
2
 
3
3
  export const ReviewProductsContainer = styled.ScrollView`
4
- padding: 20px 40px;
4
+ padding: 20px;
5
5
  margin-bottom: 100px;
6
6
  `
7
7
 
@@ -116,7 +116,7 @@ const ServiceFormUI = (props: ServiceFormParams) => {
116
116
  marginHorizontal: 0
117
117
  },
118
118
  professionalList: {
119
- paddingHorizontal: 40,
119
+ paddingHorizontal: 20,
120
120
  paddingVertical: 30,
121
121
  }
122
122
  })
@@ -11,7 +11,7 @@ export const ProfessionalPhoto = styled.ImageBackground`
11
11
  `;
12
12
 
13
13
  export const InfoWrapper = styled.View`
14
- padding-horizontal: 40px;
14
+ padding-horizontal: 20px;
15
15
  margin-vertical: 30px;
16
16
  `
17
17
 
@@ -22,7 +22,7 @@ export const Divider = styled.View`
22
22
  `
23
23
 
24
24
  export const ProfessionalWrapper = styled.View`
25
- padding-horizontal: 40px;
25
+ padding-horizontal: 20px;
26
26
  margin-top: 30px;
27
27
  `
28
28
 
@@ -41,10 +41,10 @@ export const ButtonWrapper = styled.View`
41
41
  align-items: center;
42
42
  flex-direction: row;
43
43
  padding-vertical: 13px;
44
- padding-horizontal: 40px;
44
+ padding-horizontal: 20px;
45
45
  margin-top: 30px;
46
46
  margin-bottom: 40px;
47
47
  width: 100%;
48
48
  border-top-width: 1px;
49
49
  border-top-color: ${(props: any) => props.theme.colors.backgroundGray200};
50
- `
50
+ `