ordering-ui-react-native 0.22.75 → 0.22.76-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 (137) hide show
  1. package/package.json +5 -7
  2. package/src/components/BusinessesListing/index.tsx +1 -1
  3. package/src/components/Checkout/index.tsx +40 -39
  4. package/src/components/VerifyPhone/styles.tsx +1 -2
  5. package/src/context/OfflineActions/index.tsx +236 -0
  6. package/src/providers/AlertProvider.tsx +3 -1
  7. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +5 -3
  8. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +1 -0
  9. package/themes/business/src/components/BusinessController/index.tsx +8 -3
  10. package/themes/business/src/components/BusinessProductList/index.tsx +3 -2
  11. package/themes/business/src/components/Chat/index.tsx +15 -3
  12. package/themes/business/src/components/DriverMap/index.tsx +44 -33
  13. package/themes/business/src/components/FloatingButton/index.tsx +3 -2
  14. package/themes/business/src/components/LanguageSelector/index.tsx +1 -1
  15. package/themes/business/src/components/LoginForm/index.tsx +123 -98
  16. package/themes/business/src/components/LogoutButton/index.tsx +13 -4
  17. package/themes/business/src/components/MapView/RenderMarker.tsx +146 -0
  18. package/themes/business/src/components/MapView/index.tsx +68 -142
  19. package/themes/business/src/components/NewOrderNotification/index.tsx +38 -54
  20. package/themes/business/src/components/OrderDetails/Business.tsx +56 -20
  21. package/themes/business/src/components/OrderDetails/Delivery.tsx +111 -42
  22. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +146 -36
  23. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +51 -28
  24. package/themes/business/src/components/OrderDetails/styles.tsx +39 -3
  25. package/themes/business/src/components/OrderDetails/usePrinterCommands.tsx +17 -16
  26. package/themes/business/src/components/OrderDetailsLogistic/index.tsx +3 -2
  27. package/themes/business/src/components/OrderSummary/index.tsx +271 -176
  28. package/themes/business/src/components/OrdersListManager/index.tsx +13 -1
  29. package/themes/business/src/components/OrdersOption/index.tsx +207 -144
  30. package/themes/business/src/components/OrdersOption/styles.tsx +14 -0
  31. package/themes/business/src/components/PreviousMessages/index.tsx +26 -3
  32. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +20 -8
  33. package/themes/business/src/components/PreviousOrders/index.tsx +74 -66
  34. package/themes/business/src/components/PreviousOrders/styles.tsx +2 -1
  35. package/themes/business/src/components/PrinterEdition/MessageAlert.tsx +33 -0
  36. package/themes/business/src/components/PrinterEdition/index.tsx +143 -75
  37. package/themes/business/src/components/PrinterEdition/printerList.tsx +23 -0
  38. package/themes/business/src/components/PrinterSettings/index.tsx +1 -1
  39. package/themes/business/src/components/ProductItemAccordion/index.tsx +15 -16
  40. package/themes/business/src/components/ReviewCustomer/index.tsx +2 -0
  41. package/themes/business/src/components/StoresList/index.tsx +2 -2
  42. package/themes/business/src/components/UserProfileForm/index.tsx +48 -10
  43. package/themes/business/src/components/UserProfileForm/styles.tsx +7 -0
  44. package/themes/business/src/components/WebsocketStatus/index.tsx +2 -2
  45. package/themes/business/src/config/currency.tsx +1010 -0
  46. package/themes/business/src/hooks/useLocation.tsx +16 -12
  47. package/themes/business/src/layouts/SafeAreaContainer.tsx +35 -19
  48. package/themes/business/src/types/index.tsx +26 -4
  49. package/themes/business/src/utils/index.tsx +26 -2
  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 +9 -5
  54. package/themes/kiosk/src/components/CustomerName/index.tsx +1 -1
  55. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  56. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  57. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  58. package/themes/kiosk/src/components/PaymentOptions/index.tsx +121 -57
  59. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  60. package/themes/original/index.tsx +223 -219
  61. package/themes/original/src/components/AddressForm/index.tsx +56 -17
  62. package/themes/original/src/components/AppleLogin/index.tsx +3 -4
  63. package/themes/original/src/components/BusinessController/index.tsx +4 -2
  64. package/themes/original/src/components/BusinessItemAccordion/index.tsx +8 -3
  65. package/themes/original/src/components/BusinessListingSearch/BusinessSearchFooter.tsx +102 -90
  66. package/themes/original/src/components/BusinessListingSearch/BusinessSearchHeader.tsx +7 -3
  67. package/themes/original/src/components/BusinessListingSearch/index.tsx +8 -13
  68. package/themes/original/src/components/BusinessPreorder/index.tsx +30 -17
  69. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/index.tsx +72 -69
  70. package/themes/original/src/components/BusinessProductsList/index.tsx +4 -5
  71. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  72. package/themes/original/src/components/BusinessProductsListing/index.tsx +5 -4
  73. package/themes/original/src/components/BusinessesListing/Layout/Appointment/styles.tsx +1 -0
  74. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +2 -1
  75. package/themes/original/src/components/Cart/index.tsx +43 -12
  76. package/themes/original/src/components/Checkout/index.tsx +126 -98
  77. package/themes/original/src/components/FloatingButton/index.tsx +1 -1
  78. package/themes/original/src/components/GPSButton/index.tsx +2 -1
  79. package/themes/original/src/components/GoogleMap/index.tsx +3 -2
  80. package/themes/original/src/components/Help/functions.tsx +76 -0
  81. package/themes/original/src/components/Help/index.tsx +74 -29
  82. package/themes/original/src/components/Help/styles.tsx +4 -1
  83. package/themes/original/src/components/HelpOptions/index.tsx +53 -0
  84. package/themes/original/src/components/HighestRatedBusinesses/index.tsx +1 -1
  85. package/themes/original/src/components/Home/index.tsx +36 -11
  86. package/themes/original/src/components/LastOrder/index.tsx +1 -1
  87. package/themes/original/src/components/LoginForm/index.tsx +11 -5
  88. package/themes/original/src/components/MessageListing/index.tsx +1 -1
  89. package/themes/original/src/components/Messages/index.tsx +562 -555
  90. package/themes/original/src/components/MomentOption/TimeListItem.tsx +56 -0
  91. package/themes/original/src/components/MomentOption/index.tsx +141 -61
  92. package/themes/original/src/components/MomentOption/styles.tsx +1 -1
  93. package/themes/original/src/components/MomentSelector/index.tsx +5 -2
  94. package/themes/original/src/components/MultiCheckout/index.tsx +78 -33
  95. package/themes/original/src/components/MultiOrdersDetails/SingleOrderCard.tsx +2 -2
  96. package/themes/original/src/components/MultiOrdersDetails/index.tsx +2 -2
  97. package/themes/original/src/components/NavBar/index.tsx +6 -2
  98. package/themes/original/src/components/NotFoundSource/index.tsx +40 -39
  99. package/themes/original/src/components/NotFoundSource/styles.tsx +18 -9
  100. package/themes/original/src/components/OrderDetails/OrderEta.tsx +4 -3
  101. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +11 -4
  102. package/themes/original/src/components/OrderDetails/index.tsx +44 -20
  103. package/themes/original/src/components/OrderDetails/styles.tsx +0 -1
  104. package/themes/original/src/components/OrderProgress/index.tsx +5 -4
  105. package/themes/original/src/components/OrderSummary/index.tsx +32 -11
  106. package/themes/original/src/components/OrderTypeSelector/index.tsx +120 -120
  107. package/themes/original/src/components/OrdersOption/index.tsx +325 -325
  108. package/themes/original/src/components/PaymentOptionWallet/index.tsx +1 -0
  109. package/themes/original/src/components/PaymentOptions/index.tsx +471 -459
  110. package/themes/original/src/components/PhoneInputNumber/index.tsx +92 -7
  111. package/themes/original/src/components/ProductItemAccordion/index.tsx +28 -37
  112. package/themes/original/src/components/ProductOptionSubOption/index.tsx +15 -14
  113. package/themes/original/src/components/ServiceForm/index.tsx +2 -2
  114. package/themes/original/src/components/SignupForm/index.tsx +40 -24
  115. package/themes/original/src/components/SingleOrderCard/index.tsx +8 -5
  116. package/themes/original/src/components/SingleProductCard/index.tsx +2 -1
  117. package/themes/original/src/components/SingleProductCard/styles.tsx +0 -3
  118. package/themes/original/src/components/StripeCardsList/index.tsx +7 -1
  119. package/themes/original/src/components/StripeElementsForm/index.tsx +2 -2
  120. package/themes/original/src/components/TaxInformation/index.tsx +3 -2
  121. package/themes/original/src/components/UpsellingProducts/UpsellingContent.tsx +7 -2
  122. package/themes/original/src/components/UserDetails/index.tsx +17 -16
  123. package/themes/original/src/components/UserFormDetails/index.tsx +109 -67
  124. package/themes/original/src/components/UserVerification/index.tsx +18 -5
  125. package/themes/original/src/components/VerifyPhone/index.tsx +1 -1
  126. package/themes/original/src/components/shared/OInput.tsx +97 -97
  127. package/themes/original/src/components/shared/OModal.tsx +7 -2
  128. package/themes/original/src/providers/AlertProvider.tsx +1 -1
  129. package/themes/original/src/types/index.tsx +700 -695
  130. package/themes/original/src/utils/index.tsx +50 -34
  131. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
  132. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +0 -62
  133. package/themes/original/src/components/HelpAccountAndPayment/styles.tsx +0 -12
  134. package/themes/original/src/components/HelpGuide/index.tsx +0 -68
  135. package/themes/original/src/components/HelpGuide/styles.tsx +0 -12
  136. package/themes/original/src/components/HelpOrder/index.tsx +0 -71
  137. package/themes/original/src/components/HelpOrder/styles.tsx +0 -13
