ordering-ui-react-native 0.22.1 → 0.22.2-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 (161) hide show
  1. package/package.json +6 -7
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/BusinessesListing/index.tsx +1 -1
  4. package/src/components/StripeMethodForm/index.tsx +4 -2
  5. package/src/components/VerifyPhone/styles.tsx +1 -2
  6. package/src/context/OfflineActions/index.tsx +236 -0
  7. package/src/types/index.tsx +2 -1
  8. package/themes/business/index.tsx +2 -0
  9. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +9 -6
  10. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +1 -0
  11. package/themes/business/src/components/BusinessController/index.tsx +8 -3
  12. package/themes/business/src/components/BusinessProductList/index.tsx +2 -1
  13. package/themes/business/src/components/Chat/index.tsx +15 -3
  14. package/themes/business/src/components/DriverMap/index.tsx +49 -27
  15. package/themes/business/src/components/FloatingButton/index.tsx +3 -2
  16. package/themes/business/src/components/GoogleMap/index.tsx +15 -8
  17. package/themes/business/src/components/LanguageSelector/index.tsx +2 -3
  18. package/themes/business/src/components/LanguageSelector/lang_country.json +515 -70
  19. package/themes/business/src/components/LogoutButton/index.tsx +1 -1
  20. package/themes/business/src/components/MapView/index.tsx +36 -17
  21. package/themes/business/src/components/NewOrderNotification/index.tsx +40 -27
  22. package/themes/business/src/components/OrderDetails/Business.tsx +54 -37
  23. package/themes/business/src/components/OrderDetails/Delivery.tsx +138 -55
  24. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +125 -43
  25. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +62 -24
  26. package/themes/business/src/components/OrderDetails/styles.tsx +39 -3
  27. package/themes/business/src/components/OrderDetails/usePrinterCommands.tsx +149 -68
  28. package/themes/business/src/components/OrderDetailsLogistic/index.tsx +3 -2
  29. package/themes/business/src/components/OrderSummary/index.tsx +210 -65
  30. package/themes/business/src/components/OrdersListManager/index.tsx +13 -1
  31. package/themes/business/src/components/OrdersOption/index.tsx +217 -156
  32. package/themes/business/src/components/PhoneInputNumber/index.tsx +8 -5
  33. package/themes/business/src/components/PreviousMessages/index.tsx +26 -3
  34. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +39 -16
  35. package/themes/business/src/components/PreviousOrders/index.tsx +76 -66
  36. package/themes/business/src/components/PrinterEdition/MessageAlert.tsx +33 -0
  37. package/themes/business/src/components/PrinterEdition/index.tsx +431 -0
  38. package/themes/business/src/components/PrinterEdition/printerList.tsx +23 -0
  39. package/themes/business/src/components/PrinterEdition/styles.tsx +61 -0
  40. package/themes/business/src/components/PrinterSettings/index.tsx +226 -76
  41. package/themes/business/src/components/PrinterSettings/styles.tsx +20 -0
  42. package/themes/business/src/components/ReviewCustomer/index.tsx +2 -0
  43. package/themes/business/src/components/StoresList/index.tsx +2 -2
  44. package/themes/business/src/components/UserProfileForm/index.tsx +16 -17
  45. package/themes/business/src/components/WebsocketStatus/index.tsx +2 -2
  46. package/themes/business/src/components/shared/OTextarea.tsx +8 -9
  47. package/themes/business/src/layouts/SafeAreaContainer.tsx +35 -19
  48. package/themes/business/src/types/index.tsx +14 -5
  49. package/themes/business/src/utils/index.tsx +25 -1
  50. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  51. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  52. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  53. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  54. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  55. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  56. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  57. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  58. package/themes/original/index.tsx +11 -0
  59. package/themes/original/src/components/AddressForm/index.tsx +32 -17
  60. package/themes/original/src/components/AddressList/index.tsx +8 -7
  61. package/themes/original/src/components/AnalyticsSegment/index.tsx +6 -6
  62. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  63. package/themes/original/src/components/BusinessBasicInformation/index.tsx +5 -8
  64. package/themes/original/src/components/BusinessController/index.tsx +5 -5
  65. package/themes/original/src/components/BusinessItemAccordion/index.tsx +13 -5
  66. package/themes/original/src/components/BusinessListingSearch/BusinessSearchFooter.tsx +2 -3
  67. package/themes/original/src/components/BusinessListingSearch/BusinessSearchHeader.tsx +1 -3
  68. package/themes/original/src/components/BusinessListingSearch/index.tsx +1 -2
  69. package/themes/original/src/components/BusinessPreorder/index.tsx +44 -32
  70. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/index.tsx +73 -70
  71. package/themes/original/src/components/BusinessProductsList/index.tsx +6 -7
  72. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  73. package/themes/original/src/components/BusinessProductsListing/index.tsx +18 -6
  74. package/themes/original/src/components/BusinessTypeFilter/index.tsx +9 -8
  75. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +2 -1
  76. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +1 -1
  77. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -1
  78. package/themes/original/src/components/BusinessesListing/index.tsx +0 -1
  79. package/themes/original/src/components/Cart/index.tsx +38 -14
  80. package/themes/original/src/components/CartContent/index.tsx +2 -4
  81. package/themes/original/src/components/Checkout/index.tsx +110 -58
  82. package/themes/original/src/components/CitiesControl/index.tsx +0 -3
  83. package/themes/original/src/components/CouponControl/index.tsx +1 -3
  84. package/themes/original/src/components/DriverTips/index.tsx +1 -3
  85. package/themes/original/src/components/Favorite/index.tsx +1 -5
  86. package/themes/original/src/components/FavoriteList/index.tsx +0 -1
  87. package/themes/original/src/components/ForgotPasswordForm/index.tsx +5 -7
  88. package/themes/original/src/components/GiftCard/GiftCardUI/index.tsx +15 -17
  89. package/themes/original/src/components/GiftCard/PurchaseGiftCard/index.tsx +3 -7
  90. package/themes/original/src/components/GiftCard/RedeemGiftCard/index.tsx +24 -32
  91. package/themes/original/src/components/GiftCard/SendGiftCard/index.tsx +7 -9
  92. package/themes/original/src/components/GiftCard/VerticalGiftCardOrdersLayout/index.tsx +11 -12
  93. package/themes/original/src/components/GoogleMap/index.tsx +39 -18
  94. package/themes/original/src/components/Help/index.tsx +2 -0
  95. package/themes/original/src/components/HighestRatedBusinesses/index.tsx +1 -1
  96. package/themes/original/src/components/Home/index.tsx +3 -11
  97. package/themes/original/src/components/LoginForm/Otp/index.tsx +0 -3
  98. package/themes/original/src/components/LoginForm/index.tsx +4 -7
  99. package/themes/original/src/components/MessageListing/index.tsx +2 -1
  100. package/themes/original/src/components/Messages/index.tsx +29 -17
  101. package/themes/original/src/components/MomentOption/TimeListItem.tsx +56 -0
  102. package/themes/original/src/components/MomentOption/index.tsx +79 -56
  103. package/themes/original/src/components/MomentSelector/index.tsx +1 -1
  104. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +7 -3
  105. package/themes/original/src/components/MultiCheckout/index.tsx +55 -27
  106. package/themes/original/src/components/MultiOrdersDetails/index.tsx +1 -0
  107. package/themes/original/src/components/MyOrders/index.tsx +2 -2
  108. package/themes/original/src/components/NavBar/index.tsx +7 -4
  109. package/themes/original/src/components/NetworkError/index.tsx +0 -5
  110. package/themes/original/src/components/NotFoundSource/index.tsx +0 -3
  111. package/themes/original/src/components/OrderDetails/OrderEta.tsx +4 -3
  112. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +13 -10
  113. package/themes/original/src/components/OrderDetails/index.tsx +44 -21
  114. package/themes/original/src/components/OrderDetails/styles.tsx +0 -1
  115. package/themes/original/src/components/OrderProgress/index.tsx +5 -4
  116. package/themes/original/src/components/OrderSummary/index.tsx +29 -10
  117. package/themes/original/src/components/OrderTypeSelector/index.tsx +7 -6
  118. package/themes/original/src/components/OrdersOption/index.tsx +3 -6
  119. package/themes/original/src/components/PaymentOptionStripe/index.tsx +0 -5
  120. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  121. package/themes/original/src/components/PaymentOptions/index.tsx +10 -8
  122. package/themes/original/src/components/PlaceSpot/index.tsx +1 -3
  123. package/themes/original/src/components/PreviousOrders/index.tsx +1 -2
  124. package/themes/original/src/components/ProductForm/ActionButton.tsx +17 -20
  125. package/themes/original/src/components/ProductForm/index.tsx +107 -102
  126. package/themes/original/src/components/ProductItemAccordion/index.tsx +51 -44
  127. package/themes/original/src/components/ProductItemAccordion/styles.tsx +3 -4
  128. package/themes/original/src/components/ProductOptionSubOption/index.tsx +16 -8
  129. package/themes/original/src/components/ProfessionalProfile/index.tsx +4 -5
  130. package/themes/original/src/components/Promotions/index.tsx +6 -9
  131. package/themes/original/src/components/ReviewDriver/index.tsx +1 -1
  132. package/themes/original/src/components/ReviewOrder/index.tsx +2 -2
  133. package/themes/original/src/components/ReviewProducts/index.tsx +1 -1
  134. package/themes/original/src/components/ReviewTrigger/index.tsx +2 -2
  135. package/themes/original/src/components/ServiceForm/index.tsx +52 -54
  136. package/themes/original/src/components/Sessions/index.tsx +3 -3
  137. package/themes/original/src/components/SignupForm/index.tsx +86 -78
  138. package/themes/original/src/components/SingleOrderCard/index.tsx +6 -4
  139. package/themes/original/src/components/SingleProductCard/index.tsx +3 -4
  140. package/themes/original/src/components/SingleProductCard/styles.tsx +0 -3
  141. package/themes/original/src/components/StripeCardForm/index.tsx +0 -3
  142. package/themes/original/src/components/StripeCardsList/index.tsx +10 -3
  143. package/themes/original/src/components/StripeElementsForm/index.tsx +76 -62
  144. package/themes/original/src/components/StripeElementsForm/naked.tsx +48 -1
  145. package/themes/original/src/components/StripeRedirectForm/index.tsx +0 -3
  146. package/themes/original/src/components/TaxInformation/index.tsx +3 -2
  147. package/themes/original/src/components/UpsellingProducts/UpsellingContent.tsx +10 -7
  148. package/themes/original/src/components/UpsellingProducts/UpsellingLayout.tsx +8 -3
  149. package/themes/original/src/components/UserDetails/index.tsx +17 -16
  150. package/themes/original/src/components/UserFormDetails/index.tsx +159 -133
  151. package/themes/original/src/components/UserProfile/index.tsx +9 -1
  152. package/themes/original/src/components/UserVerification/index.tsx +14 -4
  153. package/themes/original/src/components/Wallets/index.tsx +6 -3
  154. package/themes/original/src/components/WebsocketStatus/index.tsx +1 -4
  155. package/themes/original/src/components/shared/OAlert.tsx +2 -1
  156. package/themes/original/src/components/shared/OButton.tsx +5 -4
  157. package/themes/original/src/components/shared/OInput.tsx +4 -8
  158. package/themes/original/src/components/shared/OModal.tsx +7 -2
  159. package/themes/original/src/types/index.tsx +5 -1
  160. package/themes/original/src/utils/index.tsx +30 -1
  161. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -1,4 +1,4 @@
