ordering-ui-react-native 0.16.62 → 0.16.63-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 +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 +40 -32
  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 +12 -1
  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 +76 -77
  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 +24 -11
  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 +53 -37
  78. package/themes/original/src/components/BusinessController/index.tsx +106 -48
  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 +55 -61
  90. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  91. package/themes/original/src/components/BusinessProductsListing/index.tsx +175 -94
  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 +98 -103
  96. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -9
  97. package/themes/original/src/components/BusinessesListing/index.tsx +14 -8
  98. package/themes/original/src/components/Cart/index.tsx +77 -24
  99. package/themes/original/src/components/Cart/styles.tsx +4 -0
  100. package/themes/original/src/components/CartContent/index.tsx +77 -18
  101. package/themes/original/src/components/CartContent/styles.tsx +11 -1
  102. package/themes/original/src/components/Checkout/index.tsx +110 -114
  103. package/themes/original/src/components/Checkout/styles.tsx +4 -3
  104. package/themes/original/src/components/CitiesControl/index.tsx +89 -0
  105. package/themes/original/src/components/CitiesControl/styles.tsx +17 -0
  106. package/themes/original/src/components/DriverTips/index.tsx +4 -4
  107. package/themes/original/src/components/DriverTips/styles.tsx +2 -1
  108. package/themes/original/src/components/Favorite/index.tsx +7 -4
  109. package/themes/original/src/components/Favorite/styles.tsx +1 -1
  110. package/themes/original/src/components/FavoriteList/index.tsx +69 -45
  111. package/themes/original/src/components/FloatingButton/index.tsx +1 -2
  112. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  113. package/themes/original/src/components/GPSButton/index.tsx +20 -19
  114. package/themes/original/src/components/GPSButton/styles.ts +3 -3
  115. package/themes/original/src/components/GoogleMap/index.tsx +10 -1
  116. package/themes/original/src/components/Help/index.tsx +7 -7
  117. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +14 -20
  118. package/themes/original/src/components/HelpAccountAndPayment/styles.tsx +6 -0
  119. package/themes/original/src/components/HelpGuide/index.tsx +12 -11
  120. package/themes/original/src/components/HelpGuide/styles.tsx +5 -0
  121. package/themes/original/src/components/HelpOrder/index.tsx +12 -20
  122. package/themes/original/src/components/HelpOrder/styles.tsx +8 -1
  123. package/themes/original/src/components/LanguageSelector/index.tsx +19 -14
  124. package/themes/original/src/components/LoginForm/Otp/index.tsx +89 -73
  125. package/themes/original/src/components/LoginForm/Otp/styles.tsx +0 -1
  126. package/themes/original/src/components/LoginForm/index.tsx +98 -41
  127. package/themes/original/src/components/LottieAnimation/index.tsx +78 -0
  128. package/themes/original/src/components/MessageListing/index.tsx +7 -7
  129. package/themes/original/src/components/Messages/index.tsx +35 -20
  130. package/themes/original/src/components/MomentOption/index.tsx +17 -11
  131. package/themes/original/src/components/MultiCart/index.tsx +50 -0
  132. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +92 -93
  133. package/themes/original/src/components/MultiCheckout/index.tsx +96 -76
  134. package/themes/original/src/components/MultiOrdersDetails/index.tsx +34 -16
  135. package/themes/original/src/components/MyOrders/index.tsx +89 -25
  136. package/themes/original/src/components/NavBar/index.tsx +7 -6
  137. package/themes/original/src/components/NetworkError/index.tsx +5 -3
  138. package/themes/original/src/components/NotFoundSource/index.tsx +2 -1
  139. package/themes/original/src/components/Notifications/index.tsx +144 -0
  140. package/themes/original/src/components/Notifications/styles.tsx +20 -0
  141. package/themes/original/src/components/OrderDetails/index.tsx +114 -15
  142. package/themes/original/src/components/OrderDetails/styles.tsx +15 -2
  143. package/themes/original/src/components/OrderItAgain/index.tsx +75 -0
  144. package/themes/original/src/components/OrderItAgain/styles.tsx +10 -0
  145. package/themes/original/src/components/OrderProgress/index.tsx +77 -66
  146. package/themes/original/src/components/OrderProgress/styles.tsx +5 -0
  147. package/themes/original/src/components/OrderSummary/index.tsx +3 -36
  148. package/themes/original/src/components/OrderTypeSelector/index.tsx +13 -6
  149. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +94 -98
  150. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +3 -0
  151. package/themes/original/src/components/OrdersOption/index.tsx +97 -55
  152. package/themes/original/src/components/PaymentOptionStripe/styles.tsx +1 -1
  153. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  154. package/themes/original/src/components/PaymentOptions/index.tsx +1 -2
  155. package/themes/original/src/components/PhoneInputNumber/index.tsx +1 -1
  156. package/themes/original/src/components/PlaceSpot/index.tsx +249 -47
  157. package/themes/original/src/components/PlaceSpot/styles.tsx +0 -2
  158. package/themes/original/src/components/PreviousOrders/index.tsx +3 -2
  159. package/themes/original/src/components/ProductForm/index.tsx +226 -257
  160. package/themes/original/src/components/ProductForm/styles.tsx +5 -8
  161. package/themes/original/src/components/ProductItemAccordion/index.tsx +199 -128
  162. package/themes/original/src/components/ProductOptionSubOption/index.tsx +17 -9
  163. package/themes/original/src/components/ProductOptionSubOption/styles.tsx +0 -1
  164. package/themes/original/src/components/ProfessionalFilter/index.tsx +2 -1
  165. package/themes/original/src/components/ProfessionalProfile/index.tsx +19 -8
  166. package/themes/original/src/components/Promotions/index.tsx +234 -220
  167. package/themes/original/src/components/Promotions/styles.tsx +7 -2
  168. package/themes/original/src/components/ReviewDriver/index.tsx +3 -3
  169. package/themes/original/src/components/ReviewOrder/index.tsx +43 -11
  170. package/themes/original/src/components/ReviewOrder/styles.tsx +7 -0
  171. package/themes/original/src/components/ReviewProducts/index.tsx +8 -5
  172. package/themes/original/src/components/ReviewTrigger/index.tsx +27 -9
  173. package/themes/original/src/components/ReviewTrigger/styles.tsx +8 -1
  174. package/themes/original/src/components/ScheduleAccordion/index.tsx +68 -0
  175. package/themes/original/src/components/ScheduleAccordion/styles.tsx +14 -0
  176. package/themes/original/src/components/ServiceForm/index.tsx +328 -264
  177. package/themes/original/src/components/SignupForm/index.tsx +134 -89
  178. package/themes/original/src/components/SingleOrderCard/index.tsx +129 -54
  179. package/themes/original/src/components/SingleOrderCard/styles.tsx +10 -8
  180. package/themes/original/src/components/SingleProductCard/index.tsx +106 -69
  181. package/themes/original/src/components/SingleProductCard/styles.tsx +2 -9
  182. package/themes/original/src/components/SingleProductReview/index.tsx +38 -5
  183. package/themes/original/src/components/SingleProductReview/styles.tsx +12 -0
  184. package/themes/original/src/components/StripeCardsList/index.tsx +1 -1
  185. package/themes/original/src/components/StripeElementsForm/index.tsx +13 -2
  186. package/themes/original/src/components/UpsellingProducts/index.tsx +244 -215
  187. package/themes/original/src/components/UpsellingProducts/styles.tsx +12 -1
  188. package/themes/original/src/components/UserDetails/index.tsx +5 -3
  189. package/themes/original/src/components/UserFormDetails/index.tsx +6 -48
  190. package/themes/original/src/components/UserProfile/index.tsx +58 -35
  191. package/themes/original/src/components/UserProfile/styles.ts +17 -0
  192. package/themes/original/src/components/UserProfileForm/index.tsx +19 -28
  193. package/themes/original/src/components/UserProfileForm/styles.tsx +7 -0
  194. package/themes/original/src/components/WalletTransactions/index.tsx +76 -0
  195. package/themes/original/src/components/WalletTransactions/styles.tsx +13 -0
  196. package/themes/original/src/components/Wallets/index.tsx +176 -164
  197. package/themes/original/src/components/Wallets/styles.tsx +12 -8
  198. package/themes/original/src/components/shared/CardAnimation.tsx +47 -0
  199. package/themes/original/src/components/shared/HeaderTitle.tsx +8 -3
  200. package/themes/original/src/components/shared/OBottomPopup.tsx +6 -4
  201. package/themes/original/src/components/shared/OButton.tsx +9 -4
  202. package/themes/original/src/components/shared/OIcon.tsx +8 -1
  203. package/themes/original/src/components/shared/OInput.tsx +10 -1
  204. package/themes/original/src/layouts/Container.tsx +13 -9
  205. package/themes/original/src/types/index.tsx +55 -5
  206. package/themes/original/src/utils/index.tsx +103 -58
  207. 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'