@@ -3,8 +3,7 @@ import {
3
3
  StyleSheet,
4
4
  View,
5
5
  TouchableOpacity,
6
- ActivityIndicator,
7
- Alert,
6
+ ActivityIndicator
8
7
  } from 'react-native';
9
8
  import Clipboard from '@react-native-clipboard/clipboard';
10
9
  import { StarPRNT } from 'react-native-star-prnt';
@@ -31,7 +30,7 @@ import { FloatingButton } from '../FloatingButton';
31
30
  import { GoogleMap } from '../GoogleMap';
32
31
  import { OButton, OModal, OText, OIcon } from '../shared';
33
32
  import { OrderDetailsParams } from '../../types';
34
- import { verifyDecimals, getProductPrice, getOrderStatus } from '../../utils';
33
+ import { verifyDecimals, getProductPrice, getOrderStatus, getCurrenySymbol } from '../../utils';
35
34
  import { USER_TYPE } from '../../config/constants';
36
35
  import CountryPicker from 'react-native-country-picker-modal';
37
36
  import { NotFoundSource } from '../NotFoundSource';
@@ -53,6 +52,8 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
53
52
  actions,
54
53
  orderTitle,
55
54
  appTitle,
55
+ loadMessages,
56
+ notificationApp
56
57
  } = props;
