ordering-ui-react-native 0.21.31-testing → 0.21.32-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 (215) hide show
  1. package/package.json +7 -6
  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 +4 -0
  10. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +9 -2
  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/Chat/index.tsx +23 -14
  18. package/themes/business/src/components/DriverMap/index.tsx +36 -23
  19. package/themes/business/src/components/FloatingButton/index.tsx +34 -31
  20. package/themes/business/src/components/GoogleMap/index.tsx +15 -8
  21. package/themes/business/src/components/Home/index.tsx +5 -1
  22. package/themes/business/src/components/LanguageSelector/index.tsx +1 -2
  23. package/themes/business/src/components/LanguageSelector/lang_country.json +515 -70
  24. package/themes/business/src/components/MapView/index.tsx +16 -9
  25. package/themes/business/src/components/MessagesOption/index.tsx +2 -1
  26. package/themes/business/src/components/NewOrderNotification/index.tsx +163 -115
  27. package/themes/business/src/components/OrderDetails/Business.tsx +50 -2
  28. package/themes/business/src/components/OrderDetails/Delivery.tsx +23 -11
  29. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +61 -54
  30. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +52 -20
  31. package/themes/business/src/components/OrderDetails/usePrinterCommands.tsx +220 -0
  32. package/themes/business/src/components/OrderDetailsLogistic/index.tsx +6 -1
  33. package/themes/business/src/components/OrderSummary/index.tsx +240 -76
  34. package/themes/business/src/components/OrdersListManager/index.tsx +7 -2
  35. package/themes/business/src/components/OrdersListManager/utils.tsx +1 -1
  36. package/themes/business/src/components/OrdersOption/index.tsx +125 -130
  37. package/themes/business/src/components/PhoneInputNumber/index.tsx +8 -5
  38. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +36 -38
  39. package/themes/business/src/components/PreviousOrders/OrderList.tsx +18 -13
  40. package/themes/business/src/components/PreviousOrders/index.tsx +80 -66
  41. package/themes/business/src/components/PreviousOrders/styles.tsx +10 -0
  42. package/themes/business/src/components/PrinterSettings/index.tsx +279 -0
  43. package/themes/business/src/components/PrinterSettings/styles.tsx +17 -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 +107 -53
  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/hooks/useLocation.tsx +5 -4
  56. package/themes/business/src/types/index.tsx +15 -2
  57. package/themes/business/src/utils/index.tsx +5 -0
  58. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  59. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  60. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  61. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  62. package/themes/kiosk/src/components/LoginForm/index.tsx +7 -4
  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 +9 -4
  68. package/themes/original/src/components/AddressDetails/index.tsx +20 -10
  69. package/themes/original/src/components/AddressForm/index.tsx +27 -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 +2 -3
  87. package/themes/original/src/components/BusinessProductsCategories/index.tsx +1 -1
  88. package/themes/original/src/components/BusinessProductsList/index.tsx +3 -3
  89. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  90. package/themes/original/src/components/BusinessProductsListing/index.tsx +35 -19
  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 +69 -0
  96. package/themes/original/src/components/BusinessesListing/Layout/Original/FlatListBusinessListHeader.tsx +406 -0
  97. package/themes/original/src/components/BusinessesListing/Layout/Original/FlatListBusinessListing.tsx +76 -0
  98. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +24 -404
  99. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -1
  100. package/themes/original/src/components/BusinessesListing/index.tsx +0 -1
  101. package/themes/original/src/components/Cart/index.tsx +32 -9
  102. package/themes/original/src/components/CartContent/index.tsx +96 -58
  103. package/themes/original/src/components/CartStoresListing/styles.tsx +2 -2
  104. package/themes/original/src/components/Checkout/index.tsx +160 -63
  105. package/themes/original/src/components/Checkout/styles.tsx +17 -0
  106. package/themes/original/src/components/CitiesControl/styles.tsx +1 -1
  107. package/themes/original/src/components/DatePicker/index.tsx +33 -0
  108. package/themes/original/src/components/DatePicker/styles.tsx +20 -0
  109. package/themes/original/src/components/Favorite/index.tsx +9 -9
  110. package/themes/original/src/components/Favorite/styles.tsx +0 -2
  111. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  112. package/themes/original/src/components/ForgotPasswordForm/index.tsx +5 -0
  113. package/themes/original/src/components/GPSButton/index.tsx +1 -1
  114. package/themes/original/src/components/GiftCard/GiftCardOrdersList/index.tsx +64 -0
  115. package/themes/original/src/components/GiftCard/GiftCardOrdersList/styles.tsx +8 -0
  116. package/themes/original/src/components/GiftCard/GiftCardUI/index.tsx +8 -3
  117. package/themes/original/src/components/GiftCard/PurchaseGiftCard/index.tsx +36 -3
  118. package/themes/original/src/components/GiftCard/PurchaseGiftCard/styles.tsx +1 -1
  119. package/themes/original/src/components/GiftCard/RedeemGiftCard/index.tsx +67 -4
  120. package/themes/original/src/components/GiftCard/RedeemGiftCard/styles.tsx +1 -1
  121. package/themes/original/src/components/GiftCard/SendGiftCard/index.tsx +2 -2
  122. package/themes/original/src/components/GiftCard/SendGiftCard/styles.tsx +1 -1
  123. package/themes/original/src/components/GiftCard/SingleGiftCard/index.tsx +101 -0
  124. package/themes/original/src/components/GiftCard/SingleGiftCard/styles.tsx +4 -0
  125. package/themes/original/src/components/GiftCard/VerticalGiftCardOrdersLayout/index.tsx +83 -0
  126. package/themes/original/src/components/GiftCard/VerticalGiftCardOrdersLayout/styles.tsx +9 -0
  127. package/themes/original/src/components/GoogleMap/index.tsx +6 -5
  128. package/themes/original/src/components/Help/index.tsx +7 -0
  129. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +5 -0
  130. package/themes/original/src/components/HelpGuide/index.tsx +5 -0
  131. package/themes/original/src/components/HelpOrder/index.tsx +5 -0
  132. package/themes/original/src/components/HighestRatedBusinesses/index.tsx +2 -2
  133. package/themes/original/src/components/HighestRatedBusinesses/styles.tsx +1 -1
  134. package/themes/original/src/components/Home/index.tsx +2 -1
  135. package/themes/original/src/components/LastOrder/index.tsx +2 -1
  136. package/themes/original/src/components/LastOrders/index.tsx +2 -1
  137. package/themes/original/src/components/LoginForm/Otp/index.tsx +4 -16
  138. package/themes/original/src/components/LoginForm/index.tsx +8 -3
  139. package/themes/original/src/components/MessageListing/index.tsx +6 -0
  140. package/themes/original/src/components/Messages/index.tsx +9 -7
  141. package/themes/original/src/components/Messages/styles.tsx +1 -1
  142. package/themes/original/src/components/MomentOption/index.tsx +19 -4
  143. package/themes/original/src/components/MultiCart/index.tsx +1 -1
  144. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +1 -0
  145. package/themes/original/src/components/MultiCheckout/index.tsx +208 -21
  146. package/themes/original/src/components/MultiCheckout/styles.tsx +17 -0
  147. package/themes/original/src/components/MultiOrdersDetails/index.tsx +20 -15
  148. package/themes/original/src/components/MyOrders/index.tsx +28 -28
  149. package/themes/original/src/components/NavBar/index.tsx +5 -1
  150. package/themes/original/src/components/NetworkError/index.tsx +2 -3
  151. package/themes/original/src/components/NetworkError/styles.tsx +2 -2
  152. package/themes/original/src/components/Notifications/index.tsx +9 -8
  153. package/themes/original/src/components/Notifications/styles.tsx +0 -1
  154. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +1 -1
  155. package/themes/original/src/components/OrderDetails/index.tsx +709 -665
  156. package/themes/original/src/components/OrderDetails/styles.tsx +24 -8
  157. package/themes/original/src/components/OrderProgress/index.tsx +24 -4
  158. package/themes/original/src/components/OrderProgress/styles.tsx +1 -1
  159. package/themes/original/src/components/OrderSummary/index.tsx +3 -1
  160. package/themes/original/src/components/OrderTypeSelector/index.tsx +10 -6
  161. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/styles.tsx +1 -1
  162. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/styles.tsx +1 -1
  163. package/themes/original/src/components/OrdersOption/index.tsx +3 -5
  164. package/themes/original/src/components/OrdersOption/styles.tsx +1 -1
  165. package/themes/original/src/components/PaymentOptionCard/index.tsx +4 -2
  166. package/themes/original/src/components/PaymentOptionStripe/styles.tsx +3 -0
  167. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  168. package/themes/original/src/components/PaymentOptions/index.tsx +51 -6
  169. package/themes/original/src/components/PreviousOrders/index.tsx +2 -0
  170. package/themes/original/src/components/ProductForm/ActionButton.tsx +122 -0
  171. package/themes/original/src/components/ProductForm/ExtraOptions.tsx +56 -0
  172. package/themes/original/src/components/ProductForm/index.tsx +67 -155
  173. package/themes/original/src/components/ProductItemAccordion/index.tsx +54 -44
  174. package/themes/original/src/components/ProductItemAccordion/styles.tsx +3 -4
  175. package/themes/original/src/components/ProductOptionSubOption/index.tsx +105 -91
  176. package/themes/original/src/components/ProfessionalProfile/styles.tsx +3 -3
  177. package/themes/original/src/components/Promotions/index.tsx +13 -11
  178. package/themes/original/src/components/Promotions/styles.tsx +0 -2
  179. package/themes/original/src/components/ReviewDriver/index.tsx +5 -0
  180. package/themes/original/src/components/ReviewDriver/styles.tsx +1 -1
  181. package/themes/original/src/components/ReviewOrder/index.tsx +5 -0
  182. package/themes/original/src/components/ReviewOrder/styles.tsx +1 -1
  183. package/themes/original/src/components/ReviewProducts/index.tsx +5 -0
  184. package/themes/original/src/components/ReviewProducts/styles.tsx +1 -1
  185. package/themes/original/src/components/ServiceForm/index.tsx +2 -2
  186. package/themes/original/src/components/ServiceForm/styles.tsx +4 -4
  187. package/themes/original/src/components/Sessions/index.tsx +5 -0
  188. package/themes/original/src/components/SignupForm/index.tsx +66 -59
  189. package/themes/original/src/components/SingleOrderCard/index.tsx +3 -2
  190. package/themes/original/src/components/SingleProductCard/index.tsx +2 -2
  191. package/themes/original/src/components/SingleProductCard/styles.tsx +0 -3
  192. package/themes/original/src/components/StripeCardsList/index.tsx +17 -36
  193. package/themes/original/src/components/StripeElementsForm/index.tsx +74 -59
  194. package/themes/original/src/components/StripeElementsForm/naked.tsx +47 -0
  195. package/themes/original/src/components/UpsellingProducts/UpsellingContent.tsx +170 -0
  196. package/themes/original/src/components/UpsellingProducts/UpsellingLayout.tsx +86 -0
  197. package/themes/original/src/components/UpsellingProducts/index.tsx +15 -199
  198. package/themes/original/src/components/UpsellingProducts/styles.tsx +19 -0
  199. package/themes/original/src/components/UserFormDetails/index.tsx +123 -75
  200. package/themes/original/src/components/UserFormDetails/styles.tsx +7 -0
  201. package/themes/original/src/components/UserProfile/index.tsx +3 -2
  202. package/themes/original/src/components/UserProfileForm/index.tsx +5 -0
  203. package/themes/original/src/components/WalletTransactions/styles.tsx +1 -0
  204. package/themes/original/src/components/Wallets/index.tsx +8 -4
  205. package/themes/original/src/components/Wallets/styles.tsx +1 -1
  206. package/themes/original/src/components/WebsocketStatus/index.tsx +172 -0
  207. package/themes/original/src/components/WebsocketStatus/styles.tsx +28 -0
  208. package/themes/original/src/components/shared/HeaderTitle.tsx +1 -1
  209. package/themes/original/src/components/shared/OButton.tsx +5 -5
  210. package/themes/original/src/components/shared/OInput.tsx +1 -4
  211. package/themes/original/src/components/shared/OModal.tsx +12 -14
  212. package/themes/original/src/layouts/Container.tsx +5 -3
  213. package/themes/original/src/types/index.tsx +1 -0
  214. package/themes/original/src/utils/index.tsx +12 -1
  215. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -1,4 +1,4 @@
