ordering-ui-react-native 0.16.67 → 0.16.68-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 (206) hide show
  1. package/package.json +6 -5
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/ActiveOrders/index.tsx +61 -63
  4. package/src/components/ActiveOrders/styles.tsx +8 -14
  5. package/src/components/BusinessInformation/index.tsx +19 -4
  6. package/src/components/BusinessInformation/styles.tsx +2 -2
  7. package/src/components/BusinessProductsList/index.tsx +10 -10
  8. package/src/components/BusinessesListing/index.tsx +1 -1
  9. package/src/components/Checkout/index.tsx +2 -1
  10. package/src/components/LanguageSelector/index.tsx +21 -16
  11. package/src/components/Messages/index.tsx +2 -2
  12. package/src/components/NotificationSetting/index.tsx +85 -0
  13. package/src/components/OrdersOption/index.tsx +54 -56
  14. package/src/components/PaymentOptions/index.tsx +298 -345
  15. package/src/components/PaymentOptionsWebView/index.tsx +119 -120
  16. package/src/components/SingleProductReview/index.tsx +7 -4
  17. package/src/components/StripeElementsForm/index.tsx +25 -16
  18. package/src/components/VerifyPhone/styles.tsx +1 -2
  19. package/src/components/shared/OBottomPopup.tsx +6 -2
  20. package/src/components/shared/OToast.tsx +4 -4
  21. package/src/index.tsx +2 -0
  22. package/src/types/@fatnlazycat/react-native-recaptcha-v3/index.d.ts +1 -0
  23. package/src/utils/index.tsx +2 -1
  24. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +260 -238
  25. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +6 -4
  26. package/themes/business/src/components/BusinessController/index.tsx +2 -2
  27. package/themes/business/src/components/Chat/index.tsx +31 -31
  28. package/themes/business/src/components/DriverMap/index.tsx +7 -5
  29. package/themes/business/src/components/LoginForm/index.tsx +111 -74
  30. package/themes/business/src/components/MapView/index.tsx +14 -3
  31. package/themes/business/src/components/MessagesOption/index.tsx +11 -1
  32. package/themes/business/src/components/NewOrderNotification/index.tsx +31 -41
  33. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +70 -43
  34. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +3 -3
  35. package/themes/business/src/components/OrdersListManager/index.tsx +10 -3
  36. package/themes/business/src/components/OrdersOption/index.tsx +74 -76
  37. package/themes/business/src/components/OrdersOption/styles.tsx +5 -1
  38. package/themes/business/src/components/OrdersOptionBusiness/index.tsx +15 -1
  39. package/themes/business/src/components/OrdersOptionCity/index.tsx +15 -1
  40. package/themes/business/src/components/OrdersOptionDate/index.tsx +19 -6
  41. package/themes/business/src/components/OrdersOptionDelivery/index.tsx +15 -1
  42. package/themes/business/src/components/OrdersOptionDriver/index.tsx +15 -1
  43. package/themes/business/src/components/OrdersOptionPaymethod/index.tsx +15 -1
  44. package/themes/business/src/components/OrdersOptionStatus/index.tsx +10 -1
  45. package/themes/business/src/components/PreviousMessages/index.tsx +17 -18
  46. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +250 -0
  47. package/themes/business/src/components/PreviousOrders/OrdersGroupedItem.tsx +115 -0
  48. package/themes/business/src/components/PreviousOrders/index.tsx +440 -245
  49. package/themes/business/src/components/PreviousOrders/styles.tsx +31 -3
  50. package/themes/business/src/components/ProductItemAccordion/index.tsx +3 -2
  51. package/themes/business/src/components/ReviewCustomer/index.tsx +39 -15
  52. package/themes/business/src/components/shared/ODropDown.tsx +42 -8
  53. package/themes/business/src/components/shared/ODropDownCalendar.tsx +36 -7
  54. package/themes/business/src/components/shared/OLink.tsx +33 -13
  55. package/themes/business/src/components/shared/OText.tsx +8 -2
  56. package/themes/business/src/types/index.tsx +22 -10
  57. package/themes/business/src/utils/index.tsx +10 -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/BusinessesListing/index.tsx +2 -1
  62. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  63. package/themes/kiosk/src/components/LoginForm/index.tsx +121 -10
  64. package/themes/kiosk/src/components/LoginForm/styles.tsx +5 -0
  65. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  66. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  67. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  68. package/themes/kiosk/src/components/ProductForm/index.tsx +1 -14
  69. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  70. package/themes/kiosk/src/types/index.d.ts +2 -0
  71. package/themes/original/index.tsx +8 -0
  72. package/themes/original/src/components/AddressDetails/index.tsx +10 -8
  73. package/themes/original/src/components/AddressForm/index.tsx +153 -137
  74. package/themes/original/src/components/AddressList/index.tsx +18 -18
  75. package/themes/original/src/components/AddressList/styles.tsx +4 -2
  76. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  77. package/themes/original/src/components/BusinessBasicInformation/index.tsx +49 -33
  78. package/themes/original/src/components/BusinessController/index.tsx +101 -70
  79. package/themes/original/src/components/BusinessController/styles.tsx +14 -9
  80. package/themes/original/src/components/BusinessInformation/index.tsx +10 -31
  81. package/themes/original/src/components/BusinessItemAccordion/index.tsx +12 -6
  82. package/themes/original/src/components/BusinessListingSearch/BusinessControllerSkeletons/index.tsx +57 -0
  83. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/index.tsx +59 -0
  84. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/styles.tsx +13 -0
  85. package/themes/original/src/components/BusinessListingSearch/index.tsx +87 -142
  86. package/themes/original/src/components/BusinessListingSearch/styles.tsx +10 -12
  87. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/index.tsx +87 -0
  88. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/styles.tsx +12 -0
  89. package/themes/original/src/components/BusinessProductsList/index.tsx +54 -60
  90. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  91. package/themes/original/src/components/BusinessProductsListing/index.tsx +561 -477
  92. package/themes/original/src/components/BusinessProductsListing/styles.tsx +13 -12
  93. package/themes/original/src/components/BusinessTypeFilter/index.tsx +3 -2
  94. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +2 -1
  95. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +93 -98
  96. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -9
  97. package/themes/original/src/components/BusinessesListing/index.tsx +13 -8
  98. package/themes/original/src/components/Cart/index.tsx +63 -38
  99. package/themes/original/src/components/CartContent/index.tsx +80 -18
  100. package/themes/original/src/components/CartContent/styles.tsx +11 -1
  101. package/themes/original/src/components/Checkout/index.tsx +110 -114
  102. package/themes/original/src/components/Checkout/styles.tsx +4 -3
  103. package/themes/original/src/components/CitiesControl/index.tsx +89 -0
  104. package/themes/original/src/components/CitiesControl/styles.tsx +17 -0
  105. package/themes/original/src/components/DriverTips/index.tsx +47 -37
  106. package/themes/original/src/components/DriverTips/styles.tsx +2 -1
  107. package/themes/original/src/components/Favorite/index.tsx +7 -4
  108. package/themes/original/src/components/Favorite/styles.tsx +1 -1
  109. package/themes/original/src/components/FavoriteList/index.tsx +69 -45
  110. package/themes/original/src/components/FloatingButton/index.tsx +1 -2
  111. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  112. package/themes/original/src/components/GPSButton/index.tsx +20 -19
  113. package/themes/original/src/components/GPSButton/styles.ts +3 -3
  114. package/themes/original/src/components/GoogleMap/index.tsx +10 -1
  115. package/themes/original/src/components/Help/index.tsx +7 -7
  116. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +14 -20
  117. package/themes/original/src/components/HelpAccountAndPayment/styles.tsx +6 -0
  118. package/themes/original/src/components/HelpGuide/index.tsx +12 -11
  119. package/themes/original/src/components/HelpGuide/styles.tsx +5 -0
  120. package/themes/original/src/components/HelpOrder/index.tsx +12 -20
  121. package/themes/original/src/components/HelpOrder/styles.tsx +8 -1
  122. package/themes/original/src/components/LanguageSelector/index.tsx +19 -14
  123. package/themes/original/src/components/LoginForm/Otp/index.tsx +89 -73
  124. package/themes/original/src/components/LoginForm/Otp/styles.tsx +0 -1
  125. package/themes/original/src/components/LoginForm/index.tsx +98 -41
  126. package/themes/original/src/components/LottieAnimation/index.tsx +78 -0
  127. package/themes/original/src/components/MessageListing/index.tsx +7 -7
  128. package/themes/original/src/components/Messages/index.tsx +35 -20
  129. package/themes/original/src/components/MomentOption/index.tsx +17 -11
  130. package/themes/original/src/components/MultiCart/index.tsx +50 -0
  131. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +92 -93
  132. package/themes/original/src/components/MultiCheckout/index.tsx +158 -77
  133. package/themes/original/src/components/MultiOrdersDetails/index.tsx +60 -33
  134. package/themes/original/src/components/MyOrders/index.tsx +86 -20
  135. package/themes/original/src/components/NavBar/index.tsx +7 -6
  136. package/themes/original/src/components/NetworkError/index.tsx +5 -3
  137. package/themes/original/src/components/NotFoundSource/index.tsx +2 -1
  138. package/themes/original/src/components/Notifications/index.tsx +144 -0
  139. package/themes/original/src/components/Notifications/styles.tsx +20 -0
  140. package/themes/original/src/components/OrderDetails/index.tsx +114 -15
  141. package/themes/original/src/components/OrderDetails/styles.tsx +15 -2
  142. package/themes/original/src/components/OrderItAgain/index.tsx +75 -0
  143. package/themes/original/src/components/OrderItAgain/styles.tsx +10 -0
  144. package/themes/original/src/components/OrderProgress/index.tsx +77 -66
  145. package/themes/original/src/components/OrderProgress/styles.tsx +5 -0
  146. package/themes/original/src/components/OrderSummary/index.tsx +3 -36
  147. package/themes/original/src/components/OrderTypeSelector/index.tsx +13 -6
  148. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +94 -98
  149. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +3 -0
  150. package/themes/original/src/components/OrdersOption/index.tsx +97 -55
  151. package/themes/original/src/components/PaymentOptionStripe/styles.tsx +1 -1
  152. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  153. package/themes/original/src/components/PaymentOptions/index.tsx +1 -2
  154. package/themes/original/src/components/PhoneInputNumber/index.tsx +1 -1
  155. package/themes/original/src/components/PlaceSpot/index.tsx +249 -47
  156. package/themes/original/src/components/PlaceSpot/styles.tsx +0 -2
  157. package/themes/original/src/components/PreviousOrders/index.tsx +3 -2
  158. package/themes/original/src/components/ProductForm/index.tsx +212 -253
  159. package/themes/original/src/components/ProductForm/styles.tsx +5 -8
  160. package/themes/original/src/components/ProductItemAccordion/index.tsx +199 -128
  161. package/themes/original/src/components/ProductOptionSubOption/index.tsx +17 -9
  162. package/themes/original/src/components/ProductOptionSubOption/styles.tsx +0 -1
  163. package/themes/original/src/components/ProfessionalFilter/index.tsx +2 -1
  164. package/themes/original/src/components/ProfessionalProfile/index.tsx +19 -8
  165. package/themes/original/src/components/Promotions/index.tsx +234 -220
  166. package/themes/original/src/components/Promotions/styles.tsx +7 -2
  167. package/themes/original/src/components/ReviewDriver/index.tsx +3 -3
  168. package/themes/original/src/components/ReviewOrder/index.tsx +43 -11
  169. package/themes/original/src/components/ReviewOrder/styles.tsx +7 -0
  170. package/themes/original/src/components/ReviewProducts/index.tsx +8 -5
  171. package/themes/original/src/components/ReviewTrigger/index.tsx +27 -9
  172. package/themes/original/src/components/ReviewTrigger/styles.tsx +8 -1
  173. package/themes/original/src/components/ScheduleAccordion/index.tsx +68 -0
  174. package/themes/original/src/components/ScheduleAccordion/styles.tsx +14 -0
  175. package/themes/original/src/components/ServiceForm/index.tsx +328 -264
  176. package/themes/original/src/components/SignupForm/index.tsx +134 -89
  177. package/themes/original/src/components/SingleOrderCard/index.tsx +129 -54
  178. package/themes/original/src/components/SingleOrderCard/styles.tsx +10 -8
  179. package/themes/original/src/components/SingleProductCard/index.tsx +101 -85
  180. package/themes/original/src/components/SingleProductCard/styles.tsx +2 -9
  181. package/themes/original/src/components/SingleProductReview/index.tsx +38 -5
  182. package/themes/original/src/components/SingleProductReview/styles.tsx +12 -0
  183. package/themes/original/src/components/StripeCardsList/index.tsx +1 -1
  184. package/themes/original/src/components/StripeElementsForm/index.tsx +13 -2
  185. package/themes/original/src/components/UpsellingProducts/index.tsx +244 -215
  186. package/themes/original/src/components/UpsellingProducts/styles.tsx +12 -1
  187. package/themes/original/src/components/UserDetails/index.tsx +5 -3
  188. package/themes/original/src/components/UserFormDetails/index.tsx +6 -48
  189. package/themes/original/src/components/UserProfile/index.tsx +58 -35
  190. package/themes/original/src/components/UserProfile/styles.ts +17 -0
  191. package/themes/original/src/components/UserProfileForm/index.tsx +19 -28
  192. package/themes/original/src/components/UserProfileForm/styles.tsx +7 -0
  193. package/themes/original/src/components/WalletTransactions/index.tsx +76 -0
  194. package/themes/original/src/components/WalletTransactions/styles.tsx +13 -0
  195. package/themes/original/src/components/Wallets/index.tsx +176 -164
  196. package/themes/original/src/components/Wallets/styles.tsx +12 -8
  197. package/themes/original/src/components/shared/CardAnimation.tsx +47 -0
  198. package/themes/original/src/components/shared/HeaderTitle.tsx +8 -3
  199. package/themes/original/src/components/shared/OBottomPopup.tsx +6 -4
  200. package/themes/original/src/components/shared/OButton.tsx +9 -4
  201. package/themes/original/src/components/shared/OIcon.tsx +8 -1
  202. package/themes/original/src/components/shared/OInput.tsx +10 -1
  203. package/themes/original/src/layouts/Container.tsx +13 -9
  204. package/themes/original/src/types/index.tsx +55 -5
  205. package/themes/original/src/utils/index.tsx +103 -58
  206. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -7,7 +7,7 @@ import {
7
7
  useValidationFields,
8
8
  useSession,
9
9
  useToast,
10
- ToastType,
10
+ ToastType,
11
11
  MultiCheckout as MultiCheckoutController
12
12
  } from 'ordering-components/native'
