ordering-ui-react-native 0.17.54 → 0.17.55-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 (221) hide show
  1. package/package.json +8 -7
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/BusinessesListing/index.tsx +1 -1
  4. package/src/components/OrderCreating/index.tsx +1 -21
  5. package/src/components/PaymentOptionsWebView/index.tsx +29 -8
  6. package/src/components/PhoneInputNumber/index.tsx +6 -2
  7. package/src/components/StripeMethodForm/index.tsx +136 -102
  8. package/src/components/VerifyPhone/styles.tsx +1 -2
  9. package/src/components/shared/OToast.tsx +4 -4
  10. package/src/types/index.tsx +5 -0
  11. package/src/utils/index.tsx +5 -0
  12. package/themes/business/index.tsx +2 -0
  13. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +265 -240
  14. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +6 -4
  15. package/themes/business/src/components/BusinessController/index.tsx +0 -1
  16. package/themes/business/src/components/Chat/index.tsx +125 -113
  17. package/themes/business/src/components/DriverMap/index.tsx +17 -6
  18. package/themes/business/src/components/DriverSchedule/index.tsx +29 -2
  19. package/themes/business/src/components/GoogleMap/index.tsx +58 -57
  20. package/themes/business/src/components/LoginForm/Otp/index.tsx +120 -0
  21. package/themes/business/src/components/LoginForm/Otp/styles.tsx +7 -0
  22. package/themes/business/src/components/LoginForm/index.tsx +240 -82
  23. package/themes/business/src/components/LoginForm/styles.tsx +10 -0
  24. package/themes/business/src/components/MapView/index.tsx +10 -10
  25. package/themes/business/src/components/NewOrderNotification/index.tsx +35 -21
  26. package/themes/business/src/components/NotFoundSource/index.tsx +2 -2
  27. package/themes/business/src/components/OrderDetails/Business.tsx +1 -1
  28. package/themes/business/src/components/OrderDetails/Delivery.tsx +191 -6
  29. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +93 -50
  30. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +64 -63
  31. package/themes/business/src/components/OrderDetailsLogistic/index.tsx +195 -0
  32. package/themes/business/src/components/OrderDetailsLogistic/styles.tsx +5 -0
  33. package/themes/business/src/components/OrderMessage/index.tsx +19 -18
  34. package/themes/business/src/components/OrderSummary/index.tsx +113 -121
  35. package/themes/business/src/components/OrdersOption/index.tsx +32 -75
  36. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +249 -0
  37. package/themes/business/src/components/PreviousOrders/OrdersGroupedItem.tsx +115 -0
  38. package/themes/business/src/components/PreviousOrders/index.tsx +445 -243
  39. package/themes/business/src/components/PreviousOrders/styles.tsx +31 -3
  40. package/themes/business/src/components/ProductItemAccordion/index.tsx +27 -3
  41. package/themes/business/src/components/ReviewCustomer/index.tsx +30 -15
  42. package/themes/business/src/components/StoresList/index.tsx +3 -4
  43. package/themes/business/src/components/UserProfileForm/index.tsx +11 -13
  44. package/themes/business/src/components/shared/OLink.tsx +33 -13
  45. package/themes/business/src/components/shared/OModal.tsx +16 -9
  46. package/themes/business/src/components/shared/OText.tsx +8 -2
  47. package/themes/business/src/types/index.tsx +32 -2
  48. package/themes/business/src/utils/index.tsx +44 -1
  49. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  50. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  51. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  52. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  53. package/themes/kiosk/src/components/Intro/index.tsx +16 -1
  54. package/themes/kiosk/src/components/LoginForm/Otp/index.tsx +92 -0
  55. package/themes/kiosk/src/components/LoginForm/Otp/styles.tsx +7 -0
  56. package/themes/kiosk/src/components/LoginForm/index.tsx +480 -156
  57. package/themes/kiosk/src/components/LoginForm/styles.tsx +14 -1
  58. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  59. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  60. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  61. package/themes/kiosk/src/components/PhoneInputNumber/index.tsx +3 -2
  62. package/themes/kiosk/src/components/PhoneInputNumber/styles.tsx +1 -3
  63. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  64. package/themes/kiosk/src/components/shared/OModal.tsx +14 -11
  65. package/themes/kiosk/src/layouts/Container.tsx +7 -1
  66. package/themes/kiosk/src/types/index.d.ts +13 -0
  67. package/themes/kiosk/src/utils/index.tsx +15 -0
  68. package/themes/original/index.tsx +4 -0
  69. package/themes/original/src/components/AddressDetails/index.tsx +28 -10
  70. package/themes/original/src/components/AddressForm/index.tsx +68 -40
  71. package/themes/original/src/components/AddressList/index.tsx +27 -22
  72. package/themes/original/src/components/AddressList/styles.tsx +4 -2
  73. package/themes/original/src/components/AnalyticsSegment/index.tsx +193 -10
  74. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  75. package/themes/original/src/components/AppleLogin/styles.tsx +3 -1
  76. package/themes/original/src/components/BusinessBasicInformation/index.tsx +153 -96
  77. package/themes/original/src/components/BusinessBasicInformation/styles.tsx +10 -12
  78. package/themes/original/src/components/BusinessController/index.tsx +122 -68
  79. package/themes/original/src/components/BusinessController/styles.tsx +23 -4
  80. package/themes/original/src/components/BusinessFeaturedController/index.tsx +21 -54
  81. package/themes/original/src/components/BusinessFeaturedController/styles.tsx +8 -0
  82. package/themes/original/src/components/BusinessInformation/index.tsx +110 -108
  83. package/themes/original/src/components/BusinessItemAccordion/index.tsx +15 -20
  84. package/themes/original/src/components/BusinessListingSearch/index.tsx +352 -326
  85. package/themes/original/src/components/BusinessListingSearch/styles.tsx +0 -18
  86. package/themes/original/src/components/BusinessPreorder/index.tsx +103 -19
  87. package/themes/original/src/components/BusinessProductsCategories/index.tsx +1 -2
  88. package/themes/original/src/components/BusinessProductsList/index.tsx +25 -15
  89. package/themes/original/src/components/BusinessProductsList/styles.tsx +8 -3
  90. package/themes/original/src/components/BusinessProductsListing/UpsellingRedirect.tsx +1 -1
  91. package/themes/original/src/components/BusinessProductsListing/index.tsx +683 -535
  92. package/themes/original/src/components/BusinessProductsListing/styles.tsx +2 -2
  93. package/themes/original/src/components/BusinessReviews/index.tsx +3 -1
  94. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +1 -1
  95. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +96 -91
  96. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -4
  97. package/themes/original/src/components/BusinessesListing/index.tsx +0 -1
  98. package/themes/original/src/components/Cart/index.tsx +77 -50
  99. package/themes/original/src/components/CartContent/index.tsx +115 -19
  100. package/themes/original/src/components/CartContent/styles.tsx +17 -7
  101. package/themes/original/src/components/Checkout/index.tsx +359 -171
  102. package/themes/original/src/components/Checkout/styles.tsx +4 -2
  103. package/themes/original/src/components/CitiesControl/index.tsx +89 -0
  104. package/themes/original/src/components/CitiesControl/styles.tsx +17 -0
  105. package/themes/original/src/components/CouponControl/index.tsx +10 -3
  106. package/themes/original/src/components/DriverTips/index.tsx +52 -34
  107. package/themes/original/src/components/FacebookLogin/styles.tsx +3 -1
  108. package/themes/original/src/components/Favorite/index.tsx +8 -9
  109. package/themes/original/src/components/Favorite/styles.tsx +1 -1
  110. package/themes/original/src/components/FavoriteList/index.tsx +51 -80
  111. package/themes/original/src/components/FloatingButton/index.tsx +1 -2
  112. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  113. package/themes/original/src/components/GPSButton/index.tsx +6 -4
  114. package/themes/original/src/components/GPSButton/styles.ts +3 -3
  115. package/themes/original/src/components/GiftCard/GiftCardUI/index.tsx +96 -0
  116. package/themes/original/src/components/GiftCard/GiftCardUI/styles.tsx +5 -0
  117. package/themes/original/src/components/GiftCard/PurchaseGiftCard/index.tsx +100 -0
  118. package/themes/original/src/components/GiftCard/PurchaseGiftCard/styles.tsx +8 -0
  119. package/themes/original/src/components/GiftCard/RedeemGiftCard/index.tsx +191 -0
  120. package/themes/original/src/components/GiftCard/RedeemGiftCard/styles.tsx +8 -0
  121. package/themes/original/src/components/GiftCard/SendGiftCard/index.tsx +165 -0
  122. package/themes/original/src/components/GiftCard/SendGiftCard/styles.tsx +9 -0
  123. package/themes/original/src/components/GoogleLogin/styles.tsx +1 -1
  124. package/themes/original/src/components/GoogleMap/index.tsx +15 -4
  125. package/themes/original/src/components/Help/index.tsx +8 -8
  126. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +10 -31
  127. package/themes/original/src/components/HelpAccountAndPayment/styles.tsx +5 -3
  128. package/themes/original/src/components/HelpGuide/index.tsx +6 -6
  129. package/themes/original/src/components/HelpGuide/styles.tsx +6 -0
  130. package/themes/original/src/components/HelpOrder/index.tsx +6 -15
  131. package/themes/original/src/components/HelpOrder/styles.tsx +8 -1
  132. package/themes/original/src/components/Home/index.tsx +13 -4
  133. package/themes/original/src/components/LastOrder/index.tsx +1 -34
  134. package/themes/original/src/components/LoginForm/Otp/index.tsx +55 -13
  135. package/themes/original/src/components/LoginForm/Otp/styles.tsx +0 -1
  136. package/themes/original/src/components/LoginForm/index.tsx +64 -26
  137. package/themes/original/src/components/LottieAnimation/index.tsx +89 -55
  138. package/themes/original/src/components/MessageListing/index.tsx +16 -42
  139. package/themes/original/src/components/Messages/index.tsx +32 -10
  140. package/themes/original/src/components/MomentOption/index.tsx +194 -89
  141. package/themes/original/src/components/MultiCart/index.tsx +50 -0
  142. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +151 -49
  143. package/themes/original/src/components/MultiCheckout/index.tsx +308 -88
  144. package/themes/original/src/components/MultiCheckout/styles.tsx +3 -1
  145. package/themes/original/src/components/MultiOrdersDetails/SingleOrderCard.tsx +37 -224
  146. package/themes/original/src/components/MultiOrdersDetails/index.tsx +68 -21
  147. package/themes/original/src/components/MultiOrdersDetails/styles.tsx +1 -1
  148. package/themes/original/src/components/MyOrders/index.tsx +77 -52
  149. package/themes/original/src/components/NavBar/index.tsx +18 -18
  150. package/themes/original/src/components/NotFoundSource/index.tsx +14 -10
  151. package/themes/original/src/components/Notifications/index.tsx +46 -50
  152. package/themes/original/src/components/Notifications/styles.tsx +6 -3
  153. package/themes/original/src/components/OrderDetails/OrderEta.tsx +76 -0
  154. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +15 -3
  155. package/themes/original/src/components/OrderDetails/index.tsx +190 -358
  156. package/themes/original/src/components/OrderDetails/styles.tsx +0 -1
  157. package/themes/original/src/components/OrderItAgain/index.tsx +3 -1
  158. package/themes/original/src/components/OrderProgress/index.tsx +33 -59
  159. package/themes/original/src/components/OrderSummary/index.tsx +85 -57
  160. package/themes/original/src/components/OrderTypeSelector/index.tsx +1 -1
  161. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +24 -19
  162. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +14 -14
  163. package/themes/original/src/components/OrdersOption/index.tsx +76 -66
  164. package/themes/original/src/components/OrdersOption/styles.tsx +1 -1
  165. package/themes/original/src/components/PageBanner/index.tsx +106 -31
  166. package/themes/original/src/components/PageBanner/styles.tsx +4 -4
  167. package/themes/original/src/components/PaymentOptionCard/index.tsx +180 -0
  168. package/themes/original/src/components/PaymentOptionStripe/styles.tsx +1 -1
  169. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  170. package/themes/original/src/components/PaymentOptions/index.tsx +64 -7
  171. package/themes/original/src/components/PhoneInputNumber/index.tsx +3 -3
  172. package/themes/original/src/components/PlaceSpot/index.tsx +12 -6
  173. package/themes/original/src/components/ProductForm/index.tsx +109 -33
  174. package/themes/original/src/components/ProductForm/styles.tsx +5 -7
  175. package/themes/original/src/components/ProductItemAccordion/index.tsx +22 -19
  176. package/themes/original/src/components/ProductOptionSubOption/index.tsx +24 -14
  177. package/themes/original/src/components/ProductOptionSubOption/styles.tsx +3 -4
  178. package/themes/original/src/components/ProfessionalFilter/SingleProfessionalCard/index.tsx +108 -0
  179. package/themes/original/src/components/ProfessionalFilter/index.tsx +20 -50
  180. package/themes/original/src/components/ProfessionalProfile/index.tsx +36 -7
  181. package/themes/original/src/components/Promotions/index.tsx +234 -220
  182. package/themes/original/src/components/Promotions/styles.tsx +10 -3
  183. package/themes/original/src/components/ReviewDriver/index.tsx +3 -3
  184. package/themes/original/src/components/ReviewOrder/index.tsx +26 -9
  185. package/themes/original/src/components/ReviewOrder/styles.tsx +7 -0
  186. package/themes/original/src/components/ReviewProducts/index.tsx +23 -11
  187. package/themes/original/src/components/ReviewTrigger/index.tsx +27 -9
  188. package/themes/original/src/components/ReviewTrigger/styles.tsx +8 -1
  189. package/themes/original/src/components/ScheduleAccordion/index.tsx +68 -0
  190. package/themes/original/src/components/ScheduleAccordion/styles.tsx +14 -0
  191. package/themes/original/src/components/ServiceForm/index.tsx +66 -17
  192. package/themes/original/src/components/Sessions/index.tsx +11 -8
  193. package/themes/original/src/components/Sessions/styles.tsx +5 -0
  194. package/themes/original/src/components/SignupForm/index.tsx +43 -20
  195. package/themes/original/src/components/SingleOrderCard/index.tsx +130 -52
  196. package/themes/original/src/components/SingleOrderCard/styles.tsx +11 -2
  197. package/themes/original/src/components/SingleProductCard/index.tsx +71 -34
  198. package/themes/original/src/components/SingleProductCard/styles.tsx +21 -4
  199. package/themes/original/src/components/SingleProductReview/styles.tsx +1 -1
  200. package/themes/original/src/components/StripeCardsList/index.tsx +13 -3
  201. package/themes/original/src/components/StripeElementsForm/index.tsx +48 -34
  202. package/themes/original/src/components/UpsellingProducts/index.tsx +238 -224
  203. package/themes/original/src/components/UpsellingProducts/styles.tsx +12 -1
  204. package/themes/original/src/components/UserDetails/index.tsx +8 -4
  205. package/themes/original/src/components/UserFormDetails/index.tsx +76 -7
  206. package/themes/original/src/components/UserFormDetails/styles.tsx +1 -1
  207. package/themes/original/src/components/UserProfile/index.tsx +88 -79
  208. package/themes/original/src/components/UserProfileForm/index.tsx +27 -29
  209. package/themes/original/src/components/UserProfileForm/styles.tsx +7 -0
  210. package/themes/original/src/components/WalletTransactionItem/index.tsx +2 -2
  211. package/themes/original/src/components/WalletTransactions/index.tsx +3 -3
  212. package/themes/original/src/components/Wallets/index.tsx +67 -24
  213. package/themes/original/src/components/Wallets/styles.tsx +3 -4
  214. package/themes/original/src/components/shared/HeaderTitle.tsx +8 -3
  215. package/themes/original/src/components/shared/OButton.tsx +6 -2
  216. package/themes/original/src/components/shared/OInput.tsx +6 -1
  217. package/themes/original/src/components/shared/OModal.tsx +3 -3
  218. package/themes/original/src/layouts/Container.tsx +1 -1
  219. package/themes/original/src/types/index.tsx +40 -11
  220. package/themes/original/src/utils/index.tsx +273 -1
  221. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -1,16 +1,17 @@
