ordering-ui-react-native 0.21.85 → 0.21.86-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 (166) 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 +6 -4
  5. package/src/components/VerifyPhone/styles.tsx +1 -2
  6. package/src/types/index.tsx +3 -1
  7. package/themes/business/index.tsx +2 -0
  8. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +9 -6
  9. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +1 -0
  10. package/themes/business/src/components/BusinessController/index.tsx +8 -3
  11. package/themes/business/src/components/BusinessProductList/index.tsx +2 -1
  12. package/themes/business/src/components/Chat/index.tsx +3 -1
  13. package/themes/business/src/components/DriverMap/index.tsx +44 -27
  14. package/themes/business/src/components/GoogleMap/index.tsx +15 -8
  15. package/themes/business/src/components/Home/index.tsx +5 -1
  16. package/themes/business/src/components/LanguageSelector/index.tsx +2 -3
  17. package/themes/business/src/components/LanguageSelector/lang_country.json +515 -70
  18. package/themes/business/src/components/LogoutButton/index.tsx +1 -1
  19. package/themes/business/src/components/MapView/index.tsx +36 -17
  20. package/themes/business/src/components/NewOrderNotification/index.tsx +79 -33
  21. package/themes/business/src/components/OrderDetails/Business.tsx +65 -7
  22. package/themes/business/src/components/OrderDetails/Delivery.tsx +35 -20
  23. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +110 -40
  24. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +50 -24
  25. package/themes/business/src/components/OrderDetails/styles.tsx +39 -3
  26. package/themes/business/src/components/OrderDetails/usePrinterCommands.tsx +221 -0
  27. package/themes/business/src/components/OrderSummary/index.tsx +223 -73
  28. package/themes/business/src/components/OrdersListManager/index.tsx +9 -1
  29. package/themes/business/src/components/OrdersOption/index.tsx +247 -159
  30. package/themes/business/src/components/PhoneInputNumber/index.tsx +8 -5
  31. package/themes/business/src/components/PreviousMessages/index.tsx +20 -3
  32. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +27 -16
  33. package/themes/business/src/components/PreviousOrders/index.tsx +5 -3
  34. package/themes/business/src/components/PrinterEdition/MessageAlert.tsx +33 -0
  35. package/themes/business/src/components/PrinterEdition/index.tsx +431 -0
  36. package/themes/business/src/components/PrinterEdition/printerList.tsx +23 -0
  37. package/themes/business/src/components/PrinterEdition/styles.tsx +61 -0
  38. package/themes/business/src/components/PrinterSettings/index.tsx +267 -0
  39. package/themes/business/src/components/PrinterSettings/styles.tsx +30 -0
  40. package/themes/business/src/components/ReviewCustomer/index.tsx +2 -0
  41. package/themes/business/src/components/Sessions/index.tsx +1 -1
  42. package/themes/business/src/components/StoresList/index.tsx +2 -2
  43. package/themes/business/src/components/UserFormDetails/index.tsx +111 -107
  44. package/themes/business/src/components/UserProfileForm/index.tsx +60 -39
  45. package/themes/business/src/components/WebsocketStatus/index.tsx +2 -2
  46. package/themes/business/src/components/shared/OInput.tsx +2 -0
  47. package/themes/business/src/components/shared/OTextarea.tsx +8 -9
  48. package/themes/business/src/hooks/useLocation.tsx +5 -4
  49. package/themes/business/src/layouts/SafeAreaContainer.tsx +35 -19
  50. package/themes/business/src/types/index.tsx +15 -5
  51. package/themes/business/src/utils/index.tsx +19 -1
  52. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  53. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  54. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  55. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  56. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  57. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  58. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  59. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  60. package/themes/original/index.tsx +13 -1
  61. package/themes/original/src/components/AddressDetails/index.tsx +20 -10
  62. package/themes/original/src/components/AddressForm/index.tsx +32 -17
  63. package/themes/original/src/components/AddressList/index.tsx +8 -7
  64. package/themes/original/src/components/AnalyticsSegment/index.tsx +6 -6
  65. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  66. package/themes/original/src/components/BusinessBasicInformation/index.tsx +5 -8
  67. package/themes/original/src/components/BusinessController/index.tsx +12 -7
  68. package/themes/original/src/components/BusinessItemAccordion/index.tsx +13 -5
  69. package/themes/original/src/components/BusinessListingSearch/BusinessSearchFooter.tsx +2 -3
  70. package/themes/original/src/components/BusinessListingSearch/BusinessSearchHeader.tsx +1 -3
  71. package/themes/original/src/components/BusinessListingSearch/index.tsx +1 -2
  72. package/themes/original/src/components/BusinessPreorder/index.tsx +20 -15
  73. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/index.tsx +5 -5
  74. package/themes/original/src/components/BusinessProductsList/index.tsx +2 -2
  75. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  76. package/themes/original/src/components/BusinessProductsListing/index.tsx +18 -6
  77. package/themes/original/src/components/BusinessTypeFilter/index.tsx +9 -8
  78. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +2 -1
  79. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +1 -1
  80. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -1
  81. package/themes/original/src/components/BusinessesListing/index.tsx +0 -1
  82. package/themes/original/src/components/Cart/index.tsx +43 -15
  83. package/themes/original/src/components/CartContent/index.tsx +21 -8
  84. package/themes/original/src/components/Checkout/index.tsx +108 -60
  85. package/themes/original/src/components/CitiesControl/index.tsx +0 -3
  86. package/themes/original/src/components/CouponControl/index.tsx +1 -3
  87. package/themes/original/src/components/DriverTips/index.tsx +1 -3
  88. package/themes/original/src/components/Favorite/index.tsx +1 -5
  89. package/themes/original/src/components/FavoriteList/index.tsx +0 -1
  90. package/themes/original/src/components/ForgotPasswordForm/index.tsx +5 -7
  91. package/themes/original/src/components/GiftCard/GiftCardOrdersList/index.tsx +64 -0
  92. package/themes/original/src/components/GiftCard/GiftCardOrdersList/styles.tsx +8 -0
  93. package/themes/original/src/components/GiftCard/GiftCardUI/index.tsx +15 -17
  94. package/themes/original/src/components/GiftCard/PurchaseGiftCard/index.tsx +3 -7
  95. package/themes/original/src/components/GiftCard/RedeemGiftCard/index.tsx +24 -32
  96. package/themes/original/src/components/GiftCard/SendGiftCard/index.tsx +7 -9
  97. package/themes/original/src/components/GiftCard/SingleGiftCard/index.tsx +101 -0
  98. package/themes/original/src/components/GiftCard/SingleGiftCard/styles.tsx +4 -0
  99. package/themes/original/src/components/GiftCard/VerticalGiftCardOrdersLayout/index.tsx +82 -0
  100. package/themes/original/src/components/GiftCard/VerticalGiftCardOrdersLayout/styles.tsx +9 -0
  101. package/themes/original/src/components/GoogleMap/index.tsx +39 -18
  102. package/themes/original/src/components/Help/index.tsx +2 -0
  103. package/themes/original/src/components/HighestRatedBusinesses/index.tsx +1 -1
  104. package/themes/original/src/components/Home/index.tsx +2 -10
  105. package/themes/original/src/components/LoginForm/Otp/index.tsx +0 -3
  106. package/themes/original/src/components/LoginForm/index.tsx +4 -7
  107. package/themes/original/src/components/MessageListing/index.tsx +1 -0
  108. package/themes/original/src/components/Messages/index.tsx +8 -7
  109. package/themes/original/src/components/MomentOption/index.tsx +13 -2
  110. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +7 -3
  111. package/themes/original/src/components/MultiCheckout/index.tsx +139 -87
  112. package/themes/original/src/components/MultiOrdersDetails/index.tsx +2 -1
  113. package/themes/original/src/components/MyOrders/index.tsx +21 -26
  114. package/themes/original/src/components/NavBar/index.tsx +7 -4
  115. package/themes/original/src/components/NetworkError/index.tsx +0 -5
  116. package/themes/original/src/components/NotFoundSource/index.tsx +0 -3
  117. package/themes/original/src/components/OrderDetails/OrderEta.tsx +1 -1
  118. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +9 -9
  119. package/themes/original/src/components/OrderDetails/index.tsx +32 -13
  120. package/themes/original/src/components/OrderDetails/styles.tsx +0 -1
  121. package/themes/original/src/components/OrderProgress/index.tsx +22 -3
  122. package/themes/original/src/components/OrderSummary/index.tsx +28 -9
  123. package/themes/original/src/components/OrderTypeSelector/index.tsx +7 -6
  124. package/themes/original/src/components/OrdersOption/index.tsx +2 -4
  125. package/themes/original/src/components/PaymentOptionStripe/index.tsx +0 -5
  126. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  127. package/themes/original/src/components/PaymentOptions/index.tsx +17 -9
  128. package/themes/original/src/components/PlaceSpot/index.tsx +1 -3
  129. package/themes/original/src/components/PreviousOrders/index.tsx +1 -2
  130. package/themes/original/src/components/ProductForm/ActionButton.tsx +17 -20
  131. package/themes/original/src/components/ProductForm/index.tsx +107 -102
  132. package/themes/original/src/components/ProductItemAccordion/index.tsx +55 -49
  133. package/themes/original/src/components/ProductItemAccordion/styles.tsx +3 -4
  134. package/themes/original/src/components/ProductOptionSubOption/index.tsx +16 -8
  135. package/themes/original/src/components/ProfessionalProfile/index.tsx +4 -5
  136. package/themes/original/src/components/Promotions/index.tsx +6 -9
  137. package/themes/original/src/components/ReviewDriver/index.tsx +1 -1
  138. package/themes/original/src/components/ReviewOrder/index.tsx +2 -2
  139. package/themes/original/src/components/ReviewProducts/index.tsx +1 -1
  140. package/themes/original/src/components/ReviewTrigger/index.tsx +2 -2
  141. package/themes/original/src/components/ServiceForm/index.tsx +52 -54
  142. package/themes/original/src/components/Sessions/index.tsx +3 -3
  143. package/themes/original/src/components/SignupForm/index.tsx +86 -78
  144. package/themes/original/src/components/SingleOrderCard/index.tsx +7 -5
  145. package/themes/original/src/components/SingleProductCard/index.tsx +3 -4
  146. package/themes/original/src/components/SingleProductCard/styles.tsx +0 -3
  147. package/themes/original/src/components/StripeCardForm/index.tsx +0 -3
  148. package/themes/original/src/components/StripeCardsList/index.tsx +10 -3
  149. package/themes/original/src/components/StripeElementsForm/index.tsx +77 -60
  150. package/themes/original/src/components/StripeElementsForm/naked.tsx +48 -1
  151. package/themes/original/src/components/StripeRedirectForm/index.tsx +0 -3
  152. package/themes/original/src/components/TaxInformation/index.tsx +3 -2
  153. package/themes/original/src/components/UpsellingProducts/UpsellingContent.tsx +10 -7
  154. package/themes/original/src/components/UpsellingProducts/UpsellingLayout.tsx +8 -3
  155. package/themes/original/src/components/UserDetails/index.tsx +3 -2
  156. package/themes/original/src/components/UserFormDetails/index.tsx +155 -131
  157. package/themes/original/src/components/UserProfile/index.tsx +11 -2
  158. package/themes/original/src/components/Wallets/index.tsx +6 -3
  159. package/themes/original/src/components/WebsocketStatus/index.tsx +169 -0
  160. package/themes/original/src/components/WebsocketStatus/styles.tsx +28 -0
  161. package/themes/original/src/components/shared/OAlert.tsx +2 -1
  162. package/themes/original/src/components/shared/OButton.tsx +5 -4
  163. package/themes/original/src/components/shared/OInput.tsx +4 -8
  164. package/themes/original/src/types/index.tsx +5 -1
  165. package/themes/original/src/utils/index.tsx +12 -1
  166. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -57,7 +57,7 @@ export const OrderEta = (props: any) => {
57
57
  }