13
13
  import { View, StyleSheet, Platform } from 'react-native'
@@ -18,9 +18,12 @@ import { OText, OIcon, OModal } from '../shared';
18
18
  import { getTypesText } from '../../utils';
19
19
  import { UserDetails } from '../UserDetails'
20
20
  import { AddressDetails } from '../AddressDetails'
21
+ import { MultiCart as MultiCartController } from '../MultiCart'
21
22
  import { MultiCartsPaymethodsAndWallets } from '../MultiCartsPaymethodsAndWallets'
22
23
  import { Cart } from '../Cart'
23
24
  import { FloatingButton } from '../FloatingButton'
25
+ import { DriverTips } from '../DriverTips'
26
+ import { DriverTipsContainer } from '../Cart/styles'
24
27
 
25
28
  import {
26
29
  ChContainer,
@@ -36,11 +39,11 @@ import {
36
39
  } from './styles'
37
40
 
38
41
  const mapConfigs = {
39
- mapZoom: 16,
40
- mapSize: {
41
- width: 640,
42
- height: 190
43
- }
42
+ mapZoom: 16,
43
+ mapSize: {
44
+ width: 640,
45
+ height: 190
46
+ }
44
47
  }
45
48
 
46
49
  const MultiCheckoutUI = (props: any) => {
@@ -53,74 +56,79 @@ const MultiCheckoutUI = (props: any) => {
53
56
  paymethodSelected,
54
57
  handleSelectPaymethod,
55
58
  handleSelectWallet,
56
- handlePaymethodDataChange
59
+ handlePaymethodDataChange,
60
+ cartUuid,
61
+ totalCartsFee,
62
+ cartGroup
57
63
  } = props
58
64
 
59
- const theme = useTheme();
65
+ const theme = useTheme();
60
66
  const styles = StyleSheet.create({
61
67
  pagePadding: {
62
- paddingLeft: 40,
63
- paddingRight: 40
64
- },
65
- wrapperNavbar: Platform.OS === 'ios'
66
- ? { paddingVertical: 0, paddingHorizontal: 40 }
67
- : { paddingVertical: 20, paddingHorizontal: 40 }
68
+ paddingLeft: 40,
69
+ paddingRight: 40
70
+ },
71
+ wrapperNavbar: { paddingHorizontal: 40 }
68
72
  })
69
73
 
70
- const [, { showToast }] = useToast();
74
+ const [, { showToast }] = useToast();
71
75
  const [, t] = useLanguage()
72
- const [{ configs }] = useConfig();
73
- const [{ parsePrice, parseDate }] = useUtils();
74
- const [{ options, carts, loading }, { confirmCart }] = useOrder();
75
- const [validationFields] = useValidationFields();
76
+ const [{ configs }] = useConfig();
77
+ const [{ parsePrice, parseDate }] = useUtils();
78
+ const [{ options, carts, loading }, { confirmCart }] = useOrder();
79
+ const [validationFields] = useValidationFields();
76
80
  const [{ user }] = useSession()
77
81
 
78
- const configTypes = configs?.order_types_allowed?.value.split('|').map((value: any) => Number(value)) || []
79
- const isPreOrder = configs?.preorder_status_enabled?.value === '1'
80
- const maximumCarts = 5
81
- const isDisablePlaceOrderButton = !(paymethodSelected?.paymethod_id || paymethodSelected?.wallet_id) || openCarts.length > maximumCarts
82
+ const configTypes = configs?.order_types_allowed?.value.split('|').map((value: any) => Number(value)) || []
83
+ const isPreOrder = configs?.preorder_status_enabled?.value === '1'
84
+ const isMultiDriverTips = theme?.header?.components?.layout?.type?.toLowerCase() === 'chew'
85
+ const isDisablePlaceOrderButton = !(paymethodSelected?.paymethod_id || paymethodSelected?.wallet_id) || (paymethodSelected?.paymethod?.gateway === 'stripe' && !paymethodSelected?.paymethod_data)
86
+ const walletCarts = (Object.values(carts)?.filter((cart: any) => cart?.products && cart?.products?.length && cart?.status !== 2 && cart?.valid_schedule && cart?.valid_products && cart?.valid_address && cart?.valid_maximum && cart?.valid_minimum && cart?.wallets) || null) || []
87
+ const driverTipsOptions = typeof configs?.driver_tip_options?.value === 'string'
88
+ ? JSON.parse(configs?.driver_tip_options?.value) || []
89
+ : configs?.driver_tip_options?.value || []
82
90
 
83
- const [isUserDetailsEdit, setIsUserDetailsEdit] = useState(false);
84
- const [phoneUpdate, setPhoneUpdate] = useState(false);
85
- const [userErrors, setUserErrors] = useState<any>([]);
91
+ const [isUserDetailsEdit, setIsUserDetailsEdit] = useState(false);
92
+ const [phoneUpdate, setPhoneUpdate] = useState(false);
93
+ const [userErrors, setUserErrors] = useState<any>([]);
86
94
  const handleMomentClick = () => {
87
- if (isPreOrder) {
88
- navigation.navigate('MomentOption')
89
- }
90
- }
95
+ if (isPreOrder) {
96
+ navigation.navigate('MomentOption')
97
+ }
98
+ }
91
99
 
