ordering-ui-react-native 0.21.13 → 0.21.14-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 (241) hide show
  1. package/package.json +7 -6
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/BusinessInformation/index.tsx +10 -9
  4. package/src/components/BusinessesListing/index.tsx +1 -1
  5. package/src/components/PaymentOptionsWebView/index.tsx +1 -0
  6. package/src/components/StripeMethodForm/index.tsx +4 -4
  7. package/src/components/VerifyPhone/styles.tsx +1 -2
  8. package/src/types/index.tsx +2 -1
  9. package/src/utils/index.tsx +2 -2
  10. package/themes/business/index.tsx +4 -0
  11. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +9 -2
  12. package/themes/business/src/components/BusinessController/index.tsx +19 -17
  13. package/themes/business/src/components/BusinessProductList/AccordionDropdown.tsx +63 -0
  14. package/themes/business/src/components/BusinessProductList/IterateCategories.tsx +108 -0
  15. package/themes/business/src/components/BusinessProductList/ProductList.tsx +196 -0
  16. package/themes/business/src/components/BusinessProductList/index.tsx +196 -0
  17. package/themes/business/src/components/BusinessProductList/styles.tsx +10 -0
  18. package/themes/business/src/components/Chat/index.tsx +41 -13
  19. package/themes/business/src/components/DriverMap/index.tsx +4 -3
  20. package/themes/business/src/components/DriverSchedule/index.tsx +5 -5
  21. package/themes/business/src/components/FloatingButton/index.tsx +34 -31
  22. package/themes/business/src/components/Home/index.tsx +5 -1
  23. package/themes/business/src/components/MapView/index.tsx +11 -7
  24. package/themes/business/src/components/MessagesOption/index.tsx +22 -94
  25. package/themes/business/src/components/NewOrderNotification/index.tsx +163 -113
  26. package/themes/business/src/components/OrderDetails/Business.tsx +50 -2
  27. package/themes/business/src/components/OrderDetails/Delivery.tsx +23 -11
  28. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +60 -53
  29. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +54 -23
  30. package/themes/business/src/components/OrderDetails/usePrinterCommands.tsx +220 -0
  31. package/themes/business/src/components/OrderDetailsLogistic/index.tsx +6 -1
  32. package/themes/business/src/components/OrderSummary/index.tsx +240 -76
  33. package/themes/business/src/components/OrdersListManager/index.tsx +7 -2
  34. package/themes/business/src/components/OrdersListManager/utils.tsx +1 -1
  35. package/themes/business/src/components/OrdersOption/index.tsx +125 -48
  36. package/themes/business/src/components/PreviousMessages/FooterMessageComponent.tsx +103 -0
  37. package/themes/business/src/components/PreviousMessages/index.tsx +97 -55
  38. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +26 -34
  39. package/themes/business/src/components/PreviousOrders/OrderList.tsx +93 -0
  40. package/themes/business/src/components/PreviousOrders/OrdersGroupedItem.tsx +1 -1
  41. package/themes/business/src/components/PreviousOrders/index.tsx +194 -220
  42. package/themes/business/src/components/PreviousOrders/styles.tsx +10 -0
  43. package/themes/business/src/components/PrinterSettings/index.tsx +279 -0
  44. package/themes/business/src/components/PrinterSettings/styles.tsx +17 -0
  45. package/themes/business/src/components/ProductItemAccordion/index.tsx +2 -2
  46. package/themes/business/src/components/ReviewCustomer/index.tsx +2 -0
  47. package/themes/business/src/components/SearchBar/index.tsx +2 -1
  48. package/themes/business/src/components/Sessions/index.tsx +187 -0
  49. package/themes/business/src/components/Sessions/styles.tsx +20 -0
  50. package/themes/business/src/components/StoresList/index.tsx +5 -3
  51. package/themes/business/src/components/UserFormDetails/index.tsx +111 -107
  52. package/themes/business/src/components/UserProfileForm/index.tsx +98 -43
  53. package/themes/business/src/components/WebsocketStatus/index.tsx +171 -0
  54. package/themes/business/src/components/WebsocketStatus/styles.tsx +28 -0
  55. package/themes/business/src/components/shared/OInput.tsx +2 -0
  56. package/themes/business/src/hooks/useLocation.tsx +5 -4
  57. package/themes/business/src/types/index.tsx +21 -1
  58. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  59. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  60. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  61. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  62. package/themes/kiosk/src/components/LoginForm/index.tsx +124 -96
  63. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  64. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  65. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  66. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  67. package/themes/original/index.tsx +9 -4
  68. package/themes/original/src/components/AddressDetails/index.tsx +20 -10
  69. package/themes/original/src/components/AddressForm/index.tsx +10 -6
  70. package/themes/original/src/components/AddressForm/styles.tsx +1 -1
  71. package/themes/original/src/components/AddressList/index.tsx +4 -7
  72. package/themes/original/src/components/AddressList/styles.tsx +4 -4
  73. package/themes/original/src/components/AnalyticsSegment/index.tsx +6 -6
  74. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  75. package/themes/original/src/components/BusinessBasicInformation/index.tsx +4 -4
  76. package/themes/original/src/components/BusinessBasicInformation/styles.tsx +1 -1
  77. package/themes/original/src/components/BusinessController/index.tsx +20 -12
  78. package/themes/original/src/components/BusinessController/styles.tsx +8 -7
  79. package/themes/original/src/components/BusinessInformation/styles.tsx +2 -2
  80. package/themes/original/src/components/BusinessItemAccordion/index.tsx +11 -7
  81. package/themes/original/src/components/BusinessListingSearch/BusinessSearchFooter.tsx +317 -0
  82. package/themes/original/src/components/BusinessListingSearch/BusinessSearchHeader.tsx +96 -0
  83. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/index.tsx +1 -1
  84. package/themes/original/src/components/BusinessListingSearch/index.tsx +56 -361
  85. package/themes/original/src/components/BusinessListingSearch/styles.tsx +1 -1
  86. package/themes/original/src/components/BusinessPreorder/index.tsx +2 -3
  87. package/themes/original/src/components/BusinessProductsCategories/index.tsx +1 -1
  88. package/themes/original/src/components/BusinessProductsList/index.tsx +3 -3
  89. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  90. package/themes/original/src/components/BusinessProductsListing/index.tsx +51 -20
  91. package/themes/original/src/components/BusinessProductsListing/styles.tsx +3 -4
  92. package/themes/original/src/components/BusinessReviews/index.tsx +1 -1
  93. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +1 -1
  94. package/themes/original/src/components/BusinessesListing/Layout/Appointment/styles.tsx +5 -5
  95. package/themes/original/src/components/BusinessesListing/Layout/Original/FlatListBusinessListFooter.tsx +69 -0
  96. package/themes/original/src/components/BusinessesListing/Layout/Original/FlatListBusinessListHeader.tsx +406 -0
  97. package/themes/original/src/components/BusinessesListing/Layout/Original/FlatListBusinessListing.tsx +76 -0
  98. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +24 -404
  99. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -1
  100. package/themes/original/src/components/BusinessesListing/index.tsx +0 -1
  101. package/themes/original/src/components/Cart/index.tsx +32 -9
  102. package/themes/original/src/components/CartContent/index.tsx +96 -58
  103. package/themes/original/src/components/CartStoresListing/styles.tsx +2 -2
  104. package/themes/original/src/components/Checkout/index.tsx +190 -66
  105. package/themes/original/src/components/Checkout/styles.tsx +17 -0
  106. package/themes/original/src/components/CitiesControl/styles.tsx +1 -1
  107. package/themes/original/src/components/DatePicker/index.tsx +33 -0
  108. package/themes/original/src/components/DatePicker/styles.tsx +20 -0
  109. package/themes/original/src/components/Favorite/index.tsx +4 -9
  110. package/themes/original/src/components/Favorite/styles.tsx +0 -2
  111. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  112. package/themes/original/src/components/GPSButton/index.tsx +1 -1
  113. package/themes/original/src/components/GiftCard/GiftCardOrdersList/index.tsx +64 -0
  114. package/themes/original/src/components/GiftCard/GiftCardOrdersList/styles.tsx +8 -0
  115. package/themes/original/src/components/GiftCard/GiftCardUI/index.tsx +8 -3
  116. package/themes/original/src/components/GiftCard/PurchaseGiftCard/index.tsx +36 -3
  117. package/themes/original/src/components/GiftCard/PurchaseGiftCard/styles.tsx +1 -1
  118. package/themes/original/src/components/GiftCard/RedeemGiftCard/index.tsx +67 -4
  119. package/themes/original/src/components/GiftCard/RedeemGiftCard/styles.tsx +1 -1
  120. package/themes/original/src/components/GiftCard/SendGiftCard/index.tsx +2 -2
  121. package/themes/original/src/components/GiftCard/SendGiftCard/styles.tsx +1 -1
  122. package/themes/original/src/components/GiftCard/SingleGiftCard/index.tsx +101 -0
  123. package/themes/original/src/components/GiftCard/SingleGiftCard/styles.tsx +4 -0
  124. package/themes/original/src/components/GiftCard/VerticalGiftCardOrdersLayout/index.tsx +83 -0
  125. package/themes/original/src/components/GiftCard/VerticalGiftCardOrdersLayout/styles.tsx +9 -0
  126. package/themes/original/src/components/GoogleMap/index.tsx +6 -5
  127. package/themes/original/src/components/HighestRatedBusinesses/index.tsx +2 -2
  128. package/themes/original/src/components/HighestRatedBusinesses/styles.tsx +1 -1
  129. package/themes/original/src/components/Home/index.tsx +1 -1
  130. package/themes/original/src/components/LastOrder/index.tsx +2 -1
  131. package/themes/original/src/components/LastOrders/index.tsx +2 -1
  132. package/themes/original/src/components/LoginForm/Otp/index.tsx +48 -39
  133. package/themes/original/src/components/LoginForm/index.tsx +5 -0
  134. package/themes/original/src/components/Messages/index.tsx +9 -4
  135. package/themes/original/src/components/Messages/styles.tsx +1 -1
  136. package/themes/original/src/components/MomentOption/index.tsx +3 -3
  137. package/themes/original/src/components/MultiCart/index.tsx +1 -1
  138. package/themes/original/src/components/MultiCheckout/index.tsx +208 -21
  139. package/themes/original/src/components/MultiCheckout/styles.tsx +17 -0
  140. package/themes/original/src/components/MultiOrdersDetails/index.tsx +20 -15
  141. package/themes/original/src/components/MyOrders/index.tsx +24 -29
  142. package/themes/original/src/components/NavBar/index.tsx +3 -1
  143. package/themes/original/src/components/NetworkError/index.tsx +2 -3
  144. package/themes/original/src/components/NetworkError/styles.tsx +2 -2
  145. package/themes/original/src/components/Notifications/index.tsx +4 -8
  146. package/themes/original/src/components/Notifications/styles.tsx +0 -1
  147. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +7 -3
  148. package/themes/original/src/components/OrderDetails/index.tsx +716 -667
  149. package/themes/original/src/components/OrderDetails/styles.tsx +24 -8
  150. package/themes/original/src/components/OrderProgress/index.tsx +28 -6
  151. package/themes/original/src/components/OrderProgress/styles.tsx +1 -1
  152. package/themes/original/src/components/OrderSummary/index.tsx +3 -1
  153. package/themes/original/src/components/OrderTypeSelector/index.tsx +5 -6
  154. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/styles.tsx +1 -1
  155. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/styles.tsx +1 -1
  156. package/themes/original/src/components/OrdersOption/index.tsx +3 -5
  157. package/themes/original/src/components/OrdersOption/styles.tsx +1 -1
  158. package/themes/original/src/components/PageBanner/index.tsx +3 -0
  159. package/themes/original/src/components/PaymentOptionCard/index.tsx +4 -2
  160. package/themes/original/src/components/PaymentOptionStripe/styles.tsx +3 -0
  161. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  162. package/themes/original/src/components/PaymentOptions/index.tsx +72 -6
  163. package/themes/original/src/components/PhoneInputNumber/index.tsx +15 -1
  164. package/themes/original/src/components/ProductForm/ActionButton.tsx +120 -0
  165. package/themes/original/src/components/ProductForm/ExtraOptions.tsx +56 -0
  166. package/themes/original/src/components/ProductForm/index.tsx +74 -165
  167. package/themes/original/src/components/ProductItemAccordion/index.tsx +19 -10
  168. package/themes/original/src/components/ProductItemAccordion/styles.tsx +3 -1
  169. package/themes/original/src/components/ProductOptionSubOption/index.tsx +123 -82
  170. package/themes/original/src/components/ProductOptionSubOption/styles.tsx +6 -1
  171. package/themes/original/src/components/ProfessionalProfile/styles.tsx +3 -3
  172. package/themes/original/src/components/Promotions/index.tsx +4 -4
  173. package/themes/original/src/components/Promotions/styles.tsx +0 -2
  174. package/themes/original/src/components/ReviewDriver/styles.tsx +1 -1
  175. package/themes/original/src/components/ReviewOrder/styles.tsx +1 -1
  176. package/themes/original/src/components/ReviewProducts/styles.tsx +1 -1
  177. package/themes/original/src/components/ServiceForm/index.tsx +2 -2
  178. package/themes/original/src/components/ServiceForm/styles.tsx +4 -4
  179. package/themes/original/src/components/SingleOrderCard/index.tsx +5 -4
  180. package/themes/original/src/components/SingleProductCard/index.tsx +2 -2
  181. package/themes/original/src/components/SingleProductCard/styles.tsx +0 -3
  182. package/themes/original/src/components/StripeCardsList/index.tsx +17 -36
  183. package/themes/original/src/components/StripeElementsForm/index.tsx +9 -4
  184. package/themes/original/src/components/UpsellingProducts/UpsellingContent.tsx +170 -0
  185. package/themes/original/src/components/UpsellingProducts/UpsellingLayout.tsx +86 -0
  186. package/themes/original/src/components/UpsellingProducts/index.tsx +15 -199
  187. package/themes/original/src/components/UpsellingProducts/styles.tsx +19 -0
  188. package/themes/original/src/components/UserFormDetails/index.tsx +54 -8
  189. package/themes/original/src/components/UserFormDetails/styles.tsx +7 -0
  190. package/themes/original/src/components/UserProfile/index.tsx +3 -2
  191. package/themes/original/src/components/UserProfileForm/index.tsx +30 -36
  192. package/themes/original/src/components/UserVerification/index.tsx +3 -1
  193. package/themes/original/src/components/WalletTransactions/styles.tsx +1 -0
  194. package/themes/original/src/components/Wallets/index.tsx +8 -9
  195. package/themes/original/src/components/Wallets/styles.tsx +1 -1
  196. package/themes/original/src/components/WebsocketStatus/index.tsx +172 -0
  197. package/themes/original/src/components/WebsocketStatus/styles.tsx +28 -0
  198. package/themes/original/src/components/shared/HeaderTitle.tsx +1 -1
  199. package/themes/original/src/components/shared/OButton.tsx +5 -5
  200. package/themes/original/src/components/shared/OInput.tsx +1 -4
  201. package/themes/original/src/components/shared/OModal.tsx +12 -14
  202. package/themes/original/src/layouts/Container.tsx +5 -3
  203. package/themes/original/src/types/index.tsx +6 -1
  204. package/themes/original/src/utils/index.tsx +124 -0
  205. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
  206. package/src/navigators/BottomNavigator.tsx +0 -117
  207. package/src/navigators/CheckoutNavigator.tsx +0 -66
  208. package/src/navigators/HomeNavigator.tsx +0 -202
  209. package/src/navigators/NavigationRef.tsx +0 -7
  210. package/src/navigators/RootNavigator.tsx +0 -269
  211. package/src/pages/Account.tsx +0 -34
  212. package/src/pages/AddressForm.tsx +0 -62
  213. package/src/pages/AddressList.tsx +0 -24
  214. package/src/pages/BusinessProductsList.tsx +0 -81
  215. package/src/pages/BusinessesListing.tsx +0 -43
  216. package/src/pages/CartList.tsx +0 -49
  217. package/src/pages/Checkout.tsx +0 -101
  218. package/src/pages/ForgotPassword.tsx +0 -24
  219. package/src/pages/Help.tsx +0 -23
  220. package/src/pages/HelpAccountAndPayment.tsx +0 -23
  221. package/src/pages/HelpGuide.tsx +0 -23
  222. package/src/pages/HelpOrder.tsx +0 -23
  223. package/src/pages/Home.tsx +0 -36
  224. package/src/pages/IntroductoryTutorial.tsx +0 -170
  225. package/src/pages/Login.tsx +0 -47
  226. package/src/pages/MomentOption.tsx +0 -30
  227. package/src/pages/MultiCheckout.tsx +0 -31
  228. package/src/pages/MultiOrdersDetails.tsx +0 -27
  229. package/src/pages/MyOrders.tsx +0 -40
  230. package/src/pages/NetworkError.tsx +0 -24
  231. package/src/pages/NotFound.tsx +0 -22
  232. package/src/pages/OrderDetails.tsx +0 -25
  233. package/src/pages/ProductDetails.tsx +0 -55
  234. package/src/pages/Profile.tsx +0 -36
  235. package/src/pages/ReviewDriver.tsx +0 -30
  236. package/src/pages/ReviewOrder.tsx +0 -32
  237. package/src/pages/ReviewProducts.tsx +0 -30
  238. package/src/pages/Sessions.tsx +0 -22
  239. package/src/pages/Signup.tsx +0 -53
  240. package/src/pages/SpinnerLoader.tsx +0 -10
  241. package/src/pages/Splash.tsx +0 -21