@@ -36,11 +36,11 @@ import {
36
36
  } from './styles'
37
37
 
38
38
  const mapConfigs = {
39
- mapZoom: 16,
40
- mapSize: {
41
- width: 640,
42
- height: 190
43
- }
39
+ mapZoom: 16,
40
+ mapSize: {
41
+ width: 640,
42
+ height: 190
43
+ }
44
44
  }
45
45
 
46
46
  const MultiCheckoutUI = (props: any) => {
@@ -53,74 +53,75 @@ const MultiCheckoutUI = (props: any) => {
53
53
  paymethodSelected,
54
54
  handleSelectPaymethod,
55
55
  handleSelectWallet,
56
- handlePaymethodDataChange
56
+ handlePaymethodDataChange,
57
+ cartUuid,
58
+ totalCartsFee,
59
+ cartGroup
57
60
  } = props
58
61
 
59
- const theme = useTheme();
62
+ const theme = useTheme();
60
63
  const styles = StyleSheet.create({
61
64
  pagePadding: {
62
- paddingLeft: 40,
63
- paddingRight: 40
64
- },
65
- wrapperNavbar: Platform.OS === 'ios'
66
- ? { paddingVertical: 0, paddingHorizontal: 40 }
67
- : { paddingVertical: 20, paddingHorizontal: 40 }
65
+ paddingLeft: 40,
66
+ paddingRight: 40
67
+ },
68
+ wrapperNavbar: { paddingHorizontal: 40 }
68
69
  })