58
58
  estimatedUtcTime = moment.utc(_delivery).add(totalEta, 'minutes')
59
59
  const _estimatedTime = outputFormat ? moment(estimatedUtcTime).local().format(outputFormat) : parseDate(estimatedUtcTime, { utc: false })
60
- setEstimatedDeliveryTime(_estimatedTime)
60
+ setEstimatedDeliveryTime(order?.status === 13 ? parseDate(_delivery, { utc: !!order?.delivery_datetime_utc, outputFormat: outputFormat }) : _estimatedTime)
61
61
  }
62
62
 
63
63
  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: {
@@ -90,7 +92,7 @@ export const OrderHistory = (props: any) => {
90
92
  return (
91
93
  <ScrollView contentContainerStyle={styles.container}>
92
94
  <OText size={20} style={{ alignSelf: 'center', textAlign: 'center' }} mBottom={10}>
93
- {t('DETAILS_OF_ORDER', 'Details of Order_NUMBER_').replace('_NUMBER_', ` # ${order?.id}`)}
95
+ {t('DETAILS_OF_ORDER', 'Details of Order_NUMBER_').replace('_NUMBER_', (changeIdToExternalId && order?.external_id) || `# ${order?.id}`)}
94
96
  </OText>
95
97
  {!messages?.loading && order && (
96
98
  <View style={styles.historyItem}>
@@ -145,10 +147,10 @@ export const OrderHistory = (props: any) => {
145
147
  </>
146
148
  )
147
149
  : 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
- </>
150
+ <>
151
+ {t('TIME_ADDED_BY_BUSINESS', 'Time added by business')}{'\n'}
152
+ {formatSeconds(parseInt(message.change.new, 10))}
153
+ </>
152
154
  ) : t(ORDER_STATUS[parseInt(message.change.new, 10)])
153
155
  }
154
156
  </OText>
@@ -170,11 +172,9 @@ export const OrderHistory = (props: any) => {
170
172
  ))}
171
173
  <OButton
172
174
  text={enableReview ? t('REVIEW_ORDER', 'Review order') : t('CONTINUE', 'Continue')}
173
- textStyle={{ fontSize: 14, color: theme.colors.white }}
175
+ textStyle={{ fontSize: 14 }}
174
176
  imgRightSrc={theme.images.general.arrow_right}
175
177
  imgRightStyle={{ tintColor: theme.colors.white, right: 5, margin: 5 }}
176
- borderColor='transparent'
177
- bgColor={theme.colors.primary}
178
178
  style={{ borderRadius: 7.6, borderWidth: 1, height: 44, shadowOpacity: 0, marginBottom: 30, marginTop: 20 }}
179
179
  onClick={() => handleReview()}
180
180
  />
@@ -148,6 +148,8 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
148
148
  const hideDriverMessages = theme?.confirmation?.components?.driver?.components?.messages?.hidden
149
149
  const hideCustomerPhone = theme?.confirmation?.components?.customer?.components?.phone?.hidden
150
150
  const hideCustomerAddress = theme?.confirmation?.components?.customer?.components?.address?.hidden
151
+ const changeIdToExternalId = configs?.change_order_id?.value === '1'
152
+
151
153
  const progressBarObjt = isPickup ? getOrderStatuPickUp : getOrderStatus
152
154
  const walletName: any = {
153
155
  cash: {
@@ -185,18 +187,18 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
185
187
  navigation.navigate('BottomTab');
186
188
  };
187
189
 
188
- const getIncludedTaxes = () => {
190
+ const getIncludedTaxes = (isDeliveryFee?: boolean) => {
189
191
  if (order?.taxes?.length === 0 || !order?.taxes) {
190
192
  return order.tax_type === 1 ? order?.summary?.tax ?? 0 : 0
191
193
  } else {
192
194
  return order?.taxes.reduce((taxIncluded: number, tax: any) => {
193
- return taxIncluded + (tax.type === 1 ? tax.summary?.tax : 0)
195
+ return taxIncluded + (((!isDeliveryFee && tax.type === 1 && tax.target === 'product') || (isDeliveryFee && tax.type === 1 && tax.target === 'delivery_fee')) ? tax.summary?.tax : 0)
194
196
  }, 0)
195
197
  }
196
198
  }
197
199
 
198
200
  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)
201
+ 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
202
  }
201
203
 
202
204
  const handleClickOrderReview = (order: any) => {
@@ -270,7 +272,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
270
272
  title: t('DRIVER', 'Driver'),
271
273
  icon:
272
274
  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',
275
+ theme?.images?.general?.driverPng,
274
276
  },
275
277
  {
276
278
  ...order?.business?.location,
@@ -386,7 +388,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
386
388
  numberOfLines={2}
387
389
  ellipsizeMode='tail'
388
390
  >
389
- {`${t('ORDER', 'Order')} #${order?.id}`}
391
+ {`${t('ORDER', 'Order')} ${(changeIdToExternalId && order?.external_id) || `#${order?.id}`}`}
390
392
  </OText>
391
393
  )}
392
394
  </>
@@ -460,8 +462,8 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
460
462
  <Header>
461
463
  <NavBar
462
464
  hideArrowLeft
463
- title={`${t('ORDER', 'Order')} #${order?.id}`}
464
- titleAlign={'center'}
465
+ title={`${t('ORDER', 'Order')} ${(changeIdToExternalId && order?.external_id) || `#${order?.id}`}`}
466
+ titleAlign={'left'}
465
467
  showCall={false}
466
468
  btnStyle={{ paddingLeft: 0 }}
467
469
  style={{ marginTop: Platform.OS === 'ios' ? 0 : 20 }}
@@ -643,7 +645,6 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
643
645
  <OButton
644
646
  text={t('GET_DIRECTIONS', 'Get Directions')}
645
647
  imgRightSrc=''
646
- textStyle={{ color: theme.colors.white }}
647
648
  style={{
648
649
  alignSelf: 'center',
649
650
  borderRadius: 10,
@@ -750,6 +751,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
750
751
  }
751
752
  locations={parsedLocations}
752
753
  readOnly
754
+ manualZoom
753
755
  />
754
756
  </Map>
755
757
  )}
@@ -832,9 +834,8 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
832
834
  <OButton
833
835
  text={t('YOUR_ORDERS', 'Your Orders')}
834
836
  textStyle={{ fontSize: 14, color: theme.colors.primary }}
837
+ bgColor={theme.colors.white}
835
838
  imgRightSrc={null}
836
- borderColor={theme.colors.primary}
837
- bgColor={theme.colors.clear}
838
839
  style={{ borderRadius: 7.6, borderWidth: 1, height: 44, shadowOpacity: 0 }}
839
840
  parentStyle={{ marginTop: 29, marginEnd: 15 }}
840
841
  onClick={() => navigation.navigate('BottomTab', { screen: 'MyOrders' })}
@@ -934,7 +935,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
934
935
  )