1
- import React, { useState, useEffect, useCallback } from 'react'
1
+ import React, { useState, useEffect, useCallback, useMemo } from 'react'
2
2
  import {
3
3
  useLanguage,
4
4
  useConfig,
@@ -70,7 +70,8 @@ const MultiCheckoutUI = (props: any) => {
70
70
  walletState,
71
71
  onNavigationRedirectReplace,
72
72
  merchantId,
73
- cartsInvalid
73
+ cartsInvalid,
74
+ checkoutFieldsState
74
75
  } = props
75
76
 
76
77
  const theme = useTheme();
@@ -96,8 +97,9 @@ const MultiCheckoutUI = (props: any) => {
96
97
  const [{ parsePrice, parseDate }] = useUtils();
97
98
  const [{ options, carts, loading }, { confirmCart }] = useOrder();
98
99
  const [validationFields] = useValidationFields();
99
- const [{ user }, { login }] = useSession()
100
+ const [{ user, loading: userLoading }, { login }] = useSession()
100
101
 
102
+ const notFields = ['coupon', 'driver_tip', 'mobile_phone', 'address', 'zipcode', 'address_notes', 'comments']
101
103
  const configTypes = configs?.order_types_allowed?.value.split('|').map((value: any) => Number(value)) || []
102
104
  const isPreOrder = configs?.preorder_status_enabled?.value === '1'
103
105
  const isMultiDriverTips = configs?.checkout_multi_business_enabled?.value === '1'
@@ -121,6 +123,7 @@ const MultiCheckoutUI = (props: any) => {
121
123
 
122
124
  const creditPointGeneralPlan = loyaltyPlansState?.result?.find((loyal: any) => loyal.type === 'credit_point')
123
125
  const loyalBusinessAvailable = creditPointGeneralPlan?.businesses?.filter((b: any) => b.accumulates) ?? []
126
+ const checkoutFields = useMemo(() => checkoutFieldsState?.fields?.filter((field : any) => field.order_type_id === options?.type), [checkoutFieldsState, options])
124
127
 
125
128
  const accumulationRateBusiness = (businessId: number) => {
126
129
  const value = loyalBusinessAvailable?.find((loyal: any) => loyal.business_id === businessId)?.accumulation_rate ?? 0
@@ -169,35 +172,55 @@ const MultiCheckoutUI = (props: any) => {
169
172
 
170
173
  const checkValidationFields = () => {
171
174
  setUserErrors([])
172
- const errors = []
173
- const notFields = ['coupon', 'driver_tip', 'mobile_phone', 'address', 'zipcode', 'address_notes']
174
- const _requiredFields: any = []
175
-
176
- Object.values(validationFields?.fields?.checkout).map((field: any) => {
177
- if (field?.required && !notFields.includes(field.code)) {
178
- if (!user[field?.code]) {
179
- _requiredFields.push(field?.code)
175
+ const errors: Array<string> = []
176
+ const userSelected = user
177
+ const _requiredFields: Array<string> = []
178
+ Object.values(checkoutFieldsState?.fields).map((field: any) => {
179
+ if (options?.type === field?.order_type_id &&
180
+ field?.enabled &&
181
+ field?.required &&
182
+ !notFields.includes(field?.validation_field?.code)
183
+ ) {
184
+ if (userSelected && !userSelected[field?.validation_field?.code]) {
185
+ _requiredFields.push(field?.validation_field?.code)
180
186
  }
181
187
  }
182
188
  })
183
-
189
+ const mobilePhoneField: any = Object.values(checkoutFieldsState?.fields)?.find((field: any) => field?.order_type_id === options?.type && field?.validation_field?.code === 'mobile_phone')
184
190
  if (
185
- !user?.cellphone &&
186
- ((validationFields?.fields?.checkout?.cellphone?.enabled &&
187
- validationFields?.fields?.checkout?.cellphone?.required) ||
191
+ userSelected &&
192
+ !userSelected?.cellphone &&
193
+ ((mobilePhoneField?.enabled &&
194
+ mobilePhoneField?.required) ||
188
195
  configs?.verification_phone_required?.value === '1')
189
196
  ) {
190
197
  _requiredFields.push('cellphone')
191
198
  }
192
199
  setRequiredFields(_requiredFields)
193
200
 
194
- if (phoneUpdate) {
195
- errors.push(t('NECESSARY_UPDATE_COUNTRY_PHONE_CODE', 'It is necessary to update your phone number'))
196
- }
197
-
198
201
  setUserErrors(errors)
199
202
  }
200
203
 
204
+ const checkGuestValidationFields = () => {
205
+ const userSelected = user
206
+ const _requiredFields = checkoutFieldsState?.fields
207
+ .filter((field) => (field?.order_type_id === options?.type) && field?.enabled && field?.required_with_guest &&
208
+ !notFields.includes(field?.validation_field?.code) &&
209
+ userSelected && !userSelected[field?.validation_field?.code])
210
+ const requiredFieldsCode = _requiredFields.map((item) => item?.validation_field?.code)
211
+ const guestCheckoutCellPhone = checkoutFieldsState?.fields?.find((field) => field.order_type_id === options?.type && field?.validation_field?.code === 'mobile_phone')
212
+ if (
213
+ userSelected &&
214
+ !userSelected?.cellphone &&
215
+ ((guestCheckoutCellPhone?.enabled &&
216
+ guestCheckoutCellPhone?.required_with_guest) ||
217
+ configs?.verification_phone_required?.value === '1')
218
+ ) {
219
+ requiredFieldsCode.push('cellphone')
220
+ }
221
+ setRequiredFields(requiredFieldsCode)
222
+ }
223
+
201
224
  const togglePhoneUpdate = (val: boolean) => {
202
225
  setPhoneUpdate(val)
203
226
  }
@@ -208,7 +231,7 @@ const MultiCheckoutUI = (props: any) => {
208
231
  return
209
232
  }
210
233
 
211
- if (!userErrors.length && (!requiredFields?.length || allowedGuest)) {
234
+ if (!userErrors.length && !requiredFields?.length) {
212
235
  handleGroupPlaceOrder && handleGroupPlaceOrder(confirmPayment)
213
236
  return
214
237
  }
@@ -255,10 +278,13 @@ const MultiCheckoutUI = (props: any) => {
255
278
  }
256
279
 
257
280
  useEffect(() => {
258
- if (validationFields && validationFields?.fields?.checkout) {
281
+ if (checkoutFieldsState?.loading || userLoading) return
282
+ if (user?.guest_id) {
283
+ checkGuestValidationFields()
284
+ } else {
259
285
  checkValidationFields()
260
286
  }
261
- }, [validationFields, user])
287
+ }, [checkoutFieldsState, user, options?.type])
262
288
 
263
289
  useEffect(() => {
264
290
  if (cartsToShow?.length === 1) {
@@ -394,15 +420,11 @@ const MultiCheckoutUI = (props: any) => {
394
420
  </OText>
395
421
  <OButton
396
422
  text={t('SIGN_UP', 'Sign up')}
397
- textStyle={{ color: theme.colors.white }}
398
423
  style={{ borderRadius: 7.6, marginTop: 20 }}
399
424
  onClick={() => setOpenModal({ ...openModal, signup: true })}
400
425
  />
401
426
  <OButton
402
427
  text={t('LOGIN', 'Login')}
403
- textStyle={{ color: theme.colors.primary }}
404
- bgColor={theme.colors.white}
405
- borderColor={theme.colors.primary}
406
428
  style={{ borderRadius: 7.6, marginTop: 20 }}
407
429
  onClick={() => setOpenModal({ ...openModal, login: true })}
408
430
  />
@@ -424,6 +446,9 @@ const MultiCheckoutUI = (props: any) => {
424
446
  isCheckout
425
447
  phoneUpdate={phoneUpdate}
426
448
  togglePhoneUpdate={togglePhoneUpdate}
449
+ isOrderTypeValidationField
450
+ requiredFields={requiredFields}
451
+ checkoutFields={checkoutFields}
427
452
  />
428
453
  )}
429
454
  </ChUserDetails>
@@ -660,9 +685,12 @@ const MultiCheckoutUI = (props: any) => {
660
685
  isEdit
661
686
  phoneUpdate={phoneUpdate}
662
687
  togglePhoneUpdate={togglePhoneUpdate}
663
- requiredFields={requiredFields}
664
688
  hideUpdateButton
665
689
  handlePlaceOrderAsGuest={handlePlaceOrderAsGuest}
690
+ isCheckoutPlace
691
+ isOrderTypeValidationField
692
+ requiredFields={requiredFields}
693
+ checkoutFields={checkoutFields}
666
694
  onClose={() => {
667
695
  setIsOpen(false)
668
696
  handlePlaceOrder()
@@ -101,6 +101,7 @@ export const MultiOrdersDetailsUI = (props: any) => {
101
101
  style={styles.btnBackArrow}
102
102
  onClick={() => handleArrowBack()}
103
103
  icon={AntDesignIcon}
104
+ useArrow
104
105
  iconProps={{
105
106
  name: 'arrowleft',
106
107
  size: 26
@@ -203,9 +203,9 @@ export const MyOrders = (props: any) => {
203
203
  setOrdersLength={setOrdersLength}
204
204
  />
205
205
  )}
206
-
206
+
207
207
  {selectedOption === 'giftCards' && (
208
- <View style={{ paddingHorizontal: 20 }}>
208
+ <View style={{ paddingHorizontal: 20 }}>
209
209
  <GiftCardOrdersList
210
210
  onNavigationRedirect={props?.onNavigationRedirect}
211
211
  />
@@ -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'
@@ -64,6 +67,7 @@ const NavBar = (props: Props) => {
64
67
  <Wrapper style={{ paddingTop: props.paddingTop, ...{ flexDirection: props.isVertical ? 'column' : 'row', alignItems: props.isVertical ? 'flex-start' : 'center' }, ...props.style }}>
65
68
  {!props.hideArrowLeft && (
66
69
  <OButton
70
+ useArrow
67
71
  iconProps={{
68
72
  name: 'arrowleft',
69
73
  size: 26
@@ -114,8 +118,6 @@ const NavBar = (props: Props) => {
114
118
  {props.showCall
115
119
  ? (<OButton
116
120
  isCircle={true}
117
- bgColor={theme.colors.primary}
118
- borderColor={theme.colors.primary}
119
121
  imgRightSrc={null}
120
122
  imgLeftStyle={{ tintColor: 'white', width: 30, height: 30 }}
121
123
  imgLeftSrc={theme.images.general.support}
@@ -131,8 +133,9 @@ NavBar.defaultProps = {
131
133
  textAlign: 'center'
132
134
  };
133
135
 
134
- const areEqual = (prevProps: { route?: any; }, nextProps: { route?: any; }) => {
135
- return prevProps.route === nextProps.route
136
+ const areEqual = (prevProps: { route?: any, title?: string }, nextProps: { route?: any, title?: string }) => {
137
+ return prevProps.route === nextProps.route &&
138
+ JSON.stringify(prevProps.title) === JSON.stringify(nextProps.title)
136
139
  return true
137
140
  }
138
141
 
@@ -45,15 +45,10 @@ export const NetworkError = (props: NoNetworkParams) => {
45
45
  />
46
46
  <OButton
47
47
  text={t('REFRESH', 'Refresh')}
48
- bgColor={theme.colors.primary}
49
- borderColor={theme.colors.primary}
50
48
  style={{
51
49
  borderRadius: 8,
52
50
  marginTop: 45
53
51
  }}
54
- textStyle={{
55
- color: theme.colors.white
56
- }}
57
52
  onClick={() => RNRestart.Restart()}
58
53
  />
59
54
  </ImageContainer>
@@ -42,11 +42,8 @@ export const NotFoundSource = (props: NotFoundSourceParams) => {
42
42
  <View style={{ marginTop: 10, width: '100%' }}>
43
43
  <OButton
44
44
  style={{ width: '100%', height: 50, ...btnStyle }}
45
- bgColor={theme.colors.primary}
46
- borderColor={theme.colors.primary}
47
45
  onClick={() => onClickButton()}
48
46
  text={btnTitle}
49
- textStyle={{ color: theme.colors.white }}
50
47
  />
51
48
  </View>
52
49
  )}
@@ -10,13 +10,14 @@ export const OrderEta = (props: any) => {
10
10
 
11
11
  const [{ parseDate }] = useUtils()
12
12
  const [estimatedDeliveryTime, setEstimatedDeliveryTime] = useState(null)
13
-
13
+ const deliveryTypes = [1, 7]
14
+
14
15
  const getEstimatedDeliveryTime = () => {
15
16
  let estimatedUtcTime = null
16
17
  let totalEta = 0
17
18
  if (order?.delivered_in) totalEta += order?.delivered_in
18
19
  if (order?.prepared_in) totalEta += order?.prepared_in
19
- if (order?.delivery_type === 1 && order?.eta_drive_time) {
20
+ if (deliveryTypes?.includes?.(order?.delivery_type) && order?.eta_drive_time) {
20
21
  totalEta += order?.eta_drive_time
21
22
  }
22
23
 
@@ -57,7 +58,7 @@ export const OrderEta = (props: any) => {
57
58
  }
58
59
  estimatedUtcTime = moment.utc(_delivery).add(totalEta, 'minutes')
59
60
  const _estimatedTime = outputFormat ? moment(estimatedUtcTime).local().format(outputFormat) : parseDate(estimatedUtcTime, { utc: false })
60
- setEstimatedDeliveryTime(_estimatedTime)
61
+ setEstimatedDeliveryTime(order?.status === 13 ? parseDate(_delivery, { utc: !!order?.delivery_datetime_utc, outputFormat: outputFormat }) : _estimatedTime)
61
62
  }
62
63
 
63
64
  useEffect(() => {
@@ -1,7 +1,7 @@
1
1
  import React from 'react'
2
2
  import { useTheme } from 'styled-components/native'
3
3
  import { ScrollView, StyleSheet, View } from 'react-native'
4
- import { useLanguage, useUtils } from 'ordering-components/native'
4
+ import { useLanguage, useUtils, useConfig } from 'ordering-components/native'
5
5
  import MaterialCommunityIcons from 'react-native-vector-icons/MaterialCommunityIcons'
6
6
  import { OText, OButton } from '../shared'
7
7
  import { formatSeconds } from '../../utils'
@@ -17,7 +17,9 @@ export const OrderHistory = (props: any) => {
17
17
 
18
18
  const [, t] = useLanguage()
19
19
  const [{ parseDate }] = useUtils()
20
+ const [{ configs }] = useConfig();
20
21
  const theme = useTheme()
22
+ const changeIdToExternalId = configs?.change_order_id?.value === '1'
21
23
 
22
24
  const styles = StyleSheet.create({
23
25
  historyItem: {
@@ -62,7 +64,10 @@ export const OrderHistory = (props: any) => {
62
64
  20: 'ORDER_CUSTOMER_ALMOST_ARRIVED_BUSINESS',
63
65
  21: 'ORDER_CUSTOMER_ARRIVED_BUSINESS',
64
66
  22: 'ORDER_LOOKING_FOR_DRIVER',
65
- 23: 'ORDER_DRIVER_ON_WAY'
67
+ 23: 'ORDER_DRIVER_ON_WAY',
68
+ 24: 'ORDER_DRIVER_WAITING_FOR_ORDER',
69
+ 25: 'ORDER_ACCEPTED_BY_DRIVER_COMPANY',
70
+ 26: 'ORDER_DRIVER_ARRIVED_CUSTOMER'
66
71
  }
67
72
 
68
73
  const getLogisticTagStatus = (status: any) => {
@@ -90,7 +95,7 @@ export const OrderHistory = (props: any) => {
90
95
  return (
91
96
  <ScrollView contentContainerStyle={styles.container}>
92
97
  <OText size={20} style={{ alignSelf: 'center', textAlign: 'center' }} mBottom={10}>
93
- {t('DETAILS_OF_ORDER', 'Details of Order_NUMBER_').replace('_NUMBER_', ` # ${order?.id}`)}
98
+ {t('DETAILS_OF_ORDER', 'Details of Order_NUMBER_').replace('_NUMBER_', (changeIdToExternalId && order?.external_id) || `# ${order?.id}`)}
94
99
  </OText>
95
100
  {!messages?.loading && order && (
96
101
  <View style={styles.historyItem}>
@@ -145,10 +150,10 @@ export const OrderHistory = (props: any) => {
145
150
  </>
146
151
  )
147
152
  : message.change?.attribute === 'prepared_in' ? (
148
- <>
149
- {t('TIME_ADDED_BY_BUSINESS', 'Time added by business')}{'\n'}
150
- {formatSeconds(parseInt(message.change.new, 10))}
151
- </>
153
+ <>
154
+ {t('TIME_ADDED_BY_BUSINESS', 'Time added by business')}{'\n'}
155
+ {formatSeconds(parseInt(message.change.new, 10))}
156
+ </>
152
157
  ) : t(ORDER_STATUS[parseInt(message.change.new, 10)])
153
158
  }
154
159
  </OText>
@@ -170,11 +175,9 @@ export const OrderHistory = (props: any) => {
170
175
  ))}
171
176
  <OButton
172
177
  text={enableReview ? t('REVIEW_ORDER', 'Review order') : t('CONTINUE', 'Continue')}
173
- textStyle={{ fontSize: 14, color: theme.colors.white }}
178
+ textStyle={{ fontSize: 14 }}
174
179
  imgRightSrc={theme.images.general.arrow_right}
175
180
  imgRightStyle={{ tintColor: theme.colors.white, right: 5, margin: 5 }}
176
- borderColor='transparent'
177
- bgColor={theme.colors.primary}
178
181
  style={{ borderRadius: 7.6, borderWidth: 1, height: 44, shadowOpacity: 0, marginBottom: 30, marginTop: 20 }}
179
182
  onClick={() => handleReview()}
180
183
  />
@@ -129,11 +129,13 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
129
129
  const [showTitle, setShowTitle] = useState(false)
130
130
 
131
131
  const { order, businessData } = props.order;
132
- const mapValidStatuses = [9, 19, 23]
132
+ const mapValidStatuses = [9, 19, 23, 26]
133
133
  const placeSpotTypes = [3, 4, 5]
134
134
  const directionTypes = [2, 3, 4, 5]
135
- const activeStatus = [0, 3, 4, 7, 8, 9, 13, 14, 18, 19, 20, 21, 22, 23]
135
+ const activeStatus = [0, 3, 4, 7, 8, 9, 13, 14, 18, 19, 20, 21, 22, 23, 24, 25, 26]
136
136
  const reorderStatus = [1, 2, 5, 6, 10, 11, 12]
137
+ const cateringTypes = [7, 8]
138
+ const deliveryTypes = [1, 7]
137
139
  const [isPickup, setIsPickup] = useState(order?.delivery_type === 2)
138
140
  const enabledPoweredByOrdering = configs?.powered_by_ordering_module?.value
139
141
  const isGiftCardOrder = !order?.business_id
@@ -148,6 +150,8 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
148
150
  const hideDriverMessages = theme?.confirmation?.components?.driver?.components?.messages?.hidden
149
151
  const hideCustomerPhone = theme?.confirmation?.components?.customer?.components?.phone?.hidden
150
152
  const hideCustomerAddress = theme?.confirmation?.components?.customer?.components?.address?.hidden
153
+ const changeIdToExternalId = configs?.change_order_id?.value === '1'
154
+
151
155
  const progressBarObjt = isPickup ? getOrderStatuPickUp : getOrderStatus
152
156
  const walletName: any = {
153
157
  cash: {
@@ -185,18 +189,18 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
185
189
  navigation.navigate('BottomTab');
186
190
  };
187
191
 
188
- const getIncludedTaxes = () => {
192
+ const getIncludedTaxes = (isDeliveryFee?: boolean) => {
189
193
  if (order?.taxes?.length === 0 || !order?.taxes) {
190
194
  return order.tax_type === 1 ? order?.summary?.tax ?? 0 : 0
191
195
  } else {
192
196
  return order?.taxes.reduce((taxIncluded: number, tax: any) => {
193
- return taxIncluded + (tax.type === 1 ? tax.summary?.tax : 0)
197
+ return taxIncluded + (((!isDeliveryFee && tax.type === 1 && tax.target === 'product') || (isDeliveryFee && tax.type === 1 && tax.target === 'delivery_fee')) ? tax.summary?.tax : 0)
194
198
  }, 0)
195
199
  }
196
200
  }
197
201
 
198
202
  const getIncludedTaxesDiscounts = () => {
199
- return order?.taxes?.filter((tax: any) => tax?.type === 1)?.reduce((carry: number, tax: any) => carry + (tax?.summary?.tax_after_discount ?? tax?.summary?.tax), 0)
203
+ return order?.taxes?.filter((tax: any) => tax?.type === 1 && tax?.target === 'product')?.reduce((carry: number, tax: any) => carry + (tax?.summary?.tax_after_discount ?? tax?.summary?.tax), 0)
200
204
  }
201
205
 
202
206
  const handleClickOrderReview = (order: any) => {
@@ -270,7 +274,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
270
274
  title: t('DRIVER', 'Driver'),
271
275
  icon:
272
276
  order?.driver?.photo ||
273
- 'https://res.cloudinary.com/demo/image/fetch/c_thumb,g_face,r_max/https://www.freeiconspng.com/thumbs/driver-icon/driver-icon-14.png',
277
+ theme?.images?.general?.driverPng,
274
278
  },
275
279
  {
276
280
  ...order?.business?.location,
@@ -361,7 +365,6 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
361
365
  }
362
366
  }, [props?.order?.error, props?.order?.loading])
363
367
 
364
-
365
368
  useEffect(() => {
366
369
  if (!order?.delivery_type) return
367
370
  setIsPickup(order?.delivery_type === 2)
@@ -386,7 +389,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
386
389
  numberOfLines={2}
387
390
  ellipsizeMode='tail'
388
391
  >
389
- {`${t('ORDER', 'Order')} #${order?.id}`}
392
+ {`${t('ORDER', 'Order')} ${(changeIdToExternalId && order?.external_id) || `#${order?.id}`}`}
390
393
  </OText>
391
394
  )}
392
395
  </>
@@ -460,16 +463,19 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
460
463
  <Header>
461
464
  <NavBar
462
465
  hideArrowLeft
463
- title={`${t('ORDER', 'Order')} #${order?.id}`}
464
- titleAlign={'center'}
466
+ title={`${t('ORDER', 'Order')} ${(changeIdToExternalId && order?.external_id) || `#${order?.id}`}`}
467
+ titleAlign={'left'}
465
468
  showCall={false}
466
469
  btnStyle={{ paddingLeft: 0 }}
467
470
  style={{ marginTop: Platform.OS === 'ios' ? 0 : 20 }}
468
471
  titleWrapStyle={{ paddingHorizontal: 0 }}
469
- titleStyle={{ marginRight: 0, marginLeft: 0 }}
472
+ titleStyle={{ marginRight: 0, marginLeft: 0, paddingHorizontal: 0 }}
470
473
  subTitle={!hideDeliveryDate && <OText size={12} lineHeight={18} color={theme.colors.textNormal}>
471
474
  {activeStatus.includes(order?.status) ? (
472
- <OrderEta order={order} />
475
+ <>
476
+ {cateringTypes.includes(order?.delivery_type) ? `${t('CREATED_AT', 'Created at')}: ${parseDate(order?.created_at)}\n` : ''}
477
+ {cateringTypes.includes(order?.delivery_type) ? `${t('PLACED_TO', 'Placed to')}:` : ''} <OrderEta order={order} />
478
+ </>
473
479
  ) : (
474
480
  parseDate(order?.reporting_data?.at[`status:${order.status}`])
475
481
  )}
@@ -643,7 +649,6 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
643
649
  <OButton
644
650
  text={t('GET_DIRECTIONS', 'Get Directions')}
645
651
  imgRightSrc=''
646
- textStyle={{ color: theme.colors.white }}
647
652
  style={{
648
653
  alignSelf: 'center',
649
654
  borderRadius: 10,
@@ -708,18 +713,18 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
708
713
  {order?.customer?.address}
709
714
  </OText>
710
715
  )}
711
- {(!!order?.customer?.cellphone && !hideCustomerPhone) && (
716
+ {(!!(order?.customer?.cellphone || order?.customer?.guest_cellphone) && !hideCustomerPhone) && (
712
717
  <OText
713
718
  size={12}
714
719
  lineHeight={18}
715
720
  color={theme.colors.textNormal}
716
721
  mBottom={2}>
717
- {`${!!order?.customer?.country_phone_code ? '+' + order?.customer?.country_phone_code : ''} ${order?.customer?.cellphone}`}
722
+ {`${!!order?.customer?.country_phone_code ? '+' + order?.customer?.country_phone_code : ''} ${order?.customer?.guest_id ? order?.customer?.guest_cellphone : order?.customer?.cellphone}`}
718
723
  </OText>
719
724
  )}
720
725
  </InfoBlock>
721
726
  </Customer>
722
- {!isGiftCardOrder && order?.delivery_option !== undefined && order?.delivery_type === 1 && (
727
+ {!isGiftCardOrder && order?.delivery_option !== undefined && deliveryTypes?.includes?.(order?.delivery_type) && (
723
728
  <View style={{ marginTop: 15 }}>
724
729
  <OText size={16} style={{ textAlign: 'left' }} color={theme.colors.textNormal}>
725
730
  {t('DELIVERY_PREFERENCE', 'Delivery Preference')}
@@ -750,6 +755,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
750
755
  }
751
756
  locations={parsedLocations}
752
757
  readOnly
758
+ manualZoom
753
759
  />
754
760
  </Map>
755
761
  )}
@@ -832,9 +838,8 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
832
838
  <OButton
833
839
  text={t('YOUR_ORDERS', 'Your Orders')}
834
840
  textStyle={{ fontSize: 14, color: theme.colors.primary }}
841
+ bgColor={theme.colors.white}
835
842
  imgRightSrc={null}
836
- borderColor={theme.colors.primary}
837
- bgColor={theme.colors.clear}
838
843
  style={{ borderRadius: 7.6, borderWidth: 1, height: 44, shadowOpacity: 0 }}
839
844
  parentStyle={{ marginTop: 29, marginEnd: 15 }}
840
845
  onClick={() => navigation.navigate('BottomTab', { screen: 'MyOrders' })}
@@ -934,7 +939,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
934
939
  )
935
940
  }
936
941
  {
937
- order?.taxes?.length > 0 && order?.taxes?.filter((tax: any) => tax?.type === 2 && tax?.rate !== 0).map((tax: any) => (
942
+ order?.taxes?.length > 0 && order?.taxes?.filter((tax: any) => tax?.type === 2 && tax?.rate !== 0 && tax?.target === 'product').map((tax: any) => (
938
943
  <Table key={tax.id}>
939
944
  <OSRow>
940
945
  <OText size={12} lineHeight={18} weight={'400'} color={theme.colors.textNormal} numberOfLines={1}>
@@ -983,12 +988,30 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
983
988
  </Table>
984
989
  ))
985
990
  }
986
- {typeof order?.summary?.delivery_price === 'number' && (
991
+ {typeof order?.summary?.delivery_price === 'number' && !isPickup && (
987
992
  <Table>
988
993
  <OText size={12} lineHeight={18} weight={'400'} color={theme.colors.textNormal}>{t('DELIVERY_FEE', 'Delivery Fee')}</OText>
989
- <OText size={12} lineHeight={18} weight={'400'} color={theme.colors.textNormal}>{parsePrice(order?.summary?.delivery_price)}</OText>
994
+ <OText size={12} lineHeight={18} weight={'400'} color={theme.colors.textNormal}>{parsePrice(order?.summary?.delivery_price + getIncludedTaxes(true))}</OText>
990
995
  </Table>
991
996
  )}
997
+ {
998
+ order?.taxes?.length > 0 && order?.taxes?.filter((tax: any) => tax?.type === 2 && tax?.rate !== 0 && tax?.target === 'delivery_fee').map((tax: any, i: number) => (
999
+ <Table key={`${tax?.description}_${i}`}>
1000
+ <OSRow>
1001
+ <OText size={12} lineHeight={18} weight={'400'} color={theme.colors.textNormal} numberOfLines={1}>
1002
+ {t(tax?.name?.toUpperCase()?.replace(/ /g, '_'), tax?.name) || t('INHERIT_FROM_BUSINESS', 'Inherit from business')}
1003
+ {`(${verifyDecimals(tax?.rate, parseNumber)}%)`}
1004
+ </OText>
1005
+ {setOpenTaxModal && (
1006
+ <TouchableOpacity onClick={() => setOpenTaxModal({ open: true, data: tax, type: 'tax' })}>
1007
+ <AntIcon name='infocirlceo' size={16} color={theme.colors.primary} />
1008
+ </TouchableOpacity>
1009
+ )}
1010
+ </OSRow>
1011
+ <OText size={12} lineHeight={18} weight={'400'} color={theme.colors.textNormal}>{parsePrice(tax?.summary?.tax_after_discount ?? tax?.summary?.tax ?? 0)}</OText>
1012
+ </Table>
1013
+ ))
1014
+ }
992
1015
  {
993
1016
  order?.offers?.length > 0 && order?.offers?.filter((offer: any) => offer?.target === 2)?.map((offer: any) => (
994
1017
  <Table key={offer.id}>
@@ -5,7 +5,6 @@ export const OrderDetailsContainer = styled.ScrollView`
5
5
  `
6
6
 
7
7
  export const NavBack = styled.TouchableOpacity`
8
-
9
8
  `
10
9
 
11
10
 
@@ -41,7 +41,8 @@ const OrderProgressUI = (props: any) => {
41
41
  const [lastOrder, setLastOrder] = useState<any>(null)
42
42
  const imageFails = theme.images.general.emptyActiveOrders
43
43
  const [initialLoaded, setInitialLoaded] = useState(false)
44
- const statusToShow = [0, 3, 4, 7, 8, 9, 13, 14, 18, 19, 20, 21, 22, 23]
44
+ const statusToShow = [0, 3, 4, 7, 8, 9, 13, 14, 18, 19, 20, 21, 22, 23, 24, 25, 26]
45
+ const deliveryTypes = [1, 7]
45
46
 
46
47
  const styles = StyleSheet.create({
47
48
  main: {
@@ -133,7 +134,7 @@ const OrderProgressUI = (props: any) => {
133
134
  <View style={styles.logoWrapper}>
134
135
  <FastImage
135
136
  style={{ width: 50, height: 50 }}
136
- source={orderList?.orders.length === 1 && lastOrder?.business?.logo.includes('http') ? {
137
+ source={orderList?.orders.length === 1 && lastOrder?.business?.logo?.includes?.('http') ? {
137
138
  uri: optimizeImage(lastOrder?.business?.logo, 'h_50,c_limit'),
138
139
  priority: FastImage.priority.normal,
139
140
  } : theme.images.logos.logotype}
@@ -172,7 +173,7 @@ const OrderProgressUI = (props: any) => {
172
173
  <ProgressTextWrapper>
173
174
  <OText size={12} style={{ width: '50%' }}>{progressBarObjt(lastOrder.status)?.value}</OText>
174
175
  <TimeWrapper>
175
- <OText size={11}>{lastOrder?.delivery_type === 1 ? t('ESTIMATED_DELIVERY', 'Estimated delivery') : t('ESTIMATED_TIME', 'Estimated time')}</OText>
176
+ <OText size={11}>{deliveryTypes?.includes?.(lastOrder?.delivery_type) ? t('ESTIMATED_DELIVERY', 'Estimated delivery') : t('ESTIMATED_TIME', 'Estimated time')}</OText>
176
177
  <OText size={11}>
177
178
  {lastOrder?.delivery_datetime_utc
178
179
  ? parseTime(lastOrder?.delivery_datetime_utc, { outputFormat: configs?.general_hour_format?.value || 'HH:mm' })
@@ -205,7 +206,7 @@ export const OrderProgress = (props: any) => {
205
206
  const orderProgressProps = {
206
207
  ...props,
207
208
  UIComponent: OrderProgressUI,
208
- orderStatus: [0, 3, 4, 7, 8, 9, 13, 14, 18, 19, 20, 21, 22, 23],
209
+ orderStatus: [0, 3, 4, 7, 8, 9, 13, 14, 18, 19, 20, 21, 22, 23, 24, 25, 26],
209
210
  useDefualtSessionManager: true,
210
211
  paginationSettings: {
211
212
  initialPage: 1,