69
70
 
70
- const [, { showToast }] = useToast();
71
+ const [, { showToast }] = useToast();
71
72
  const [, t] = useLanguage()
72
- const [{ configs }] = useConfig();
73
- const [{ parsePrice, parseDate }] = useUtils();
74
- const [{ options, carts, loading }, { confirmCart }] = useOrder();
75
- const [validationFields] = useValidationFields();
73
+ const [{ configs }] = useConfig();
74
+ const [{ parsePrice, parseDate }] = useUtils();
75
+ const [{ options, carts, loading }, { confirmCart }] = useOrder();
76
+ const [validationFields] = useValidationFields();
76
77
  const [{ user }] = useSession()
77
78
 
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
79
+ const configTypes = configs?.order_types_allowed?.value.split('|').map((value: any) => Number(value)) || []
80
+ const isPreOrder = configs?.preorder_status_enabled?.value === '1'
81
+ const isDisablePlaceOrderButton = !(paymethodSelected?.paymethod_id || paymethodSelected?.wallet_id) || (paymethodSelected?.paymethod?.gateway === 'stripe' && !paymethodSelected?.paymethod_data)
82
+ 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) || []
82
83
 
83
- const [isUserDetailsEdit, setIsUserDetailsEdit] = useState(false);
84
- const [phoneUpdate, setPhoneUpdate] = useState(false);
85
- const [userErrors, setUserErrors] = useState<any>([]);
84
+ const [isUserDetailsEdit, setIsUserDetailsEdit] = useState(false);
85
+ const [phoneUpdate, setPhoneUpdate] = useState(false);
86
+ const [userErrors, setUserErrors] = useState<any>([]);
86
87
  const handleMomentClick = () => {
87
- if (isPreOrder) {
88
- navigation.navigate('MomentOption')
89
- }
90
- }
88
+ if (isPreOrder) {
89
+ navigation.navigate('MomentOption')
90
+ }
91
+ }
91
92
 
92
93
  const checkValidationFields = () => {
93
- setUserErrors([])
94
- const errors = []
95
- const notFields = ['coupon', 'driver_tip', 'mobile_phone', 'address', 'zipcode', 'address_notes']
94
+ setUserErrors([])
95
+ const errors = []
96
+ const notFields = ['coupon', 'driver_tip', 'mobile_phone', 'address', 'zipcode', 'address_notes']
96
97
 
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
- })
98
+ Object.values(validationFields?.fields?.checkout).map((field: any) => {
99
+ if (field?.required && !notFields.includes(field.code)) {
100
+ if (!user[field?.code]) {
101
+ errors.push(t(`VALIDATION_ERROR_${field.code.toUpperCase()}_REQUIRED`, `The field ${field?.name} is required`))
102
+ }
103
+ }
104
+ })
104
105
 
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
- }
106
+ if (
107
+ !user?.cellphone &&
108
+ ((validationFields?.fields?.checkout?.cellphone?.enabled &&
109
+ validationFields?.fields?.checkout?.cellphone?.required) ||
110
+ configs?.verification_phone_required?.value === '1')
111
+ ) {
112
+ errors.push(t('VALIDATION_ERROR_MOBILE_PHONE_REQUIRED', 'The field Phone number is required'))
113
+ }
113
114
 
114
- if (phoneUpdate) {
115
- errors.push(t('NECESSARY_UPDATE_COUNTRY_PHONE_CODE', 'It is necessary to update your phone number'))
116
- }
115
+ if (phoneUpdate) {
116
+ errors.push(t('NECESSARY_UPDATE_COUNTRY_PHONE_CODE', 'It is necessary to update your phone number'))
117
+ }
117
118
 
118
- setUserErrors(errors)
119
- }
119
+ setUserErrors(errors)
120
+ }
120
121
 