1
- import React, { useState, useEffect } from 'react'
1
+ import React, { useState, useEffect, useCallback } from 'react'
2
2
  import {
3
3
  useLanguage,
4
4
  useConfig,
@@ -10,11 +10,12 @@ import {
10
10
  ToastType,
11
11
  MultiCheckout as MultiCheckoutController
12
12
  } from 'ordering-components/native'
13
- import { View, StyleSheet, Platform } from 'react-native'
13
+ import { View, StyleSheet, Platform, ScrollView, SafeAreaView } from 'react-native'
14
14
  import { useTheme } from 'styled-components/native';
15
+ import IconAntDesign from 'react-native-vector-icons/AntDesign';
15
16
  import { Container } from '../../layouts/Container';
16
17
  import NavBar from '../NavBar';
17
- import { OText, OIcon, OModal } from '../shared';
18
+ import { OText, OIcon, OModal, OButton } from '../shared';
18
19
  import { getTypesText } from '../../utils';
19
20
  import { UserDetails } from '../UserDetails'
20
21
  import { AddressDetails } from '../AddressDetails'
@@ -26,8 +27,12 @@ import { DriverTips } from '../DriverTips'
26
27
  import { CouponControl } from '../CouponControl';
27
28
  import { DriverTipsContainer } from '../Cart/styles'
28
29
  import { OSTable, OSCoupon } from '../OrderSummary/styles';
30
+ import { SignupForm } from '../SignupForm'
31
+ import { LoginForm } from '../LoginForm'
29
32
 
30
33
  import {
34
+ TopHeader,
35
+ TopActions,
31
36
  ChContainer,
32
37
  ChSection,
33
38
  ChHeader,
@@ -71,10 +76,18 @@ const MultiCheckoutUI = (props: any) => {
71
76
  const theme = useTheme();
72
77
  const styles = StyleSheet.create({
73
78
  pagePadding: {
74
- paddingLeft: 40,
75
- paddingRight: 40
79
+ paddingLeft: 20,
80
+ paddingRight: 20
81
+ },
82
+ wrapperNavbar: {
83
+ paddingHorizontal: 20,
84
+ backgroundColor: theme?.colors?.white,
85
+ borderWidth: 0
86
+ },
87
+ detailWrapper: {
88
+ paddingHorizontal: 20,
89
+ width: '100%'
76
90
  },
77
- wrapperNavbar: { paddingHorizontal: 40 }
78
91
  })
79
92
 
80
93
  const [, { showToast }] = useToast();
@@ -83,7 +96,7 @@ const MultiCheckoutUI = (props: any) => {
83
96
  const [{ parsePrice, parseDate }] = useUtils();
84
97
  const [{ options, carts, loading }, { confirmCart }] = useOrder();
85
98
  const [validationFields] = useValidationFields();
86
- const [{ user }] = useSession()
99
+ const [{ user }, { login }] = useSession()
87
100
 
88
101
  const configTypes = configs?.order_types_allowed?.value.split('|').map((value: any) => Number(value)) || []
89
102
  const isPreOrder = configs?.preorder_status_enabled?.value === '1'
@@ -130,13 +143,20 @@ const MultiCheckoutUI = (props: any) => {
130
143
  ?.reduce((sum: any, cart: any) => sum + clearAmount((cart?.subtotal + getIncludedTaxes(cart)) * accumulationRateBusiness(cart?.business_id)), 0)
131
144
  ?.toFixed(configs.format_number_decimal_length?.value ?? 2)
132
145
 
146
+ const [showTitle, setShowTitle] = useState(false)
133
147
  const [isUserDetailsEdit, setIsUserDetailsEdit] = useState(false);
134
148
  const [phoneUpdate, setPhoneUpdate] = useState(false);
135
149
  const [userErrors, setUserErrors] = useState<any>([]);
150
+ const [cartsOpened, setCartsOpened] = useState([])
136
151
  const [placeByMethodPay, setPlaceByMethodPay] = useState(false)
152
+ const [allowedGuest, setAllowedGuest] = useState(false)
153
+ const [isOpen, setIsOpen] = useState(false)
154
+ const [requiredFields, setRequiredFields] = useState<any>([])
155
+ const stripePaymethods: any = ['stripe', 'stripe_direct', 'stripe_connect', 'stripe_redirect']
156
+ const [openModal, setOpenModal] = useState({ login: false, signup: false, isGuest: false })
137
157
  const [methodPaySupported, setMethodPaySupported] = useState({ enabled: false, message: null, loading: true })
138
158
  const methodsPay = ['global_google_pay', 'global_apple_pay']
139
- const isDisablePlaceOrderButton = cartGroup?.loading || (!(paymethodSelected?.paymethod_id || paymethodSelected?.wallet_id) && cartGroup?.result?.balance > 0) ||
159
+ const isDisablePlaceOrderButton = cartGroup?.loading || placing || (!(paymethodSelected?.paymethod_id || paymethodSelected?.wallet_id) && cartGroup?.result?.balance > 0) ||
140
160
  (paymethodSelected?.paymethod?.gateway === 'stripe' && !paymethodSelected?.paymethod_data) ||
141
161
  walletCarts.length > 0
142
162
  || (methodsPay.includes(paymethodSelected?.gateway) && (!methodPaySupported.enabled || methodPaySupported.loading)) || openCarts?.length === 0
@@ -151,11 +171,12 @@ const MultiCheckoutUI = (props: any) => {
151
171
  setUserErrors([])
152
172
  const errors = []
153
173
  const notFields = ['coupon', 'driver_tip', 'mobile_phone', 'address', 'zipcode', 'address_notes']
174
+ const _requiredFields: any = []
154
175
 
155
176
  Object.values(validationFields?.fields?.checkout).map((field: any) => {
156
177
  if (field?.required && !notFields.includes(field.code)) {
157
178
  if (!user[field?.code]) {
158
- errors.push(t(`VALIDATION_ERROR_${field.code.toUpperCase()}_REQUIRED`, `The field ${field?.name} is required`))
179
+ _requiredFields.push(field?.code)
159
180
  }
160
181
  }
161
182
  })
@@ -166,8 +187,9 @@ const MultiCheckoutUI = (props: any) => {
166
187
  validationFields?.fields?.checkout?.cellphone?.required) ||
167
188
  configs?.verification_phone_required?.value === '1')
168
189
  ) {
169
- errors.push(t('VALIDATION_ERROR_MOBILE_PHONE_REQUIRED', 'The field Phone number is required'))
190
+ _requiredFields.push('cellphone')
170
191
  }
192
+ setRequiredFields(_requiredFields)
171
193
 
172
194
  if (phoneUpdate) {
173
195
  errors.push(t('NECESSARY_UPDATE_COUNTRY_PHONE_CODE', 'It is necessary to update your phone number'))
@@ -181,10 +203,19 @@ const MultiCheckoutUI = (props: any) => {
181
203
  }
182
204
 
183
205
  const handlePlaceOrder = (confirmPayment?: any) => {
184
- if (!userErrors.length) {
206
+ if (stripePaymethods.includes(paymethodSelected?.gateway) && user?.guest_id) {
207
+ setOpenModal({ ...openModal, signup: true, isGuest: true })
208
+ return
209
+ }
210
+
211
+ if (!userErrors.length && (!requiredFields?.length || allowedGuest)) {
185
212
  handleGroupPlaceOrder && handleGroupPlaceOrder(confirmPayment)
186
213
  return
187
214
  }
215
+ if (requiredFields?.length) {
216
+ setIsOpen(true)
217
+ return
218
+ }
188
219
  let stringError = ''
189
220
  Object.values(userErrors).map((item: any, i: number) => {
190
221
  stringError += (i + 1) === userErrors.length ? `- ${item?.message || item}` : `- ${item?.message || item}\n`
@@ -193,6 +224,36 @@ const MultiCheckoutUI = (props: any) => {
193
224
  setIsUserDetailsEdit(true)
194
225
  }
195
226
 
227
+ const handlePlaceOrderAsGuest = () => {
228
+ setIsOpen(false)
229
+ handleGroupPlaceOrder && handleGroupPlaceOrder()
230
+ }
231
+
232
+ const handleSuccessSignup = (user: any) => {
233
+ login({
234
+ user,
235
+ token: user?.session?.access_token
236
+ })
237
+ openModal?.isGuest && handlePlaceOrderAsGuest()
238
+ setOpenModal({ ...openModal, signup: false, isGuest: false })
239
+ }
240
+
241
+ const handleSuccessLogin = (user: any) => {
242
+ if (user) setOpenModal({ ...openModal, login: false })
243
+ }
244
+
245
+ const handleScroll = ({ nativeEvent: { contentOffset } }: any) => {
246
+ setShowTitle(contentOffset.y > 30)
247
+ }
248
+
249
+ const handleGoBack = () => {
250
+ if (navigation?.canGoBack()) {
251
+ navigation.goBack()
252
+ } else {
253
+ navigation.navigate('BottomTab', { screen: 'Cart' })
254
+ }
255
+ }
256
+
196
257
  useEffect(() => {
197
258
  if (validationFields && validationFields?.fields?.checkout) {
198
259
  checkValidationFields()
@@ -231,17 +292,58 @@ const MultiCheckoutUI = (props: any) => {
231
292
  }
232
293
  }, [paymethodSelected])
233
294
 
295
+ const changeActiveState = useCallback((isClosed: boolean, uuid: string) => {
296
+ const isActive = cartsOpened?.includes?.(uuid)
297
+ if (isActive || !isClosed) {
298
+ setCartsOpened(cartsOpened?.filter?.((_uuid) => _uuid !== uuid))
299
+ } else {
300
+ setCartsOpened([
301
+ ...cartsOpened,
302
+ uuid
303
+ ])
304
+ }
305
+ }, [cartsOpened])
306
+
234
307
  return (
235
308
  <>
236
- <Container noPadding>
309
+ <SafeAreaView style={{ backgroundColor: theme.colors.backgroundPage }}>
310
+ <View style={styles.wrapperNavbar}>
311
+ <TopHeader>
312
+ <>
313
+ <TopActions onPress={() => handleGoBack()}>
314
+ <IconAntDesign
315
+ name='arrowleft'
316
+ size={26}
317
+ />
318
+ </TopActions>
319
+ {showTitle && (
320
+ <OText
321
+ size={16}
322
+ style={{ flex: 1, textAlign: 'center', right: 15 }}
323
+ weight={Platform.OS === 'ios' ? '600' : 'bold'}
324
+ numberOfLines={2}
325
+ ellipsizeMode='tail'
326
+ >
327
+ {t('CHECKOUT', 'Checkout')}
328
+ </OText>
329
+ )}
330
+ </>
331
+ </TopHeader>
332
+ </View>
333
+ </SafeAreaView>
334
+ <Container pt={0} noPadding onScroll={handleScroll} showsVerticalScrollIndicator={false}>
237
335
  <View style={styles.wrapperNavbar}>
238
336
  <NavBar
337
+ hideArrowLeft
239
338
  title={t('CHECKOUT', 'Checkout')}
240
339
  titleAlign={'center'}
241
340
  onActionLeft={() => navigation?.canGoBack() && navigation.goBack()}
242
341
  showCall={false}
243
342
  paddingTop={Platform.OS === 'ios' ? 0 : 4}
244
343
  btnStyle={{ paddingLeft: 0 }}
344
+ titleWrapStyle={{ paddingHorizontal: 0 }}
345
+ titleStyle={{ marginRight: 0, marginLeft: 0 }}
346
+ style={{ marginTop: 20 }}
245
347
  />
246
348
  </View>
247
349
  <ChContainer style={styles.pagePadding}>
@@ -285,15 +387,45 @@ const MultiCheckoutUI = (props: any) => {
285
387
 
286
388
  <ChSection>
287
389
  <ChUserDetails>
288
- <UserDetails
289
- isUserDetailsEdit={isUserDetailsEdit}
290
- useValidationFields
291
- useDefualtSessionManager
292
- useSessionUser
293
- isCheckout
294
- phoneUpdate={phoneUpdate}
295
- togglePhoneUpdate={togglePhoneUpdate}
296
- />
390
+ {(user?.guest_id && !allowedGuest) ? (
391
+ <View>
392
+ <OText size={14} numberOfLines={1} ellipsizeMode='tail' color={theme.colors.textNormal}>
393
+ {t('CUSTOMER_DETAILS', 'Customer details')}
394
+ </OText>
395
+ <OButton
396
+ text={t('SIGN_UP', 'Sign up')}
397
+ textStyle={{ color: theme.colors.white }}
398
+ style={{ borderRadius: 7.6, marginTop: 20 }}
399
+ onClick={() => setOpenModal({ ...openModal, signup: true })}
400
+ />
401
+ <OButton
402
+ text={t('LOGIN', 'Login')}
403
+ textStyle={{ color: theme.colors.primary }}
404
+ bgColor={theme.colors.white}
405
+ borderColor={theme.colors.primary}
406
+ style={{ borderRadius: 7.6, marginTop: 20 }}
407
+ onClick={() => setOpenModal({ ...openModal, login: true })}
408
+ />
409
+ <OButton
410
+ text={t('CONTINUE_AS_GUEST', 'Continue as guest')}
411
+ textStyle={{ color: theme.colors.black }}
412
+ bgColor={theme.colors.white}
413
+ borderColor={theme.colors.black}
414
+ style={{ borderRadius: 7.6, marginTop: 20 }}
415
+ onClick={() => setAllowedGuest(true)}
416
+ />
417
+ </View>
418
+ ) : (
419
+ <UserDetails
420
+ isUserDetailsEdit={isUserDetailsEdit}
421
+ useValidationFields
422
+ useDefualtSessionManager
423
+ useSessionUser
424
+ isCheckout
425
+ phoneUpdate={phoneUpdate}
426
+ togglePhoneUpdate={togglePhoneUpdate}
427
+ />
428
+ )}
297
429
  </ChUserDetails>
298
430
  <View style={{ height: 8, backgroundColor: theme.colors.backgroundGray100, marginHorizontal: -40 }} />
299
431
  </ChSection>
@@ -403,6 +535,9 @@ const MultiCheckoutUI = (props: any) => {
403
535
  hideDriverTip={configs?.multi_business_checkout_show_combined_driver_tip?.value === '1'}
404
536
  onNavigationRedirect={(route: string, params: any) => props.navigation.navigate(route, params)}
405
537
  businessConfigs={cart?.business?.configs}
538
+ cartsOpened={cartsOpened}
539
+ changeActiveState={changeActiveState}
540
+ isActive={cartsOpened?.includes?.(cart?.uuid)}
406
541
  />
407
542
  {openCarts.length > 1 && (
408
543
  <View style={{ height: 8, backgroundColor: theme.colors.backgroundGray100, marginTop: 13, marginHorizontal: -40 }} />
@@ -484,6 +619,58 @@ const MultiCheckoutUI = (props: any) => {
484
619
  </OText>
485
620
  )}
486
621
  </ChContainer>
622
+ <OModal
623
+ open={openModal.signup}
624
+ onClose={() => setOpenModal({ ...openModal, signup: false, isGuest: false })}
625
+ >
626
+ <ScrollView style={{ paddingHorizontal: 20, width: '100%' }}>
627
+ <SignupForm
628
+ handleSuccessSignup={handleSuccessSignup}
629
+ isGuest
630
+ signupButtonText={t('SIGNUP', 'Signup')}
631
+ useSignupByEmail
632
+ useChekoutFileds
633
+ />
634
+ </ScrollView>
635
+ </OModal>
636
+ <OModal
637
+ open={openModal.login}
638
+ onClose={() => setOpenModal({ ...openModal, login: false })}
639
+ >
640
+ <ScrollView style={{ paddingHorizontal: 20, width: '100%' }}>
641
+ <LoginForm
642
+ handleSuccessLogin={handleSuccessLogin}
643
+ isGuest
644
+ loginButtonText={t('LOGIN', 'Login')}
645
+ loginButtonBackground={theme.colors.primary}
646
+ />
647
+ </ScrollView>
648
+ </OModal>
649
+ <OModal
650
+ open={isOpen}
651
+ onClose={() => setIsOpen(false)}
652
+ >
653
+ <View style={styles.detailWrapper}>
654
+ <UserDetails
655
+ isUserDetailsEdit
656
+ useValidationFields
657
+ useDefualtSessionManager
658
+ useSessionUser
659
+ isCheckout
660
+ isEdit
661
+ phoneUpdate={phoneUpdate}
662
+ togglePhoneUpdate={togglePhoneUpdate}
663
+ requiredFields={requiredFields}
664
+ hideUpdateButton
665
+ handlePlaceOrderAsGuest={handlePlaceOrderAsGuest}
666
+ onClose={() => {
667
+ setIsOpen(false)
668
+ handlePlaceOrder()
669
+ }}
670
+ setIsOpen={setIsOpen}
671
+ />
672
+ </View>
673
+ </OModal>
487
674
  </Container>
488
675
 
489
676
  <FloatingButton
@@ -1,5 +1,22 @@
1
1
  import styled from 'styled-components/native'
2
2
 
3
+ export const TopActions = styled.TouchableOpacity`
4
+ height: 60px;
5
+ justify-content: center;
6
+ min-width: 30px;
7
+ padding-right: 15px;
8
+ `;
9
+
10
+ export const TopHeader = styled.View`
11
+ width: 100%;
12
+ flex-direction: row;
13
+ align-items: center;
14
+ justify-content: space-between;
15
+ z-index: 1;
16
+ height: 60px;
17
+ min-height: 60px;
18
+ `
19
+
3
20
  export const ChContainer = styled.View`
4
21
  margin-bottom: 60px;
5
22
  `
@@ -53,6 +53,7 @@ export const MultiOrdersDetailsUI = (props: any) => {
53
53
  const [{ configs }] = useConfig()
54
54
 
55
55
  const isTaxIncludedOnPrice = orders.every((_order: any) => _order.taxes?.length ? _order.taxes?.every((_tax: any) => _tax.type === 1) : true)
56
+ const deliveryType = orders.find((order: any) => order.delivery_type)?.delivery_type
56
57
  const progressBarStyle = configs.multi_business_checkout_progress_bar_style?.value
57
58
  const showBarInOrder = ['group', 'both']
58
59
  const showBarInIndividual = ['individual', 'both']
@@ -71,7 +72,7 @@ export const MultiOrdersDetailsUI = (props: any) => {
71
72
  navigation?.canGoBack() && navigation.goBack();
72
73
  return;
73
74
  }
74
- navigation.navigate('BusinessList');
75
+ navigation.navigate('BottomTab');
75
76
  return true
76
77
  }
77
78
 
@@ -93,7 +94,7 @@ export const MultiOrdersDetailsUI = (props: any) => {
93
94
  }, [])
94
95
 
95
96
  return (
96
- <OrdersDetailsContainer keyboardShouldPersistTaps="handled" contentContainerStyle={{ paddingHorizontal: 40 }}>
97
+ <OrdersDetailsContainer keyboardShouldPersistTaps="handled" contentContainerStyle={{ paddingHorizontal: 20 }}>
97
98
  <View style={{ flexDirection: 'row' }}>
98
99
  <OButton
99
100
  imgRightSrc={null}
@@ -171,19 +172,23 @@ export const MultiOrdersDetailsUI = (props: any) => {
171
172
  ))}
172
173
  </Section>
173
174
  <Divider />
174
- <Section>
175
- <OText size={16} lineHeight={24} weight={'500'} color={theme.colors.textNormal} mBottom={20}>
176
- {t('DELIVERYA_V21', 'Delivery address')}
177
- </OText>
178
- {loading ? (
179
- <PlaceholderLine height={18} noMargin style={{ borderRadius: 2 }} />
180
- ) : (
181
- <OText size={12} lineHeight={18} color={theme.colors.textNormal} mBottom={2}>
182
- {customer?.address}
183
- </OText>
184
- )}
185
- </Section>
186
- <Divider />
175
+ {deliveryType === 1 && (
176
+ <>
177
+ <Section>
178
+ <OText size={16} lineHeight={24} weight={'500'} color={theme.colors.textNormal} mBottom={20}>
179
+ {t('DELIVERYA_V21', 'Delivery address')}
180
+ </OText>
181
+ {loading ? (
182
+ <PlaceholderLine height={18} noMargin style={{ borderRadius: 2 }} />
183
+ ) : (
184
+ <OText size={12} lineHeight={18} color={theme.colors.textNormal} mBottom={2}>
185
+ {customer?.address}
186
+ </OText>
187
+ )}
188
+ </Section>
189
+ <Divider />
190
+ </>
191
+ )}
187
192
  {loading ? (
188
193
  <Placeholder Animation={Fade}>
189
194
  <PlaceholderLine
@@ -2,13 +2,14 @@ import React, { useState, useEffect } from 'react'
2
2
  import { useLanguage } from 'ordering-components/native';
3
3
  import { View, StyleSheet, RefreshControl, Platform } from 'react-native';
4
4
  import AntDesignIcon from 'react-native-vector-icons/AntDesign'
5
-
5
+ import { GiftCardOrdersList } from '../GiftCard/GiftCardOrdersList'
6
6
  import { OrdersOption } from '../OrdersOption'
7
7
  import { HeaderTitle, OButton, OText } from '../shared'
8
8
  import { ScrollView } from 'react-native-gesture-handler';
9
9
  import { Tab } from './styles'
10
10
  import { useTheme } from 'styled-components/native';
11
11
  import { Container } from '../../layouts/Container';
12
+ import NavBar from '../NavBar'
12
13
 
13
14
  export const MyOrders = (props: any) => {
14
15
  const {
@@ -40,7 +41,8 @@ export const MyOrders = (props: any) => {
40
41
  const MyOrdersMenu = [
41
42
  { key: 'orders', value: t('ORDERS', 'Orders'), disabled: false },
42
43
  { key: 'business', value: t('BUSINESS', 'Business'), disabled: hideBusinessTab },
43
- { key: 'products', value: t('PRODUCTS', 'Products'), disabled: hideProductsTab }
44
+ { key: 'products', value: t('PRODUCTS', 'Products'), disabled: hideProductsTab },
45
+ { key: 'giftCards', value: t('GIFT_CARD', 'Gift card'), disabled: false }
44
46
  ]
45
47
  const goToBack = () => navigation?.canGoBack() && navigation.goBack()
46
48
 
@@ -87,34 +89,25 @@ export const MyOrders = (props: any) => {
87
89
  display: 'flex',
88
90
  flexDirection: 'row',
89
91
  alignItems: 'center',
90
- paddingHorizontal: isChewLayout ? 20 : 40,
92
+ paddingHorizontal: 20,
91
93
  },
92
94
  ...props.titleStyle
93
95
  }}>
94
96
  {!props.hideBackBtn && (!isChewLayout || (isChewLayout && hideOrdersTheme)) && (
95
- <OButton
96
- imgLeftStyle={{ width: 18 }}
97
- imgRightSrc={null}
98
- style={{
99
- borderWidth: 0,
100
- width: 26,
101
- height: 26,
102
- backgroundColor: '#FFF',
103
- borderColor: '#FFF',
104
- shadowColor: '#FFF',
105
- paddingLeft: 0,
106
- paddingRight: 0,
107
- marginTop: 30,
108
- }}
109
- onClick={goToBack}
110
- icon={AntDesignIcon}
111
- iconProps={{
112
- name: 'arrowleft',
113
- size: 26
97
+ <NavBar
98
+ title={t('MY_ORDERS', 'My Orders')}
99
+ titleAlign={'center'}
100
+ onActionLeft={goToBack}
101
+ showCall={false}
102
+ paddingTop={30}
103
+ btnStyle={{ paddingLeft: 0 }}
104
+ buttonProps={{
105
+ bgColor: theme.colors.white,
106
+ borderColor: theme.colors.white,
107
+ textStyle: { color: theme.colors.btnFont }
114
108
  }}
115
109
  />
116
110
  )}
117
- <HeaderTitle ph={10} text={t('MY_ORDERS', 'My Orders')} />
118
111
  </View>
119
112
  )}
120
113
  {!hideOrders && !isChewLayout && !showNavbar && (
@@ -124,7 +117,7 @@ export const MyOrders = (props: any) => {
124
117
  <ScrollView
125
118
  horizontal
126
119
  style={{ ...styles.container, borderBottomWidth: 1 }}
127
- contentContainerStyle={{ paddingHorizontal: !!businessesSearchList ? 0 : isChewLayout ? 20 : 40 }}
120
+ contentContainerStyle={{ paddingHorizontal: !!businessesSearchList ? 0 : 20 }}
128
121
  showsHorizontalScrollIndicator={false}
129
122
  scrollEventThrottle={16}
130
123
  >
@@ -148,7 +141,7 @@ export const MyOrders = (props: any) => {
148
141
  )}
149
142
  {selectedOption === 'orders' && (
150
143
  <>
151
- <View style={{ paddingHorizontal: isChewLayout ? 20 : 40 }}>
144
+ <View style={{ paddingHorizontal: 20 }}>
152
145
  <OrdersOption
153
146
  {...props}
154
147
  preOrders
@@ -158,7 +151,7 @@ export const MyOrders = (props: any) => {
158
151
  refreshOrders={refreshOrders}
159
152
  />
160
153
  </View>
161
- <View style={{ paddingHorizontal: isChewLayout ? 20 : 40 }}>
154
+ <View style={{ paddingHorizontal: 20 }}>
162
155
  <OrdersOption
163
156
  {...props}
164
157
  activeOrders
@@ -168,7 +161,7 @@ export const MyOrders = (props: any) => {
168
161
  refreshOrders={refreshOrders}
169
162
  />
170
163
  </View>
171
- <View style={{ paddingHorizontal: isChewLayout ? 20 : 40 }}>
164
+ <View style={{ paddingHorizontal: 20 }}>
172
165
  <OrdersOption
173
166
  {...props}
174
167
  ordersLength={ordersLength}
@@ -215,7 +208,14 @@ export const MyOrders = (props: any) => {
215
208
  setOrdersLength={setOrdersLength}
216
209
  />
217
210
  )}
211
+
212
+ {selectedOption === 'giftCards' && (
213
+ <View style={{ paddingHorizontal: 20 }}>
214
+ <GiftCardOrdersList
215
+ onNavigationRedirect={props?.onNavigationRedirect}
216
+ />
217
+ </View>
218
+ )}
218
219
  </Container>
219
-
220
220
  )
221
221
  }
@@ -1,3 +1,6 @@
1
+
2
+
3
+
1
4
  import * as React from 'react'
2
5
  import styled, { useTheme } from 'styled-components/native'
3
6
  import { OButton, OIcon, OText } from '../shared'
@@ -44,6 +47,7 @@ interface Props {
44
47
  isVertical?: boolean,
45
48
  noMargin?: any
46
49
  hideArrowLeft?: boolean
50
+ buttonProps?: any
47
51
  }
48
52
 
49
53
  const NavBar = (props: Props) => {
@@ -64,6 +68,7 @@ const NavBar = (props: Props) => {
64
68
  <Wrapper style={{ paddingTop: props.paddingTop, ...{ flexDirection: props.isVertical ? 'column' : 'row', alignItems: props.isVertical ? 'flex-start' : 'center' }, ...props.style }}>
65
69
  {!props.hideArrowLeft && (
66
70
  <OButton
71
+ {...props.buttonProps}
67
72
  iconProps={{
68
73
  name: 'arrowleft',
69
74
  size: 26
@@ -92,7 +97,6 @@ const NavBar = (props: Props) => {
92
97
  <TitleWrapper style={{ ...{ paddingHorizontal: props.isVertical ? 0 : 10 }, ...props.titleWrapStyle }}>
93
98
  <OText
94
99
  size={20}
95
- lineHeight={36}
96
100
  weight={Platform.OS === 'ios' ? '600' : 'bold'}
97
101
  style={
98
102
  {
@@ -1,5 +1,5 @@
1
1
  import React from 'react'
2
- import { useLanguage, useOrderingTheme } from 'ordering-components/native'
2
+ import { useLanguage } from 'ordering-components/native'
3
3
  import { Dimensions } from 'react-native'
4
4
  import RNRestart from 'react-native-restart'
5
5
  import { OText, OIcon, OButton } from '../shared'
@@ -16,8 +16,7 @@ export const NetworkError = (props: NoNetworkParams) => {
16
16
  } = props
17
17
  const theme = useTheme()
18
18
  const [, t] = useLanguage()
19
- const [orderingTheme] = useOrderingTheme()
20
- const urlimage = orderingTheme?.theme?.no_internet?.components?.image
19
+ const urlimage = theme?.no_internet?.components?.image
21
20
  const noNetworkImage = image || theme.images.general.noNetwork
22
21
  const deviceWidth = Dimensions.get('screen').width
23
22
 
@@ -2,10 +2,10 @@ import styled from 'styled-components/native'
2
2
 
3
3
  export const Container = styled.View`
4
4
  flex: 1;
5
- padding: 20px 40px;
5
+ padding: 20px;
6
6
  `
7
7
  export const ImageContainer = styled.View`
8
8
  flex: 1;
9
9
  align-items: center;
10
10
  justify-content: center;
11
- `
11
+ `
@@ -3,7 +3,6 @@ import {
3
3
  UserFormDetails as NotificationsController,
4
4
  useLanguage,
5
5
  useSession,
6
- useOrderingTheme,
7
6
  useToast,
8
7
  ToastType,
9
8
  } from 'ordering-components/native'
@@ -28,7 +27,6 @@ const NotificationsUI = (props: any) => {
28
27
  const [{ user: userSession }] = useSession()
29
28
  const [, t] = useLanguage();
30
29
  const [, { showToast }] = useToast();
31
- const [orderingTheme] = useOrderingTheme()
32
30
 
33
31
  const user = userData || userSession
34
32
 
@@ -45,8 +43,8 @@ const NotificationsUI = (props: any) => {
45
43
  })
46
44
 
47
45
  const goToBack = () => navigation?.canGoBack() && navigation.goBack()
48
- const showCustomerPromotions = !orderingTheme?.theme?.profile?.components?.promotions?.hidden
49
- const showNotifications = !orderingTheme?.theme?.profile?.components?.notification_settings?.hidden
46
+ const showCustomerPromotions = !theme?.profile?.components?.promotions?.hidden
47
+ const showNotifications = !theme?.profile?.components?.notification_settings?.hidden
50
48
 
51
49
  const handleEditNotifications = (key: any, value: any) => {
52
50
  setNotificationsList({
@@ -75,10 +73,13 @@ const NotificationsUI = (props: any) => {
75
73
  titleAlign={'center'}
76
74
  onActionLeft={goToBack}
77
75
  showCall={false}
78
- style={{
79
- paddingHorizontal: 40,
80
- paddingVertical: 0,
81
- }}
76
+ style={{ paddingVertical: 0 }}
77
+ btnStyle={{ paddingLeft: 0 }}
78
+ buttonProps={{
79
+ bgColor: theme.colors.white,
80
+ borderColor: theme.colors.white,
81
+ textStyle: { color: theme.colors.btnFont }
82
+ }}
82
83
  />
83
84
  {showCustomerPromotions && showNotifications && (
84
85
  <>
@@ -9,7 +9,6 @@ export const Container = styled.ScrollView`
9
9
  export const NotificationsGroupSwitchWrapper = styled.View`
10
10
  flex-grow: 1;
11
11
  justify-content: space-between;
12
- padding: 0 20px;
13
12
  `
14
13
 
15
14
  export const SwitchWrapper = styled.View`