ordering-ui-react-native 0.21.0 → 0.21.1-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 (239) hide show
  1. package/package.json +6 -5
  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 +3 -3
  7. package/src/components/VerifyPhone/styles.tsx +1 -2
  8. package/src/components/shared/OToast.tsx +3 -2
  9. package/src/types/index.tsx +2 -1
  10. package/src/utils/index.tsx +2 -2
  11. package/themes/business/index.tsx +4 -0
  12. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +9 -2
  13. package/themes/business/src/components/BusinessController/index.tsx +19 -17
  14. package/themes/business/src/components/BusinessProductList/AccordionDropdown.tsx +63 -0
  15. package/themes/business/src/components/BusinessProductList/IterateCategories.tsx +108 -0
  16. package/themes/business/src/components/BusinessProductList/ProductList.tsx +196 -0
  17. package/themes/business/src/components/BusinessProductList/index.tsx +196 -0
  18. package/themes/business/src/components/BusinessProductList/styles.tsx +10 -0
  19. package/themes/business/src/components/Chat/index.tsx +41 -13
  20. package/themes/business/src/components/DriverMap/index.tsx +4 -2
  21. package/themes/business/src/components/DriverSchedule/index.tsx +5 -5
  22. package/themes/business/src/components/FloatingButton/index.tsx +34 -31
  23. package/themes/business/src/components/Home/index.tsx +5 -1
  24. package/themes/business/src/components/MapView/index.tsx +11 -7
  25. package/themes/business/src/components/MessagesOption/index.tsx +22 -94
  26. package/themes/business/src/components/NewOrderNotification/index.tsx +161 -106
  27. package/themes/business/src/components/OrderDetails/Delivery.tsx +21 -11
  28. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +88 -51
  29. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +36 -16
  30. package/themes/business/src/components/OrderDetailsLogistic/index.tsx +6 -1
  31. package/themes/business/src/components/OrderSummary/index.tsx +42 -23
  32. package/themes/business/src/components/OrdersListManager/index.tsx +7 -2
  33. package/themes/business/src/components/OrdersListManager/utils.tsx +1 -1
  34. package/themes/business/src/components/OrdersOption/index.tsx +125 -48
  35. package/themes/business/src/components/PreviousMessages/FooterMessageComponent.tsx +103 -0
  36. package/themes/business/src/components/PreviousMessages/index.tsx +97 -55
  37. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +27 -35
  38. package/themes/business/src/components/PreviousOrders/OrderList.tsx +93 -0
  39. package/themes/business/src/components/PreviousOrders/OrdersGroupedItem.tsx +1 -1
  40. package/themes/business/src/components/PreviousOrders/index.tsx +192 -220
  41. package/themes/business/src/components/PreviousOrders/styles.tsx +10 -0
  42. package/themes/business/src/components/ProductItemAccordion/index.tsx +2 -2
  43. package/themes/business/src/components/ReviewCustomer/index.tsx +2 -0
  44. package/themes/business/src/components/SearchBar/index.tsx +2 -1
  45. package/themes/business/src/components/Sessions/index.tsx +187 -0
  46. package/themes/business/src/components/Sessions/styles.tsx +20 -0
  47. package/themes/business/src/components/StoresList/index.tsx +5 -3
  48. package/themes/business/src/components/UserProfileForm/index.tsx +76 -41
  49. package/themes/business/src/components/WebsocketStatus/index.tsx +171 -0
  50. package/themes/business/src/components/WebsocketStatus/styles.tsx +28 -0
  51. package/themes/business/src/components/shared/OInput.tsx +2 -0
  52. package/themes/business/src/hooks/useLocation.tsx +5 -4
  53. package/themes/business/src/types/index.tsx +19 -0
  54. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  55. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  56. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  57. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  58. package/themes/kiosk/src/components/LoginForm/index.tsx +124 -96
  59. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  60. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  61. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  62. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  63. package/themes/original/index.tsx +9 -4
  64. package/themes/original/src/components/AddressDetails/index.tsx +20 -10
  65. package/themes/original/src/components/AddressForm/index.tsx +2 -2
  66. package/themes/original/src/components/AddressForm/styles.tsx +1 -1
  67. package/themes/original/src/components/AddressList/index.tsx +4 -7
  68. package/themes/original/src/components/AddressList/styles.tsx +4 -4
  69. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  70. package/themes/original/src/components/BusinessBasicInformation/index.tsx +4 -4
  71. package/themes/original/src/components/BusinessBasicInformation/styles.tsx +1 -1
  72. package/themes/original/src/components/BusinessController/index.tsx +18 -10
  73. package/themes/original/src/components/BusinessController/styles.tsx +8 -7
  74. package/themes/original/src/components/BusinessInformation/index.tsx +35 -3
  75. package/themes/original/src/components/BusinessInformation/styles.tsx +2 -2
  76. package/themes/original/src/components/BusinessItemAccordion/index.tsx +11 -7
  77. package/themes/original/src/components/BusinessListingSearch/BusinessSearchFooter.tsx +317 -0
  78. package/themes/original/src/components/BusinessListingSearch/BusinessSearchHeader.tsx +96 -0
  79. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/index.tsx +1 -1
  80. package/themes/original/src/components/BusinessListingSearch/index.tsx +56 -361
  81. package/themes/original/src/components/BusinessListingSearch/styles.tsx +1 -1
  82. package/themes/original/src/components/BusinessPreorder/index.tsx +3 -4
  83. package/themes/original/src/components/BusinessProductsCategories/index.tsx +1 -1
  84. package/themes/original/src/components/BusinessProductsList/index.tsx +3 -3
  85. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  86. package/themes/original/src/components/BusinessProductsListing/index.tsx +46 -22
  87. package/themes/original/src/components/BusinessProductsListing/styles.tsx +3 -4
  88. package/themes/original/src/components/BusinessReviews/index.tsx +1 -1
  89. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +1 -1
  90. package/themes/original/src/components/BusinessesListing/Layout/Appointment/styles.tsx +5 -5
  91. package/themes/original/src/components/BusinessesListing/Layout/Original/FlatListBusinessListFooter.tsx +69 -0
  92. package/themes/original/src/components/BusinessesListing/Layout/Original/FlatListBusinessListHeader.tsx +406 -0
  93. package/themes/original/src/components/BusinessesListing/Layout/Original/FlatListBusinessListing.tsx +76 -0
  94. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +29 -402
  95. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -1
  96. package/themes/original/src/components/BusinessesListing/index.tsx +0 -1
  97. package/themes/original/src/components/Cart/index.tsx +32 -9
  98. package/themes/original/src/components/CartContent/index.tsx +98 -59
  99. package/themes/original/src/components/CartStoresListing/styles.tsx +2 -2
  100. package/themes/original/src/components/Checkout/index.tsx +219 -66
  101. package/themes/original/src/components/Checkout/styles.tsx +17 -0
  102. package/themes/original/src/components/CitiesControl/styles.tsx +1 -1
  103. package/themes/original/src/components/DatePicker/index.tsx +17 -0
  104. package/themes/original/src/components/DatePicker/styles.tsx +20 -0
  105. package/themes/original/src/components/Favorite/index.tsx +4 -9
  106. package/themes/original/src/components/Favorite/styles.tsx +0 -2
  107. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  108. package/themes/original/src/components/GPSButton/index.tsx +1 -1
  109. package/themes/original/src/components/GiftCard/GiftCardOrdersList/index.tsx +64 -0
  110. package/themes/original/src/components/GiftCard/GiftCardOrdersList/styles.tsx +8 -0
  111. package/themes/original/src/components/GiftCard/GiftCardUI/index.tsx +8 -3
  112. package/themes/original/src/components/GiftCard/PurchaseGiftCard/index.tsx +36 -3
  113. package/themes/original/src/components/GiftCard/PurchaseGiftCard/styles.tsx +1 -1
  114. package/themes/original/src/components/GiftCard/RedeemGiftCard/index.tsx +67 -4
  115. package/themes/original/src/components/GiftCard/RedeemGiftCard/styles.tsx +1 -1
  116. package/themes/original/src/components/GiftCard/SendGiftCard/index.tsx +2 -2
  117. package/themes/original/src/components/GiftCard/SendGiftCard/styles.tsx +1 -1
  118. package/themes/original/src/components/GiftCard/SingleGiftCard/index.tsx +101 -0
  119. package/themes/original/src/components/GiftCard/SingleGiftCard/styles.tsx +4 -0
  120. package/themes/original/src/components/GiftCard/VerticalGiftCardOrdersLayout/index.tsx +83 -0
  121. package/themes/original/src/components/GiftCard/VerticalGiftCardOrdersLayout/styles.tsx +9 -0
  122. package/themes/original/src/components/GoogleMap/index.tsx +50 -5
  123. package/themes/original/src/components/HighestRatedBusinesses/index.tsx +2 -2
  124. package/themes/original/src/components/HighestRatedBusinesses/styles.tsx +1 -1
  125. package/themes/original/src/components/Home/index.tsx +1 -1
  126. package/themes/original/src/components/LastOrder/index.tsx +2 -1
  127. package/themes/original/src/components/LastOrders/index.tsx +2 -1
  128. package/themes/original/src/components/LoginForm/Otp/index.tsx +53 -47
  129. package/themes/original/src/components/LoginForm/index.tsx +6 -1
  130. package/themes/original/src/components/Messages/index.tsx +9 -4
  131. package/themes/original/src/components/Messages/styles.tsx +1 -1
  132. package/themes/original/src/components/MomentOption/index.tsx +4 -4
  133. package/themes/original/src/components/MomentSelector/index.tsx +1 -1
  134. package/themes/original/src/components/MultiCart/index.tsx +1 -1
  135. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +13 -4
  136. package/themes/original/src/components/MultiCheckout/index.tsx +251 -53
  137. package/themes/original/src/components/MultiCheckout/styles.tsx +17 -0
  138. package/themes/original/src/components/MultiOrdersDetails/index.tsx +20 -15
  139. package/themes/original/src/components/MyOrders/index.tsx +24 -29
  140. package/themes/original/src/components/NavBar/index.tsx +3 -1
  141. package/themes/original/src/components/NetworkError/index.tsx +2 -3
  142. package/themes/original/src/components/NetworkError/styles.tsx +2 -2
  143. package/themes/original/src/components/Notifications/index.tsx +4 -8
  144. package/themes/original/src/components/Notifications/styles.tsx +0 -1
  145. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +7 -3
  146. package/themes/original/src/components/OrderDetails/index.tsx +716 -667
  147. package/themes/original/src/components/OrderDetails/styles.tsx +24 -8
  148. package/themes/original/src/components/OrderProgress/index.tsx +28 -9
  149. package/themes/original/src/components/OrderProgress/styles.tsx +1 -1
  150. package/themes/original/src/components/OrderSummary/index.tsx +5 -3
  151. package/themes/original/src/components/OrderTypeSelector/index.tsx +5 -6
  152. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/styles.tsx +1 -1
  153. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/styles.tsx +1 -1
  154. package/themes/original/src/components/OrdersOption/index.tsx +5 -3
  155. package/themes/original/src/components/OrdersOption/styles.tsx +1 -1
  156. package/themes/original/src/components/PageBanner/index.tsx +3 -0
  157. package/themes/original/src/components/PaymentOptionCard/index.tsx +4 -2
  158. package/themes/original/src/components/PaymentOptionStripe/styles.tsx +3 -0
  159. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  160. package/themes/original/src/components/PaymentOptions/index.tsx +81 -33
  161. package/themes/original/src/components/PhoneInputNumber/index.tsx +15 -1
  162. package/themes/original/src/components/ProductForm/ActionButton.tsx +120 -0
  163. package/themes/original/src/components/ProductForm/ExtraOptions.tsx +56 -0
  164. package/themes/original/src/components/ProductForm/index.tsx +79 -167
  165. package/themes/original/src/components/ProductForm/styles.tsx +1 -1
  166. package/themes/original/src/components/ProductItemAccordion/index.tsx +12 -8
  167. package/themes/original/src/components/ProductOptionSubOption/index.tsx +120 -79
  168. package/themes/original/src/components/ProductOptionSubOption/styles.tsx +10 -9
  169. package/themes/original/src/components/ProfessionalProfile/styles.tsx +3 -3
  170. package/themes/original/src/components/Promotions/index.tsx +4 -4
  171. package/themes/original/src/components/Promotions/styles.tsx +0 -2
  172. package/themes/original/src/components/ReviewDriver/styles.tsx +1 -1
  173. package/themes/original/src/components/ReviewOrder/styles.tsx +1 -1
  174. package/themes/original/src/components/ReviewProducts/styles.tsx +1 -1
  175. package/themes/original/src/components/ServiceForm/index.tsx +2 -2
  176. package/themes/original/src/components/ServiceForm/styles.tsx +4 -4
  177. package/themes/original/src/components/SingleOrderCard/index.tsx +5 -4
  178. package/themes/original/src/components/SingleProductCard/index.tsx +2 -2
  179. package/themes/original/src/components/SingleProductCard/styles.tsx +0 -3
  180. package/themes/original/src/components/StripeCardsList/index.tsx +23 -8
  181. package/themes/original/src/components/StripeElementsForm/index.tsx +9 -4
  182. package/themes/original/src/components/StripeElementsForm/naked.tsx +12 -1
  183. package/themes/original/src/components/UpsellingProducts/UpsellingContent.tsx +170 -0
  184. package/themes/original/src/components/UpsellingProducts/UpsellingLayout.tsx +86 -0
  185. package/themes/original/src/components/UpsellingProducts/index.tsx +15 -199
  186. package/themes/original/src/components/UpsellingProducts/styles.tsx +19 -0
  187. package/themes/original/src/components/UserFormDetails/index.tsx +53 -7
  188. package/themes/original/src/components/UserProfile/index.tsx +3 -2
  189. package/themes/original/src/components/UserProfileForm/index.tsx +30 -36
  190. package/themes/original/src/components/UserVerification/index.tsx +55 -50
  191. package/themes/original/src/components/WalletTransactions/styles.tsx +1 -0
  192. package/themes/original/src/components/Wallets/index.tsx +8 -9
  193. package/themes/original/src/components/Wallets/styles.tsx +1 -1
  194. package/themes/original/src/components/WebsocketStatus/index.tsx +172 -0
  195. package/themes/original/src/components/WebsocketStatus/styles.tsx +28 -0
  196. package/themes/original/src/components/shared/HeaderTitle.tsx +1 -1
  197. package/themes/original/src/components/shared/OButton.tsx +5 -5
  198. package/themes/original/src/components/shared/OInput.tsx +1 -4
  199. package/themes/original/src/components/shared/OModal.tsx +12 -14
  200. package/themes/original/src/layouts/Container.tsx +5 -3
  201. package/themes/original/src/types/index.tsx +10 -2
  202. package/themes/original/src/utils/index.tsx +124 -0
  203. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
  204. package/src/navigators/BottomNavigator.tsx +0 -117
  205. package/src/navigators/CheckoutNavigator.tsx +0 -66
  206. package/src/navigators/HomeNavigator.tsx +0 -202
  207. package/src/navigators/NavigationRef.tsx +0 -7
  208. package/src/navigators/RootNavigator.tsx +0 -269
  209. package/src/pages/Account.tsx +0 -34
  210. package/src/pages/AddressForm.tsx +0 -62
  211. package/src/pages/AddressList.tsx +0 -24
  212. package/src/pages/BusinessProductsList.tsx +0 -81
  213. package/src/pages/BusinessesListing.tsx +0 -43
  214. package/src/pages/CartList.tsx +0 -49
  215. package/src/pages/Checkout.tsx +0 -101
  216. package/src/pages/ForgotPassword.tsx +0 -24
  217. package/src/pages/Help.tsx +0 -23
  218. package/src/pages/HelpAccountAndPayment.tsx +0 -23
  219. package/src/pages/HelpGuide.tsx +0 -23
  220. package/src/pages/HelpOrder.tsx +0 -23
  221. package/src/pages/Home.tsx +0 -36
  222. package/src/pages/IntroductoryTutorial.tsx +0 -170
  223. package/src/pages/Login.tsx +0 -47
  224. package/src/pages/MomentOption.tsx +0 -30
  225. package/src/pages/MultiCheckout.tsx +0 -31
  226. package/src/pages/MultiOrdersDetails.tsx +0 -27
  227. package/src/pages/MyOrders.tsx +0 -40
  228. package/src/pages/NetworkError.tsx +0 -24
  229. package/src/pages/NotFound.tsx +0 -22
  230. package/src/pages/OrderDetails.tsx +0 -25
  231. package/src/pages/ProductDetails.tsx +0 -55
  232. package/src/pages/Profile.tsx +0 -36
  233. package/src/pages/ReviewDriver.tsx +0 -30
  234. package/src/pages/ReviewOrder.tsx +0 -32
  235. package/src/pages/ReviewProducts.tsx +0 -30
  236. package/src/pages/Sessions.tsx +0 -22
  237. package/src/pages/Signup.tsx +0 -53
  238. package/src/pages/SpinnerLoader.tsx +0 -10
  239. 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,104 +1,167 @@
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 } = props
113
+ const [, t] = useLanguage()
114
+ const [events] = useEvent()
115
+ const [{ user, token }] = useSession()
116
+ const [ordering] = useApi()
117
+ const [{ configs }] = useConfig()
118
+ const [, { showToast }] = useToast()
119
+ const { getCurrentLocation } = useLocation()
120
+ const [currentEvent, setCurrentEvent] = useState<any>(null)
121
+
122
+ const orderStatus = !!isBusinessApp
123
+ ? configs?.notification_business_states?.value.split('|').map((value: any) => Number(value)) || []
124
+ : configs?.notification_driver_states?.value.split('|').map((value: any) => Number(value)) || []
78
125
 
