ordering-ui-react-native 0.21.2 → 0.21.3-release

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (237) 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 -12
  28. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +90 -55
  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 +45 -21
  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 +96 -58
  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/MultiCheckout/index.tsx +251 -53
  136. package/themes/original/src/components/MultiCheckout/styles.tsx +17 -0
  137. package/themes/original/src/components/MultiOrdersDetails/index.tsx +20 -15
  138. package/themes/original/src/components/MyOrders/index.tsx +24 -29
  139. package/themes/original/src/components/NavBar/index.tsx +3 -1
  140. package/themes/original/src/components/NetworkError/index.tsx +2 -3
  141. package/themes/original/src/components/NetworkError/styles.tsx +2 -2
  142. package/themes/original/src/components/Notifications/index.tsx +4 -8
  143. package/themes/original/src/components/Notifications/styles.tsx +0 -1
  144. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +7 -3
  145. package/themes/original/src/components/OrderDetails/index.tsx +716 -667
  146. package/themes/original/src/components/OrderDetails/styles.tsx +24 -8
  147. package/themes/original/src/components/OrderProgress/index.tsx +28 -9
  148. package/themes/original/src/components/OrderProgress/styles.tsx +1 -1
  149. package/themes/original/src/components/OrderSummary/index.tsx +3 -1
  150. package/themes/original/src/components/OrderTypeSelector/index.tsx +5 -6
  151. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/styles.tsx +1 -1
  152. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/styles.tsx +1 -1
  153. package/themes/original/src/components/OrdersOption/index.tsx +2 -1
  154. package/themes/original/src/components/OrdersOption/styles.tsx +1 -1
  155. package/themes/original/src/components/PageBanner/index.tsx +3 -0
  156. package/themes/original/src/components/PaymentOptionCard/index.tsx +4 -2
  157. package/themes/original/src/components/PaymentOptionStripe/styles.tsx +3 -0
  158. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  159. package/themes/original/src/components/PaymentOptions/index.tsx +67 -5
  160. package/themes/original/src/components/PhoneInputNumber/index.tsx +15 -1
  161. package/themes/original/src/components/ProductForm/ActionButton.tsx +120 -0
  162. package/themes/original/src/components/ProductForm/ExtraOptions.tsx +56 -0
  163. package/themes/original/src/components/ProductForm/index.tsx +75 -166
  164. package/themes/original/src/components/ProductForm/styles.tsx +1 -1
  165. package/themes/original/src/components/ProductItemAccordion/index.tsx +12 -8
  166. package/themes/original/src/components/ProductOptionSubOption/index.tsx +120 -79
  167. package/themes/original/src/components/ProductOptionSubOption/styles.tsx +7 -4
  168. package/themes/original/src/components/ProfessionalProfile/styles.tsx +3 -3
  169. package/themes/original/src/components/Promotions/index.tsx +4 -4
  170. package/themes/original/src/components/Promotions/styles.tsx +0 -2
  171. package/themes/original/src/components/ReviewDriver/styles.tsx +1 -1
  172. package/themes/original/src/components/ReviewOrder/styles.tsx +1 -1
  173. package/themes/original/src/components/ReviewProducts/styles.tsx +1 -1
  174. package/themes/original/src/components/ServiceForm/index.tsx +2 -2
  175. package/themes/original/src/components/ServiceForm/styles.tsx +4 -4
  176. package/themes/original/src/components/SingleOrderCard/index.tsx +5 -4
  177. package/themes/original/src/components/SingleProductCard/index.tsx +2 -2
  178. package/themes/original/src/components/SingleProductCard/styles.tsx +0 -3
  179. package/themes/original/src/components/StripeCardsList/index.tsx +16 -35
  180. package/themes/original/src/components/StripeElementsForm/index.tsx +9 -4
  181. package/themes/original/src/components/UpsellingProducts/UpsellingContent.tsx +170 -0
  182. package/themes/original/src/components/UpsellingProducts/UpsellingLayout.tsx +86 -0
  183. package/themes/original/src/components/UpsellingProducts/index.tsx +15 -199
  184. package/themes/original/src/components/UpsellingProducts/styles.tsx +19 -0
  185. package/themes/original/src/components/UserFormDetails/index.tsx +53 -7
  186. package/themes/original/src/components/UserProfile/index.tsx +3 -2
  187. package/themes/original/src/components/UserProfileForm/index.tsx +30 -36
  188. package/themes/original/src/components/UserVerification/index.tsx +55 -50
  189. package/themes/original/src/components/WalletTransactions/styles.tsx +1 -0
  190. package/themes/original/src/components/Wallets/index.tsx +8 -9
  191. package/themes/original/src/components/Wallets/styles.tsx +1 -1
  192. package/themes/original/src/components/WebsocketStatus/index.tsx +172 -0
  193. package/themes/original/src/components/WebsocketStatus/styles.tsx +28 -0
  194. package/themes/original/src/components/shared/HeaderTitle.tsx +1 -1
  195. package/themes/original/src/components/shared/OButton.tsx +5 -5
  196. package/themes/original/src/components/shared/OInput.tsx +1 -4
  197. package/themes/original/src/components/shared/OModal.tsx +12 -14
  198. package/themes/original/src/layouts/Container.tsx +5 -3
  199. package/themes/original/src/types/index.tsx +8 -2
  200. package/themes/original/src/utils/index.tsx +124 -0
  201. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
  202. package/src/navigators/BottomNavigator.tsx +0 -117
  203. package/src/navigators/CheckoutNavigator.tsx +0 -66
  204. package/src/navigators/HomeNavigator.tsx +0 -202
  205. package/src/navigators/NavigationRef.tsx +0 -7
  206. package/src/navigators/RootNavigator.tsx +0 -269
  207. package/src/pages/Account.tsx +0 -34
  208. package/src/pages/AddressForm.tsx +0 -62
  209. package/src/pages/AddressList.tsx +0 -24
  210. package/src/pages/BusinessProductsList.tsx +0 -81
  211. package/src/pages/BusinessesListing.tsx +0 -43
  212. package/src/pages/CartList.tsx +0 -49
  213. package/src/pages/Checkout.tsx +0 -101
  214. package/src/pages/ForgotPassword.tsx +0 -24
  215. package/src/pages/Help.tsx +0 -23
  216. package/src/pages/HelpAccountAndPayment.tsx +0 -23
  217. package/src/pages/HelpGuide.tsx +0 -23
  218. package/src/pages/HelpOrder.tsx +0 -23
  219. package/src/pages/Home.tsx +0 -36
  220. package/src/pages/IntroductoryTutorial.tsx +0 -170
  221. package/src/pages/Login.tsx +0 -47
  222. package/src/pages/MomentOption.tsx +0 -30
  223. package/src/pages/MultiCheckout.tsx +0 -31
  224. package/src/pages/MultiOrdersDetails.tsx +0 -27
  225. package/src/pages/MyOrders.tsx +0 -40
  226. package/src/pages/NetworkError.tsx +0 -24
  227. package/src/pages/NotFound.tsx +0 -22
  228. package/src/pages/OrderDetails.tsx +0 -25
  229. package/src/pages/ProductDetails.tsx +0 -55
  230. package/src/pages/Profile.tsx +0 -36
  231. package/src/pages/ReviewDriver.tsx +0 -30
  232. package/src/pages/ReviewOrder.tsx +0 -32
  233. package/src/pages/ReviewProducts.tsx +0 -30
  234. package/src/pages/Sessions.tsx +0 -22
  235. package/src/pages/Signup.tsx +0 -53
  236. package/src/pages/SpinnerLoader.tsx +0 -10
  237. 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: [
@@ -464,7 +471,6 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
464
471
  return (
465
472
  <>
466
473
  <OrderContentComponent
467
- isDelivery
468
474
  order={order}
469
475
  logisticOrderStatus={logisticOrderStatus}
470
476
  isOrderGroup={isOrderGroup}
@@ -477,13 +483,13 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
477
483
  textStyle={{ color: theme.colors.primary }}
478
484
  text={t('ARRIVED_TO_BUSINESS', 'Arrived to bussiness')}
479
485
  onClick={() =>
480
- handleChangeOrderStatus && handleChangeOrderStatus(3)
486
+ handleChangeOrderStatus && isGrantedPermissions ? handleChangeOrderStatus(3) : goToPermissionPage()
481
487
  }
482
488
  imgLeftStyle={{ tintColor: theme.colors.backArrow }}
483
489
  />
484
490
  </Pickup>
485
491
  )}