121
122
  const togglePhoneUpdate = (val: boolean) => {
122
- setPhoneUpdate(val)
123
- }
123
+ setPhoneUpdate(val)
124
+ }
124
125
 
125
126
  const handlePlaceOrder = () => {
126
127
  if (!userErrors.length) {
@@ -128,33 +129,30 @@ const MultiCheckoutUI = (props: any) => {
128
129
  return
129
130
  }
130
131
  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)
132
+ Object.values(userErrors).map((item: any, i: number) => {
133
+ stringError += (i + 1) === userErrors.length ? `- ${item?.message || item}` : `- ${item?.message || item}\n`
134
+ })
135
+ showToast(ToastType.Error, stringError)
135
136
  setIsUserDetailsEdit(true)
136
137
  }
137
138
 
138
139
  useEffect(() => {
139
- if (validationFields && validationFields?.fields?.checkout) {
140
- checkValidationFields()
141
- }
142
- }, [validationFields, user])
140
+ if (validationFields && validationFields?.fields?.checkout) {
141
+ checkValidationFields()
142
+ }
143
+ }, [validationFields, user])
143
144
 
144
145
  return (
145
146
  <>
146
147
  <Container noPadding>
147
148
  <View style={styles.wrapperNavbar}>
148
149
  <NavBar
149
- isVertical
150
150
  title={t('CHECKOUT', 'Checkout')}
151
151
  titleAlign={'center'}
152
152
  onActionLeft={() => navigation?.canGoBack() && navigation.goBack()}
153
153
  showCall={false}
154
+ paddingTop={Platform.OS === 'ios' ? 0 : 4}
154
155
  btnStyle={{ paddingLeft: 0 }}
155
- style={{ marginTop: Platform.OS === 'ios' ? 0 : 30 }}
156
- titleWrapStyle={{ paddingHorizontal: 0 }}
157
- titleStyle={{ marginRight: 0, marginLeft: 0 }}
158
156
  />
159
157
  </View>
160
158
  <ChContainer style={styles.pagePadding}>
@@ -224,6 +222,7 @@ const MultiCheckoutUI = (props: any) => {
224
222
  handleSelectPaymethod={handleSelectPaymethod}
225
223
  handleSelectWallet={handleSelectWallet}
226
224
  handlePaymethodDataChange={handlePaymethodDataChange}
225
+ cartUuid={cartUuid}
227
226
  />
228
227
  <View style={{ height: 8, backgroundColor: theme.colors.backgroundGray100, marginTop: 13, marginHorizontal: -40 }} />
229
228
  </ChSection>
@@ -241,20 +240,46 @@ const MultiCheckoutUI = (props: any) => {
241
240
  cart={cart}
242
241
  cartuuid={cart.uuid}
243
242
  isMultiCheckout
243
+ hideDeliveryFee={configs?.multi_business_checkout_show_combined_delivery_fee?.value === '1'}
244
+ hideDriverTip={configs?.multi_business_checkout_show_combined_driver_tip?.value === '1'}
244
245
  onNavigationRedirect={(route: string, params: any) => props.navigation.navigate(route, params)}
245
246
  />
246
247
  <View style={{ height: 8, backgroundColor: theme.colors.backgroundGray100, marginTop: 13, marginHorizontal: -40 }} />
247
248
  </React.Fragment>
248
249
  ))}