935
936
  }
936
937
  {
937
- order?.taxes?.length > 0 && order?.taxes?.filter((tax: any) => tax?.type === 2 && tax?.rate !== 0).map((tax: any) => (
938
+ order?.taxes?.length > 0 && order?.taxes?.filter((tax: any) => tax?.type === 2 && tax?.rate !== 0 && tax?.target === 'product').map((tax: any) => (
938
939
  <Table key={tax.id}>
939
940
  <OSRow>
940
941
  <OText size={12} lineHeight={18} weight={'400'} color={theme.colors.textNormal} numberOfLines={1}>
@@ -983,12 +984,30 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
983
984
  </Table>
984
985
  ))
985
986
  }
986
- {typeof order?.summary?.delivery_price === 'number' && (
987
+ {typeof order?.summary?.delivery_price === 'number' && !isPickup && (
987
988
  <Table>
988
989
  <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>
990
+ <OText size={12} lineHeight={18} weight={'400'} color={theme.colors.textNormal}>{parsePrice(order?.summary?.delivery_price + getIncludedTaxes(true))}</OText>
990
991
  </Table>
991
992
  )}
993
+ {
994
+ order?.taxes?.length > 0 && order?.taxes?.filter((tax: any) => tax?.type === 2 && tax?.rate !== 0 && tax?.target === 'delivery_fee').map((tax: any, i: number) => (
995
+ <Table key={`${tax?.description}_${i}`}>
996
+ <OSRow>
997
+ <OText size={12} lineHeight={18} weight={'400'} color={theme.colors.textNormal} numberOfLines={1}>
998
+ {t(tax?.name?.toUpperCase()?.replace(/ /g, '_'), tax?.name) || t('INHERIT_FROM_BUSINESS', 'Inherit from business')}
999
+ {`(${verifyDecimals(tax?.rate, parseNumber)}%)`}
1000
+ </OText>
1001
+ {setOpenTaxModal && (
1002
+ <TouchableOpacity onClick={() => setOpenTaxModal({ open: true, data: tax, type: 'tax' })}>
1003
+ <AntIcon name='infocirlceo' size={16} color={theme.colors.primary} />
1004
+ </TouchableOpacity>
1005
+ )}
1006
+ </OSRow>
1007
+ <OText size={12} lineHeight={18} weight={'400'} color={theme.colors.textNormal}>{parsePrice(tax?.summary?.tax_after_discount ?? tax?.summary?.tax ?? 0)}</OText>
1008
+ </Table>
1009
+ ))
1010
+ }
992
1011
  {
993
1012
  order?.offers?.length > 0 && order?.offers?.filter((offer: any) => offer?.target === 2)?.map((offer: any) => (
994
1013
  <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
 
@@ -23,6 +23,7 @@ import {
23
23
  OrderProgressWrapper
24
24
  } from './styles'
25
25
  import { getOrderStatuPickUp, getOrderStatus } from '../../utils'
26
+ import DeviceInfo from 'react-native-device-info'
26
27
 
27
28
  const OrderProgressUI = (props: any) => {
28
29
  const {
@@ -56,7 +57,9 @@ const OrderProgressUI = (props: any) => {
56
57
  shadowColor: '#000',
57
58
  shadowOpacity: 0.2,
58
59
  shadowRadius: 2,
59
- elevation: 3
60
+ elevation: 3,
61
+ borderWidth: 1,
62
+ borderColor: 'rgba(0,0,0,0.1)'
60
63
  },
61
64
  logoWrapper: {
62
65
  overflow: 'hidden',
@@ -110,7 +113,7 @@ const OrderProgressUI = (props: any) => {
110
113
  setInitialLoaded(true)
111
114
  }, [orderList.loading, initialLoaded])
112
115
 
113
- const progressBarObjt = lastOrder?.delivery_type && lastOrder?.delivery_type === 2 ? getOrderStatuPickUp : getOrderStatus
116
+ const progressBarObjt = (s: any) => lastOrder?.delivery_type && lastOrder?.delivery_type === 2 ? getOrderStatuPickUp(s) : getOrderStatus(s)
114
117
 
115
118
  return (
116
119
  <>
@@ -130,7 +133,7 @@ const OrderProgressUI = (props: any) => {
130
133
  <View style={styles.logoWrapper}>
131
134
  <FastImage
132
135
  style={{ width: 50, height: 50 }}
133
- source={orderList?.orders.length === 1 ? {
136
+ source={orderList?.orders.length === 1 && lastOrder?.business?.logo?.includes?.('http') ? {
134
137
  uri: optimizeImage(lastOrder?.business?.logo, 'h_50,c_limit'),
135
138
  priority: FastImage.priority.normal,
136
139
  } : theme.images.logos.logotype}
@@ -209,6 +212,22 @@ export const OrderProgress = (props: any) => {
209
212
  pageSize: 10,
210
213
  controlType: 'infinity'
211
214
  },
215
+ propsToFetch: [
216
+ 'id',
217
+ 'name',
218
+ 'business',
219
+ 'status',
220
+ 'delivery_type',
221
+ 'delivery_datetime_utc',
222
+ 'delivery_datetime',
223
+ 'reporting_data',
224
+ 'eta_current_status_time',
225
+ 'eta_previous_status_times',
226
+ 'eta_time',
227
+ 'delivered_in',
228
+ 'prepared_in',
229
+ 'eta_drive_time'
230
+ ],
212
231
  noGiftCardOrders: true
213
232
  }
214
233
 
@@ -47,7 +47,9 @@ const OrderSummaryUI = (props: any) => {
47
47
  cateringTypes,
48
48
  hideDeliveryFee,
49
49
  loyaltyRewardRate,
50
- maxDate
50
+ maxDate,
51
+ hideCommentsByValidationCheckout,
52
+ hideCouponByValidationCheckout
51
53
  } = props;
52
54
 
53
55
  const theme = useTheme()
@@ -55,11 +57,10 @@ const OrderSummaryUI = (props: any) => {
55
57
  const [{ configs }] = useConfig();
56
58
  const [orderState] = useOrder();
57
59
  const [{ parsePrice, parseNumber }] = useUtils();
58
- const [validationFields] = useValidationFields();
59
60
  const commentRef = useRef()
60
61
  const [openTaxModal, setOpenTaxModal] = useState<any>({ open: false, data: null, type: '' })
61
- const isCouponEnabled = validationFields?.fields?.checkout?.coupon?.enabled;
62
- const hideCartComments = !validationFields?.fields?.checkout?.comments?.enabled
62
+ const isCouponEnabled = hideCouponByValidationCheckout
63
+ const hideCartComments = hideCommentsByValidationCheckout
63
64
 
64
65
  const cart = orderState?.carts?.[`businessId:${props.cart.business_id}`]
65
66
 
@@ -72,12 +73,14 @@ const OrderSummaryUI = (props: any) => {
72
73
  }
73
74
  }
74
75
 
75
- const getIncludedTaxes = () => {
76
+ const getIncludedTaxes = (isDeliveryFee?: boolean) => {
76
77
  if (cart?.taxes === null || !cart?.taxes) {
77
78
  return cart?.business?.tax_type === 1 ? cart?.tax : 0
78
79
  } else {
79
80
  return cart?.taxes.reduce((taxIncluded: number, tax: any) => {
80
- return taxIncluded + (tax.type === 1 ? tax.summary?.tax : 0)
81
+ return taxIncluded +
82
+ (((!isDeliveryFee && tax.type === 1 && tax.target === 'product') ||
83
+ (isDeliveryFee && tax.type === 1 && tax.target === 'delivery_fee')) ? tax.summary?.tax : 0)
81
84
  }, 0)
82
85
  }
83
86
  }
@@ -102,7 +105,7 @@ const OrderSummaryUI = (props: any) => {
102
105
  }
103
106
 
104
107
  const getIncludedTaxesDiscounts = () => {
105
- return cart?.taxes?.filter((tax: any) => tax?.type === 1)?.reduce((carry: number, tax: any) => carry + (tax?.summary?.tax_after_discount ?? tax?.summary?.tax), 0)
108
+ return cart?.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)
106
109
  }
107
110
 
108
111
  const OfferAlert = ({ offerId }: any) => {
@@ -194,7 +197,7 @@ const OrderSummaryUI = (props: any) => {
194
197
  </OSTable>
195
198
  )}
196
199
  {
197
- cart.taxes?.length > 0 && cart.taxes.filter((tax: any) => tax.type === 2 && tax?.rate !== 0).map((tax: any) => (
200
+ cart.taxes?.length > 0 && cart.taxes.filter((tax: any) => tax.type === 2 && tax?.rate !== 0 && tax?.target === 'product').map((tax: any, i: number) => (
198
201
  <OSTable key={tax.id}>
199
202
  <OSRow>
200
203
  <OText size={12} numberOfLines={1} >
@@ -249,9 +252,25 @@ const OrderSummaryUI = (props: any) => {
249
252
  {orderState?.options?.type === 1 && !hideDeliveryFee && (
250
253
  <OSTable>
251
254
  <OText size={12}>{t('DELIVERY_FEE', 'Delivery Fee')}</OText>
252
- <OText size={12}>{parsePrice(cart?.delivery_price_with_discount)}</OText>
255
+ <OText size={12}>{parsePrice(cart?.delivery_price_with_discount + getIncludedTaxes(true))}</OText>
253
256
  </OSTable>
254
257
  )}
258
+ {
259
+ cart?.taxes?.length > 0 && cart?.taxes?.filter((tax: any) => tax?.type === 2 && tax?.rate !== 0 && tax?.target === 'delivery_fee').map((tax: any, i: number) => (
260
+ <OSTable key={`${tax.description}_${i}`}>
261
+ <OSRow>
262
+ <OText size={12} numberOfLines={1}>
263
+ {tax.name || t('INHERIT_FROM_BUSINESS', 'Inherit from business')}
264
+ {`(${verifyDecimals(tax?.rate, parseNumber)}%)`}
265
+ </OText>
266
+ <TouchableOpacity onPress={() => setOpenTaxModal({ open: true, data: tax, type: 'tax' })}>
267
+ <AntIcon name='infocirlceo' size={16} color={theme.colors.primary} />
268
+ </TouchableOpacity>
269
+ </OSRow>
270
+ <OText size={12}>{parsePrice(tax?.summary?.tax_after_discount ?? tax?.summary?.tax ?? 0)}</OText>
271
+ </OSTable>
272
+ ))
273
+ }
255
274
  {
256
275
  cart?.offers?.length > 0 && cart?.offers?.filter((offer: any) => offer?.target === 2)?.map((offer: any) => (
257
276
  <OSTable key={offer.id}>
@@ -31,14 +31,14 @@ const OrderTypeSelectorUI = (props: OrderTypeSelectParams) => {
31
31
  const [orderState] = useOrder();
32
32
  const [, t] = useLanguage();
33
33
  const _orderTypes = orderTypes.filter((type: any) => configTypes?.includes(type.value));
34
- const orderTypeTitle = (type : string) => theme?.header?.components?.order_types?.components?.[type]?.components?.title
35
- const orderTypeDescription = (type : string) => theme?.header?.components?.order_types?.components?.[type]?.components?.description
36
- const orderTypeCallAction = (type : string) => theme?.header?.components?.order_types?.components?.[type]?.components?.call_to_action
34
+ const orderTypeTitle = (type: string) => theme?.header?.components?.order_types?.components?.[type]?.components?.title
35
+ const orderTypeDescription = (type: string) => theme?.header?.components?.order_types?.components?.[type]?.components?.description
36
+ const orderTypeCallAction = (type: string) => theme?.header?.components?.order_types?.components?.[type]?.components?.call_to_action
37
37
  const items = _orderTypes.map((type) => {
38
38
  return {
39
39
  value: type.value,
40
- label: orderTypeTitle(type.value) || t(type.content, type.content),
41
- description: orderTypeDescription(type.value) || t(type.description, 'Lorem ipsum dolor sit amet, consectetur.')
40
+ label: t(type.content, type.content),
41
+ description: t(type.description, 'Lorem ipsum dolor sit amet, consectetur.')
42
42
  }
43
43
  })
44
44
 
@@ -102,6 +102,7 @@ const OrderTypeSelectorUI = (props: OrderTypeSelectParams) => {
102
102
  style={{ paddingBottom: 0 }}
103
103
  title={t('HOW_WILL_YOU_DELIVERY_TYPE', 'How will your order type?')}
104
104
  titleAlign={'center'}
105
+ titleStyle={{ fontSize: 14 }}
105
106
  noMargin
106
107
  />
107
108
  {
@@ -115,7 +116,7 @@ const OrderTypeSelectorUI = (props: OrderTypeSelectParams) => {
115
116
  <OText size={12} lineHeight={18} color={theme.colors.white} weight={Platform.OS === 'android' ? 'bold' : '600'}>{item?.label}</OText>
116
117
  <OText size={10} lineHeight={15} color={theme.colors.white}>{item?.description}</OText>
117
118
  <View style={{ flexDirection: 'row', alignItems: 'center' }}>
118
- <OText size={10} lineHeight={15} color={theme.colors.white}>{orderTypeCallAction(item?.value) || t('START_MY_ORDER', 'Start my order')}</OText>
119
+ <OText size={10} lineHeight={15} color={theme.colors.white}>{t('START_MY_ORDER', 'Start my order')}</OText>
119
120
  <AntDesignIcon name='arrowleft' size={26} color={theme.colors.white} style={{ transform: [{ rotate: '180deg' }], marginStart: 4 }} />
120
121
  </View>
121
122
  </MaskCont>
@@ -159,10 +159,7 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
159
159
 
160
160
  useEffect(() => {
161
161
  if (reorderState?.error) {
162
- const errorMessage = (Array.isArray(reorderState?.result) || typeof reorderState?.result === 'string')
163
- ? reorderState?.result
164
- : t('CANT_REORDER_FOR_THIS_BUSINESS', 'Can’t reorder for this store, please create order manually.')
165
- showToast(ToastType.Error, errorMessage)
162
+ showToast(ToastType.Error, reorderState?.result)
166
163
  }
167
164
  }, [reorderState])
168
165
 
@@ -353,6 +350,7 @@ export const OrdersOption = (props: OrdersOptionParams) => {
353
350
  const MyOrdersProps = {
354
351
  ...props,
355
352
  UIComponent: OrdersOptionUI,
353
+ noGiftCardOrders: true,
356
354
  orderStatus: getAllOrders
357
355
  ? [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23]
358
356
  : props.preOrders ? [13] : props.activeOrders
@@ -131,7 +131,6 @@ const PaymentOptionStripeUI = (props: any) => {
131
131
  bgColor={theme.colors.backgroundGray}
132
132
  borderColor={theme.colors.backgroundGray}
133
133
  style={styles.btnAddStyle}
134
- textStyle={{ color: 'white' }}
135
134
  imgRightSrc={null}
136
135
  onClick={() => setAddCardOpen(true)}
137
136
  />
@@ -141,7 +140,6 @@ const PaymentOptionStripeUI = (props: any) => {
141
140
  text={t('CANCEL', 'Cancel')}
142
141
  bgColor={theme.colors.backgroundGray}
143
142
  borderColor={theme.colors.backgroundGray}
144
- textStyle={{ color: 'white' }}
145
143
  style={styles.btnAction}
146
144
  imgRightSrc={null}
147
145
  onClick={() => onCancel()}
@@ -150,9 +148,6 @@ const PaymentOptionStripeUI = (props: any) => {
150
148
  <View style={{ width: '48%' }}>
151
149
  <OButton
152
150
  text={t('ACCEPT', 'Accept')}
153
- bgColor={theme.colors.primary}
154
- borderColor={theme.colors.primary}
155
- textStyle={{ color: 'white' }}
156
151
  style={styles.btnAction}
157
152
  imgRightSrc={null}
158
153
  isDisabled={!cardSelected || cardsList?.cards?.length === 0}
@@ -45,7 +45,7 @@ const PaymentOptionWalletUI = (props: any) => {
45
45
  new Array(walletsState.result?.length).fill(false)
46
46
  );
47
47
 
48
- const creditBalance: any = (wallet: any) => ` = ${parsePrice(wallet.balance / wallet.redemption_rate, { isTruncable: true })}`
48
+ const creditBalance: any = (wallet: any) => ` = ${parsePrice(wallet.balance / wallet.redemption_rate)}`
49
49
 
50
50
  const walletName: any = {
51
51
  cash: {
@@ -87,65 +87,65 @@ const PaymentOptionWalletUI = (props: any) => {
87
87
  {!walletsState.loading &&
88
88
  !walletsState.error &&
89
89
  walletsState.result?.length > 0 &&
90
- (
91
- <>
92
- {walletsState.result?.map((wallet: any, idx: any) => wallet.valid && wallet.balance >= 0 && walletName[wallet.type]?.isActive && (
93
- <Container
94
- key={wallet.id}
95
- isBottomBorder={idx === walletsState.result?.filter((wallet: any) => wallet.valid)?.length - 1}
96
- onPress={() => handleOnChange(idx, wallet)}
97
- disabled={(cart?.balance === 0 && !checkedState[idx]) || wallet.balance === 0}
98
- >
99
- <SectionLeft>
100
- {checkedState[idx] ? (
101
- <MaterialCommunityIcons
102
- name="checkbox-marked"
103
- size={25}
104
- color={theme.colors.primary}
105
- />
106
- ) : (
107
- <MaterialCommunityIcons
108
- name="checkbox-blank-outline"
109
- size={25}
110
- color={theme.colors.disabled}
111
- />
112
- )}
113
- <View style={{ alignItems: 'baseline', marginLeft: 5 }}>
114
- <View>
115
- <OText
116
- style={((cart?.balance === 0 && !checkedState[idx]) || wallet.balance === 0) ? {
117
- color: theme.colors.disabled
118
- } : {}}
119
- >
120
- {walletName[wallet.type]?.name}
121
- </OText>
122
- </View>
90
+ (
91
+ <>
92
+ {walletsState.result?.map((wallet: any, idx: any) => wallet.valid && wallet.balance >= 0 && walletName[wallet.type]?.isActive && (
93
+ <Container
94
+ key={wallet.id}
95
+ isBottomBorder={idx === walletsState.result?.filter((wallet: any) => wallet.valid)?.length - 1}
96
+ onPress={() => handleOnChange(idx, wallet)}
97
+ disabled={(cart?.balance === 0 && !checkedState[idx]) || wallet.balance === 0}
98
+ >
99
+ <SectionLeft>
100
+ {checkedState[idx] ? (
101
+ <MaterialCommunityIcons
102
+ name="checkbox-marked"
103
+ size={25}
104
+ color={theme.colors.primary}
105
+ />
106
+ ) : (
107
+ <MaterialCommunityIcons
108
+ name="checkbox-blank-outline"
109
+ size={25}
110
+ color={theme.colors.disabled}
111
+ />
112
+ )}
113
+ <View style={{ alignItems: 'baseline', marginLeft: 5 }}>
114
+ <View>
115
+ <OText
116
+ style={((cart?.balance === 0 && !checkedState[idx]) || wallet.balance === 0) ?{
117
+ color: theme.colors.disabled
118
+ } : {}}
119
+ >
120
+ {walletName[wallet.type]?.name}
121
+ </OText>
123
122
  </View>
124
- </SectionLeft>
125
-
126
- <View style={{ maxWidth: '35%', alignItems: 'flex-end' }}>
127
- {wallet.type === 'cash' && (
128
- <OText>
129
- {parsePrice(wallet?.balance, { isTruncable: true })}
123
+ </View>
124
+ </SectionLeft>
125
+
126
+ <View style={{maxWidth: '35%', alignItems: 'flex-end' }}>
127
+ {wallet.type === 'cash' && (
128
+ <OText>
129
+ {parsePrice(wallet?.balance)}
130
+ </OText>
131
+ )}
132
+ {wallet.type === 'credit_point' && (
133
+ <OText>
134
+ <OText color={theme.colors.primary} weight='bold'>
135
+ {`${wallet?.balance} ${t('POINTS', 'Points')}`}
130
136
  </OText>
131
- )}
132
- {wallet.type === 'credit_point' && (
133
137
  <OText>
134
- <OText color={theme.colors.primary} weight='bold'>
135
- {`${wallet?.balance} ${t('POINTS', 'Points')}`}
136
- </OText>
137
- <OText>
138
- {wallet?.balance > 0
139
- ? creditBalance(wallet)
140
- : null}
141
- </OText>
138
+ {wallet?.balance > 0
139
+ ? creditBalance(wallet)
140
+ : null}
142
141
  </OText>
143
- )}
144
- </View>
145
- </Container>
146
- ))}
147
- </>
148
- )}
142
+ </OText>
143
+ )}
144
+ </View>
145
+ </Container>
146
+ ))}
147
+ </>
148
+ )}
149
149
 
150
150
  {walletsState?.loading && (
151
151
  <View>