486
- {order?.status === 3 && order?.delivery_type === 1 && (
492
+ {order?.status === 3 && order?.delivery_type === 1 && !isHideRejectButtons && (
487
493
  <View style={{ paddingVertical: 20, marginBottom: 20 }}>
488
494
  <OButton
489
495
  style={styles.btnPickUp}
@@ -569,7 +575,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
569
575
  btnText={t('PICKUP_FAILED', 'Pickup failed')}
570
576
  isSecondaryBtn={false}
571
577
  secondButtonClick={() =>
572
- handleChangeOrderStatus && handleChangeOrderStatus(9)
578
+ handleChangeOrderStatus && isGrantedPermissions ? handleChangeOrderStatus(9) : goToPermissionPage()
573
579
  }
574
580
  firstButtonClick={() =>
575
581
  handleViewActionOrder && handleViewActionOrder('pickupFailed')
@@ -578,7 +584,8 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
578
584
  secondButton={true}
579
585
  firstColorCustom={theme.colors.red}
580
586
  secondColorCustom={theme.colors.green}
581
- widthButton={'45%'}
587
+ widthButton={isHideRejectButtons ? '100%' : '45%'}
588
+ isHideRejectButtons={isHideRejectButtons}
582
589
  />
583
590
  )}
584
591
  {(validStatusComplete.includes(order?.status)) && (
@@ -588,7 +595,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
588
595
  btnText={t('DELIVERY_FAILED', 'Delivery Failed')}
589
596
  isSecondaryBtn={false}
590
597
  secondButtonClick={() =>
591
- handleChangeOrderStatus && handleChangeOrderStatus(11)
598
+ handleChangeOrderStatus && isGrantedPermissions ? handleChangeOrderStatus(11) : goToPermissionPage()
592
599
  }
593
600
  firstButtonClick={() =>
594
601
  handleViewActionOrder && handleViewActionOrder('deliveryFailed')
@@ -597,7 +604,8 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
597
604
  secondButton={true}
598
605
  firstColorCustom={theme.colors.red}
599
606
  secondColorCustom={theme.colors.green}
600
- widthButton={'45%'}
607
+ widthButton={isHideRejectButtons ? '100%' : '45%'}
608
+ isHideRejectButtons={isHideRejectButtons}
601
609
  />
602
610
  </>
603
611
  )}
@@ -605,13 +613,14 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
605
613
  <FloatingButton
606
614
  btnText={t('REJECT', 'Reject')}
607
615
  isSecondaryBtn={false}
608
- 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')}
609
617
  firstButtonClick={() => order?.isLogistic && (order?.order_group || logisticOrderStatus.includes(order?.status)) ? handleRejectLogisticOrder() : handleViewActionOrder('reject')}
610
618
  secondBtnText={t('ACCEPT', 'Accept')}
611
619
  secondButton={true}
612
620
  firstColorCustom={theme.colors.red}
613
621
  secondColorCustom={theme.colors.green}
614
- widthButton={'45%'}
622
+ widthButton={isHideRejectButtons ? '100%' : '45%'}
623
+ isHideRejectButtons={isHideRejectButtons}
615
624
  />
616
625
  )}
617
626
  </>