79
126
  const handleEventNotification = async (evtType: number, value: any) => {
80
127
  if (value?.driver) {
81
128
  try {
82
129
  const location = await getCurrentLocation()
130
+ if (!location?.latitude || !location?.longitude) {
131
+ showToast(t('ERROR_UPDATING_COORDS', 'Error updating coords'), ToastType.Error)
132
+ return
133
+ }
83
134
  await fetch(`${ordering.root}/users/${user.id}/locations`, {
84
135
  method: 'POST',
85
136
  body: JSON.stringify({
86
- location: JSON.stringify({ location: `{lat: ${location.latitude}, lng: ${location.longitude}}` })
137
+ location: JSON.stringify({
138
+ location: `{
139
+ lat: ${location.latitude},
140
+ lng: ${location.longitude}
141
+ }`
142
+ })
87
143
  }),
88
- headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${token}` }
144
+ headers: {
145
+ 'Content-Type': 'application/json',
146
+ Authorization: `Bearer ${token}`
147
+ }
89
148
  })
90
149
  } catch { }
91
150
  const duration = moment.duration(moment().diff(moment.utc(value?.last_driver_assigned_at)))
92
151
  const assignedSecondsDiff = duration.asSeconds()
93
- if (assignedSecondsDiff < 5 && !isBusinessApp && !value?.logistic_status) {
94
- handlePlayNotificationSound({ evt: 2, orderId: value?.id })
152
+ if (assignedSecondsDiff < 5 && !isBusinessApp && !value?.logistic_status && orderStatus.includes(value.status)) {
153
+ setCurrentEvent({ evt: 2, orderId: value?.id ?? value?.order_id })
95
154
  }
96
155
  }
97
- if (evtType === 3 || value.author_id === user.id) return
98
- setTimeout(() => handlePlayNotificationSound({
156
+ if (!orderStatus.includes(value.status) || value?.author_id === user.id) return
157
+ setCurrentEvent({
99
158
  evt: evtType,
100
- orderId: value?.driver ? value?.order_id : evtList[evtType].event === 'messages' ? value?.order?.id : value?.order_id
101
- }), 1000)
159
+ orderId: value?.driver
160
+ ? value?.order_id ?? value?.id
161
+ : evtList(currentEvent)[evtType].event === 'messages'
162
+ ? value?.order?.id
163
+ : value?.order_id ?? value?.id
164
+ })
102
165
  }
103
166
 
104
167
  useEffect(() => {
@@ -118,48 +181,21 @@ const NewOrderNotificationUI = (props: any) => {
118
181
  }, [])
119
182
 
120
183
  useEffect(() => {
121
- return () => handleCloseEvents()
184
+ return () => setCurrentEvent(null)
122
185
  }, [])
123
186
 
124
187
  return (
125
188
  <>
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>
189
+ {!!currentEvent ? (
190
+ <SoundPlayerComponent
191
+ evtList={evtList}
192
+ currentEvent={currentEvent}
193
+ handleCloseEvents={() => setCurrentEvent(null)}
194
+ />
195
+ ) : null}
160
196
  </>
161
197
  )
162
- }
198
+ };
163
199
 
164
200
  const styles = StyleSheet.create({
165
201
  modalView: {
@@ -179,9 +215,28 @@ const styles = StyleSheet.create({
179
215
  })
180
216
 
181
217
  export const NewOrderNotification = (props: any) => {
218
+ const [, t] = useLanguage()
219
+
182
220
  const newOrderNotificationProps = {
183
221
  ...props,
184
- UIComponent: NewOrderNotificationUI
222
+ UIComponent: NewOrderNotificationUI,
223
+ evtList: (currentEvent: any) => ({
224
+ 1: {
225
+ event: 'messages',
226
+ message: t('NEW_MESSAGES_RECEIVED', 'New messages have been received!'),
227
+ message2: t('ORDER_N_UNREAD_MESSAGES', 'Order #_order_id_ has unread messages.').replace('_order_id_', currentEvent?.orderId),
228
+ },
229
+ 2: {
230
+ event: 'order_added',
231
+ message: t('NEW_ORDERS_RECEIVED', 'New orders have been received!'),
232
+ message2: t('ORDER_N_ORDERED', 'Order #_order_id_ has been ordered.').replace('_order_id_', currentEvent?.orderId),
233
+ },
234
+ 3: {
235
+ event: 'order_updated',
236
+ message: t('NEW_ORDERS_UPDATED', 'New orders have been updated!'),
237
+ message2: t('ORDER_N_UPDATED', 'Order #_order_id_ has been updated.').replace('_order_id_', currentEvent?.orderId),
238
+ },
239
+ })
185
240
  };
186
241
 
187
242
  return <NewOrderNotificationController {...newOrderNotificationProps} />;
@@ -61,9 +61,12 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
61
61
  const [, { showToast }] = useToast();
62
62
  const [{ parsePrice, parseNumber }] = useUtils();
63
63
  const [{ configs }] = useConfig();
64
+
64
65
  const { order } = props.order
65
66
 
67
+ const hideTimer = configs?.hidden_driver_eta_time?.value === '1'
66
68
  const isAllowedDriverRejectOrder = configs?.allow_driver_reject_order?.value === '1'
69
+ const isHideRejectButtons = configs?.reject_orders_enabled && configs?.reject_orders_enabled?.value !== '1'
67
70
  const theme = useTheme();
68
71
  const [, t] = useLanguage();
69
72
  const [session] = useSession();
@@ -88,9 +91,9 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
88
91
  const logisticOrderStatus = [4, 6, 7]
89
92
 
90
93
  const showFloatButtonsPickUp: any = {
91
- 8: true,
94
+ 8: !isHideRejectButtons,
92
95
  3: true,
93
- 18: true,
96
+ 18: !isHideRejectButtons,
94
97
  };
95
98
 
96
99
  const showFloatButtonsAcceptOrReject: any = {
@@ -113,6 +116,10 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
113
116
  readMessages && readMessages();
114
117
  };
115
118
 
119
+ const goToPermissionPage = () => {
120
+ navigation.navigate('RequestPermissions')
121
+ }
122
+
116
123
  const handleOpenMapView = async () => {
117
124
  if (!isGrantedPermissions) {
118
125
  navigation.navigate('RequestPermissions')
@@ -387,7 +394,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
387
394
  }, [props.order?.loading]);
388
395
 
389
396
  useEffect(() => {
390
- if (!order?.driver_id && session?.user?.level === 4) {
397
+ if (order?.driver_id === null && session?.user?.level === 4) {
391
398
  setAlertState({
392
399
  open: true,
393
400
  content: [
@@ -476,13 +483,13 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
476
483
  textStyle={{ color: theme.colors.primary }}
477
484
  text={t('ARRIVED_TO_BUSINESS', 'Arrived to bussiness')}
478
485
  onClick={() =>
479
- handleChangeOrderStatus && handleChangeOrderStatus(3)
486
+ handleChangeOrderStatus && isGrantedPermissions ? handleChangeOrderStatus(3) : goToPermissionPage()
480
487
  }
481
488
  imgLeftStyle={{ tintColor: theme.colors.backArrow }}
482
489
  />
483
490
  </Pickup>
484
491
  )}
485
- {order?.status === 3 && order?.delivery_type === 1 && (
492
+ {order?.status === 3 && order?.delivery_type === 1 && !isHideRejectButtons && (
486
493
  <View style={{ paddingVertical: 20, marginBottom: 20 }}>
487
494
  <OButton
488
495
  style={styles.btnPickUp}
@@ -568,7 +575,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
568
575
  btnText={t('PICKUP_FAILED', 'Pickup failed')}
569
576
  isSecondaryBtn={false}
570
577
  secondButtonClick={() =>
571
- handleChangeOrderStatus && handleChangeOrderStatus(9)
578
+ handleChangeOrderStatus && isGrantedPermissions ? handleChangeOrderStatus(9) : goToPermissionPage()
572
579
  }
573
580
  firstButtonClick={() =>
574
581
  handleViewActionOrder && handleViewActionOrder('pickupFailed')
@@ -577,7 +584,8 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
577
584
  secondButton={true}
578
585
  firstColorCustom={theme.colors.red}
579
586
  secondColorCustom={theme.colors.green}
580
- widthButton={'45%'}
587
+ widthButton={isHideRejectButtons ? '100%' : '45%'}
588
+ isHideRejectButtons={isHideRejectButtons}
581
589
  />
582
590
  )}
583
591
  {(validStatusComplete.includes(order?.status)) && (
@@ -587,7 +595,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
587
595
  btnText={t('DELIVERY_FAILED', 'Delivery Failed')}
588
596
  isSecondaryBtn={false}
589
597
  secondButtonClick={() =>
590
- handleChangeOrderStatus && handleChangeOrderStatus(11)
598
+ handleChangeOrderStatus && isGrantedPermissions ? handleChangeOrderStatus(11) : goToPermissionPage()
591
599
  }
592
600
  firstButtonClick={() =>
593
601
  handleViewActionOrder && handleViewActionOrder('deliveryFailed')
@@ -596,7 +604,8 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
596
604
  secondButton={true}
597
605
  firstColorCustom={theme.colors.red}
598
606
  secondColorCustom={theme.colors.green}
599
- widthButton={'45%'}
607
+ widthButton={isHideRejectButtons ? '100%' : '45%'}
608
+ isHideRejectButtons={isHideRejectButtons}
600
609
  />
601
610
  </>
602
611
  )}
@@ -604,13 +613,14 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
604
613
  <FloatingButton
605
614
  btnText={t('REJECT', 'Reject')}
606
615
  isSecondaryBtn={false}
607
- secondButtonClick={() => (order?.isLogistic && (order?.order_group || logisticOrderStatus.includes(order?.status))) ? handleAcceptLogisticOrder(order) : handleViewActionOrder('accept')}
616
+ secondButtonClick={() => hideTimer ? handleChangeOrderStatus && handleChangeOrderStatus(8) : (order?.isLogistic && (order?.order_group || logisticOrderStatus.includes(order?.status))) ? handleAcceptLogisticOrder(order) : handleViewActionOrder('accept')}
608
617
  firstButtonClick={() => order?.isLogistic && (order?.order_group || logisticOrderStatus.includes(order?.status)) ? handleRejectLogisticOrder() : handleViewActionOrder('reject')}
609
618
  secondBtnText={t('ACCEPT', 'Accept')}
610
619
  secondButton={true}
611
620
  firstColorCustom={theme.colors.red}
612
621
  secondColorCustom={theme.colors.green}
613
- widthButton={'45%'}
622
+ widthButton={isHideRejectButtons ? '100%' : '45%'}
623
+ isHideRejectButtons={isHideRejectButtons}
614
624
  />
615
625
  )}
616
626
  </>