57
58
 
58
59
  const theme = useTheme();
@@ -77,7 +78,9 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
77
78
  const [printerSettings, setPrinterSettings] = useState<any>('')
78
79
  const [autoPrintEnabled, setAutoPrintEnabled] = useState<boolean>(false)
79
80
 
80
- const orderToComplete = [4,20,21]
81
+ const orderToComplete = [4, 20, 21]
82
+ const orderToReady = [7, 14]
83
+ const deliveryTypes = [1, 7]
81
84
 
82
85
  if (order?.status === 7 || order?.status === 4) {
83
86
  if (drivers?.length > 0 && drivers) {
@@ -135,6 +138,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
135
138
  if (order?.status === 7 && autoPrintEnabled && printerSettings) {
136
139
  handleViewSummaryOrder()
137
140
  }
141
+ return order
138
142
  }
139
143
  }
140
144
 
@@ -142,8 +146,8 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
142
146
  if (name !== 'No') {
143
147
  const pos = position && position !== 'whole' ? `(${t(position.toUpperCase(), position)})` : '';
144
148
  return pos
145
- ? `${quantity} x ${name} ${pos} +${parsePrice(price)}\n`
146
- : `${quantity} x ${name} +${parsePrice(price)}\n`;
149
+ ? `${quantity} x ${name} ${pos} +${parsePrice(price, { currency: getCurrenySymbol(order?.currency) })}\n`
150
+ : `${quantity} x ${name} +${parsePrice(price, { currency: getCurrenySymbol(order?.currency) })}\n`;
147
151
  } else {
148
152
  return 'No\n';
149
153
  }
@@ -208,7 +212,13 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
208
212
  ? t('EAT_IN', 'Eat in')
209
213
  : order.delivery_type === 4
210
214
  ? t('CURBSIDE', 'Curbside')
211
- : t('DRIVER_THRU', 'Driver thru')
215
+ : order.delivery_type === 5
216
+ ? t('DRIVER_THRU', 'Driver thru')
217
+ : order.delivery_type === 7
218
+ ? t('CATERING_DELIVERY', 'Catering delivery')
219
+ : order.delivery_type === 8
220
+ ? t('CATERING_PICKUP', 'Catering pickup')
221
+ : t('DELIVERY', 'Delivery')
212
222
  }\n`
213
223
  : '';
214
224
 
@@ -245,7 +255,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
245
255
  order?.products.length &&
246
256
  order?.products.map((product: any, i: number) => {
247
257
  const string =
248
- `${product?.quantity} X ${product?.name} ${parsePrice(product.total ?? getProductPrice(product))}\n${getOptions(product.options, product.comment)}`;
258
+ `${product?.quantity} X ${product?.name} ${parsePrice(product.total ?? getProductPrice(product), { currency: getCurrenySymbol(order?.currency) })}\n${getOptions(product.options, product.comment)}`;
249
259
 
250
260
  return i === 0 ? ` ${string}` : string
251
261
  });
@@ -258,19 +268,22 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
258
268
 
259
269
  const subtotal = `${t('SUBTOTAL', 'Subtotal')}: ${parsePrice(
260
270
  order?.subtotal,
271
+ { currency: getCurrenySymbol(order?.currency) }
261
272
  )}\n`;
262
273
 
263
274
  const drivertip = `${t('DRIVER_TIP', 'Driver tip')} ${parsePrice(
264
275
  order?.summary?.driver_tip || order?.totalDriverTip,
276
+ { currency: getCurrenySymbol(order?.currency) }
265
277
  )}\n`;
266
278
 
267
279
  const deliveryFee = `${t('DELIVERY_FEE', 'Delivery fee')} ${verifyDecimals(
268
280
  order?.service_fee,
269
281
  parseNumber,
270
- )}% ${parsePrice(order?.summary?.service_fee || order?.serviceFee || 0)}\n`;
282
+ )}% ${parsePrice(order?.summary?.service_fee || order?.serviceFee || 0, { currency: getCurrenySymbol(order?.currency) })}\n`;
271
283
 