@@ -55,7 +55,7 @@ const MapViewComponent = (props: MapViewParams) => {
55
55
  if (mapRef.current) {
56
56
  mapRef.current.fitToCoordinates(
57
57
  [
58
- { latitude: location.latitude, longitude: location.longitude },
58
+ { latitude: location.latitude ?? 0, longitude: location.longitude ?? 0},
59
59
  {
60
60
  latitude: userLocation?.latitude,
61
61
  longitude: userLocation?.longitude,
@@ -72,8 +72,8 @@ const MapViewComponent = (props: MapViewParams) => {
72
72
  const lastRegion = mapRef?.current?.__lastRegion
73
73
  mapRef?.current && mapRef.current.animateToRegion({
74
74
  ...mapRef?.current?.__lastRegion,
75
- longitudeDelta: lastRegion.longitudeDelta / 8,
76
- latitudeDelta: lastRegion.longitudeDelta / 8
75
+ longitudeDelta: lastRegion?.longitudeDelta / 8,
76
+ latitudeDelta: lastRegion?.longitudeDelta / 8
77
77
  })
78
78
  }
79
79
 
@@ -81,8 +81,8 @@ const MapViewComponent = (props: MapViewParams) => {
81
81
  const lastRegion = mapRef?.current?.__lastRegion
82
82
  mapRef?.current && mapRef.current.animateToRegion({
83
83
  ...lastRegion,
84
- longitudeDelta: lastRegion.longitudeDelta * 8,
85
- latitudeDelta: lastRegion.longitudeDelta * 8
84
+ longitudeDelta: lastRegion?.longitudeDelta * 8,
85
+ latitudeDelta: lastRegion?.longitudeDelta * 8
86
86
  })
87
87
  }
88
88
 
@@ -132,6 +132,10 @@ const MapViewComponent = (props: MapViewParams) => {
132
132
 
133
133
  const RenderMarker = ({ marker, customer, orderIds }: { marker: any, customer?: boolean, orderIds?: Array<number> }) => {
134
134
  const markerRef = useRef<any>()
135
+
136
+ let coordinateLat = (customer ? marker?.customer?.location?.lat : marker?.business?.location?.lat) ?? initialPosition?.latitude
137
+ let coordinateLng = (customer ? marker?.customer?.location?.lng : marker?.business?.location?.lng) ?? initialPosition?.longitude
138
+
135
139
  useEffect(() => {
136
140
  if (
137
141
  markerRef?.current?.props?.coordinate?.latitude === locationSelected?.latitude &&
@@ -145,8 +149,8 @@ const MapViewComponent = (props: MapViewParams) => {
145
149
  <Marker
146
150
  key={customer ? marker?.customer?.id : marker?.business?.id}
147
151
  coordinate={{
148
- latitude: customer ? marker?.customer?.location?.lat : marker?.business?.location?.lat,
149
- longitude: customer ? marker?.customer?.location?.lng : marker?.business?.location?.lng
152
+ latitude: coordinateLat,
153
+ longitude: coordinateLng
150
154
  }}
151
155
  onPress={() =>
152
156
  setLocationSelected({
@@ -2,20 +2,18 @@ import React, { useState, useEffect } from 'react';
2
2
  import {
3
3
  View,
4
4
  Pressable,
5
- StyleSheet,
6
- Dimensions,
7
- ScrollView,
8
- RefreshControl,
5
+ StyleSheet
9
6
  } from 'react-native';
10
7
  import { Contacts, useLanguage } from 'ordering-components/native';
11
8
  import { useTheme } from 'styled-components/native';
12
- import { Placeholder, PlaceholderLine, Fade } from 'rn-placeholder';
13
- import { OText, OButton } from '../shared';
9
+ import { OText } from '../shared';
14
10
  import { NotFoundSource } from '../NotFoundSource';
15
11
  import { PreviousMessages } from '../PreviousMessages';
16
12
  import { FiltersTab, TabsContainer, TagsContainer, Tag } from './styles';
17
13
  import { MessagesOptionParams } from '../../types';
18
14
  import { useDeviceOrientation } from '../../../../../src/hooks/DeviceOrientation';
15
+ import { WebsocketStatus } from '../WebsocketStatus'
16
+
19
17
  const MessagesOptionUI = (props: MessagesOptionParams) => {
20
18
  const {
21
19
  orders,
@@ -65,12 +63,6 @@ const MessagesOptionUI = (props: MessagesOptionParams) => {
65
63
  ),
66
64
  );
67
65
 
68
- const [orientation, setOrientation] = useState(
69
- Dimensions.get('window').width < Dimensions.get('window').height
70
- ? 'Portrait'
71
- : 'Landscape',
72
- );
73
-
74
66
  const getTagFilter = (key: number) => {
75
67
  return tags.find(value => value.key === key)?.text;
76
68
  };
@@ -114,14 +106,6 @@ const MessagesOptionUI = (props: MessagesOptionParams) => {
114
106
  );
115
107
  }, [orders]);
116
108
 
117
- Dimensions.addEventListener('change', ({ window: { width, height } }) => {
118
- if (width < height) {
119
- setOrientation('Portrait');
120
- } else {
121
- setOrientation('Landscape');
122
- }
123
- });
124
-
125
109
  const styles = StyleSheet.create({
126
110
  header: {
127
111
  marginBottom: 25,
@@ -180,7 +164,7 @@ const MessagesOptionUI = (props: MessagesOptionParams) => {
180
164
  <View style={styles.header}>
181
165
  <OText style={styles.title}>{t('MESSAGES', 'Messages')}</OText>
182
166
  </View>
183
-
167
+ <WebsocketStatus />
184
168
  <FiltersTab>
185
169
  <TabsContainer width={dimensions.width - 42}>
186
170
  {tabs.map((tab: any) => (
@@ -242,35 +226,28 @@ const MessagesOptionUI = (props: MessagesOptionParams) => {
242
226
  !error
243
227
  ? t('NO_RESULTS_FOUND', 'Sorry, no results found')
244
228
  : error[0]?.message ||
245
- error[0] ||
246
- t('NETWORK_ERROR', 'Network Error')
229
+ error[0] ||
230
+ t('NETWORK_ERROR', 'Network Error')
247
231
  }
248
232
  image={theme.images.general.notFound}
249
233
  conditioned={false}
250
234
  />
251
235
  )}
252
-
253
- <ScrollView
254
- showsVerticalScrollIndicator={false}
255
- style={{ flex: 1 }}
256
- refreshControl={<RefreshControl
257
- refreshing={refreshing}
258
- onRefresh={() => getOrders?.()}
259
- />}
260
- >
261
- {!reload &&
262
- !error &&
263
- values.length > 0 &&
264
- JSON.stringify(tabsFilter) === JSON.stringify(tabs[0].tags) && (
265
- <PreviousMessages
266
- orders={values}
267
- setOrders={setOrders}
268
- messages={messages}
269
- onNavigationRedirect={onNavigationRedirect}
270
- />
271
- )}
272
-
273
- {/* {!reload &&
236
+ <PreviousMessages
237
+ orders={values}
238
+ messages={messages}
239
+ onNavigationRedirect={onNavigationRedirect}
240
+ getOrders={getOrders}
241
+ pagination={pagination}
242
+ loading={loading}
243
+ reload={reload}
244
+ tabs={tabs}
245
+ tabsFilter={tabsFilter}
246
+ setOrders={setOrders}
247
+ loadMore={loadMore}
248
+ error={error}
249
+ />
250
+ {/* {!reload &&
274
251
  !error &&
275
252
  orders.length > 0 &&
276
253
  JSON.stringify(tabsFilter) === JSON.stringify(tabs[1].tags) && (
@@ -283,55 +260,6 @@ const MessagesOptionUI = (props: MessagesOptionParams) => {
283
260
  onNavigationRedirect={onNavigationRedirect}
284
261
  />
285
262
  )} */}
286
-
287
- {(loading || reload) && (
288
- <>
289
- <View>
290
- {[...Array(5)].map((item, i) => (
291
- <Placeholder key={i} Animation={Fade}>
292
- <View
293
- style={{
294
- width: '100%',
295
- flexDirection: 'row',
296
- marginBottom: 10,
297
- }}>
298
- <PlaceholderLine
299
- width={orientation === 'Portrait' ? 22 : 11}
300
- height={74}
301
- style={{
302
- marginRight: 20,
303
- marginBottom: 20,
304
- borderRadius: 7.6,
305
- }}
306
- />
307
- <Placeholder>
308
- <PlaceholderLine width={30} style={{ marginTop: 5 }} />
309
- <PlaceholderLine width={50} />
310
- <PlaceholderLine width={20} />
311
- </Placeholder>
312
- </View>
313
- </Placeholder>
314
- ))}
315
- </View>
316
- </>
317
- )}
318
-
319
- {pagination?.totalPages &&
320
- !loading &&
321
- !reload &&
322
- JSON.stringify(tabsFilter) === JSON.stringify(tabs[0].tags) &&
323
- pagination?.currentPage < pagination?.totalPages && (
324
- <OButton
325
- onClick={() => loadMore && loadMore()}
326
- text={t('LOAD_MORE_ORDERS', 'Load more orders')}
327
- imgRightSrc={null}
328
- textStyle={styles.loadButtonText}
329
- style={styles.loadButton}
330
- bgColor={theme.colors.primary}
331
- borderColor={theme.colors.primary}
332
- />
333
- )}
334
- </ScrollView>
335
263
  </>
336
264
  );
337
265
  };
@@ -1,112 +1,170 @@
1
+ import React, { useEffect, useState } from 'react';
2
+ import {
3
+ Modal,
4
+ View,
5
+ StyleSheet,
6
+ Dimensions,
7
+ TouchableOpacity,
8
+ NativeModules,
9
+ PermissionsAndroid,
10
+ Platform
11
+ } from 'react-native';
12
+ import { useTheme } from 'styled-components/native'
1
13
  import moment from 'moment'
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'
5
- import Sound from 'react-native-sound'
6
14
  import Icon from 'react-native-vector-icons/Feather'
7
- import { useTheme } from 'styled-components/native'
15
+ import SoundPlayer from 'react-native-sound-player'
16
+
17
+ import {
18
+ NewOrderNotification as NewOrderNotificationController,
19
+ useApi,
20
+ useEvent,
21
+ useLanguage,
22
+ useSession,
23
+ useConfig,
24
+ useToast,
25
+ ToastType
26
+ } from 'ordering-components/native'
8
27
 
9
- import { useLocation } from '../../hooks/useLocation'
10
28
  import { OIcon, OText } from '../shared'
11
29
  import { NotificationContainer } from './styles'
30
+ import { useLocation } from '../../hooks/useLocation'
12
31
 
13
- Sound.setCategory('Playback', true)
14
- Sound.setMode('Default')
15
-
32
+ const DELAY_SOUND = 2500 // 2 sec
16
33
  const windowWidth = Dimensions.get('screen').width
17
34
 
18
- const SOUND_LOOP = 3
35
+ const SoundPlayerComponent = (props: any) => {
36
+ const { evtList, currentEvent, handleCloseEvents } = props
19
37
 
20
- const NewOrderNotificationUI = (props: any) => {
21
- const { isBusinessApp } = props
22
- const [events] = useEvent()
23
38
  const theme = useTheme()
24
- const [, t] = useLanguage()
25
- const [{ user, token }] = useSession()
26
- const [ordering] = useApi()
27
- const { getCurrentLocation } = useLocation();
28
- const [currentEvent, setCurrentEvent] = useState<any>(null)
39
+ const [count, setCount] = useState(0);
40
+ const [isEnabledReadStorage, setIsEnabledReadStorage] = useState(true)
41
+ const URL_SOUND = 'https://d33aymufw4jvwf.cloudfront.net/notification.mp3' ?? theme.sounds.notification
29
42
 
30
- const evtList: any = {
31
- 1: {
32
- event: 'messages',
33
- message: t('NEW_MESSAGES_RECEIVED', 'New messages have been received!'),
34
- message2: t('ORDER_N_UNREAD_MESSAGES', 'Order #_order_id_ has unread messages.').replace('_order_id_', currentEvent?.orderId),
35
- },
36
- 2: {
37
- event: 'order_added',
38
- message: t('NEW_ORDERS_RECEIVED', 'New orders have been received!'),
39
- message2: t('ORDER_N_ORDERED', 'Order #_order_id_ has been ordered.').replace('_order_id_', currentEvent?.orderId),
40
- },
41
- 3: {
42
- event: 'order_updated',
43
- message: t('NEW_ORDERS_UPDATED', 'New orders have been updated!'),
44
- message2: t('ORDER_N_UPDATED', 'Order #_order_id_ has been updated.').replace('_order_id_', currentEvent?.orderId),
45
- },
46
- }
47
-
48
- const notificationSound = new Sound(theme.sounds.notification, '', () => { });
49
-
50
- let _timeout: any = null
51
- let times = 0
43
+ useEffect(() => {
44
+ const id = setInterval(() => setCount(count + 1), 2500)
52
45
 
53
- const handleCloseEvents = () => {
54
- notificationSound.stop()
55
- setCurrentEvent(null)
56
- clearInterval(_timeout)
57
- }
46
+ const playSound = async () => {
47
+ SoundPlayer.playUrl(URL_SOUND)
48
+ await new Promise(resolve => setTimeout(resolve, DELAY_SOUND))
49
+ SoundPlayer.stop()
50
+ }
51
+ if (NativeModules?.RNSoundPlayer?.playUrl && typeof URL_SOUND === 'string' && isEnabledReadStorage) {
52
+ playSound()
53
+ }
58
54
 
59
- const handlePlayNotificationSound = (eventObj: any = null) => {
60
- setCurrentEvent(eventObj)
61
- if (times > 0) {
62
- if (times === 3) {
63
- times = 0
64
- return
65
- }
66
- return
55
+ return () => {
56
+ SoundPlayer.stop()
57
+ clearInterval(id);
67
58
  }
68
- _timeout = setInterval(() => {
69
- if (times < SOUND_LOOP) {
70
- notificationSound.play()
71
- times++
59
+ }, [count, isEnabledReadStorage])
60
+
61
+ useEffect(() => {
62
+ const checkSoundMedia = async () => {
63
+ if (Platform.OS === 'android') {
64
+ const enabled = await PermissionsAndroid.check(PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE)
65
+ setIsEnabledReadStorage(enabled)
72
66
  } else {
73
- clearInterval(_timeout)
74
- return
67
+ setIsEnabledReadStorage(true)
75
68
  }
76
- }, 2500)
77
- }
69
+ }
70
+ checkSoundMedia()
71
+
72
+ }, [])
73
+ return (
74
+ <Modal
75
+ animationType='slide'
76
+ transparent={true}
77
+ visible={!!currentEvent?.orderId}
78
+ >
79
+ <NotificationContainer>
80
+ <View style={styles.modalView}>
81
+ <TouchableOpacity
82
+ style={styles.wrapperIcon}
83
+ onPress={() => handleCloseEvents()}
84
+ >
85
+ <Icon name="x" size={30} />
86
+ </TouchableOpacity>
87
+ <OText
88
+ size={18}
89
+ color={theme.colors.textGray}
90
+ weight={600}
91
+ >
92
+ {evtList(currentEvent)[currentEvent?.evt]?.message}
93
+ </OText>
94
+ <OIcon
95
+ src={theme.images.general.newOrder}
96
+ width={250}
97
+ height={200}
98
+ />
99
+ <OText
100
+ color={theme.colors.textGray}
101
+ mBottom={15}
102
+ >
103
+ {evtList(currentEvent)[currentEvent?.evt]?.message2}
104
+ </OText>
105
+ </View>
106
+ </NotificationContainer>
107
+ </Modal>
108
+ )
109
+ }
110
+
111
+ const NewOrderNotificationUI = (props: any) => {
112
+ const { isBusinessApp, evtList, orderStatus } = props
113
+ const [, t] = useLanguage()
114
+ const [events] = useEvent()
115
+ const [{ user, token }] = useSession()
116
+ const [ordering] = useApi()
117
+ const [, { showToast }] = useToast()
118
+ const { getCurrentLocation } = useLocation()
119
+ const [currentEvent, setCurrentEvent] = useState<any>(null)
78
120
 
79
- const handleEventNotification = async (evtType: number, value: any) => {
121
+ const handleEventNotification = async (evtType: number, value: any, orderStatus?: any) => {
80
122
  if (value?.driver) {
81
123
  try {
82
124
  const location = await getCurrentLocation()
125
+ if (!location?.latitude || !location?.longitude) {
126
+ showToast(t('ERROR_UPDATING_COORDS', 'Error updating coords'), ToastType.Error)
127
+ return
128
+ }
83
129
  await fetch(`${ordering.root}/users/${user.id}/locations`, {
84
130
  method: 'POST',
85
131
  body: JSON.stringify({
86
- location: JSON.stringify({ location: `{lat: ${location.latitude}, lng: ${location.longitude}}` })
132
+ location: JSON.stringify({
133
+ location: `{
134
+ lat: ${location.latitude},
135
+ lng: ${location.longitude}
136
+ }`
137
+ })
87
138
  }),
88
- headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${token}` }
139
+ headers: {
140
+ 'Content-Type': 'application/json',
141
+ Authorization: `Bearer ${token}`
142
+ }
89
143
  })
90
144
  } catch { }
91
145
  const duration = moment.duration(moment().diff(moment.utc(value?.last_driver_assigned_at)))
92
146
  const assignedSecondsDiff = duration.asSeconds()
93
- if (assignedSecondsDiff < 5 && !isBusinessApp && !value?.logistic_status) {
94
- handlePlayNotificationSound({ evt: 2, orderId: value?.id })
147
+ if (assignedSecondsDiff < 5 && !isBusinessApp && !value?.logistic_status && orderStatus.includes(value.status)) {
148
+ setCurrentEvent({ evt: 2, orderId: value?.id ?? value?.order_id })
95
149
  }
96
150
  }
97
- if (evtType === 3 || value.author_id === user.id) return
98
- setTimeout(() => handlePlayNotificationSound({
151
+ if (!orderStatus.includes(value.status) || value?.author_id === user.id) return
152
+ setCurrentEvent({
99
153
  evt: evtType,
100
- orderId: value?.driver ? value?.order_id : evtList[evtType].event === 'messages' ? value?.order?.id : value?.order_id
101
- }), 1000)
154
+ orderId: value?.driver
155
+ ? value?.order_id ?? value?.id
156
+ : evtList(currentEvent)[evtType].event === 'messages'
157
+ ? value?.order?.id
158
+ : value?.order_id ?? value?.id
159
+ })
102
160
  }
103
161
 
104
162
  useEffect(() => {
105
- events.on('message_added_notification', (o: any) => handleEventNotification(1, o))
106
- events.on('order_added_notification', (o: any) => handleEventNotification(2, o))
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))
163
+ events.on('message_added_notification', (o: any) => handleEventNotification(1, o, orderStatus))
164
+ events.on('order_added_notification', (o: any) => handleEventNotification(2, o, orderStatus))
165
+ events.on('order_updated_notification', (o: any) => handleEventNotification(3, o, orderStatus))
166
+ events.on('request_register_notification', (o: any) => handleEventNotification(2, o, orderStatus))
167
+ events.on('request_update_notification', (o: any) => handleEventNotification(3, o, orderStatus))
110
168
 
111
169
  return () => {
112
170
  events.off('message_added_notification', (o: any) => handleEventNotification(1, o))
@@ -115,51 +173,24 @@ const NewOrderNotificationUI = (props: any) => {
115
173
  events.off('request_register_notification', (o: any) => handleEventNotification(2, o))
116
174
  events.off('request_update_notification', (o: any) => handleEventNotification(3, o))
117
175
  }
118
- }, [])
176
+ }, [orderStatus])
119
177
 
120
178
  useEffect(() => {
121
- return () => handleCloseEvents()
179
+ return () => setCurrentEvent(null)
122
180
  }, [])
123
181
 
124
182
  return (
125
183
  <>
126
- <Modal
127
- animationType='slide'
128
- transparent={true}
129
- visible={!!currentEvent?.orderId}
130
- >
131
- <NotificationContainer>
132
- <View style={styles.modalView}>
133
- <TouchableOpacity
134
- style={styles.wrapperIcon}
135
- onPress={() => handleCloseEvents()}
136
- >
137
- <Icon name="x" size={30} />
138
- </TouchableOpacity>
139
- <OText
140
- size={18}
141
- color={theme.colors.textGray}
142
- weight={600}
143
- >
144
- {evtList[currentEvent?.evt]?.message}
145
- </OText>
146
- <OIcon
147
- src={theme.images.general.newOrder}
148
- width={250}
149
- height={200}
150
- />
151
- <OText
152
- color={theme.colors.textGray}
153
- mBottom={15}
154
- >
155
- {evtList[currentEvent?.evt]?.message2}
156
- </OText>
157
- </View>
158
- </NotificationContainer>
159
- </Modal>
184
+ {!!currentEvent && (
185
+ <SoundPlayerComponent
186
+ evtList={evtList}
187
+ currentEvent={currentEvent}
188
+ handleCloseEvents={() => setCurrentEvent(null)}
189
+ />
190
+ )}
160
191
  </>
161
192
  )
162
- }
193
+ };
163
194
 
164
195
  const styles = StyleSheet.create({
165
196
  modalView: {
@@ -179,9 +210,28 @@ const styles = StyleSheet.create({
179
210
  })
180
211
 
181
212
  export const NewOrderNotification = (props: any) => {
213
+ const [, t] = useLanguage()
214
+
182
215
  const newOrderNotificationProps = {
183
216
  ...props,
184
- UIComponent: NewOrderNotificationUI
217
+ UIComponent: NewOrderNotificationUI,
218
+ evtList: (currentEvent: any) => ({
219
+ 1: {
220
+ event: 'messages',
221
+ message: t('NEW_MESSAGES_RECEIVED', 'New messages have been received!'),
222
+ message2: t('ORDER_N_UNREAD_MESSAGES', 'Order #_order_id_ has unread messages.').replace('_order_id_', currentEvent?.orderId),
223
+ },
224
+ 2: {
225
+ event: 'order_added',
226
+ message: t('NEW_ORDERS_RECEIVED', 'New orders have been received!'),
227
+ message2: t('ORDER_N_ORDERED', 'Order #_order_id_ has been ordered.').replace('_order_id_', currentEvent?.orderId),
228
+ },
229
+ 3: {
230
+ event: 'order_updated',
231
+ message: t('NEW_ORDERS_UPDATED', 'New orders have been updated!'),
232
+ message2: t('ORDER_N_UPDATED', 'Order #_order_id_ has been updated.').replace('_order_id_', currentEvent?.orderId),
233
+ },
234
+ })
185
235
  };
186
236
 
187
237
  return <NewOrderNotificationController {...newOrderNotificationProps} />;
@@ -4,8 +4,10 @@ import {
4
4
  View,
5
5
  TouchableOpacity,
6
6
  ActivityIndicator,
7
+ Alert,
7
8
  } from 'react-native';
8
9
  import Clipboard from '@react-native-clipboard/clipboard';
10
+ import { StarPRNT } from 'react-native-star-prnt';
9
11
  import { Placeholder, PlaceholderLine, Fade } from 'rn-placeholder';
10
12
  import { useTheme } from 'styled-components/native';
11
13
  import {
@@ -35,6 +37,8 @@ import CountryPicker from 'react-native-country-picker-modal';
35
37
  import { NotFoundSource } from '../NotFoundSource';
36
38
  import { OrderHeaderComponent } from './OrderHeaderComponent';
37
39
  import { OrderContentComponent } from './OrderContentComponent';
40
+ import { _retrieveStoreData } from '../../providers/StoreUtil'
41
+ import { usePrinterCommands } from './usePrinterCommands'
38
42
 
39
43
  export const OrderDetailsUI = (props: OrderDetailsParams) => {
40
44
  const {
@@ -44,7 +48,6 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
44
48
  readMessages,
45
49
  messagesReadList,
46
50
  handleAssignDriver,
47
- handleChangeOrderStatus,
48
51
  isFromCheckout,
49
52
  driverLocation,
50
53
  actions,
@@ -57,6 +60,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
57
60
  const [{ parsePrice, parseNumber, parseDate }] = useUtils();
58
61
  const [{ user, token }] = useSession();
59
62
  const [{ configs }] = useConfig();
63
+ const { generateCommands } = usePrinterCommands()
60
64
  const [, { showToast }] = useToast();
61
65
  const [unreadAlert, setUnreadAlert] = useState({
62
66
  business: false,
@@ -70,6 +74,10 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
70
74
  const [openModalForAccept, setOpenModalForAccept] = useState(false);
71
75
  const [openModalForMapView, setOpenModalForMapView] = useState(false);
72
76
  const [isDriverModalVisible, setIsDriverModalVisible] = useState(false);
77
+ const [printerSettings, setPrinterSettings] = useState<any>('')
78
+ const [autoPrintEnabled, setAutoPrintEnabled] = useState<boolean>(false)
79
+
80
+ const orderToComplete = [4,20,21]
73
81
 
74
82
  if (order?.status === 7 || order?.status === 4) {
75
83
  if (drivers?.length > 0 && drivers) {
@@ -120,6 +128,16 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
120
128
  }
121
129
  }
122
130
 
131
+ const handleChangeOrderStatus = async (status: any, isAcceptOrReject: any = {}) => {
132
+ if (props.handleChangeOrderStatus) {
133
+ const order: any = await props.handleChangeOrderStatus(status, isAcceptOrReject)
134
+
135
+ if (order?.status === 7 && autoPrintEnabled && printerSettings) {
136
+ handleViewSummaryOrder()
137
+ }
138
+ }
139
+ }
140
+
123
141
  const getFormattedSubOptionName = ({ quantity, name, position, price }: any) => {
124
142
  if (name !== 'No') {
125
143
  const pos = position && position !== 'whole' ? `(${t(position.toUpperCase(), position)})` : '';
@@ -291,7 +309,26 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
291
309
  setOpenModalForAccept(true);
292
310
  };
293
311
 
312
+ const printAction = async (printerSettings: any, commands: any) => {
313
+ try {
314
+ var printResult = await StarPRNT.print(printerSettings?.emulation, commands, printerSettings?.portName);
315
+ showToast(ToastType.Info, t('ORDER_PRINTED_SUCCESS', 'Order printed'), 1000)
316
+ } catch (e) {
317
+ showToast(ToastType.Error, t('ORDER_PRINTED_FAILED', 'Order not printed, connection failed'), 1000)
318
+ }
319
+ }
320
+
294
321
  const handleViewSummaryOrder = () => {
322
+ if (printerSettings) {
323
+ const commands: any = generateCommands({
324
+ ...order,
325
+ orderStatus: getOrderStatus(order?.status, t)?.value
326
+ }, printerSettings?.printMode)
327
+ commands.push({ appendCutPaper: StarPRNT.CutPaperAction.PartialCutWithFeed })
328
+
329
+ printAction(printerSettings, commands)
330
+ return
331
+ }
295
332
  navigation?.navigate &&
296
333
  navigation.navigate('OrderSummary', {
297
334
  order,
@@ -372,6 +409,17 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
372
409
  }
373
410
  }, [driverLocation]);
374
411
 
412
+ useEffect(() => {
413
+ const getStorageData = async () => {
414
+ const printer = await _retrieveStoreData('printer')
415
+ const autoPrint = await _retrieveStoreData('auto_print_after_accept_order')
416
+ setPrinterSettings(printer)
417
+ setAutoPrintEnabled(!!autoPrint)
418
+ }
419
+
420
+ getStorageData()
421
+ }, [])
422
+
375
423
  const styles = StyleSheet.create({
376
424
  driverOff: {
377
425
  backgroundColor: theme.colors.notAvailable,
@@ -607,7 +655,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
607
655
  disabled={loading}
608
656
  />
609
657
  )}
610
- {order?.status === 4 && ![1].includes(order?.delivery_type) && (
658
+ {orderToComplete.includes(order?.status) && ![1].includes(order?.delivery_type) && (
611
659
  <FloatingButton
612
660
  btnText={t(
613
661
  'ORDER_NOT_PICKEDUP_BY_CUSTOMER',