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