272
284
  const total = `${t('TOTAL', 'Total')} ${parsePrice(
273
285
  order?.summary?.total || order?.total,
286
+ { currency: getCurrenySymbol(order?.currency) }
274
287
  )}\n`;
275
288
 
276
289
  const orderStatus = `${t('INVOICE_ORDER_NO', 'Order No.')} ${order.id} ${t(
@@ -297,14 +310,33 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
297
310
 
298
311
  const handleOpenMessagesForBusiness = () => {
299
312
  setOpenModalForBusiness(true);
300
- readMessages && readMessages();
313
+ readMessages && readMessages()
314
+ loadMessages && loadMessages()
301
315
  setUnreadAlert({ ...unreadAlert, business: false });
302
316
  };
303
317
 
304
- const handleViewActionOrder = (action: string) => {
318
+ const handleViewActionOrder = async (action: string, options?: any) => {
305
319
  if (openModalForMapView) {
306
320
  setOpenModalForMapView(false);
307
321
  }
322
+ if (options?.forceUpdateStatus) {
323
+ let bodyToSend: any = {};
324
+ const orderStatus: any = {
325
+ acceptByBusiness: {
326
+ status: 7,
327
+ },
328
+ };
329
+
330
+ if (actions && action === 'accept') {
331
+ bodyToSend = orderStatus[actions.accept];
332
+ }
333
+ bodyToSend.id = order?.id;
334
+ const _order = await handleChangeOrderStatus(bodyToSend?.status, bodyToSend)
335
+ if (!_order?.id) {
336
+ showToast(ToastType.Error, t('FAILED_TO_UPDATE_ORDER', 'Failed to update order'), 5000)
337
+ return
338
+ }
339
+ }
308
340
  setActionOrder(action);
309
341
  setOpenModalForAccept(true);
310
342
  };
@@ -339,6 +371,8 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
339
371
  };
340
372
 
341
373
  const handleCloseModal = () => {
374
+ readMessages && readMessages()
375
+ loadMessages && loadMessages()
342
376
  setOpenModalForBusiness(false);
343
377
  };
344
378
 
@@ -379,7 +413,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
379
413
  },
380
414
  {
381
415
  ...order?.customer?.location,
382
- title: order?.customer?.name ?? t('CUSTOMER', 'Customer'),
416
+ title: order?.customer?.name ?? t('CUSTOMER', 'Customer'),
383
417
  address: {
384
418
  addressName: order?.customer?.address,
385
419
  zipcode: order?.customer?.zipcode
@@ -392,7 +426,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
392
426
  ];
393
427
 
394
428
  useEffect(() => {
395
- if (openModalForAccept) {
429
+ if (openModalForAccept && !loading) {
396
430
  setOpenModalForAccept(false);
397
431
  }
398
432
 
@@ -413,7 +447,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
413
447
 
414
448
  useEffect(() => {
415
449
  const getStorageData = async () => {
416
- const printers = await _retrieveStoreData('printers')
450
+ const printers = await _retrieveStoreData('printers')
417
451
  const autoPrint = await _retrieveStoreData('auto_print_after_accept_order')
418
452
  setPrinterSettings(printers?.length && printers)
419
453
  setAutoPrintEnabled(!!autoPrint)
@@ -482,6 +516,8 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
482
516
  handleCopyClipboard={handleCopyClipboard}
483
517
  handleArrowBack={handleArrowBack}
484
518
  isCustomView={props.isCustomView}
519
+ messages={messages}
520
+ messagesReadList={messagesReadList}
485
521
  />
486
522
  <OrderDetailsContainer
487
523
  keyboardShouldPersistTaps="handled"
@@ -489,7 +525,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
489
525
  <>
490
526
  <OrderContentComponent order={order} />
491
527
  {(order?.status === 7 || order?.status === 4) &&
492
- order?.delivery_type === 1 && configs?.assign_driver_enabled?.value === '1' && (
528
+ deliveryTypes.includes(order?.delivery_type) && configs?.assign_driver_enabled?.value === '1' && (
493
529
  <AssignDriver>
494
530
  <OText style={{ marginBottom: 5 }} size={16} weight="600">
495
531
  {t('ASSIGN_DRIVER', 'Assign driver')}
@@ -587,6 +623,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
587
623
  messages={messages}
588
624
  order={order}
589
625
  setMessages={setMessages}
626
+ notificationApp={notificationApp}
590
627
  />
591
628
  </OModal>
592
629
 
@@ -630,7 +667,6 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
630
667
  </>
631
668
  <View style={{ height: 30 }} />
632
669
  </OrderDetailsContainer>
633
-
634
670
  {order &&
635
671
  Object.keys(order).length > 0 &&
636
672
  getOrderStatus(order?.status, t)?.value ===
@@ -638,7 +674,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
638
674
  <FloatingButton
639
675
  btnText={t('REJECT', 'Reject')}
640
676
  isSecondaryBtn={false}
641
- secondButtonClick={() => handleViewActionOrder('accept')}
677
+ secondButtonClick={() => handleViewActionOrder('accept', { forceUpdateStatus: true })}
642
678
  firstButtonClick={() => handleViewActionOrder('reject')}
643
679
  secondBtnText={t('ACCEPT', 'Accept')}
644
680
  secondButton={true}
@@ -647,7 +683,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
647
683
  widthButton={'45%'}
648
684
  />
649
685
  )}
650
- {order?.status === 7 && (
686
+ {orderToReady.includes(order?.status) && (
651
687
  <FloatingButton
652
688
  btnText={t('READY_FOR_PICKUP', 'Ready for pickup')}
653
689
  colorTxt1={theme.colors.primary}
@@ -657,7 +693,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
657
693
  disabled={loading}
658
694
  />
659
695
  )}
660
- {orderToComplete.includes(order?.status) && ![1].includes(order?.delivery_type) && (
696
+ {orderToComplete.includes(order?.status) && !deliveryTypes.includes(order?.delivery_type) && (
661
697
  <FloatingButton
662
698
  btnText={t(
663
699
  'ORDER_NOT_PICKEDUP_BY_CUSTOMER',
@@ -668,7 +704,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
668
704
  secondButtonClick={() => handleChangeOrderStatus?.(15)}
669
705
  firstButtonClick={() => handleChangeOrderStatus?.(17)}
670
706
  secondBtnText={t(
671
- 'PICKUP_COMPLETED_BY_CUSTOMER',
707
+ 'ORDER_PICKUP_COMPLETED_BY_CUSTOMER',
672
708
  'Pickup completed by customer',
673
709
  )}
674
710
  secondButton={true}
@@ -1,12 +1,10 @@
1
- //React & React Native
2
1
  import React, { useState, useEffect } from 'react';
3
2
  import { StyleSheet, View } from 'react-native';
4
3
 
5
- // Thirds
6
4
  import { Placeholder, PlaceholderLine, Fade } from 'rn-placeholder';
7
5
  import Clipboard from '@react-native-clipboard/clipboard';
6
+ import MCIcon from 'react-native-vector-icons/MaterialCommunityIcons';
8
7
 
9
- //OrderingComponent
10
8
  import {
11
9
  useLanguage,
12
10
  OrderDetails as OrderDetailsConTableoller,
@@ -14,16 +12,16 @@ import {
14
12
  useSession,
15
13
  ToastType,
16
14
  useUtils,
17
- useConfig
15
+ useConfig,
16
+ useApi
18
17
  } from 'ordering-components/native';
19
18
 
20
- //Components
21
19
  import Alert from '../../providers/AlertProvider';
22
20
  import { AcceptOrRejectOrder } from '../AcceptOrRejectOrder';
23
21
  import { Chat } from '../Chat';
24
22
  import { FloatingButton } from '../FloatingButton';
25
23
  import { DriverMap } from '../DriverMap';
26
- import { OButton } from '../shared';
24
+ import { OButton, OText } from '../shared';
27
25
  import { OModal } from '../shared';
28
26
  import { OrderDetailsParams } from '../../types';
29
27
  import { USER_TYPE } from '../../config/constants';
@@ -32,8 +30,8 @@ import { NotFoundSource } from '../NotFoundSource';
32
30
  import { verifyDecimals, getProductPrice, getOrderStatus } from '../../utils';
33
31
  import { OrderHeaderComponent } from './OrderHeaderComponent';
34
32
  import { OrderContentComponent } from './OrderContentComponent';
35
- //Styles
36
33
  import { OrderDetailsContainer, Pickup } from './styles';
34
+ import { useOfflineActions } from '../../../../../src/context/OfflineActions';
37
35
 
38
36
  export const OrderDetailsUI = (props: OrderDetailsParams) => {
39
37
  const {
@@ -42,7 +40,6 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
42
40
  setMessages,
43
41
  readMessages,
44
42
  messagesReadList,
45
- handleChangeOrderStatus,
46
43
  permissions,
47
44
  askLocationPermission,
48
45
  driverLocation,
@@ -56,13 +53,15 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
56
53
  forceUpdate,
57
54
  getPermissions,
58
55
  orderAssingId,
59
- isGrantedPermissions,
56
+ isGrantedPermissions
60
57
  } = props;
58
+
61
59
  const [, { showToast }] = useToast();
62
60
  const [{ parsePrice, parseNumber }] = useUtils();
63
61
  const [{ configs }] = useConfig();
64
-
62
+ const [ordering] = useApi()
65
63
  const { order } = props.order
64
+ const isDelosiProject = ['delosi', 'delosipruebas'].includes(ordering?.project)
66
65
 
67
66
  const hideTimer = configs?.hidden_driver_eta_time?.value === '1'
68
67
  const isAllowedDriverRejectOrder = configs?.allow_driver_reject_order?.value === '1'
@@ -72,6 +71,8 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
72
71
  const theme = useTheme();
73
72
  const [, t] = useLanguage();
74
73
  const [session] = useSession();
74
+ const [{ isNetConnected, canSaveChangesOffline }, { applyOffAction, registerOffOrder }] = useOfflineActions()
75
+
75
76
  const [actionOrder, setActionOrder] = useState('');
76
77
  const [unreadAlert, setUnreadAlert] = useState({
77
78
  business: false,
@@ -86,12 +87,17 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
86
87
  key?: string | null;
87
88
  }>({ open: false, content: [], key: null });
88
89
 
89
- const validStatusComplete = [9, 19, 23]
90
+ const disabledActionsByInternet = isNetConnected !== null && !isNetConnected && canSaveChangesOffline === false
91
+
92
+ const validStatusComplete = [9, 19, 23, 26]
90
93
 
91
94
  const pendingOrderStatus = [1, 4, 7, 13]
92
95
 
93
96
  const logisticOrderStatus = [4, 6, 7]
94
97
 
98
+ const deliveryTypes = [1, 7]
99
+
100
+
95
101
  const showFloatButtonsPickUp: any = {
96
102
  8: !isHideRejectButtons,
97
103
  3: true,
@@ -105,13 +111,23 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
105
111
  14: true
106
112
  };
107
113
 
108
- const marginContainer: any = {
109
- 0: true,
110
- 3: true,
111
- 7: true,
112
- 8: true,
113
- 9: true,
114
- };
114
+ const handleChangeOrderStatus = async (status: number) => {
115
+ if (!isNetConnected && canSaveChangesOffline !== false) {
116
+ const result = applyOffAction({
117
+ event: 'evt_off_change_order_status',
118
+ data: { orderId: order?.id, body: { status } }
119
+ })
120
+ }
121
+
122
+ const dataToSave: any = !isNetConnected && canSaveChangesOffline !== false
123
+ ? { dataToSave: { status, unsync: true } }
124
+ : null
125
+ const orderUpdated = await props.handleChangeOrderStatus(status, {}, dataToSave)
126
+
127
+ if (!isNetConnected && canSaveChangesOffline !== false) {
128
+ await registerOffOrder(orderUpdated)
129
+ }
130
+ }
115
131
 
116
132
  const handleOpenMessagesForBusiness = () => {
117
133
  setOpenModalForBusiness(true);
@@ -222,7 +238,13 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
222
238
  ? t('EAT_IN', 'Eat in')
223
239
  : order.delivery_type === 4
224
240
  ? t('CURBSIDE', 'Curbside')
225
- : t('DRIVER_THRU', 'Driver thru')
241
+ : order.delivery_type === 5
242
+ ? t('DRIVER_THRU', 'Driver thru')
243
+ : order.delivery_type === 7
244
+ ? t('CATERING_DELIVERY', 'Catering delivery')
245
+ : order.delivery_type === 8
246
+ ? t('CATERING_PICKUP', 'Catering pickup')
247
+ : t('DELIVERY', 'Delivery')
226
248
  }\n`