92
100
  const checkValidationFields = () => {
93
- setUserErrors([])
94
- const errors = []
95
- const notFields = ['coupon', 'driver_tip', 'mobile_phone', 'address', 'zipcode', 'address_notes']
101
+ setUserErrors([])
102
+ const errors = []
103
+ const notFields = ['coupon', 'driver_tip', 'mobile_phone', 'address', 'zipcode', 'address_notes']
96
104
 
97
- Object.values(validationFields?.fields?.checkout).map((field: any) => {
98
- if (field?.required && !notFields.includes(field.code)) {
99
- if (!user[field?.code]) {
100
- errors.push(t(`VALIDATION_ERROR_${field.code.toUpperCase()}_REQUIRED`, `The field ${field?.name} is required`))
101
- }
102
- }
103
- })
105
+ Object.values(validationFields?.fields?.checkout).map((field: any) => {
106
+ if (field?.required && !notFields.includes(field.code)) {
107
+ if (!user[field?.code]) {
108
+ errors.push(t(`VALIDATION_ERROR_${field.code.toUpperCase()}_REQUIRED`, `The field ${field?.name} is required`))
109
+ }
110
+ }
111
+ })
104
112
 
105
- if (
106
- !user?.cellphone &&
107
- ((validationFields?.fields?.checkout?.cellphone?.enabled &&
108
- validationFields?.fields?.checkout?.cellphone?.required) ||
109
- configs?.verification_phone_required?.value === '1')
110
- ) {
111
- errors.push(t('VALIDATION_ERROR_MOBILE_PHONE_REQUIRED', 'The field Phone number is required'))
112
- }
113
+ if (
114
+ !user?.cellphone &&
115
+ ((validationFields?.fields?.checkout?.cellphone?.enabled &&
116
+ validationFields?.fields?.checkout?.cellphone?.required) ||
117
+ configs?.verification_phone_required?.value === '1')
118
+ ) {
119
+ errors.push(t('VALIDATION_ERROR_MOBILE_PHONE_REQUIRED', 'The field Phone number is required'))
120
+ }
113
121
 
114
- if (phoneUpdate) {
115
- errors.push(t('NECESSARY_UPDATE_COUNTRY_PHONE_CODE', 'It is necessary to update your phone number'))
116
- }
122
+ if (phoneUpdate) {
123
+ errors.push(t('NECESSARY_UPDATE_COUNTRY_PHONE_CODE', 'It is necessary to update your phone number'))
124
+ }
117
125
 
118
- setUserErrors(errors)
119
- }
126
+ setUserErrors(errors)
127
+ }
120
128
 
