ordering-ui-react-native 0.22.2 → 0.22.3-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 +138 -64
  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 +173 -154
  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 +112 -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,5 +1,4 @@
1
1
  import React, { useState, useCallback } from 'react'
2
-
3
2
  import { Platform, StyleSheet, View, TouchableOpacity, ScrollView } from 'react-native';
4
3
  import AntDesignIcon from 'react-native-vector-icons/AntDesign'
5
4
 
@@ -13,6 +12,8 @@ import {
13
12
  OrderBill,
14
13
  Total,
15
14
  OSRow,
15
+ OrderVehicle,
16
+ OrderSpot,
16
17
  } from './styles';
17
18
 
18
19
  import { ProductItemAccordion } from '../ProductItemAccordion';
@@ -23,7 +24,8 @@ import {
23
24
  useLanguage,
24
25
  useUtils,
25
26
  useConfig,
26
- useSession
27
+ useSession,
28
+ useApi
27
29
  } from 'ordering-components/native';
28
30
  import { useTheme } from 'styled-components/native';
29
31
  import { ReviewCustomer } from '../ReviewCustomer'
@@ -44,6 +46,7 @@ interface OrderContent {
44
46
  export const OrderContentComponent = (props: OrderContent) => {
45
47
  const [, t] = useLanguage();
46
48
  const theme = useTheme()
49
+ const [ordering] = useApi()
47
50
  const [{ user }] = useSession()
48
51
  const { order, logisticOrderStatus, isOrderGroup, lastOrder } = props;
49
52
  const [{ parsePrice, parseNumber }] = useUtils();
@@ -66,6 +69,7 @@ export const OrderContentComponent = (props: OrderContent) => {
66
69
  })
67
70
 
68
71
  const pastOrderStatuses = [1, 2, 5, 6, 10, 11, 12, 16, 17]
72
+ const deliveryTypes = [1, 7]
69
73
 
70
74
  const walletName: any = {
71
75
  cash: {
@@ -97,19 +101,21 @@ export const OrderContentComponent = (props: OrderContent) => {
97
101
  }
98
102
  })
99
103
 
100
- const getIncludedTaxes = () => {
104
+ const getIncludedTaxes = (isDeliveryFee?: boolean) => {
101
105
  if (!order?.taxes) return 0
102
106
  if (order?.taxes?.length === 0) {
103
107
  return order.tax_type === 1 ? order?.summary?.tax ?? 0 : 0
104
108
  } else {
105
109
  return order?.taxes.reduce((taxIncluded: number, tax: any) => {
106
- return taxIncluded + (tax.type === 1 ? tax.summary?.tax : 0)
110
+ return taxIncluded +
111
+ (((!isDeliveryFee && tax.type === 1 && tax.target === 'product') ||
112
+ (isDeliveryFee && tax.type === 1 && tax.target === 'delivery_fee')) ? tax.summary?.tax : 0)
107
113
  }, 0)
108
114
  }
109
115
  }
110
116
 
111
117
  const getIncludedTaxesDiscounts = () => {
112
- return order?.taxes?.filter((tax: any) => tax?.type === 1)?.reduce((carry: number, tax: any) => carry + (tax?.summary?.tax_after_discount ?? tax?.summary?.tax), 0)
118
+ 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)
113
119
  }
114
120
 
115
121
  const containsOnlyNumbers = (str: string) => {
@@ -219,8 +225,8 @@ export const OrderContentComponent = (props: OrderContent) => {
219
225
  <OLink
220
226
  PressStyle={styles.linkWithIcons}
221
227
  url={Platform.select({
222
- ios: `maps:0,0?q=${order?.business?.address}`,
223
- android: `geo:0,0?q=${order?.business?.address}`,
228
+ ios: `maps:0,0?q=${order?.business?.address}@${order?.business?.location?.lat},${order?.business?.location?.lng}`,
229
+ android: `geo:0,0?q=${order?.business?.address}@${order?.business?.location?.lat},${order?.business?.location?.lng}`,
224
230
  })}
225
231
  numberOfLines={2}
226
232
  shorcut={order?.business?.address}
@@ -230,7 +236,7 @@ export const OrderContentComponent = (props: OrderContent) => {
230
236
  )}
231
237
  {!!order?.business?.location && order?.customer?.location && (
232
238
  <OText>
233
- {t('DISTANCE_TO_THE_BUSINESS', 'Distance to the business')}: {transformDistance(calculateDistance(order?.business?.location, { latitude: order?.customer?.location?.lat, longitude: order?.customer?.location?.lng }), distanceUnit)} {t(distanceUnit.toUpperCase(), distanceUnit)}
239
+ {t('DISTANCE_TO_THE_BUSINESS', 'Distance to the business')}: {transformDistance(calculateDistance(order?.business?.location, { latitude: order?.customer?.location?.lat, longitude: order?.customer?.location?.lng }), distanceUnit)} {t(distanceUnit?.toUpperCase?.(), distanceUnit)}
234
240
  </OText>
235
241
  )}
236
242
  {!!order?.business?.address_notes && (
@@ -239,8 +245,8 @@ export const OrderContentComponent = (props: OrderContent) => {
239
245
  <OLink
240
246
  PressStyle={styles.linkWithIcons}
241
247
  url={Platform.select({
242
- ios: `maps:0,0?q=${order?.business?.address_notes}`,
243
- android: `geo:0,0?q=${order?.business?.address_notes}`,
248
+ ios: `maps:0,0?q=${order?.business?.address_notes}@${order?.business?.location?.lat},${order?.business?.location?.lng}`,
249
+ android: `geo:0,0?q=${order?.business?.address_notes}@${order?.business?.location?.lat},${order?.business?.location?.lng}`,
244
250
  })}
245
251
  shorcut={order?.business?.address_notes}
246
252
  TextStyle={styles.textLink}
@@ -360,8 +366,8 @@ export const OrderContentComponent = (props: OrderContent) => {
360
366
  <OLink
361
367
  PressStyle={{ ...styles.linkWithIcons, marginBottom: 0 }}
362
368
  url={Platform.select({
363
- ios: `maps:0,0?q=${order?.customer?.address}`,
364
- android: `geo:0,0?q=${order?.customer?.address}`,
369
+ ios: `maps:0,0?q=${order?.customer?.address}@${order?.customer?.location?.lat},${order?.customer?.location?.lng}`,
370
+ android: `geo:0,0?q=${order?.customer?.address}@${order?.customer?.location?.lat},${order?.customer?.location?.lng}`,
365
371
  })}
366
372
  onTextLayout={e => onTextLayout(e, 'customerAddress')}
367
373
  numberOfLines={isReadMore.customerAddress ? 20 : 2}
@@ -408,26 +414,16 @@ export const OrderContentComponent = (props: OrderContent) => {
408
414
  {t('ON_BEHALF_OF', 'On behalf of')}{': '} {order?.on_behalf_of}
409
415
  </OText>
410
416
  )}
411
- {((order?.delivery_option !== undefined && order?.delivery_type === 1) || !!order?.comment) && (
417
+ {(order?.delivery_option !== undefined && deliveryTypes.includes(order?.delivery_type)) && (
412
418
  <View style={{ marginTop: 10 }}>
413
- {order?.delivery_option !== undefined && order?.delivery_type === 1 && (
419
+ {order?.delivery_option !== undefined && deliveryTypes.includes(order?.delivery_type) && (
414
420
  <OText>
415
- {t(order?.delivery_option?.name?.toUpperCase()?.replace(/ /g, '_'), order?.delivery_option?.name)}
421
+ {t(order?.delivery_option?.name?.toUpperCase?.()?.replace(/ /g, '_'), order?.delivery_option?.name)}
416
422
  </OText>
417
423
  )}
418
- {!!order?.comment && (
419
- <>
420
- <OText weight='500' style={{ marginBottom: 5 }}>
421
- {t('ORDER_COMMENT', 'Order Comment')}
422
- </OText>
423
- <OText style={{ fontStyle: 'italic', opacity: 0.6, marginBottom: 20 }}>
424
- {order?.comment}
425
- </OText>
426
- </>
427
- )}
428
424
  </View>
429
425
  )}
430
- {!order?.user_review && pastOrderStatuses.includes(order?.status) && (
426
+ {!order?.user_review && pastOrderStatuses.includes(order?.status) && order?.customer_id && (
431
427
  <OButton
432
428
  style={styles.btnReview}
433
429
  textStyle={{ color: theme.colors.white }}
@@ -439,10 +435,26 @@ export const OrderContentComponent = (props: OrderContent) => {
439
435
  </OrderCustomer>
440
436
 
441
437
  <OrderProducts>
442
- <OText style={{ marginBottom: 5 }} size={16} weight="600">
438
+ <OText style={{ marginBottom: 10 }} size={16} weight="600">
443
439
  {t('ORDER_DETAILS', 'Order Details')}
444
440
  </OText>
445
441
 
442
+ {!!order?.comment && (
443
+ <>
444
+ <OText>
445
+ {`${t('ORDER_COMMENT', 'Order Comment')}: `}
446
+ </OText>
447
+ <OText
448
+ {...(ordering?.project?.includes('delosi') && {
449
+ color: theme.colors.primary,
450
+ weight: 'bold'
451
+ })}
452
+ >
453
+ {order?.comment}
454
+ </OText>
455
+ </>
456
+ )}
457
+
446
458
  {order?.products?.length > 0 &&
447
459
  order?.products.map((product: any, i: number) => (
448
460
  <ProductItemAccordion
@@ -453,7 +465,7 @@ export const OrderContentComponent = (props: OrderContent) => {
453
465
  ))}
454
466
  </OrderProducts>
455
467
 
456
- <OrderBill>
468
+ <OrderBill vehicleExists={!!order?.vehicle}>
457
469
  <Table>
458
470
  <OText mBottom={4}>{t('SUBTOTAL', 'Subtotal')}</OText>
459
471
  <OText mBottom={4}>
@@ -478,7 +490,7 @@ export const OrderContentComponent = (props: OrderContent) => {
478
490
  <Table key={offer.id}>
479
491
  <OSRow>
480
492
  <OText mBottom={4}>
481
- {t(offer.name?.toUpperCase()?.replace(/ /g, '_'), offer.name)}
493
+ {t(offer.name?.toUpperCase?.()?.replace(/ /g, '_'), offer.name)}
482
494
  {offer.rate_type === 1 && (
483
495
  <OText>{`(${verifyDecimals(offer?.rate, parsePrice)}%)`}</OText>
484
496
  )}
@@ -520,11 +532,11 @@ export const OrderContentComponent = (props: OrderContent) => {
520
532
  )
521
533
  }
522
534
  {
523
- order?.taxes?.length > 0 && order?.taxes?.filter((tax: any) => tax?.type === 2 && tax?.rate !== 0).map((tax: any) => (
535
+ order?.taxes?.length > 0 && order?.taxes?.filter((tax: any) => tax?.type === 2 && tax?.rate !== 0 && tax?.target === 'product').map((tax: any) => (
524
536
  <Table key={tax.id}>
525
537
  <OSRow>
526
538
  <OText mBottom={4}>
527
- {t(tax?.name?.toUpperCase()?.replace(/ /g, '_'), tax?.name) || t('INHERIT_FROM_BUSINESS', 'Inherit from business')}
539
+ {t(tax?.name?.toUpperCase?.()?.replace(/ /g, '_'), tax?.name) || t('INHERIT_FROM_BUSINESS', 'Inherit from business')}
528
540
  {`(${verifyDecimals(tax?.rate, parseNumber)}%)`}{' '}
529
541
  </OText>
530
542
  </OSRow>
@@ -537,7 +549,7 @@ export const OrderContentComponent = (props: OrderContent) => {
537
549
  <Table key={fee.id}>
538
550
  <OSRow>
539
551
  <OText mBottom={4}>
540
- {t(fee?.name?.toUpperCase()?.replace(/ /g, '_'), fee?.name) || t('INHERIT_FROM_BUSINESS', 'Inherit from business')}
552
+ {t(fee?.name?.toUpperCase?.()?.replace(/ /g, '_'), fee?.name) || t('INHERIT_FROM_BUSINESS', 'Inherit from business')}
541
553
  ({fee?.fixed > 0 && `${parsePrice(fee?.fixed, { currency: order?.currency })} + `}{fee.percentage}%){' '}
542
554
  </OText>
543
555
  </OSRow>
@@ -550,7 +562,7 @@ export const OrderContentComponent = (props: OrderContent) => {
550
562
  <Table key={offer.id}>
551
563
  <OSRow>
552
564
  <OText mBottom={4}>
553
- {t(offer.name?.toUpperCase()?.replace(/ /g, '_'), offer.name)}
565
+ {t(offer.name?.toUpperCase?.()?.replace(/ /g, '_'), offer.name)}
554
566
  {offer.rate_type === 1 && (
555
567
  <OText>{`(${verifyDecimals(offer?.rate, parsePrice)}%)`}</OText>
556
568
  )}
@@ -561,24 +573,37 @@ export const OrderContentComponent = (props: OrderContent) => {
561
573
  ))
562
574
  }
563
575
  {
564
- typeof order?.summary?.delivery_price === 'number' && (
576
+ typeof order?.summary?.delivery_price === 'number' && order.delivery_type !== 2 && (
565
577
  <Table>
566
578
  <OText mBottom={4}>
567
579
  {t('DELIVERY_FEE', 'Delivery Fee')}
568
580
  </OText>
569
581
 
570
582
  <OText mBottom={4}>
571
- {parsePrice(order?.summary?.delivery_price, { currency: order?.currency })}
583
+ {parsePrice(order?.summary?.delivery_price + getIncludedTaxes(true), { currency: order?.currency })}
572
584
  </OText>
573
585
  </Table>
574
586
  )
575
587
  }
588
+ {
589
+ order?.taxes?.length > 0 && order?.taxes?.filter((tax: any) => tax?.type === 2 && tax?.rate !== 0 && tax?.target === 'delivery_fee').map((tax: any, i: number) => (
590
+ <Table key={`${tax.description}_${i}`}>
591
+ <OSRow>
592
+ <OText mBottom={4}>
593
+ {tax.name || t('INHERIT_FROM_BUSINESS', 'Inherit from business')}
594
+ {`(${verifyDecimals(tax?.rate, parseNumber)}%)`}
595
+ </OText>
596
+ </OSRow>
597
+ <OText mBottom={4}>{parsePrice(tax?.summary?.tax_after_discount ?? tax?.summary?.tax ?? 0)}</OText>
598
+ </Table>
599
+ ))
600
+ }
576
601
  {
577
602
  order?.offers?.length > 0 && order?.offers?.filter((offer: any) => offer?.target === 2)?.map((offer: any) => (
578
603
  <Table key={offer.id}>
579
604
  <OSRow>
580
605
  <OText mBottom={4}>
581
- {t(offer.name?.toUpperCase()?.replace(/ /g, '_'), offer.name)}
606
+ {t(offer.name?.toUpperCase?.()?.replace(/ /g, '_'), offer.name)}
582
607
  {offer.rate_type === 1 && (
583
608
  <OText>{`(${verifyDecimals(offer?.rate, parsePrice)}%)`}</OText>
584
609
  )}
@@ -588,7 +613,7 @@ export const OrderContentComponent = (props: OrderContent) => {
588
613
  </Table>
589
614
  ))
590
615
  }
591
- {(order?.summary?.driver_tip > 0 || order?.driver_tip > 0) && (
616
+ {(order?.summary?.driver_tip > 0 || order?.driver_tip > 0) && order.delivery_type !== 2 && (
592
617
  <Table>
593
618
  <OText mBottom={4}>
594
619
  {t('DRIVER_TIP', 'Driver tip')}
@@ -646,13 +671,12 @@ export const OrderContentComponent = (props: OrderContent) => {
646
671
  <OText>
647
672
  {event?.wallet_event
648
673
  ? walletName[event?.wallet_event?.wallet?.type]?.name
649
- : t(event?.paymethod?.name?.toUpperCase()?.replace(/ /g, '_'), event?.paymethod?.name)}
674
+ : event?.paymethod?.gateway
675
+ ? t(event?.paymethod?.gateway?.toUpperCase?.(), event?.paymethod?.name)
676
+ : order?.paymethod?.id === event?.paymethod_id
677
+ ? t(order?.paymethod?.gateway?.toUpperCase?.(), order?.paymethod?.name)
678
+ : ''}
650
679
  </OText>
651
- {/* {event?.data?.charge_id && (
652
- <OText>
653
- {`${t('CODE', 'Code')}: ${event?.data?.charge_id}`}
654
- </OText>
655
- )} */}
656
680
  </View>
657
681
  <OText>
658
682
  {(event?.paymethod?.gateway === 'cash' && order?.cash)
@@ -664,7 +688,65 @@ export const OrderContentComponent = (props: OrderContent) => {
664
688
  </View>
665
689
  </View>
666
690
  )}
691
+
667
692
  </OrderBill >
693
+
694
+ {!!order?.spot_number && (
695
+ <OrderSpot vehicleExists={!!order?.vehicle}>
696
+ <Table>
697
+ <OText style={{ marginBottom: 5 }}>
698
+ {t('SPOT_NUMBER', 'Spot number')}
699
+ </OText>
700
+ <OText style={{ marginBottom: 5 }}>
701
+ {order?.spot_number}
702
+ </OText>
703
+ </Table>
704
+ </OrderSpot>
705
+ )}
706
+
707
+ {!!order?.vehicle && (
708
+ <OrderVehicle>
709
+ <OText
710
+ style={{ marginBottom: 5 }}
711
+ size={16}
712
+ weight="600"
713
+ color={theme.colors.textGray}>
714
+ {t('VEHICLE', 'Vehicle')}
715
+ </OText>
716
+ <Table>
717
+ <OText style={{ marginBottom: 5 }}>
718
+ {t('CAR_REGISTRATION', 'Car registration')}
719
+ </OText>
720
+ <OText style={{ marginBottom: 5 }}>
721
+ {order?.vehicle?.car_registration}
722
+ </OText>
723
+ </Table>
724
+ <Table>
725
+ <OText style={{ marginBottom: 5 }}>
726
+ {t('COLOR', 'Color')}
727
+ </OText>
728
+ <OText style={{ marginBottom: 5 }}>
729
+ {order?.vehicle?.color}
730
+ </OText>
731
+ </Table>
732
+ <Table>
733
+ <OText style={{ marginBottom: 5 }}>
734
+ {t('MODEL', 'Model')}
735
+ </OText>
736
+ <OText style={{ marginBottom: 5 }}>
737
+ {order?.vehicle?.model}
738
+ </OText>
739
+ </Table>
740
+ <Table>
741
+ <OText style={{ marginBottom: 5 }}>
742
+ {t('TYPE', 'Type')}
743
+ </OText>
744
+ <OText style={{ marginBottom: 5 }}>
745
+ {order?.vehicle?.type}
746
+ </OText>
747
+ </Table>
748
+ </OrderVehicle>
749
+ )}
668
750
  <OModal
669
751
  open={openReviewModal}
670
752
  onClose={() => setOpenReviewModal(false)}
@@ -3,7 +3,9 @@ import React from 'react';
3
3
  //Styles
4
4
  import {
5
5
  Actions,
6
+ Dot,
6
7
  Header,
8
+ Messages,
7
9
  OrderHeader,
8
10
  } from './styles';
9
11
 
@@ -22,6 +24,8 @@ import MaterialCommunityIcons from 'react-native-vector-icons/MaterialCommunityI
22
24
  import {
23
25
  useLanguage,
24
26
  useUtils,
27
+ useConfig,
28
+ useSession
25
29
  } from 'ordering-components/native';
26
30
 
27
31
  interface OrderHeader {
@@ -34,6 +38,8 @@ interface OrderHeader {
34
38
  handleViewSummaryOrder?: any;
35
39
  handleCopyClipboard?: any
36
40
  isCustomView?: any
41
+ messages?: any
42
+ messagesReadList?: any
37
43
  }
38
44
 
39
45
  export const OrderHeaderComponent = (props: OrderHeader) => {
@@ -45,12 +51,21 @@ export const OrderHeaderComponent = (props: OrderHeader) => {
45
51
  getOrderStatus,
46
52
  logisticOrderStatus,
47
53
  handleViewSummaryOrder,
48
- handleCopyClipboard
54
+ handleCopyClipboard,
55
+ messages,
56
+ messagesReadList
49
57
  } = props
50
58
  const theme = useTheme();
51
59
  const [, t] = useLanguage();
52
- const [{ parseDate }] = useUtils();
60
+ const [configState] = useConfig()
61
+ const [{ user }] = useSession()
62
+ const [{ parseDate, parsePrice }] = useUtils();
53
63
  const paymethodsLength = order?.payment_events?.filter((item: any) => item.event === 'payment')?.length
64
+ const showExternalId = configState?.configs?.change_order_id?.value === '1'
65
+ const messagesReadIds = messagesReadList?.map((message: any) => message?.order_message_id)
66
+
67
+ const filteredMessages = messagesReadList?.length > 0 ? messages?.messages?.filter((message: any) => !messagesReadIds?.includes(message?.id)) : messages?.messages
68
+ const cateringTypes = [7, 8]
54
69
 
55
70
  const styles = StyleSheet.create({
56
71
  icons: {
@@ -88,6 +103,11 @@ export const OrderHeaderComponent = (props: OrderHeader) => {
88
103
  19: theme.colors.statusOrderBlue,
89
104
  20: theme.colors.statusOrderBlue,
90
105
  21: theme.colors.statusOrderBlue,
106
+ 22: theme.colors.statusOrderBlue,
107
+ 23: theme.colors.statusOrderBlue,
108
+ 24: theme.colors.statusOrderBlue,
109
+ 25: theme.colors.statusOrderBlue,
110
+ 26: theme.colors.statusOrderBlue,
91
111
  //GREEN
92
112
  1: theme.colors.statusOrderGreen,
93
113
  11: theme.colors.statusOrderGreen,
@@ -125,11 +145,26 @@ export const OrderHeaderComponent = (props: OrderHeader) => {
125
145
  const paymethodsList = order?.payment_events?.filter((item: any) => item.event === 'payment').map((paymethod: any) => {
126
146
  return paymethod?.wallet_event
127
147
  ? walletName[paymethod?.wallet_event?.wallet?.type]?.name
128
- : t(paymethod?.paymethod?.gateway?.toUpperCase(), paymethod?.paymethod?.name)
148
+ : paymethod?.paymethod?.gateway && paymethod?.paymethod?.gateway === 'cash' && order?.cash > 0
149
+ ? `${t(paymethod?.paymethod?.gateway?.toUpperCase(), paymethod?.paymethod?.name)} (${t('CASH_CHANGE_OF', 'Change of :amount:').replace(':amount:', parsePrice(order?.cash))})`
150
+ : paymethod?.paymethod?.gateway
151
+ ? t(paymethod?.paymethod?.gateway?.toUpperCase(), paymethod?.paymethod?.name)
152
+ : t(order?.paymethod?.gateway?.toUpperCase(), order?.paymethod?.name)
129
153
  })
130
154
  return paymethodsList.join(', ')
131
155
  }
132
156
 
157
+ const deliveryDate = () => {
158
+ const dateString = order?.delivery_datetime_utc ?? order?.delivery_datetime
159
+ const currentDate = new Date();
160
+ const receivedDate: any = new Date(order?.delivery_datetime);
161
+
162
+ const formattedDate = receivedDate <= currentDate
163
+ ? `${t('ASAP_ABBREVIATION', 'ASAP')}(${parseDate(dateString, { utc: !!order?.delivery_datetime_utc })})`
164
+ : parseDate(dateString, { utc: !!order?.delivery_datetime_utc })
165
+ return formattedDate
166
+ }
167
+
133
168
  return (
134
169
  <>
135
170
  {!props.isCustomView && (
@@ -173,18 +208,20 @@ export const OrderHeaderComponent = (props: OrderHeader) => {
173
208
  style={styles.icons}
174
209
  onClick={() => handleOpenMapView()}
175
210
  />
176
-
177
- <OIconButton
178
- icon={theme.images.general.messages}
179
- iconStyle={{
180
- width: 20,
181
- height: 20,
182
- tintColor: theme.colors.textGray,
183
- }}
184
- borderColor={theme.colors.clear}
185
- style={styles.icons}
186
- onClick={() => handleOpenMessagesForBusiness()}
187
- />
211
+ <Messages>
212
+ {filteredMessages?.filter((message: any) => message?.author_id !== user?.id && !message?.read)?.length > 0 && <Dot />}
213
+ <OIconButton
214
+ icon={theme.images.general.messages}
215
+ iconStyle={{
216
+ width: 20,
217
+ height: 20,
218
+ tintColor: theme.colors.textGray,
219
+ }}
220
+ borderColor={theme.colors.clear}
221
+ style={styles.icons}
222
+ onClick={() => handleOpenMessagesForBusiness()}
223
+ />
224
+ </Messages>
188
225
  </Actions>
189
226
  )}
190
227
  </Header>
@@ -192,16 +229,18 @@ export const OrderHeaderComponent = (props: OrderHeader) => {
192
229
  <OrderHeader>
193
230
  {!props.isCustomView ? (
194
231
  <OText size={13} style={{ marginBottom: 5 }}>
195
- {order?.delivery_datetime_utc
196
- ? parseDate(order?.delivery_datetime_utc)
197
- : parseDate(order?.delivery_datetime, { utc: false })}
232
+ <>
233
+ {cateringTypes.includes(order?.delivery_type) ? `${t('CREATED_AT', 'Created at')}: ${parseDate(order?.created_at)}\n` : ''}
234
+ {cateringTypes.includes(order?.delivery_type) ? `${t('PLACED_TO', 'Placed to')}: ` : ''}{deliveryDate()}
235
+ </>
198
236
  </OText>
199
237
  ) : (
200
238
  <Header style={{ alignItems: 'center' }}>
201
239
  <OText size={13} style={{ marginBottom: 5 }}>
202
- {order?.delivery_datetime_utc
203
- ? parseDate(order?.delivery_datetime_utc)
204
- : parseDate(order?.delivery_datetime, { utc: false })}
240
+ <>
241
+ {cateringTypes.includes(order?.delivery_type) ? `${t('CREATED_AT', 'Created at')}: ${parseDate(order?.created_at)}\n` : ''}
242
+ {cateringTypes.includes(order?.delivery_type) ? `${t('PLACED_TO', 'Placed to')}: ` : ''}{deliveryDate()}
243
+ </>
205
244
  </OText>
206
245
 
207
246
  {(!order?.isLogistic || (!logisticOrderStatus?.includes(order?.status) && !order?.order_group)) && (
@@ -240,7 +279,6 @@ export const OrderHeaderComponent = (props: OrderHeader) => {
240
279
  style={styles.icons}
241
280
  onClick={() => handleOpenMapView()}
242
281
  />
243
-
244
282
  <OIconButton
245
283
  icon={theme.images.general.messages}
246
284
  iconStyle={{
@@ -259,7 +297,7 @@ export const OrderHeaderComponent = (props: OrderHeader) => {
259
297
 
260
298
  <OText numberOfLines={2} size={20} weight="600">
261
299
  <>
262
- {`${t('INVOICE_ORDER_NO', 'Order No.')} ${order?.id} `}
300
+ {`${t('INVOICE_ORDER_NO', 'Order No.')} ${showExternalId ? order?.external_id || order?.id : order?.id} `}
263
301
  {!order?.isLogistic && (!order?.order_group_id || !logisticOrderStatus?.includes(order?.status)) && (
264
302
  <>
265
303
  {t('IS', 'is')}{' '}
@@ -273,7 +311,7 @@ export const OrderHeaderComponent = (props: OrderHeader) => {
273
311
  )}
274
312
  </>
275
313
  </OText>
276
- {order?.external_id && (
314
+ {order?.external_id && !showExternalId && (
277
315
  <OText size={13}>
278
316
  <OText size={13} weight='bold'>{`${t('EXTERNAL_ID', 'External ID :')} `}</OText>
279
317
  {order?.external_id}
@@ -25,13 +25,13 @@ export const Logo = styled.View`
25
25
 
26
26
  export const OrderContent = styled.View`
27
27
  flex: 1;
28
- ${(props : any) => props.isOrderGroup && css`
28
+ ${(props: any) => props.isOrderGroup && css`
29
29
  border-color: rgba(0, 0, 0, 0.2);
30
30
  border-width: 1px;
31
31
  padding: 10px;
32
32
  `
33
33
  }
34
- ${(props : any) => props.lastOrder && css`
34
+ ${(props: any) => props.lastOrder && css`
35
35
  margin-bottom: 50px;
36
36
  `}
37
37
  `;
@@ -68,7 +68,28 @@ export const Table = styled.View`
68
68
 
69
69
  export const OrderBill = styled.View`
70
70
  padding-vertical: 20px;
71
- padding-bottom: 30px;
71
+ ${(props: any) => !props.vehicleExists && css`
72
+ padding-bottom: 50px;
73
+ `
74
+ }
75
+ flex: 1;
76
+ `;
77
+
78
+ export const OrderVehicle = styled.View`
79
+ border-top-width: 1px;
80
+ border-top-color: ${(props: any) => props.theme.colors.borderTops};
81
+ padding-vertical: 20px;
82
+ padding-bottom: 50px;
83
+ flex: 1;
84
+ `;
85
+
86
+ export const OrderSpot = styled.View`
87
+ border-top-width: 1px;
88
+ border-top-color: ${(props: any) => props.theme.colors.borderTops};
89
+ padding-vertical: 20px;
90
+ ${(props: any) => !props.vehicleExists && css`
91
+ padding-bottom: 50px;
92
+ `}
72
93
  flex: 1;
73
94
  `;
74
95
 
@@ -98,3 +119,18 @@ export const OSRow = styled.View`
98
119
  width: 70%;
99
120
  flex-wrap: wrap;
100
121
  `
122
+
123
+ export const Messages = styled.View`
124
+ position: relative;
125
+ `;
126
+
127
+ export const Dot = styled.View`
128
+ position: absolute;
129
+ width: 8px;
130
+ height: 8px;
131
+ border-radius: 4px;
132
+ background-color: ${(props: any) => props.theme.colors.red};
133
+ top: 10px;
134
+ right: 10px;
135
+ z-index: 99;
136
+ `;