227
249
  : '';
228
250
 
@@ -449,8 +471,10 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
449
471
  let locationMarker: any;
450
472
  let isToFollow = false;
451
473
  let isBusinessMarker = false;
452
-
453
- if (order?.status === 7 || order?.status === 8 || order?.status === 18) {
474
+ const customerStatusses = [3, 9, 19, 23, 26]
475
+ const businessStatusses = [7, 8, 18]
476
+ const arrivedCustomerStatusses = [9, 19, 23]
477
+ if (businessStatusses?.includes(order?.status)) {
454
478
  const markerBusiness = 'Business';
455
479
  isBusinessMarker = true;
456
480
  locationMarker = locations.find(
@@ -460,7 +484,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
460
484
  if (order?.status === 8 || order?.status === 18) {
461
485
  isToFollow = true;
462
486
  }
463
- } else if (order?.status === 3 || order?.status === 9 || order?.status === 19 || order?.status === 23) {
487
+ } else if (customerStatusses?.includes(order?.status)) {
464
488
  const markerCustomer = 'Customer';
465
489
  isToFollow = true;
466
490
  isBusinessMarker = false;
@@ -488,20 +512,35 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
488
512
  isOrderGroup={isOrderGroup}
489
513
  lastOrder={lastOrder}
490
514
  />
491
- {(order?.status === 8 || order?.status === 18) && order?.delivery_type === 1 && !props.order?.loading && (
515
+ {(order?.status === 8 || order?.status === 18) && deliveryTypes?.includes(order?.delivery_type) && !props.order?.loading && (
492
516
  <Pickup>
493
517
  <OButton
494
518
  style={styles.btnPickUp}
495
519
  textStyle={{ color: theme.colors.primary }}
496
520
  text={t('ARRIVED_TO_BUSINESS', 'Arrived to bussiness')}
521
+ isDisabled={disabledActionsByInternet}
497
522
  onClick={() =>
498
- handleChangeOrderStatus && isGrantedPermissions ? handleChangeOrderStatus(3) : goToPermissionPage()
523
+ isGrantedPermissions ? handleChangeOrderStatus(3) : goToPermissionPage()
499
524
  }
500
525
  imgLeftStyle={{ tintColor: theme.colors.backArrow }}
501
526
  />
502
527
  </Pickup>
503
528
  )}
504
- {order?.status === 3 && order?.delivery_type === 1 && !isHideRejectButtons && isEnabledOrderNotReady && !props.order?.loading && (
529
+ {arrivedCustomerStatusses.includes(order?.status) && deliveryTypes?.includes(order?.delivery_type) && !props.order?.loading && (
530
+ <View style={{ paddingVertical: 20, marginBottom: 20 }}>
531
+ <OButton
532
+ style={styles.btnPickUp}
533
+ textStyle={{ color: theme.colors.primary }}
534
+ text={t('ARRIVED_TO_CUSTOMER', 'Arrived to customer')}
535
+ isDisabled={disabledActionsByInternet}
536
+ onClick={() =>
537
+ isGrantedPermissions ? handleChangeOrderStatus(26) : goToPermissionPage()
538
+ }
539
+ imgLeftStyle={{ tintColor: theme.colors.backArrow }}
540
+ />
541
+ </View>
542
+ )}
543
+ {order?.status === 3 && deliveryTypes?.includes(order?.delivery_type) && !isHideRejectButtons && isEnabledOrderNotReady && !props.order?.loading && (
505
544
  <View style={{ paddingVertical: 20, marginBottom: 20 }}>
506
545
  <OButton
507
546
  style={styles.btnPickUp}
@@ -518,7 +557,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
518
557
  <View
519
558
  style={{
520
559
  height:
521
- order?.status === 8 && order?.delivery_type === 1 ? 50 : 35,
560
+ order?.status === 8 && deliveryTypes?.includes(order?.delivery_type) ? 50 : 35,
522
561
  }}
523
562
  />
524
563
 
@@ -546,8 +585,30 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
546
585
  </View>
547
586
  )}
548
587
  {!((!order || Object.keys(order).length === 0) &&
549
- (props.order?.error?.length < 1 || !props.order?.error)) && (
588
+ (props.order?.error?.length < 1 || !props.order?.error)) && order?.id && (
550
589
  <View style={{ flex: 1 }}>
590
+ {order?.unsync && (
591
+ <View
592
+ style={{
593
+ flexDirection: 'row',
594
+ justifyContent: 'flex-start',
595
+ alignItems: 'center'
596
+ }}
597
+ >
598
+ <MCIcon
599
+ name={'cloud-sync'}
600
+ color={'#444'}
601
+ size={16}
602
+ />
603
+ <OText
604
+ size={14}
605
+ color={theme.colors.textGray}
606
+ style={{ marginLeft: 5 }}
607
+ >
608
+ {t('PENDING_SYNC_CHANGES', 'Pending sync changes')}
609
+ </OText>
610
+ </View>
611
+ )}
551
612
  <OrderHeaderComponent
552
613
  order={order}
553
614
  handleOpenMapView={handleOpenMapView}
@@ -571,11 +632,11 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
571
632
  </OrderDetailsContainer>
572
633
  {showFloatButtonsPickUp[order?.status] && (
573
634
  <FloatingButton
574
- disabled={props.order?.loading}
635
+ disabled={props.order?.loading || disabledActionsByInternet}
575
636
  btnText={t('PICKUP_FAILED', 'Pickup failed')}
576
637
  isSecondaryBtn={false}
577
638
  secondButtonClick={() =>
578
- handleChangeOrderStatus && isGrantedPermissions ? handleChangeOrderStatus(9) : goToPermissionPage()
639
+ isGrantedPermissions ? handleChangeOrderStatus(9) : goToPermissionPage()
579
640
  }
580
641
  firstButtonClick={() =>
581
642
  handleViewActionOrder && handleViewActionOrder('pickupFailed')
@@ -588,40 +649,48 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
588
649
  isHideRejectButtons={isHideRejectButtons || !isEnabledFailedPickupDriver}
589
650
  />
590
651
  )}
591
- {(validStatusComplete.includes(order?.status)) && (
652
+ {(validStatusComplete.includes(order?.status)) && !(isDelosiProject && order?.status !== 26 && isHideRejectButtons) && (
592
653
  <>
593
654
  <FloatingButton
594
- disabled={props.order?.loading}
655
+ disabled={props.order?.loading || disabledActionsByInternet}
595
656
  btnText={t('DELIVERY_FAILED', 'Delivery Failed')}
596
657
  isSecondaryBtn={false}
597
658
  secondButtonClick={() =>
598
- handleChangeOrderStatus && isGrantedPermissions ? handleChangeOrderStatus(11) : goToPermissionPage()
659
+ isGrantedPermissions ? handleChangeOrderStatus(11) : goToPermissionPage()
599
660
  }
600
661
  firstButtonClick={() =>
601
662
  handleViewActionOrder && handleViewActionOrder('deliveryFailed')
602
663
  }
603
664
  secondBtnText={t('DELIVERY_COMPLETE', 'Delivery complete')}
604
- secondButton={true}
665
+ secondButton={isDelosiProject ? order?.status === 26 : true}
605
666
  firstColorCustom={theme.colors.red}
667
+ principalButtonColor={theme.colors.red}
606
668
  secondColorCustom={theme.colors.green}
607
- widthButton={isHideRejectButtons ? '100%' : '45%'}
669
+ widthButton={isHideRejectButtons || (isDelosiProject && order?.status !== 26) ? '100%' : '45%'}
608
670
  isHideRejectButtons={isHideRejectButtons}
609
671
  />
610
672
  </>
611
673
  )}
612
674
  {showFloatButtonsAcceptOrReject[order?.status] && (
613
675
  <FloatingButton
614
- disabled={props.order?.loading}
676
+ disabled={props.order?.loading || disabledActionsByInternet}
677
+ widthButton={isHideRejectButtons ? '100%' : '45%'}
678
+ isHideRejectButtons={isHideRejectButtons}
615
679
  btnText={t('REJECT', 'Reject')}
680
+ firstColorCustom={theme.colors.red}
681
+ firstButtonClick={() => order?.isLogistic && (order?.order_group || logisticOrderStatus.includes(order?.status))
682
+ ? handleRejectLogisticOrder()
683
+ : handleViewActionOrder('reject')
684
+ }
616
685
  isSecondaryBtn={false}
617
- secondButtonClick={() => hideTimer ? handleChangeOrderStatus && handleChangeOrderStatus(8) : (order?.isLogistic && (order?.order_group || logisticOrderStatus.includes(order?.status))) ? handleAcceptLogisticOrder(order) : handleViewActionOrder('accept')}
618
- firstButtonClick={() => order?.isLogistic && (order?.order_group || logisticOrderStatus.includes(order?.status)) ? handleRejectLogisticOrder() : handleViewActionOrder('reject')}
619
- secondBtnText={t('ACCEPT', 'Accept')}
620
686
  secondButton={true}
621
- firstColorCustom={theme.colors.red}
687
+ secondBtnText={t('ACCEPT', 'Accept')}
688
+ secondButtonClick={() => hideTimer
689
+ ? handleChangeOrderStatus(8)
690
+ : (order?.isLogistic && (order?.order_group || logisticOrderStatus.includes(order?.status)))
691
+ ? handleAcceptLogisticOrder(order)
692
+ : handleViewActionOrder('accept')}
622
693
  secondColorCustom={theme.colors.green}
623
- widthButton={isHideRejectButtons ? '100%' : '45%'}
624
- isHideRejectButtons={isHideRejectButtons}
625
694
  />
626
695
  )}
627
696
  </>
@@ -676,7 +745,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
676
745
  entireModal
677
746
  customClose>
678
747
  <AcceptOrRejectOrder
679
- handleUpdateOrder={handleChangeOrderStatus}
748
+ handleUpdateOrder={props.handleChangeOrderStatus}
680
749
  closeModal={setOpenModalForAccept}
681
750
  customerCellphone={order?.customer?.cellphone}
682
751
  loading={props.order?.loading}