121
129
  const togglePhoneUpdate = (val: boolean) => {
122
- setPhoneUpdate(val)
123
- }
130
+ setPhoneUpdate(val)
131
+ }
124
132
 
125
133
  const handlePlaceOrder = () => {
126
134
  if (!userErrors.length) {
@@ -128,33 +136,30 @@ const MultiCheckoutUI = (props: any) => {
128
136
  return
129
137
  }
130
138
  let stringError = ''
131
- Object.values(userErrors).map((item: any, i: number) => {
132
- stringError += (i + 1) === userErrors.length ? `- ${item?.message || item}` : `- ${item?.message || item}\n`
133
- })
134
- showToast(ToastType.Error, stringError)
139
+ Object.values(userErrors).map((item: any, i: number) => {
140
+ stringError += (i + 1) === userErrors.length ? `- ${item?.message || item}` : `- ${item?.message || item}\n`
141
+ })
142
+ showToast(ToastType.Error, stringError)
135
143
  setIsUserDetailsEdit(true)
136
144
  }
137
145
 
138
146
  useEffect(() => {
139
- if (validationFields && validationFields?.fields?.checkout) {
140
- checkValidationFields()
141
- }
142
- }, [validationFields, user])
147
+ if (validationFields && validationFields?.fields?.checkout) {
148
+ checkValidationFields()
149
+ }
150
+ }, [validationFields, user])
143
151
 