1
- import React, { useState, useEffect } from 'react'
2
1
  import moment from 'moment'
3
- import { View, Modal, StyleSheet, TouchableOpacity, Dimensions } from 'react-native'
2
+ import { NewOrderNotification as NewOrderNotificationController, useApi, useEvent, useLanguage, useSession } from 'ordering-components/native'
3
+ import React, { useEffect, useState } from 'react'
4
+ import { Dimensions, Modal, StyleSheet, TouchableOpacity, View } from 'react-native'
4
5
  import Sound from 'react-native-sound'
5
6
  import Icon from 'react-native-vector-icons/Feather'
6
7
  import { useTheme } from 'styled-components/native'
7
- import { useEvent, useLanguage, useSession, useApi, NewOrderNotification as NewOrderNotificationController } from 'ordering-components/native'
8
8
 
9
- import { OText, OIcon } from '../shared'
10
- import { NotificationContainer } from './styles'
11
9
  import { useLocation } from '../../hooks/useLocation'
10
+ import { OIcon, OText } from '../shared'
11
+ import { NotificationContainer } from './styles'
12
12
 
13
- Sound.setCategory('Playback')
13
+ Sound.setCategory('Playback', true)
14
+ Sound.setMode('Default')
14
15
 
15
16
  const windowWidth = Dimensions.get('screen').width