249
- {openCarts.length === 0 && (
250
+ {!cartGroup?.loading && openCarts.length === 0 && (
250
251
  <CCNotCarts>
251
252
  <OText size={24} style={{ textAlign: 'center' }}>
252
253
  {t('CARTS_NOT_FOUND', 'You don\'t have carts available')}
253
254
  </OText>
254
255
  </CCNotCarts>
255
256
  )}
257
+ {walletCarts.length > 0 && (
258
+ <OText size={14} color={theme.colors.danger5} style={{ marginVertical: 20 }}>
259
+ {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')}
260
+ </OText>
261
+ )}
256
262
  {openCarts.length > 0 && (
257
263
  <ChCartsTotal>
264
+ {totalCartsFee && configs?.multi_business_checkout_show_combined_delivery_fee?.value === '1' && (
265
+ <View style={{ flexDirection: 'row', justifyContent: 'space-between' }}>
266
+ <OText size={14} lineHeight={24} color={theme.colors.textNormal} weight={'400'}>
267
+ {t('TOTAL_DELIVERY_FEE', 'Total delivery fee')}
268
+ </OText>
269
+ <OText size={14} lineHeight={24} color={theme.colors.textNormal} weight={'400'}>{parsePrice(totalCartsFee)}</OText>
270
+ </View>
271
+ )}
272
+ {openCarts.reduce((sum: any, cart: any) => sum + cart?.driver_tip, 0) > 0 &&
273
+ configs?.multi_business_checkout_show_combined_driver_tip?.value === '1' && (
274
+ <View style={{ flexDirection: 'row', justifyContent: 'space-between' }}>
275
+ <OText size={14} lineHeight={24} color={theme.colors.textNormal} weight={'400'}>
276
+ {t('DRIVER_TIP', 'Driver tip')}
277
+ </OText>
278
+ <OText size={14} lineHeight={24} color={theme.colors.textNormal} weight={'400'}>
279
+ {parsePrice(openCarts.reduce((sum: any, cart: any) => sum + cart?.driver_tip, 0))}
280
+ </OText>
281
+ </View>
282
+ )}
258
283
  <View style={{ flexDirection: 'row', justifyContent: 'space-between' }}>
259
284
  <OText size={16} lineHeight={24} color={theme.colors.textNormal} weight={'500'}>
260
285
  {t('TOTAL_FOR_ALL_CARTS', 'Total for all Carts')}
@@ -266,23 +291,18 @@ const MultiCheckoutUI = (props: any) => {
266
291
  </OText>
267
292
  </ChCartsTotal>
268
293
  )}
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
294
  </ChCarts>
275
295
  </ChSection>
276
296
  </ChContainer>
277
297
  </Container>
278
-
298
+
279
299
  <FloatingButton
280
- handleClick={() => handlePlaceOrder()}
300
+ handleClick={() => handlePlaceOrder()}
281
301
  isSecondaryBtn={isDisablePlaceOrderButton}
282
302
  disabled={isDisablePlaceOrderButton}
283
303
  btnText={placing ? t('PLACING', 'Placing') : t('PLACE_ORDER', 'Place Order')}
284
304
  btnRightValueShow
285
- btnRightValue={parsePrice(totalCartsPrice)}
305
+ btnRightValue={parsePrice(totalCartsPrice)}
286
306
  iosBottom={30}
287
307
  />
288
308
  </>
@@ -1,11 +1,12 @@
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
6
  import { Container } from '../../layouts/Container'
7
7
  import { Placeholder, PlaceholderLine, Fade } from 'rn-placeholder'
8
8
  import { SingleOrderCard } from './SingleOrderCard'
9
+ import AntDesignIcon from 'react-native-vector-icons/AntDesign'
9
10
 
10
11
  import {
11
12
  OrdersDetailsContainer,
@@ -18,6 +19,7 @@ import {
18
19
  OrdersSummary,
19
20
  BorderLine
20
21
  } from './styles'
22
+ import { NotFoundSource } from '../NotFoundSource'
21
23
 
22
24
  export const MultiOrdersDetailsUI = (props: any) => {
23
25
  const {
@@ -29,20 +31,20 @@ export const MultiOrdersDetailsUI = (props: any) => {
29
31
  } = props
30
32
 
31
33
  const theme = useTheme()
32
- const styles = StyleSheet.create({
34
+ const styles = StyleSheet.create({
33
35
  btnBackArrow: {
34
- borderWidth: 0,
35
- backgroundColor: theme.colors.clear,
36
- shadowColor: theme.colors.clear,
37
- padding: 0,
36
+ borderWidth: 0,
37
+ backgroundColor: theme.colors.clear,
38
+ shadowColor: theme.colors.clear,
39
+ padding: 0,
38
40
  marginLeft: -20
39
- },
40
- })
41
-
41
+ },
42
+ })
43
+
42
44
  const { loading, orders, error } = props.ordersList
43
45
  const [, t] = useLanguage()
44
46
  const [{ parsePrice, parseNumber, parseDate }] = useUtils();
45
- const [, { showToast }] = useToast();
47
+ const [, { showToast }] = useToast();
46
48
 
47
49
  const walletName: any = {
48
50
  cash: {
@@ -60,7 +62,7 @@ export const MultiOrdersDetailsUI = (props: any) => {
60
62
  }
61
63
  navigation.navigate('BusinessList');
62
64
  return true
63
- }
65
+ }
64
66
 
65
67
  const handleGoToOrderDetails = (uuid: any) => {
66
68
  navigation.navigate('OrderDetails', { orderId: uuid })
@@ -68,7 +70,7 @@ export const MultiOrdersDetailsUI = (props: any) => {
68
70
 
69
71
  useEffect(() => {
70
72
  if (error) {
71
- showToast(ToastType.Error, error)
73
+ showToast(ToastType.Error, error)
72
74
  }
73
75
  }, [error])
74
76
 
@@ -83,11 +85,14 @@ export const MultiOrdersDetailsUI = (props: any) => {
83
85
  <OrdersDetailsContainer keyboardShouldPersistTaps="handled" contentContainerStyle={{ paddingHorizontal: 40 }}>
84
86
  <View style={{ flexDirection: 'row' }}>
85
87
  <OButton
86
- imgLeftSrc={theme.images.general.arrow_left}
87
88
  imgRightSrc={null}
88
89
  style={styles.btnBackArrow}
89
90
  onClick={() => handleArrowBack()}
90
- imgLeftStyle={{ tintColor: theme.colors.textNormal, width: 16 }}
91
+ icon={AntDesignIcon}
92
+ iconProps={{
93
+ name: 'arrowleft',
94
+ size: 26
95
+ }}
91
96
  />
92
97
  </View>
93
98
  <Header>
@@ -202,7 +207,7 @@ export const MultiOrdersDetailsUI = (props: any) => {
202
207
  </Row>
203
208
  <Row>
204
209
  <OText size={12} lineHeight={18} weight={'400'} color={theme.colors.textNormal}>
205
- {t('ESTIMATED_TAX_TO_BE_COLLECTED', 'Estimated tax to be collected')}:
210
+ {t('ESTIMATED_TAX_TO_BE_COLLECTED', 'Estimated tax to be collected')}:
206
211
  </OText>
207
212
  <OText size={12} lineHeight={18} weight={'400'} color={theme.colors.textNormal}>
208
213
  {parsePrice(ordersSummary?.tax)}
@@ -244,6 +249,19 @@ export const MultiOrdersDetailsUI = (props: any) => {
244
249
  ))}
245
250
  </>
246
251
  )}
252
+ {!loading && (error || orders?.length === 0) && (
253
+ error?.includes('ERROR_ACCESS_EXPIRED') ? (
254
+ <NotFoundSource
255
+ content={t(error[0], 'Sorry, the order has expired.')}
256
+ />
257
+ ) : (
258
+ <NotFoundSource
259
+ content={t('NOT_FOUND_ORDER', theme?.defaultLanguages?.NOT_FOUND_ORDER || 'Sorry, we couldn\'t find the requested order.')}
260
+ btnTitle={t('ORDERS_REDIRECT', theme?.defaultLanguages?.ORDERS_REDIRECT || 'Go to Orders')}
261
+ onClickButton={navigation.navigate('BusinessList')}
262
+ />
263
+ )
264
+ )}
247
265
  <Divider />
248
266
  </OrdersDetailsContainer>
249
267
  )
@@ -1,9 +1,10 @@
1
1
  import React, { useState, useEffect } from 'react'
2
2
  import { useLanguage } from 'ordering-components/native';
3
- import { View, StyleSheet, RefreshControl } from 'react-native';
3
+ import { View, StyleSheet, RefreshControl, Platform } from 'react-native';
4
+ import AntDesignIcon from 'react-native-vector-icons/AntDesign'
4
5
 
5
6
  import { OrdersOption } from '../OrdersOption'
6
- import { HeaderTitle, OText } from '../shared'
7
+ import { HeaderTitle, OButton, OText } from '../shared'
7
8
  import { ScrollView } from 'react-native-gesture-handler';
8
9
  import { Tab } from './styles'
9
10
  import { useTheme } from 'styled-components/native';
@@ -11,6 +12,7 @@ import { Container } from '../../layouts/Container';
11
12
 
12
13
  export const MyOrders = (props: any) => {
13
14
  const {
15
+ navigation,
14
16
  hideOrders,
15
17
  businessesSearchList
16
18
  } = props
@@ -21,7 +23,7 @@ export const MyOrders = (props: any) => {
21
23
  const [isEmptyBusinesses, setIsEmptyBusinesses] = useState(false)
22
24
  const [businessOrderIds, setBusinessOrderIds] = useState([])
23
25
  const [ordersLength, setOrdersLength] = useState({
24
- activeOrdersLength: 0,
26
+ activeOrdersLength: null,
25
27
  previousOrdersLength: 0,
26
28
  });
27
29
  const [selectedOption, setSelectedOption] = useState(!hideOrders ? 'orders' : 'business')
@@ -33,6 +35,10 @@ export const MyOrders = (props: any) => {
33
35
  { key: 'business', value: t('BUSINESS', 'Business') },
34
36
  { key: 'products', value: t('PRODUCTS', 'Products') }
35
37
  ]
38
+ const isChewLayout = theme?.header?.components?.layout?.type === 'chew'
39
+ const showNavbar = theme?.bar_menu?.components?.orders?.hidden
40
+
41
+ const goToBack = () => navigation?.canGoBack() && navigation.goBack()
36
42
 
37
43
  const handleOnRefresh = () => {
38
44
  setRefreshOrders(true);
@@ -61,20 +67,59 @@ export const MyOrders = (props: any) => {
61
67
  });
62
68
 
63
69
  return (
64
- <Container noPadding refreshControl={
65
- <RefreshControl
66
- refreshing={refreshing}
67
- onRefresh={() => handleOnRefresh()}
68
- />
69
- }>
70
- {!hideOrders && (
70
+ <Container
71
+ noPadding
72
+ refreshControl={
73
+ <RefreshControl
74
+ refreshing={refreshing}
75
+ onRefresh={() => handleOnRefresh()}
76
+ />
77
+ }
78
+ >
79
+ {(isChewLayout || showNavbar) && (
80
+ <View style={{
81
+ ...{
82
+ width: '100%',
83
+ display: 'flex',
84
+ flexDirection: 'row',
85
+ alignItems: 'center',
86
+ paddingHorizontal: isChewLayout ? 20 : 40,
87
+ },
88
+ ...props.titleStyle
89
+ }}>
90
+ {!props.hideBackBtn && !isChewLayout && (
91
+ <OButton
92
+ imgLeftStyle={{ width: 18 }}
93
+ imgRightSrc={null}
94
+ style={{
95
+ borderWidth: 0,
96
+ width: 26,
97
+ height: 26,
98
+ backgroundColor: '#FFF',
99
+ borderColor: '#FFF',
100
+ shadowColor: '#FFF',
101
+ paddingLeft: 0,
102
+ paddingRight: 0
103
+ }}
104
+ onClick={goToBack}
105
+ icon={AntDesignIcon}
106
+ iconProps={{
107
+ name: 'arrowleft',
108
+ size: 26
109
+ }}
110
+ />
111
+ )}
112
+ <HeaderTitle ph={0} text={t('MY_ORDERS', 'My Orders')} />
113
+ </View>
114
+ )}
115
+ {!hideOrders && !isChewLayout && !showNavbar && (
71
116
  <HeaderTitle text={t('MY_ORDERS', 'My Orders')} />
72
117
  )}
73
118
  {!allEmpty && (
74
119
  <ScrollView
75
120
  horizontal
76
121
  style={{ ...styles.container, borderBottomWidth: 1 }}
77
- contentContainerStyle={{ paddingHorizontal: !!businessesSearchList ? 0 : 40 }}
122
+ contentContainerStyle={{ paddingHorizontal: !!businessesSearchList ? 0 : isChewLayout ? 20 : 40 }}
78
123
  showsHorizontalScrollIndicator={false}
79
124
  scrollEventThrottle={16}
80
125
  >
@@ -98,17 +143,19 @@ export const MyOrders = (props: any) => {
98
143
  )}
99
144
  {selectedOption === 'orders' && (
100
145
  <>
101
- <View style={{ paddingLeft: 40, paddingRight: 40 }}>
102
- <OrdersOption
103
- {...props}
104
- activeOrders
105
- ordersLength={ordersLength}
106
- setOrdersLength={setOrdersLength}
107
- setRefreshOrders={setRefreshOrders}
108
- refreshOrders={refreshOrders}
109
- />
110
- </View>
111
- <View style={{ paddingLeft: 40, paddingRight: 40 }}>
146
+ {ordersLength?.activeOrdersLength !== 0 && (
147
+ <View style={{ paddingHorizontal: isChewLayout ? 20 : 40 }}>
148
+ <OrdersOption
149
+ {...props}
150
+ activeOrders
151
+ ordersLength={ordersLength}
152
+ setOrdersLength={setOrdersLength}
153
+ setRefreshOrders={setRefreshOrders}
154
+ refreshOrders={refreshOrders}
155
+ />
156
+ </View>
157
+ )}
158
+ <View style={{ paddingHorizontal: isChewLayout ? 20 : 40 }}>
112
159
  <OrdersOption
113
160
  {...props}
114
161
  ordersLength={ordersLength}
@@ -119,14 +166,31 @@ export const MyOrders = (props: any) => {
119
166
  </View>
120
167
  </>
121
168
  )}
122
- {notOrderOptions.includes(selectedOption) && (
169
+ {selectedOption === 'business' && (
170
+ <OrdersOption
171
+ {...props}
172
+ isBusiness
173
+ titleContent={t('PREVIOUSLY_ORDERED', 'Previously ordered')}
174
+ hideOrders
175
+ horizontal
176
+ activeOrders
177
+ pastOrders
178
+ preOrders
179
+ businessesSearchList={businessesSearchList}
180
+ setIsEmptyBusinesses={setIsEmptyBusinesses}
181
+ businessOrderIds={businessOrderIds}
182
+ setBusinessOrderIds={setBusinessOrderIds}
183
+ ordersLength={ordersLength}
184
+ setOrdersLength={setOrdersLength}
185
+ />
186
+ )}
187
+ {selectedOption === 'products' && (
123
188
  <OrdersOption
124
189
  {...props}
190
+ isProducts
125
191
  titleContent={t('PREVIOUSLY_ORDERED', 'Previously ordered')}
126
192
  hideOrders
127
193
  horizontal
128
- isBusiness={selectedOption === 'business'}
129
- isProducts={selectedOption === 'products'}
130
194
  activeOrders
131
195
  pastOrders
132
196
  preOrders
@@ -2,13 +2,14 @@ import * as React from 'react'
2
2
  import styled, { useTheme } from 'styled-components/native'
3
3
  import { OButton, OIcon, OText } from '../shared'
4
4
  import { Platform, TextStyle, ViewStyle, I18nManager, TouchableOpacity } from 'react-native'
5
+ import AntDesignIcon from 'react-native-vector-icons/AntDesign'
5
6
 
6
7
  const TitleWrapper = styled.View`
7
8
  flex-direction: column;
8
9
  padding-horizontal: 10px;
9
10
  `
10
11
  const TitleTopWrapper = styled.View`
11
- flex-grow: 1;
12
+ flex: 1;
12
13
  flex-direction: row;
13
14
  align-items: center;
14
15
  `
@@ -39,7 +40,8 @@ interface Props {
39
40
  style?: ViewStyle,
40
41
  titleWrapStyle?: ViewStyle,
41
42
  paddingTop?: number,
42
- isVertical?: boolean
43
+ isVertical?: boolean,
44
+ noMargin?: any
43
45
  }
44
46
 
45
47
  const NavBar = (props: Props) => {
@@ -61,8 +63,8 @@ const NavBar = (props: Props) => {
61
63
  return (
62
64
  <Wrapper style={{ paddingTop: props.paddingTop, ...{ flexDirection: props.isVertical ? 'column' : 'row', alignItems: props.isVertical ? 'flex-start' : 'center' }, ...props.style }}>
63
65
  <OButton
64
- imgLeftSrc={props.leftImg || theme.images.general.arrow_left}
65
- imgLeftStyle={{ width: 18 }}
66
+ imgLeftSrc={theme.images.general.arrow_left}
67
+ imgLeftStyle={{ width: 26 }}
66
68
  imgRightSrc={null}
67
69
  style={{ ...btnBackArrow, ...props.btnStyle, ...props.isVertical ? (I18nManager.isRTL ? { paddingRight: 0 } : { paddingLeft: 0 }) : {} }}
68
70
  onClick={props?.onActionLeft}
@@ -90,10 +92,9 @@ const NavBar = (props: Props) => {
90
92
  style={
91
93
  {
92
94
  textAlign: props.titleAlign ? props.titleAlign : 'center',
93
- marginRight: props.showCall ? 0 : 40,
95
+ marginRight: (props.showCall || !!props.noMargin) ? 0 : 40,
94
96
  color: props.titleColor || theme.colors.textNormal,
95
97
  paddingHorizontal: props.titleAlign == 'left' ? 12 : 0,
96
- width: '100%',
97
98
  ...props.titleStyle,
98
99
  }
99
100
  }
@@ -1,5 +1,5 @@
1
1
  import React from 'react'
2
- import { useLanguage } from 'ordering-components/native'
2
+ import { useLanguage, useOrderingTheme } 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,7 +16,8 @@ export const NetworkError = (props: NoNetworkParams) => {
16
16
  } = props
17
17
  const theme = useTheme()
18
18
  const [, t] = useLanguage()
19
-
19
+ const [orderingTheme] = useOrderingTheme()
20
+ const urlimage = orderingTheme?.theme?.no_internet?.components?.image
20
21
  const noNetworkImage = image || theme.images.general.noNetwork
21
22
  const deviceWidth = Dimensions.get('screen').width
22
23
 
@@ -38,7 +39,8 @@ export const NetworkError = (props: NoNetworkParams) => {
38
39
  </OText>
39
40
  <ImageContainer>
40
41
  <OIcon
41
- src={noNetworkImage}
42
+ src={!urlimage && noNetworkImage}
43
+ url={urlimage}
42
44
  width={(deviceWidth - 80) * 0.9}
43
45
  height={(deviceWidth - 80) * 0.8}
44
46
  />
@@ -20,12 +20,13 @@ export const NotFoundSource = (props: NotFoundSourceParams) => {
20
20
  const theme = useTheme();
21
21
 
22
22
  const errorImage = image || theme.images.general.notFound
23
+ const isUrl = typeof errorImage === 'string' && errorImage.includes('http')
23
24
 
24
25
  return (
25
26
  <NotFound>
26
27
  {errorImage && (
27
28
  <NotFoundImage>
28
- <OIcon src={errorImage} width={260} height={220} />
29
+ <OIcon url={isUrl && errorImage} src={!isUrl && errorImage} width={260} height={220} />
29
30
  </NotFoundImage>
30
31
  )}
31
32
  {content && conditioned && !errorImage && <OText color={theme.colors.disabled} size={18} style={{ textAlign: 'center' }}>{content}</OText>}