144
152
  return (
145
153
  <>
146
154
  <Container noPadding>
147
155
  <View style={styles.wrapperNavbar}>
148
156
  <NavBar
149
- isVertical
150
157
  title={t('CHECKOUT', 'Checkout')}
151
158
  titleAlign={'center'}
152
159
  onActionLeft={() => navigation?.canGoBack() && navigation.goBack()}
153
160
  showCall={false}
161
+ paddingTop={Platform.OS === 'ios' ? 0 : 4}
154
162
  btnStyle={{ paddingLeft: 0 }}
155
- style={{ marginTop: Platform.OS === 'ios' ? 0 : 30 }}
156
- titleWrapStyle={{ paddingHorizontal: 0 }}
157
- titleStyle={{ marginRight: 0, marginLeft: 0 }}
158
163
  />
159
164
  </View>
160
165
  <ChContainer style={styles.pagePadding}>
@@ -224,10 +229,40 @@ const MultiCheckoutUI = (props: any) => {
224
229
  handleSelectPaymethod={handleSelectPaymethod}
225
230
  handleSelectWallet={handleSelectWallet}
226
231
  handlePaymethodDataChange={handlePaymethodDataChange}
232
+ cartUuid={cartUuid}
227
233
  />
228
234
  <View style={{ height: 8, backgroundColor: theme.colors.backgroundGray100, marginTop: 13, marginHorizontal: -40 }} />
229
235
  </ChSection>
230
236
 
237
+ {
238
+ isMultiDriverTips &&
239
+ options?.type === 1 &&
240
+ validationFields?.fields?.checkout?.driver_tip?.enabled &&
241
+ openCarts.every((cart: any) => cart.business_id && cart.status !== 2) &&
242
+ driverTipsOptions && driverTipsOptions?.length > 0 &&
243
+ (
244
+ <ChSection>
245
+ <DriverTipsContainer>
246
+ <OText size={14} lineHeight={20} color={theme.colors.textNormal}>
247
+ {t('DRIVER_TIPS', 'Driver Tips')}
248
+ </OText>
249
+ <DriverTips
250
+ isMulti
251
+ carts={openCarts}
252
+ businessIds={openCarts.map((cart: any) => cart.business_id)}
253
+ driverTipsOptions={driverTipsOptions}
254
+ isFixedPrice={parseInt(configs?.driver_tip_type?.value, 10) === 1}
255
+ isDriverTipUseCustom={!!parseInt(configs?.driver_tip_use_custom?.value, 10)}
256
+ driverTip={parseInt(configs?.driver_tip_type?.value, 10) === 1
257
+ ? openCarts[0]?.driver_tip
258
+ : openCarts[0]?.driver_tip_rate}
259
+ useOrderContext
260
+ />
261
+ </DriverTipsContainer>
262
+ <View style={{ height: 8, backgroundColor: theme.colors.backgroundGray100, marginTop: 13, marginHorizontal: -40 }} />
263
+ </ChSection>
264
+ )}
265
+
231
266
  <ChSection>
232
267
  <ChCarts>
233
268
  <CartsHeader>
@@ -241,20 +276,46 @@ const MultiCheckoutUI = (props: any) => {
241
276
  cart={cart}
242
277
  cartuuid={cart.uuid}
243
278
  isMultiCheckout
279
+ hideDeliveryFee={configs?.multi_business_checkout_show_combined_delivery_fee?.value === '1'}
280
+ hideDriverTip={configs?.multi_business_checkout_show_combined_driver_tip?.value === '1'}
244
281
  onNavigationRedirect={(route: string, params: any) => props.navigation.navigate(route, params)}
245
282
  />
246
283
  <View style={{ height: 8, backgroundColor: theme.colors.backgroundGray100, marginTop: 13, marginHorizontal: -40 }} />
247
284
  </React.Fragment>
248
285
  ))}