16
17
 
@@ -44,9 +45,10 @@ const NewOrderNotificationUI = (props: any) => {
44
45
  },
45
46
  }
46
47
 
47
- const notificationSound = new Sound(theme.sounds.notification);
48
+ const notificationSound = new Sound(theme.sounds.notification, '', () => { });
48
49
 
49
50
  let _timeout: any = null
51
+ let times = 0
50
52
 
51
53
  const handleCloseEvents = () => {
52
54
  notificationSound.stop()
@@ -56,15 +58,22 @@ const NewOrderNotificationUI = (props: any) => {
56
58
 
57
59
  const handlePlayNotificationSound = (eventObj: any = null) => {
58
60
  setCurrentEvent(eventObj)
59
- let times = 1
60
- if (times < SOUND_LOOP) {
61
- _timeout = setInterval(() => {
62
- notificationSound.setVolume(1).play(success => success && (times = times + 1))
63
- if (times === SOUND_LOOP) {
64
- clearInterval(_timeout)
65
- }
66
- }, 2500)
61
+ if (times > 0) {
62
+ if (times === 3) {
63
+ times = 0
64
+ return
65
+ }
66
+ return
67
67
  }
68
+ _timeout = setInterval(() => {
69
+ if (times < SOUND_LOOP) {
70
+ notificationSound.play()
71
+ times++
72
+ } else {
73
+ clearInterval(_timeout)
74
+ return
75
+ }
76
+ }, 2500)
68
77
  }
69
78
 
70
79
  const handleEventNotification = async (evtType: number, value: any) => {
@@ -74,32 +83,37 @@ const NewOrderNotificationUI = (props: any) => {
74
83
  await fetch(`${ordering.root}/users/${user.id}/locations`, {
75
84
  method: 'POST',
76
85
  body: JSON.stringify({
77
- location: JSON.stringify({location: `{lat: ${location.latitude}, lng: ${location.longitude}}`})
86
+ location: JSON.stringify({ location: `{lat: ${location.latitude}, lng: ${location.longitude}}` })
78
87
  }),
79
88
  headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${token}` }
80
89
  })
81
- } catch {}
90
+ } catch { }
82
91
  const duration = moment.duration(moment().diff(moment.utc(value?.last_driver_assigned_at)))
83
92
  const assignedSecondsDiff = duration.asSeconds()
84
- if (assignedSecondsDiff < 5 && !isBusinessApp) {
93
+ if (assignedSecondsDiff < 5 && !isBusinessApp && !value?.logistic_status) {
85
94
  handlePlayNotificationSound({ evt: 2, orderId: value?.id })
86
95
  }
87
96
  }
88
97
  if (evtType === 3 || value.author_id === user.id) return
89
- handlePlayNotificationSound({
98
+ setTimeout(() => handlePlayNotificationSound({
90
99
  evt: evtType,
91
- orderId: evtList[evtType].event === 'messages' ? value?.order_id : value?.id
92
- })
100
+ orderId: value?.driver ? value?.order_id : evtList[evtType].event === 'messages' ? value?.order?.id : value?.order_id
101
+ }), 1000)
93
102
  }
94
103
 
95
104
  useEffect(() => {
96
105
  events.on('message_added_notification', (o: any) => handleEventNotification(1, o))
97
106
  events.on('order_added_notification', (o: any) => handleEventNotification(2, o))
98
107
  events.on('order_updated_notification', (o: any) => handleEventNotification(3, o))
108
+ events.on('request_register_notification', (o: any) => handleEventNotification(2, o))
109
+ events.on('request_update_notification', (o: any) => handleEventNotification(3, o))
110
+
99
111
  return () => {
100
112
  events.off('message_added_notification', (o: any) => handleEventNotification(1, o))
101
113
  events.off('order_added_notification', (o: any) => handleEventNotification(2, o))
102
114
  events.off('order_updated_notification', (o: any) => handleEventNotification(3, o))
115
+ events.off('request_register_notification', (o: any) => handleEventNotification(2, o))
116
+ events.off('request_update_notification', (o: any) => handleEventNotification(3, o))
103
117
  }
104
118
  }, [])
105
119
 
@@ -18,7 +18,7 @@ export const NotFoundSource = (props: NotFoundSourceParams) => {
18
18
  <OIcon src={errorImage} width={260} height={220} />
19
19
  </NotFoundImage>
20
20
  )}
21
- {content && conditioned && !errorImage && (
21
+ {!!content && conditioned && !errorImage && (
22
22
  <OText
23
23
  color={theme.colors.textSecondary}
24
24
  size={textSize ?? 18}
@@ -26,7 +26,7 @@ export const NotFoundSource = (props: NotFoundSourceParams) => {
26
26
  {content}
27
27
  </OText>
28
28
  )}
29
- {content && !conditioned && (
29
+ {!!content && !conditioned && (
30
30
  <OText
31
31
  color={theme.colors.textSecondary}
32
32
  size={textSize ?? 18}
@@ -410,7 +410,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
410
410
  </View>
411
411
  )}
412
412
 
413
- {(!!error || error) && (
413
+ {(!!error || error?.length > 0) && (
414
414
  <NotFoundSource
415
415
  btnTitle={t('GO_TO_MY_ORDERS', 'Go to my orders')}
416
416
  content={
@@ -4,6 +4,7 @@ import { StyleSheet, View } from 'react-native';
4
4
 
5
5
  // Thirds
6
6
  import { Placeholder, PlaceholderLine, Fade } from 'rn-placeholder';
7
+ import Clipboard from '@react-native-clipboard/clipboard';
7
8
 
8
9
  //OrderingComponent
9
10
  import {
@@ -12,6 +13,8 @@ import {
12
13
  useToast,
13
14
  useSession,
14
15
  ToastType,
16
+ useUtils,
17
+ useConfig
15
18
  } from 'ordering-components/native';
16
19
 
17
20
  //Components
@@ -26,7 +29,7 @@ import { OrderDetailsParams } from '../../types';
26
29
  import { USER_TYPE } from '../../config/constants';
27
30
  import { useTheme } from 'styled-components/native';
28
31
  import { NotFoundSource } from '../NotFoundSource';
29
- import { getOrderStatus } from '../../utils';
32
+ import { verifyDecimals, getProductPrice, getOrderStatus } from '../../utils';
30
33
  import { OrderHeaderComponent } from './OrderHeaderComponent';
31
34
  import { OrderContentComponent } from './OrderContentComponent';
32
35
  //Styles
@@ -52,10 +55,15 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
52
55
  handleClickLogisticOrder,
53
56
  forceUpdate,
54
57
  getPermissions,
55
- isGrantedPermissions
58
+ orderAssingId,
59
+ isGrantedPermissions,
56
60
  } = props;
57
61
  const [, { showToast }] = useToast();
62
+ const [{ parsePrice, parseNumber }] = useUtils();
63
+ const [{ configs }] = useConfig();
58
64
  const { order } = props.order
65
+
66
+ const isAllowedDriverRejectOrder = configs?.allow_driver_reject_order?.value === '1'
59
67
  const theme = useTheme();
60
68
  const [, t] = useLanguage();
61
69
  const [session] = useSession();
@@ -75,6 +83,8 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
75
83
 
76
84
  const validStatusComplete = [9, 19, 23]
77
85
 
86
+ const pendingOrderStatus = [1, 4, 7, 13]
87
+
78
88
  const logisticOrderStatus = [4, 6, 7]
79
89
 
80
90
  const showFloatButtonsPickUp: any = {
@@ -133,7 +143,174 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
133
143
  }
134
144
  };
135
145
 
146
+ const getFormattedSubOptionName = ({ quantity, name, position, price }: any) => {
147
+ if (name !== 'No') {
148
+ const pos = position && position !== 'whole' ? `(${t(position.toUpperCase(), position)})` : '';
149
+ return pos
150
+ ? `${quantity} x ${name} ${pos} +${parsePrice(price)}\n`
151
+ : `${quantity} x ${name} +${parsePrice(price)}\n`;
152
+ } else {
153
+ return 'No\n';
154
+ }
155
+ };
156
+
157
+ const handleCopyClipboard = () => {
158
+ const businessName = !!order?.business?.name
159
+ ? `${order?.business?.name} \n`
160
+ : '';
161
+
162
+ const businessEmail = !!order?.business?.email
163
+ ? `${order?.business?.email} \n`
164
+ : '';
165
+
166
+ const businessCellphone = !!order?.business?.cellphone
167
+ ? `${order?.business?.cellphone} \n`
168
+ : '';
169
+
170
+ const businessPhone = !!order?.business?.phone
171
+ ? `${order?.business?.phone} \n`
172
+ : '';
173
+
174
+ const businessAddress = !!order?.business?.address
175
+ ? `${order?.business?.address} \n`
176
+ : '';
177
+
178
+ const businessSpecialAddress = !!order?.business?.address_notes
179
+ ? `${order?.business?.address_notes} \n \n`
180
+ : '';
181
+
182
+ const customerName = !!order?.customer?.name
183
+ ? `${order?.customer?.name} ${order?.customer?.middle_name || ''} ${order?.customer?.lastname || ''
184
+ } ${order?.customer?.second_lastname || ''} \n`
185
+ : '';
186
+
187
+ const customerEmail = !!order?.customer.email
188
+ ? `${order?.customer.email} \n`
189
+ : '';
190
+
191
+ const customerCellPhone = !!order?.customer?.cellphone
192
+ ? `${order?.customer?.cellphone} \n`
193
+ : '';
194
+
195
+ const customerPhone = !!order?.customer?.phone
196
+ ? `${order?.customer?.phone} \n`
197
+ : '';
198
+
199
+ const customerAddress = !!order?.customer?.address
200
+ ? `${order?.customer?.address} \n`
201
+ : '';
202
+
203
+ const customerSpecialAddress = !!order?.customer?.address_notes
204
+ ? `${order?.customer?.address_notes} \n`
205
+ : '';
206
+
207
+ const payment = order?.paymethod?.name
208
+ ? `${order?.paymethod?.name} - ${order.delivery_type === 1
209
+ ? t('DELIVERY', 'Delivery')
210
+ : order.delivery_type === 2
211
+ ? t('PICKUP', 'Pickup')
212
+ : order.delivery_type === 3
213
+ ? t('EAT_IN', 'Eat in')
214
+ : order.delivery_type === 4
215
+ ? t('CURBSIDE', 'Curbside')
216
+ : t('DRIVER_THRU', 'Driver thru')
217
+ }\n`
218
+ : '';
219
+
220
+ const getSuboptions = (suboptions: any) => {
221
+ const array: any = []
222
+ suboptions?.length > 0 &&
223
+ suboptions?.map((suboption: any) => {
224
+ const string = `${getFormattedSubOptionName(suboption)}`
225
+ array.push(string)
226
+ })
227
+
228
+ return array.join('')
229
+ }
230
+
231
+ const getOptions = (options: any, productComment: string = '') => {
232
+ const array: any = [];
233
+
234
+ options?.length &&
235
+ options?.map((option: any) => {
236
+ const string =
237
+ ` ${option.name}\n ${getSuboptions(option.suboptions)}`;
238
+
239
+ array.push(string)
240
+ })
241
+
242
+ if (productComment) {
243
+ array.push(` ${t('COMMENT', 'Comment')}\n ${productComment}\n`)
244
+ }
245
+
246
+ return array.join('')
247
+ }
248
+
249
+ const productsInArray =
250
+ order?.products.length &&
251
+ order?.products.map((product: any, i: number) => {
252
+ const string =
253
+ `${product?.quantity} X ${product?.name} ${parsePrice(product.total ?? getProductPrice(product))}\n${getOptions(product.options, product.comment)}`;
254
+
255
+ return i === 0 ? ` ${string}` : string
256
+ });
257
+
258
+ const productsInString = productsInArray.join(' ');
259
+ const orderDetails = `${t(
260
+ 'ORDER_DETAILS',
261
+ 'Order Details',
262
+ )}:\n${productsInString}\n`;
263
+
264
+ const subtotal = `${t('SUBTOTAL', 'Subtotal')}: ${parsePrice(
265
+ order?.subtotal,
266
+ )}\n`;
267
+
268
+ const drivertip = `${t('DRIVER_TIP', 'Driver tip')} ${parsePrice(
269
+ order?.summary?.driver_tip || order?.totalDriverTip,
270
+ )}\n`;
271
+
272
+ const deliveryFee = `${t('DELIVERY_FEE', 'Delivery fee')} ${verifyDecimals(
273
+ order?.service_fee,
274
+ parseNumber,
275
+ )}% ${parsePrice(order?.summary?.service_fee || order?.serviceFee || 0)}\n`;
276
+
277
+ const total = `${t('TOTAL', 'Total')} ${parsePrice(
278
+ order?.summary?.total || order?.total,
279
+ )}\n`;
280
+
281
+ const orderStatus = `${t('INVOICE_ORDER_NO', 'Order No.')} ${order.id} ${t(
282
+ 'IS',
283
+ 'is',
284
+ )} ${getOrderStatus(order?.status, t)?.value}\n`;
285
+
286
+ Clipboard.setString(
287
+ `${orderStatus} ${payment} ${t(
288
+ 'BUSINESS_DETAILS',
289
+ 'Business Details',
290
+ )}\n ${businessName} ${businessEmail} ${businessCellphone} ${businessPhone} ${businessAddress} ${businessSpecialAddress}${t(
291
+ 'CUSTOMER_DETAILS',
292
+ 'Customer Details',
293
+ )}\n ${customerName} ${customerEmail} ${customerCellPhone} ${customerPhone} ${customerAddress} ${customerSpecialAddress}\n${orderDetails} ${subtotal} ${drivertip} ${deliveryFee} ${total}`,
294
+ );
295
+
296
+ showToast(
297
+ ToastType.Info,
298
+ t('COPY_TO_CLIPBOARD', 'Copy to clipboard.'),
299
+ 1000,
300
+ );
301
+ };
302
+
136
303
  const handleViewActionOrder = (action: string) => {
304
+ if (action === 'reject' && !isAllowedDriverRejectOrder) {
305
+ setAlertState({
306
+ open: true,
307
+ content: [
308
+ t('DRIVER_NOT_ALLOWED_TO_REJECT_ORDER', 'The driver is not allowed to reject an order.'),
309
+ ],
310
+ key: null,
311
+ })
312
+ return
313
+ }
137
314
  if (!isGrantedPermissions) {
138
315
  navigation.navigate('RequestPermissions')
139
316
  return
@@ -150,16 +327,23 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
150
327
  };
151
328
 
152
329
  const handleArrowBack: any = () => {
330
+ if (alertState?.open && !isAllowedDriverRejectOrder && !pendingOrderStatus.includes(order?.status)) {
331
+ setAlertState({
332
+ ...alertState,
333
+ open: false
334
+ })
335
+ return
336
+ }
153
337
  navigation?.canGoBack() && navigation.goBack();
154
338
  };
155
339
 
156
340
  const handleRejectLogisticOrder = () => {
157
- handleClickLogisticOrder?.(2, order?.logistic_order_id)
341
+ handleClickLogisticOrder?.(2, orderAssingId || order?.logistic_order_id)
158
342
  handleArrowBack()
159
343
  }
160
344
 
161
345
  const handleAcceptLogisticOrder = (order: any) => {
162
- handleClickLogisticOrder?.(1, order?.logistic_order_id)
346
+ handleClickLogisticOrder?.(1, orderAssingId || order?.logistic_order_id)
163
347
  if (order?.order_group) {
164
348
  handleArrowBack()
165
349
  }
@@ -203,7 +387,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
203
387
  }, [props.order?.loading]);
204
388
 
205
389
  useEffect(() => {
206
- if (order?.driver === null && session?.user?.level === 4) {
390
+ if (!order?.driver_id && session?.user?.level === 4) {
207
391
  setAlertState({
208
392
  open: true,
209
393
  content: [
@@ -343,7 +527,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
343
527
  </View>
344
528
  )}
345
529
 
346
- {(!!props.order?.error || props.order?.error) && (
530
+ {(!!props.order?.error || props.order?.error?.length > 0) && (
347
531
  <NotFoundSource
348
532
  btnTitle={t('GO_TO_MY_ORDERS', 'Go to my orders')}
349
533
  content={
@@ -361,6 +545,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
361
545
  order={order}
362
546
  handleOpenMapView={handleOpenMapView}
363
547
  handleOpenMessagesForBusiness={handleOpenMessagesForBusiness}
548
+ handleCopyClipboard={handleCopyClipboard}
364
549
  getOrderStatus={getOrderStatus}
365
550
  handleArrowBack={handleArrowBack}
366
551
  logisticOrderStatus={logisticOrderStatus}