249
- {openCarts.length === 0 && (
286
+ {!cartGroup?.loading && openCarts.length === 0 && (
250
287
  <CCNotCarts>
251
288
  <OText size={24} style={{ textAlign: 'center' }}>
252
289
  {t('CARTS_NOT_FOUND', 'You don\'t have carts available')}
253
290
  </OText>
254
291
  </CCNotCarts>
255
292
  )}
293
+ {walletCarts.length > 0 && (
294
+ <OText size={14} color={theme.colors.danger5} style={{ marginVertical: 20 }}>
295
+ {t('WARNING_PARTIAL_WALLET_CARTS', 'Important: One or more carts can`t be completed due a partial payment with cash/points wallet and requires to be paid individually')}
296
+ </OText>
297
+ )}
256
298
  {openCarts.length > 0 && (
257
299
  <ChCartsTotal>
300
+ {totalCartsFee && configs?.multi_business_checkout_show_combined_delivery_fee?.value === '1' && (
301
+ <View style={{ flexDirection: 'row', justifyContent: 'space-between' }}>
302
+ <OText size={14} lineHeight={24} color={theme.colors.textNormal} weight={'400'}>
303
+ {t('TOTAL_DELIVERY_FEE', 'Total delivery fee')}
304
+ </OText>
305
+ <OText size={14} lineHeight={24} color={theme.colors.textNormal} weight={'400'}>{parsePrice(totalCartsFee)}</OText>
306
+ </View>
307
+ )}
308
+ {openCarts.reduce((sum: any, cart: any) => sum + cart?.driver_tip, 0) > 0 &&
309
+ configs?.multi_business_checkout_show_combined_driver_tip?.value === '1' && (
310
+ <View style={{ flexDirection: 'row', justifyContent: 'space-between' }}>
311
+ <OText size={14} lineHeight={24} color={theme.colors.textNormal} weight={'400'}>
312
+ {t('DRIVER_TIP', 'Driver tip')}
313
+ </OText>
314
+ <OText size={14} lineHeight={24} color={theme.colors.textNormal} weight={'400'}>
315
+ {parsePrice(openCarts.reduce((sum: any, cart: any) => sum + cart?.driver_tip, 0))}
316
+ </OText>
317
+ </View>
318
+ )}
258
319
  <View style={{ flexDirection: 'row', justifyContent: 'space-between' }}>
259
320
  <OText size={16} lineHeight={24} color={theme.colors.textNormal} weight={'500'}>
260
321
  {t('TOTAL_FOR_ALL_CARTS', 'Total for all Carts')}
@@ -266,23 +327,18 @@ const MultiCheckoutUI = (props: any) => {
266
327
  </OText>
267
328
  </ChCartsTotal>
268
329
  )}
269
- {openCarts.length > maximumCarts && (
270
- <OText size={14} color={theme.colors.danger5} style={{ marginVertical: 20 }}>
271
- {t('WARNING_MAXIMUM_CARTS', 'You can only pay for a maximum of 5 carts, please discard one or more to continue.')}
272
- </OText>
273
- )}
274
330
  </ChCarts>
275
331
  </ChSection>
276
332
  </ChContainer>
277
333
  </Container>
278
-
334
+
279
335
  <FloatingButton
280
- handleClick={() => handlePlaceOrder()}
336
+ handleClick={() => handlePlaceOrder()}
281
337
  isSecondaryBtn={isDisablePlaceOrderButton}
282
338
  disabled={isDisablePlaceOrderButton}
283
339
  btnText={placing ? t('PLACING', 'Placing') : t('PLACE_ORDER', 'Place Order')}
284
340
  btnRightValueShow
285
- btnRightValue={parsePrice(totalCartsPrice)}
341
+ btnRightValue={parsePrice(totalCartsPrice)}
286
342
  iosBottom={30}
287
343
  />
288
344
  </>
@@ -290,9 +346,34 @@ const MultiCheckoutUI = (props: any) => {
290
346
  }
291
347
 
292
348
  export const MultiCheckout = (props: any) => {
349
+ const [loadMultiCarts, setLoadMultiCarts] = useState(!!props.route?.params?.checkCarts)
350
+ const [cartUuid, setCartUuid] = useState('')
351
+
293
352
  const multiCheckoutProps = {
294
353
  ...props,
354
+ cartUuid: props.route?.params?.cartUuid ?? cartUuid,
295
355
  UIComponent: MultiCheckoutUI
296
356
  }
297
- return <MultiCheckoutController {...multiCheckoutProps} />
357
+
358
+ const multiCartProps = {
359
+ ...props,
360
+ handleOnRedirectMultiCheckout: (cartUuid: string) => {
361
+ setCartUuid(cartUuid)
362
+ setLoadMultiCarts(false)
363
+ },
364
+ handleOnRedirectCheckout: (cartUuid: string) => {
365
+ props.navigation.navigate('CheckoutNavigator', {
366
+ screen: 'CheckoutPage',
367
+ cartUuid: cartUuid
368
+ })
369
+ }
370
+ }
371
+
372
+ return (
373
+ loadMultiCarts ? (
374
+ <MultiCartController {...multiCartProps} />
375
+ ) : (
376
+ <MultiCheckoutController {...multiCheckoutProps} />
377
+ )
378
+ )
298
379
  }
@@ -1,11 +1,11 @@
1
1
  import React, { useEffect } from 'react'
2
- import { useLanguage, useUtils, useToast, ToastType, MultiOrdersDetails as MultiOrdersDetailsController } from 'ordering-components/native'
3
- import { View, StyleSheet, BackHandler } from 'react-native'
2
+ import { useLanguage, useUtils, useToast, ToastType, MultiOrdersDetails as MultiOrdersDetailsController } from 'ordering-components/native'
3
+ import { View, StyleSheet, BackHandler, TouchableOpacity } from 'react-native'
4
4
  import { useTheme } from 'styled-components/native'
5
5
  import { OText, OButton } from '../shared'
6
- import { Container } from '../../layouts/Container'
7
6
  import { Placeholder, PlaceholderLine, Fade } from 'rn-placeholder'
8
7
  import { SingleOrderCard } from './SingleOrderCard'
8
+ import AntDesignIcon from 'react-native-vector-icons/AntDesign'
9
9
 
10
10
  import {
11
11
  OrdersDetailsContainer,
@@ -18,6 +18,7 @@ import {
18
18
  OrdersSummary,
19
19
  BorderLine
20
20
  } from './styles'
21
+ import { NotFoundSource } from '../NotFoundSource'
21
22
 
22
23
  export const MultiOrdersDetailsUI = (props: any) => {
23
24
  const {
@@ -29,20 +30,26 @@ export const MultiOrdersDetailsUI = (props: any) => {
29
30
  } = props
30
31
 
31
32
  const theme = useTheme()
32
- const styles = StyleSheet.create({
33
+ const styles = StyleSheet.create({
33
34
  btnBackArrow: {
34
- borderWidth: 0,
35
- backgroundColor: theme.colors.clear,
36
- shadowColor: theme.colors.clear,
37
- padding: 0,
35
+ borderWidth: 0,
36
+ backgroundColor: theme.colors.clear,
37
+ shadowColor: theme.colors.clear,
38
+ padding: 0,
38
39
  marginLeft: -20
39
- },
40
- })
41
-
40
+ },
41
+ })
42
+
42
43
  const { loading, orders, error } = props.ordersList
43
44
  const [, t] = useLanguage()
44
45
  const [{ parsePrice, parseNumber, parseDate }] = useUtils();
45
- const [, { showToast }] = useToast();
46
+ const [, { showToast }] = useToast();
47
+ const [{ configs }] = useConfig()
48
+
49
+ const isTaxIncludedOnPrice = orders.every((_order: any) => _order.taxes?.length ? _order.taxes?.every((_tax: any) => _tax.type === 1) : true)
50
+ const progressBarStyle = configs.multi_business_checkout_progress_bar_style?.value
51
+ const showBarInOrder = ['group', 'both']
52
+ const showBarInIndividual = ['individual', 'both']
46
53
 
47
54
  const walletName: any = {
48
55
  cash: {
@@ -60,7 +67,7 @@ export const MultiOrdersDetailsUI = (props: any) => {
60
67
  }
61
68
  navigation.navigate('BusinessList');
62
69
  return true
63
- }
70
+ }
64
71
 
65
72
  const handleGoToOrderDetails = (uuid: any) => {
66
73
  navigation.navigate('OrderDetails', { orderId: uuid })
@@ -68,7 +75,7 @@ export const MultiOrdersDetailsUI = (props: any) => {
68
75
 
69
76
  useEffect(() => {
70
77
  if (error) {
71
- showToast(ToastType.Error, error)
78
+ showToast(ToastType.Error, error)
72
79
  }
73
80
  }, [error])
74
81
 
@@ -83,11 +90,14 @@ export const MultiOrdersDetailsUI = (props: any) => {
83
90
  <OrdersDetailsContainer keyboardShouldPersistTaps="handled" contentContainerStyle={{ paddingHorizontal: 40 }}>
84
91
  <View style={{ flexDirection: 'row' }}>
85
92
  <OButton
86
- imgLeftSrc={theme.images.general.arrow_left}
87
93
  imgRightSrc={null}
88
94
  style={styles.btnBackArrow}
89
95
  onClick={() => handleArrowBack()}
90
- imgLeftStyle={{ tintColor: theme.colors.textNormal, width: 16 }}
96
+ icon={AntDesignIcon}
97
+ iconProps={{
98
+ name: 'arrowleft',
99
+ size: 26
100
+ }}
91
101
  />
92
102
  </View>
93
103
  <Header>
@@ -192,23 +202,27 @@ export const MultiOrdersDetailsUI = (props: any) => {
192
202
  </Row>
193
203
  ))}
194
204
  <BorderLine />
195
- <Row>
196
- <OText size={12} lineHeight={18} weight={'400'} color={theme.colors.textNormal}>
197
- {t('TOTAL_BEFORE_TAX', 'Total before tax')}:
198
- </OText>
199
- <OText size={12} lineHeight={18} weight={'400'} color={theme.colors.textNormal}>
200
- {parsePrice(ordersSummary?.subtotal)}
201
- </OText>
202
- </Row>
203
- <Row>
204
- <OText size={12} lineHeight={18} weight={'400'} color={theme.colors.textNormal}>
205
- {t('ESTIMATED_TAX_TO_BE_COLLECTED', 'Estimated tax to be collected')}:
206
- </OText>
207
- <OText size={12} lineHeight={18} weight={'400'} color={theme.colors.textNormal}>
208
- {parsePrice(ordersSummary?.tax)}
209
- </OText>
210
- </Row>
211
- <BorderLine />
205
+ {!isTaxIncludedOnPrice && (
206
+ <>
207
+ <Row>
208
+ <OText size={12} lineHeight={18} weight={'400'} color={theme.colors.textNormal}>
209
+ {t('TOTAL_BEFORE_TAX', 'Total before tax')}:
210
+ </OText>
211
+ <OText size={12} lineHeight={18} weight={'400'} color={theme.colors.textNormal}>
212
+ {parsePrice(ordersSummary?.subtotal)}
213
+ </OText>
214
+ </Row>
215
+ <Row>
216
+ <OText size={12} lineHeight={18} weight={'400'} color={theme.colors.textNormal}>
217
+ {t('ESTIMATED_TAX_TO_BE_COLLECTED', 'Estimated tax to be collected')}:
218
+ </OText>
219
+ <OText size={12} lineHeight={18} weight={'400'} color={theme.colors.textNormal}>
220
+ {parsePrice(ordersSummary?.tax)}
221
+ </OText>
222
+ </Row>
223
+ <BorderLine />
224
+ </>
225
+ )}
212
226
  <Row style={{ marginTop: 10 }}>
213
227
  <OText size={14} lineHeight={18} weight={'500'} color={theme.colors.textNormal}>
214
228
  {t('PAYMENT_TOTAL', 'Payment total')}:
@@ -244,6 +258,19 @@ export const MultiOrdersDetailsUI = (props: any) => {
244
258
  ))}
245
259
  </>
246
260
  )}
261
+ {!loading && (error || orders?.length === 0) && (
262
+ error?.includes('ERROR_ACCESS_EXPIRED') ? (
263
+ <NotFoundSource
264
+ content={t(error[0], 'Sorry, the order has expired.')}
265
+ />
266
+ ) : (
267
+ <NotFoundSource
268
+ content={t('NOT_FOUND_ORDER', theme?.defaultLanguages?.NOT_FOUND_ORDER || 'Sorry, we couldn\'t find the requested order.')}
269
+ btnTitle={t('ORDERS_REDIRECT', theme?.defaultLanguages?.ORDERS_REDIRECT || 'Go to Orders')}
270
+ onClickButton={navigation.navigate('BusinessList')}
271
+ />
272
+ )
273
+ )}
247
274
  <Divider />
248
275
  </OrdersDetailsContainer>
249
276
  )