ordering-ui-react-native 0.21.47 → 0.21.48-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 (207) hide show
  1. package/package.json +8 -8
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/BusinessesListing/index.tsx +1 -1
  4. package/src/components/PaymentOptionsWebView/index.tsx +1 -0
  5. package/src/components/StripeMethodForm/index.tsx +6 -4
  6. package/src/components/VerifyPhone/styles.tsx +1 -2
  7. package/src/types/index.tsx +3 -1
  8. package/src/utils/index.tsx +2 -2
  9. package/themes/business/index.tsx +6 -0
  10. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +4 -3
  11. package/themes/business/src/components/BusinessController/index.tsx +19 -17
  12. package/themes/business/src/components/BusinessProductList/AccordionDropdown.tsx +63 -0
  13. package/themes/business/src/components/BusinessProductList/IterateCategories.tsx +108 -0
  14. package/themes/business/src/components/BusinessProductList/ProductList.tsx +196 -0
  15. package/themes/business/src/components/BusinessProductList/index.tsx +196 -0
  16. package/themes/business/src/components/BusinessProductList/styles.tsx +10 -0
  17. package/themes/business/src/components/DriverMap/index.tsx +36 -23
  18. package/themes/business/src/components/GoogleMap/index.tsx +15 -8
  19. package/themes/business/src/components/Home/index.tsx +5 -1
  20. package/themes/business/src/components/LanguageSelector/index.tsx +1 -2
  21. package/themes/business/src/components/LanguageSelector/lang_country.json +515 -70
  22. package/themes/business/src/components/LogoutButton/index.tsx +1 -1
  23. package/themes/business/src/components/MapView/index.tsx +30 -15
  24. package/themes/business/src/components/MessagesOption/index.tsx +2 -1
  25. package/themes/business/src/components/NewOrderNotification/index.tsx +66 -26
  26. package/themes/business/src/components/OrderDetails/Business.tsx +52 -2
  27. package/themes/business/src/components/OrderDetails/Delivery.tsx +30 -11
  28. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +68 -61
  29. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +40 -20
  30. package/themes/business/src/components/OrderDetails/usePrinterCommands.tsx +220 -0
  31. package/themes/business/src/components/OrderSummary/index.tsx +240 -76
  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 +253 -135
  35. package/themes/business/src/components/PhoneInputNumber/index.tsx +8 -5
  36. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +37 -40
  37. package/themes/business/src/components/PreviousOrders/OrderList.tsx +1 -1
  38. package/themes/business/src/components/PreviousOrders/index.tsx +5 -3
  39. package/themes/business/src/components/PreviousOrders/styles.tsx +10 -0
  40. package/themes/business/src/components/PrinterEdition/index.tsx +363 -0
  41. package/themes/business/src/components/PrinterEdition/styles.tsx +61 -0
  42. package/themes/business/src/components/PrinterSettings/index.tsx +267 -0
  43. package/themes/business/src/components/PrinterSettings/styles.tsx +30 -0
  44. package/themes/business/src/components/ProductItemAccordion/index.tsx +2 -2
  45. package/themes/business/src/components/ReviewCustomer/index.tsx +2 -0
  46. package/themes/business/src/components/SearchBar/index.tsx +2 -1
  47. package/themes/business/src/components/Sessions/index.tsx +187 -0
  48. package/themes/business/src/components/Sessions/styles.tsx +20 -0
  49. package/themes/business/src/components/StoresList/index.tsx +5 -3
  50. package/themes/business/src/components/UserFormDetails/index.tsx +111 -107
  51. package/themes/business/src/components/UserProfileForm/index.tsx +106 -54
  52. package/themes/business/src/components/WebsocketStatus/index.tsx +171 -0
  53. package/themes/business/src/components/WebsocketStatus/styles.tsx +28 -0
  54. package/themes/business/src/components/shared/OInput.tsx +2 -0
  55. package/themes/business/src/components/shared/OTextarea.tsx +8 -9
  56. package/themes/business/src/hooks/useLocation.tsx +5 -4
  57. package/themes/business/src/types/index.tsx +21 -5
  58. package/themes/business/src/utils/index.tsx +5 -0
  59. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  60. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  61. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  62. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  63. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  64. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  65. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  66. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  67. package/themes/original/index.tsx +6 -2
  68. package/themes/original/src/components/AddressDetails/index.tsx +20 -10
  69. package/themes/original/src/components/AddressForm/index.tsx +41 -12
  70. package/themes/original/src/components/AddressForm/styles.tsx +1 -1
  71. package/themes/original/src/components/AddressList/index.tsx +18 -4
  72. package/themes/original/src/components/AddressList/styles.tsx +4 -4
  73. package/themes/original/src/components/AnalyticsSegment/index.tsx +6 -6
  74. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  75. package/themes/original/src/components/BusinessBasicInformation/index.tsx +7 -10
  76. package/themes/original/src/components/BusinessBasicInformation/styles.tsx +1 -1
  77. package/themes/original/src/components/BusinessController/index.tsx +18 -10
  78. package/themes/original/src/components/BusinessController/styles.tsx +8 -7
  79. package/themes/original/src/components/BusinessInformation/styles.tsx +2 -2
  80. package/themes/original/src/components/BusinessItemAccordion/index.tsx +11 -7
  81. package/themes/original/src/components/BusinessListingSearch/BusinessSearchFooter.tsx +317 -0
  82. package/themes/original/src/components/BusinessListingSearch/BusinessSearchHeader.tsx +96 -0
  83. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/index.tsx +1 -1
  84. package/themes/original/src/components/BusinessListingSearch/index.tsx +47 -358
  85. package/themes/original/src/components/BusinessListingSearch/styles.tsx +1 -1
  86. package/themes/original/src/components/BusinessPreorder/index.tsx +4 -3
  87. package/themes/original/src/components/BusinessProductsCategories/index.tsx +1 -1
  88. package/themes/original/src/components/BusinessProductsList/index.tsx +1 -1
  89. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  90. package/themes/original/src/components/BusinessProductsListing/index.tsx +31 -18
  91. package/themes/original/src/components/BusinessProductsListing/styles.tsx +2 -2
  92. package/themes/original/src/components/BusinessReviews/index.tsx +1 -1
  93. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +1 -1
  94. package/themes/original/src/components/BusinessesListing/Layout/Appointment/styles.tsx +5 -5
  95. package/themes/original/src/components/BusinessesListing/Layout/Original/FlatListBusinessListFooter.tsx +1 -1
  96. package/themes/original/src/components/BusinessesListing/Layout/Original/FlatListBusinessListHeader.tsx +7 -7
  97. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +2 -2
  98. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -1
  99. package/themes/original/src/components/BusinessesListing/index.tsx +0 -1
  100. package/themes/original/src/components/Cart/index.tsx +32 -9
  101. package/themes/original/src/components/CartContent/index.tsx +96 -58
  102. package/themes/original/src/components/CartStoresListing/styles.tsx +2 -2
  103. package/themes/original/src/components/Checkout/index.tsx +144 -62
  104. package/themes/original/src/components/Checkout/styles.tsx +17 -0
  105. package/themes/original/src/components/CitiesControl/styles.tsx +1 -1
  106. package/themes/original/src/components/DatePicker/index.tsx +18 -2
  107. package/themes/original/src/components/Favorite/index.tsx +9 -9
  108. package/themes/original/src/components/Favorite/styles.tsx +0 -2
  109. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  110. package/themes/original/src/components/ForgotPasswordForm/index.tsx +5 -0
  111. package/themes/original/src/components/GPSButton/index.tsx +1 -1
  112. package/themes/original/src/components/GiftCard/GiftCardOrdersList/index.tsx +64 -0
  113. package/themes/original/src/components/GiftCard/GiftCardOrdersList/styles.tsx +8 -0
  114. package/themes/original/src/components/GiftCard/PurchaseGiftCard/styles.tsx +1 -1
  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 +39 -18
  123. package/themes/original/src/components/Help/index.tsx +7 -0
  124. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +5 -0
  125. package/themes/original/src/components/HelpGuide/index.tsx +5 -0
  126. package/themes/original/src/components/HelpOrder/index.tsx +5 -0
  127. package/themes/original/src/components/HighestRatedBusinesses/index.tsx +2 -2
  128. package/themes/original/src/components/HighestRatedBusinesses/styles.tsx +1 -1
  129. package/themes/original/src/components/Home/index.tsx +3 -8
  130. package/themes/original/src/components/LoginForm/Otp/index.tsx +4 -16
  131. package/themes/original/src/components/LoginForm/index.tsx +9 -3
  132. package/themes/original/src/components/MessageListing/index.tsx +6 -0
  133. package/themes/original/src/components/Messages/index.tsx +8 -7
  134. package/themes/original/src/components/Messages/styles.tsx +1 -1
  135. package/themes/original/src/components/MomentOption/index.tsx +19 -4
  136. package/themes/original/src/components/MultiCart/index.tsx +1 -1
  137. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +7 -3
  138. package/themes/original/src/components/MultiCheckout/index.tsx +126 -61
  139. package/themes/original/src/components/MultiCheckout/styles.tsx +17 -0
  140. package/themes/original/src/components/MultiOrdersDetails/index.tsx +20 -15
  141. package/themes/original/src/components/MyOrders/index.tsx +28 -28
  142. package/themes/original/src/components/NavBar/index.tsx +5 -0
  143. package/themes/original/src/components/NetworkError/index.tsx +2 -3
  144. package/themes/original/src/components/NetworkError/styles.tsx +2 -2
  145. package/themes/original/src/components/Notifications/index.tsx +9 -8
  146. package/themes/original/src/components/Notifications/styles.tsx +0 -1
  147. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +1 -1
  148. package/themes/original/src/components/OrderDetails/index.tsx +701 -662
  149. package/themes/original/src/components/OrderDetails/styles.tsx +24 -8
  150. package/themes/original/src/components/OrderProgress/index.tsx +22 -3
  151. package/themes/original/src/components/OrderProgress/styles.tsx +1 -1
  152. package/themes/original/src/components/OrderSummary/index.tsx +3 -1
  153. package/themes/original/src/components/OrderTypeSelector/index.tsx +10 -6
  154. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/styles.tsx +1 -1
  155. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/styles.tsx +1 -1
  156. package/themes/original/src/components/OrdersOption/index.tsx +3 -5
  157. package/themes/original/src/components/OrdersOption/styles.tsx +1 -1
  158. package/themes/original/src/components/PaymentOptionCard/index.tsx +4 -2
  159. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  160. package/themes/original/src/components/PaymentOptions/index.tsx +47 -4
  161. package/themes/original/src/components/PreviousOrders/index.tsx +2 -0
  162. package/themes/original/src/components/ProductForm/ActionButton.tsx +122 -0
  163. package/themes/original/src/components/ProductForm/ExtraOptions.tsx +56 -0
  164. package/themes/original/src/components/ProductForm/index.tsx +170 -252
  165. package/themes/original/src/components/ProductItemAccordion/index.tsx +55 -44
  166. package/themes/original/src/components/ProductItemAccordion/styles.tsx +3 -4
  167. package/themes/original/src/components/ProductOptionSubOption/index.tsx +112 -91
  168. package/themes/original/src/components/ProfessionalProfile/styles.tsx +3 -3
  169. package/themes/original/src/components/Promotions/index.tsx +13 -11
  170. package/themes/original/src/components/Promotions/styles.tsx +0 -2
  171. package/themes/original/src/components/ReviewDriver/index.tsx +5 -0
  172. package/themes/original/src/components/ReviewDriver/styles.tsx +1 -1
  173. package/themes/original/src/components/ReviewOrder/index.tsx +5 -0
  174. package/themes/original/src/components/ReviewOrder/styles.tsx +1 -1
  175. package/themes/original/src/components/ReviewProducts/index.tsx +5 -0
  176. package/themes/original/src/components/ReviewProducts/styles.tsx +1 -1
  177. package/themes/original/src/components/ServiceForm/index.tsx +1 -1
  178. package/themes/original/src/components/ServiceForm/styles.tsx +4 -4
  179. package/themes/original/src/components/Sessions/index.tsx +5 -0
  180. package/themes/original/src/components/SignupForm/index.tsx +67 -59
  181. package/themes/original/src/components/SingleOrderCard/index.tsx +3 -2
  182. package/themes/original/src/components/SingleProductCard/index.tsx +4 -3
  183. package/themes/original/src/components/SingleProductCard/styles.tsx +0 -3
  184. package/themes/original/src/components/StripeCardsList/index.tsx +12 -35
  185. package/themes/original/src/components/StripeElementsForm/index.tsx +79 -59
  186. package/themes/original/src/components/StripeElementsForm/naked.tsx +48 -1
  187. package/themes/original/src/components/UpsellingProducts/UpsellingContent.tsx +170 -0
  188. package/themes/original/src/components/UpsellingProducts/UpsellingLayout.tsx +91 -0
  189. package/themes/original/src/components/UpsellingProducts/index.tsx +15 -199
  190. package/themes/original/src/components/UpsellingProducts/styles.tsx +19 -0
  191. package/themes/original/src/components/UserFormDetails/index.tsx +100 -86
  192. package/themes/original/src/components/UserFormDetails/styles.tsx +7 -0
  193. package/themes/original/src/components/UserProfile/index.tsx +3 -2
  194. package/themes/original/src/components/UserProfileForm/index.tsx +5 -0
  195. package/themes/original/src/components/WalletTransactions/styles.tsx +1 -0
  196. package/themes/original/src/components/Wallets/index.tsx +7 -4
  197. package/themes/original/src/components/Wallets/styles.tsx +2 -1
  198. package/themes/original/src/components/WebsocketStatus/index.tsx +172 -0
  199. package/themes/original/src/components/WebsocketStatus/styles.tsx +28 -0
  200. package/themes/original/src/components/shared/HeaderTitle.tsx +1 -1
  201. package/themes/original/src/components/shared/OButton.tsx +5 -5
  202. package/themes/original/src/components/shared/OInput.tsx +1 -4
  203. package/themes/original/src/components/shared/OModal.tsx +12 -14
  204. package/themes/original/src/layouts/Container.tsx +5 -3
  205. package/themes/original/src/types/index.tsx +4 -1
  206. package/themes/original/src/utils/index.tsx +12 -1
  207. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -55,10 +55,13 @@ const MapViewComponent = (props: MapViewParams) => {
55
55
  if (mapRef.current) {
56
56
  mapRef.current.fitToCoordinates(
57
57
  [
58
- { latitude: location.latitude, longitude: location.longitude },
59
58
  {
60
- latitude: userLocation?.latitude,
61
- longitude: userLocation?.longitude,
59
+ latitude: typeof location?.latitude !== 'object' ? location?.latitude : 0,
60
+ longitude: typeof location?.longitude !== 'object' ? location?.latitude : 0
61
+ },
62
+ {
63
+ latitude: typeof userLocation?.latitude !== 'object' ? userLocation?.latitude : 0,
64
+ longitude: typeof userLocation?.longitude !== 'object' ? userLocation?.latitude : 0
62
65
  },
63
66
  ],
64
67
  {
@@ -72,8 +75,8 @@ const MapViewComponent = (props: MapViewParams) => {
72
75
  const lastRegion = mapRef?.current?.__lastRegion
73
76
  mapRef?.current && mapRef.current.animateToRegion({
74
77
  ...mapRef?.current?.__lastRegion,
75
- longitudeDelta: lastRegion.longitudeDelta / 8,
76
- latitudeDelta: lastRegion.longitudeDelta / 8
78
+ longitudeDelta: lastRegion?.longitudeDelta / 8,
79
+ latitudeDelta: lastRegion?.longitudeDelta / 8
77
80
  })
78
81
  }
79
82
 
@@ -81,8 +84,8 @@ const MapViewComponent = (props: MapViewParams) => {
81
84
  const lastRegion = mapRef?.current?.__lastRegion
82
85
  mapRef?.current && mapRef.current.animateToRegion({
83
86
  ...lastRegion,
84
- longitudeDelta: lastRegion.longitudeDelta * 8,
85
- latitudeDelta: lastRegion.longitudeDelta * 8
87
+ longitudeDelta: lastRegion?.longitudeDelta * 8,
88
+ latitudeDelta: lastRegion?.longitudeDelta * 8
86
89
  })
87
90
  }
88
91
 
@@ -133,8 +136,20 @@ const MapViewComponent = (props: MapViewParams) => {
133
136
  const RenderMarker = ({ marker, customer, orderIds }: { marker: any, customer?: boolean, orderIds?: Array<number> }) => {
134
137
  const markerRef = useRef<any>()
135
138
 
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
139
+ let coordinateLat = (customer
140
+ ? typeof marker?.customer?.location?.lat === 'number' && !Number.isNaN(marker?.customer?.location?.lat)
141
+ ? marker?.customer?.location?.lat
142
+ : 0
143
+ : typeof marker?.business?.location?.lat === 'number' && !Number.isNaN(marker?.business?.location?.lat)
144
+ ? marker?.business?.location?.lat
145
+ : 0) ?? (initialPosition?.latitude || 0)
146
+ let coordinateLng = (customer
147
+ ? typeof marker?.customer?.location?.lng === 'number' && !Number.isNaN(marker?.customer?.location?.lng)
148
+ ? marker?.customer?.location?.lng
149
+ : 0
150
+ : typeof marker?.business?.location?.lng === 'number' && !Number.isNaN(marker?.business?.location?.lng)
151
+ ? marker?.business?.location?.lng
152
+ : 0) ?? (initialPosition?.longitude || 0)
138
153
 
139
154
  useEffect(() => {
140
155
  if (
@@ -154,8 +169,8 @@ const MapViewComponent = (props: MapViewParams) => {
154
169
  }}
155
170
  onPress={() =>
156
171
  setLocationSelected({
157
- latitude: customer ? marker?.customer?.location?.lat : marker?.business?.location?.lat,
158
- longitude: customer ? marker?.customer?.location?.lng : marker?.business?.location?.lng
172
+ latitude: coordinateLat,
173
+ longitude: coordinateLng
159
174
  })
160
175
  }
161
176
  ref={(ref) => markerRef.current = ref}
@@ -235,8 +250,8 @@ const MapViewComponent = (props: MapViewParams) => {
235
250
  ref={mapRef}
236
251
  provider={PROVIDER_GOOGLE}
237
252
  initialRegion={{
238
- latitude: initialPosition?.latitude,
239
- longitude: initialPosition?.longitude,
253
+ latitude: initialPosition?.latitude || 0,
254
+ longitude: initialPosition?.longitude || 0,
240
255
  latitudeDelta: haveOrders ? 0.01 : 0.1,
241
256
  longitudeDelta: haveOrders ? 0.01 * ASPECT_RATIO : 0.1 * ASPECT_RATIO,
242
257
  }}
@@ -266,8 +281,8 @@ const MapViewComponent = (props: MapViewParams) => {
266
281
  ))}
267
282
  <Marker
268
283
  coordinate={{
269
- latitude: location.lat,
270
- longitude: location.lng,
284
+ latitude: typeof location.lat === 'number' && !Number.isNaN(location.lat) ? location.lat : 0,
285
+ longitude: typeof location.lng === 'number' && !Number.isNaN(location.lng) ? location.lng : 0,
271
286
  }}
272
287
  title={t('YOUR_LOCATION', 'Your Location')}
273
288
  >
@@ -12,6 +12,7 @@ import { PreviousMessages } from '../PreviousMessages';
12
12
  import { FiltersTab, TabsContainer, TagsContainer, Tag } from './styles';
13
13
  import { MessagesOptionParams } from '../../types';
14
14
  import { useDeviceOrientation } from '../../../../../src/hooks/DeviceOrientation';
15
+ import { WebsocketStatus } from '../WebsocketStatus'
15
16
 
16
17
  const MessagesOptionUI = (props: MessagesOptionParams) => {
17
18
  const {
@@ -163,7 +164,7 @@ const MessagesOptionUI = (props: MessagesOptionParams) => {
163
164
  <View style={styles.header}>
164
165
  <OText style={styles.title}>{t('MESSAGES', 'Messages')}</OText>
165
166
  </View>
166
-
167
+ <WebsocketStatus />
167
168
  <FiltersTab>
168
169
  <TabsContainer width={dimensions.width - 42}>
169
170
  {tabs.map((tab: any) => (
@@ -4,7 +4,10 @@ import {
4
4
  View,
5
5
  StyleSheet,
6
6
  Dimensions,
7
- TouchableOpacity
7
+ TouchableOpacity,
8
+ NativeModules,
9
+ PermissionsAndroid,
10
+ Platform
8
11
  } from 'react-native';
9
12
  import { useTheme } from 'styled-components/native'
10
13
  import moment from 'moment'
@@ -16,7 +19,10 @@ import {
16
19
  useApi,
17
20
  useEvent,
18
21
  useLanguage,
19
- useSession
22
+ useSession,
23
+ useConfig,
24
+ useToast,
25
+ ToastType
20
26
  } from 'ordering-components/native'
21
27
 
22
28
  import { OIcon, OText } from '../shared'
@@ -31,26 +37,47 @@ const SoundPlayerComponent = (props: any) => {
31
37
 
32
38
  const theme = useTheme()
33
39
  const [count, setCount] = useState(0);
34
-
40
+ const [isEnabledReadStorage, setIsEnabledReadStorage] = useState(true)
35
41
  const URL_SOUND = 'https://d33aymufw4jvwf.cloudfront.net/notification.mp3' ?? theme.sounds.notification
36
42
 
37
43
  useEffect(() => {
38
44
  const id = setInterval(() => setCount(count + 1), 2500)
39
45
 
40
46
  const playSound = async () => {
41
- SoundPlayer.playUrl(URL_SOUND)
42
- await new Promise(resolve => setTimeout(resolve, DELAY_SOUND))
43
- SoundPlayer.stop()
47
+ try {
48
+ SoundPlayer.playUrl(URL_SOUND)
49
+ await new Promise(resolve => setTimeout(resolve, DELAY_SOUND))
50
+ SoundPlayer.stop()
51
+ } catch (err: any) {
52
+ console.log('Sound Error - ', err.message)
53
+ }
54
+ }
55
+ if (NativeModules?.RNSoundPlayer?.playUrl && typeof URL_SOUND === 'string' && isEnabledReadStorage) {
56
+ playSound()
44
57
  }
45
-
46
- playSound()
47
58
 
48
59
  return () => {
49
- SoundPlayer.stop()
50
60
  clearInterval(id);
61
+ try {
62
+ SoundPlayer.stop()
63
+ } catch (err: any) {
64
+ console.log('Sound Error - ', err.message)
65
+ }
51
66
  }
52
- }, [count])
67
+ }, [count, isEnabledReadStorage])
53
68
 
69
+ useEffect(() => {
70
+ const checkSoundMedia = async () => {
71
+ if (Platform.OS === 'android') {
72
+ const enabled = await PermissionsAndroid.check(PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE)
73
+ setIsEnabledReadStorage(enabled)
74
+ } else {
75
+ setIsEnabledReadStorage(true)
76
+ }
77
+ }
78
+ // checkSoundMedia()
79
+
80
+ }, [])
54
81
  return (
55
82
  <Modal
56
83
  animationType='slide'
@@ -90,37 +117,50 @@ const SoundPlayerComponent = (props: any) => {
90
117
  }
91
118
 
92
119
  const NewOrderNotificationUI = (props: any) => {
93
- const { isBusinessApp, evtList } = props
94
-
120
+ const { isBusinessApp, evtList, orderStatus } = props
121
+ const [, t] = useLanguage()
95
122
  const [events] = useEvent()
96
123
  const [{ user, token }] = useSession()
97
124
  const [ordering] = useApi()
125
+ const [, { showToast }] = useToast()
98
126
  const { getCurrentLocation } = useLocation()
99
127
  const [currentEvent, setCurrentEvent] = useState<any>(null)
100
128
 
101
- const handleEventNotification = async (evtType: number, value: any) => {
129
+ const handleEventNotification = async (evtType: number, value: any, orderStatus?: any) => {
102
130
  if (value?.driver) {
103
131
  try {
104
132
  const location = await getCurrentLocation()
133
+ if (!location?.latitude || !location?.longitude) {
134
+ showToast(t('ERROR_UPDATING_COORDS', 'Error updating coords'), ToastType.Error)
135
+ return
136
+ }
105
137
  await fetch(`${ordering.root}/users/${user.id}/locations`, {
106
138
  method: 'POST',
107
139
  body: JSON.stringify({
108
- location: JSON.stringify({ location: `{lat: ${location.latitude}, lng: ${location.longitude}}` })
140
+ location: JSON.stringify({
141
+ location: `{
142
+ lat: ${location.latitude},
143
+ lng: ${location.longitude}
144
+ }`
145
+ })
109
146
  }),
110
- headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${token}` }
147
+ headers: {
148
+ 'Content-Type': 'application/json',
149
+ Authorization: `Bearer ${token}`
150
+ }
111
151
  })
112
152
  } catch { }
113
153
  const duration = moment.duration(moment().diff(moment.utc(value?.last_driver_assigned_at)))
114
154
  const assignedSecondsDiff = duration.asSeconds()
115
155
  if (assignedSecondsDiff < 5 && !isBusinessApp && !value?.logistic_status) {
116
- setCurrentEvent({ evt: 2, orderId: value?.id })
156
+ setCurrentEvent({ evt: 2, orderId: value?.id ?? value?.order_id })
117
157
  }
118
158
  }
119
- if (evtType === 3 || value?.author_id === user.id) return
159
+ if ((!orderStatus.includes(value.status) && evtType !== 1 && isBusinessApp) || value?.author_id === user.id) return
120
160
  setCurrentEvent({
121
161
  evt: evtType,
122
162
  orderId: value?.driver
123
- ? value?.order_id
163
+ ? value?.order_id ?? value?.id
124
164
  : evtList(currentEvent)[evtType].event === 'messages'
125
165
  ? value?.order?.id
126
166
  : value?.order_id ?? value?.id
@@ -128,11 +168,11 @@ const NewOrderNotificationUI = (props: any) => {
128
168
  }
129
169
 
130
170
  useEffect(() => {
131
- events.on('message_added_notification', (o: any) => handleEventNotification(1, o))
132
- events.on('order_added_notification', (o: any) => handleEventNotification(2, o))
133
- events.on('order_updated_notification', (o: any) => handleEventNotification(3, o))
134
- events.on('request_register_notification', (o: any) => handleEventNotification(2, o))
135
- events.on('request_update_notification', (o: any) => handleEventNotification(3, o))
171
+ events.on('message_added_notification', (o: any) => handleEventNotification(1, o, orderStatus))
172
+ events.on('order_added_notification', (o: any) => handleEventNotification(2, o, orderStatus))
173
+ events.on('order_updated_notification', (o: any) => handleEventNotification(3, o, orderStatus))
174
+ events.on('request_register_notification', (o: any) => handleEventNotification(2, o, orderStatus))
175
+ events.on('request_update_notification', (o: any) => handleEventNotification(3, o, orderStatus))
136
176
 
137
177
  return () => {
138
178
  events.off('message_added_notification', (o: any) => handleEventNotification(1, o))
@@ -141,7 +181,7 @@ const NewOrderNotificationUI = (props: any) => {
141
181
  events.off('request_register_notification', (o: any) => handleEventNotification(2, o))
142
182
  events.off('request_update_notification', (o: any) => handleEventNotification(3, o))
143
183
  }
144
- }, [])
184
+ }, [orderStatus])
145
185
 
146
186
  useEffect(() => {
147
187
  return () => setCurrentEvent(null)
@@ -149,13 +189,13 @@ const NewOrderNotificationUI = (props: any) => {
149
189
 
150
190
  return (
151
191
  <>
152
- {!!currentEvent ? (
192
+ {!!currentEvent && (
153
193
  <SoundPlayerComponent
154
194
  evtList={evtList}
155
195
  currentEvent={currentEvent}
156
196
  handleCloseEvents={() => setCurrentEvent(null)}
157
197
  />
158
- ) : null}
198
+ )}
159
199
  </>
160
200
  )
161
201
  };
@@ -4,8 +4,10 @@ import {
4
4
  View,
5
5
  TouchableOpacity,
6
6
  ActivityIndicator,
7
+ Alert,
7
8
  } from 'react-native';
8
9
  import Clipboard from '@react-native-clipboard/clipboard';
10
+ import { StarPRNT } from 'react-native-star-prnt';
9
11
  import { Placeholder, PlaceholderLine, Fade } from 'rn-placeholder';
10
12
  import { useTheme } from 'styled-components/native';
11
13
  import {
@@ -35,6 +37,8 @@ import CountryPicker from 'react-native-country-picker-modal';
35
37
  import { NotFoundSource } from '../NotFoundSource';
36
38
  import { OrderHeaderComponent } from './OrderHeaderComponent';
37
39
  import { OrderContentComponent } from './OrderContentComponent';
40
+ import { _retrieveStoreData } from '../../providers/StoreUtil'
41
+ import { usePrinterCommands } from './usePrinterCommands'
38
42
 
39
43
  export const OrderDetailsUI = (props: OrderDetailsParams) => {
40
44
  const {
@@ -44,7 +48,6 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
44
48
  readMessages,
45
49
  messagesReadList,
46
50
  handleAssignDriver,
47
- handleChangeOrderStatus,
48
51
  isFromCheckout,
49
52
  driverLocation,
50
53
  actions,
@@ -57,6 +60,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
57
60
  const [{ parsePrice, parseNumber, parseDate }] = useUtils();
58
61
  const [{ user, token }] = useSession();
59
62
  const [{ configs }] = useConfig();
63
+ const { generateCommands } = usePrinterCommands()
60
64
  const [, { showToast }] = useToast();
61
65
  const [unreadAlert, setUnreadAlert] = useState({
62
66
  business: false,
@@ -70,6 +74,10 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
70
74
  const [openModalForAccept, setOpenModalForAccept] = useState(false);
71
75
  const [openModalForMapView, setOpenModalForMapView] = useState(false);
72
76
  const [isDriverModalVisible, setIsDriverModalVisible] = useState(false);
77
+ const [printerSettings, setPrinterSettings] = useState<any>('')
78
+ const [autoPrintEnabled, setAutoPrintEnabled] = useState<boolean>(false)
79
+
80
+ const orderToComplete = [4,20,21]
73
81
 
74
82
  if (order?.status === 7 || order?.status === 4) {
75
83
  if (drivers?.length > 0 && drivers) {
@@ -120,6 +128,16 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
120
128
  }
121
129
  }
122
130
 
131
+ const handleChangeOrderStatus = async (status: any, isAcceptOrReject: any = {}) => {
132
+ if (props.handleChangeOrderStatus) {
133
+ const order: any = await props.handleChangeOrderStatus(status, isAcceptOrReject)
134
+
135
+ if (order?.status === 7 && autoPrintEnabled && printerSettings) {
136
+ handleViewSummaryOrder()
137
+ }
138
+ }
139
+ }
140
+
123
141
  const getFormattedSubOptionName = ({ quantity, name, position, price }: any) => {
124
142
  if (name !== 'No') {
125
143
  const pos = position && position !== 'whole' ? `(${t(position.toUpperCase(), position)})` : '';
@@ -291,7 +309,28 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
291
309
  setOpenModalForAccept(true);
292
310
  };
293
311
 
312
+ const printAction = async (printerSettings: any, commands: any, showAlert: boolean = true) => {
313
+ try {
314
+ var printResult = await StarPRNT.print(printerSettings?.emulation, commands, printerSettings?.portName);
315
+ showAlert && showToast(ToastType.Info, t('ORDER_PRINTED_SUCCESS', 'Order printed'), 1000)
316
+ } catch (e) {
317
+ showAlert && showToast(ToastType.Error, t('ORDER_PRINTED_FAILED', 'Order not printed, connection failed'), 1000)
318
+ }
319
+ }
320
+
294
321
  const handleViewSummaryOrder = () => {
322
+ if (printerSettings) {
323
+ printerSettings.map((printer: any, idx: number) => {
324
+ const commands: any = generateCommands({
325
+ ...order,
326
+ orderStatus: getOrderStatus(order?.status, t)?.value
327
+ }, printer?.printMode)
328
+ commands.push({ appendCutPaper: StarPRNT.CutPaperAction.PartialCutWithFeed })
329
+
330
+ printAction(printer, commands, idx === printerSettings.length - 1)
331
+ })
332
+ return
333
+ }
295
334
  navigation?.navigate &&
296
335
  navigation.navigate('OrderSummary', {
297
336
  order,
@@ -372,6 +411,17 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
372
411
  }
373
412
  }, [driverLocation]);
374
413
 
414
+ useEffect(() => {
415
+ const getStorageData = async () => {
416
+ const printers = await _retrieveStoreData('printers')
417
+ const autoPrint = await _retrieveStoreData('auto_print_after_accept_order')
418
+ setPrinterSettings(printers?.length && printers)
419
+ setAutoPrintEnabled(!!autoPrint)
420
+ }
421
+
422
+ getStorageData()
423
+ }, [])
424
+
375
425
  const styles = StyleSheet.create({
376
426
  driverOff: {
377
427
  backgroundColor: theme.colors.notAvailable,
@@ -607,7 +657,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
607
657
  disabled={loading}
608
658
  />
609
659
  )}
610
- {order?.status === 4 && ![1].includes(order?.delivery_type) && (
660
+ {orderToComplete.includes(order?.status) && ![1].includes(order?.delivery_type) && (
611
661
  <FloatingButton
612
662
  btnText={t(
613
663
  'ORDER_NOT_PICKEDUP_BY_CUSTOMER',
@@ -64,8 +64,11 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
64
64
 
65
65
  const { order } = props.order
66
66
 
67
+ const hideTimer = configs?.hidden_driver_eta_time?.value === '1'
67
68
  const isAllowedDriverRejectOrder = configs?.allow_driver_reject_order?.value === '1'
68
69
  const isHideRejectButtons = configs?.reject_orders_enabled && configs?.reject_orders_enabled?.value !== '1'
70
+ const isEnabledOrderNotReady = configs?.order_not_ready_enabled?.value === '1'
71
+ const isEnabledFailedPickupDriver = configs?.failed_pickup_by_driver_enabled?.value === '1'
69
72
  const theme = useTheme();
70
73
  const [, t] = useLanguage();
71
74
  const [session] = useSession();
@@ -115,6 +118,10 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
115
118
  readMessages && readMessages();
116
119
  };
117
120
 
121
+ const goToPermissionPage = () => {
122
+ navigation.navigate('RequestPermissions')
123
+ }
124
+
118
125
  const handleOpenMapView = async () => {
119
126
  if (!isGrantedPermissions) {
120
127
  navigation.navigate('RequestPermissions')
@@ -389,7 +396,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
389
396
  }, [props.order?.loading]);
390
397
 
391
398
  useEffect(() => {
392
- if (!order?.driver_id && session?.user?.level === 4) {
399
+ if (order?.driver_id === null && session?.user?.level === 4) {
393
400
  setAlertState({
394
401
  open: true,
395
402
  content: [
@@ -421,6 +428,16 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
421
428
  forceUpdate && handleViewActionOrder && handleViewActionOrder(forceUpdate === 9 ? 'forcePickUp' : 'forceDelivery')
422
429
  }, [forceUpdate])
423
430
 
431
+ useEffect(() => {
432
+ if (!!props.order?.error || props.order?.error?.length > 0) {
433
+ showToast(ToastType.Error,
434
+ props.order?.error?.[0] ||
435
+ props.order?.error ||
436
+ t('NETWORK_ERROR', 'Network Error'),
437
+ 5000)
438
+ }
439
+ }, [props.order?.error])
440
+
424
441
  const styles = StyleSheet.create({
425
442
  btnPickUp: {
426
443
  borderWidth: 0,
@@ -471,20 +488,20 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
471
488
  isOrderGroup={isOrderGroup}
472
489
  lastOrder={lastOrder}
473
490
  />
474
- {(order?.status === 8 || order?.status === 18) && order?.delivery_type === 1 && (
491
+ {(order?.status === 8 || order?.status === 18) && order?.delivery_type === 1 && !props.order?.loading && (
475
492
  <Pickup>
476
493
  <OButton
477
494
  style={styles.btnPickUp}
478
495
  textStyle={{ color: theme.colors.primary }}
479
496
  text={t('ARRIVED_TO_BUSINESS', 'Arrived to bussiness')}
480
497
  onClick={() =>
481
- handleChangeOrderStatus && handleChangeOrderStatus(3)
498
+ handleChangeOrderStatus && isGrantedPermissions ? handleChangeOrderStatus(3) : goToPermissionPage()
482
499
  }
483
500
  imgLeftStyle={{ tintColor: theme.colors.backArrow }}
484
501
  />
485
502
  </Pickup>
486
503
  )}
487
- {order?.status === 3 && order?.delivery_type === 1 && !isHideRejectButtons && (
504
+ {order?.status === 3 && order?.delivery_type === 1 && !isHideRejectButtons && isEnabledOrderNotReady && !props.order?.loading && (
488
505
  <View style={{ paddingVertical: 20, marginBottom: 20 }}>
489
506
  <OButton
490
507
  style={styles.btnPickUp}
@@ -570,7 +587,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
570
587
  btnText={t('PICKUP_FAILED', 'Pickup failed')}
571
588
  isSecondaryBtn={false}
572
589
  secondButtonClick={() =>
573
- handleChangeOrderStatus && handleChangeOrderStatus(9)
590
+ handleChangeOrderStatus && isGrantedPermissions ? handleChangeOrderStatus(9) : goToPermissionPage()
574
591
  }
575
592
  firstButtonClick={() =>
576
593
  handleViewActionOrder && handleViewActionOrder('pickupFailed')
@@ -579,8 +596,8 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
579
596
  secondButton={true}
580
597
  firstColorCustom={theme.colors.red}
581
598
  secondColorCustom={theme.colors.green}
582
- widthButton={isHideRejectButtons ? '100%': '45%'}
583
- isHideRejectButtons={isHideRejectButtons}
599
+ widthButton={isHideRejectButtons || !isEnabledFailedPickupDriver ? '100%' : '45%'}
600
+ isHideRejectButtons={isHideRejectButtons || !isEnabledFailedPickupDriver}
584
601
  />
585
602
  )}
586
603
  {(validStatusComplete.includes(order?.status)) && (
@@ -590,7 +607,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
590
607
  btnText={t('DELIVERY_FAILED', 'Delivery Failed')}
591
608
  isSecondaryBtn={false}
592
609
  secondButtonClick={() =>
593
- handleChangeOrderStatus && handleChangeOrderStatus(11)
610
+ handleChangeOrderStatus && isGrantedPermissions ? handleChangeOrderStatus(11) : goToPermissionPage()
594
611
  }
595
612
  firstButtonClick={() =>
596
613
  handleViewActionOrder && handleViewActionOrder('deliveryFailed')
@@ -599,22 +616,23 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
599
616
  secondButton={true}
600
617
  firstColorCustom={theme.colors.red}
601
618
  secondColorCustom={theme.colors.green}
602
- widthButton={isHideRejectButtons ? '100%': '45%'}
619
+ widthButton={isHideRejectButtons ? '100%' : '45%'}
603
620
  isHideRejectButtons={isHideRejectButtons}
604
621
  />
605
622
  </>
606
623
  )}
607
624
  {showFloatButtonsAcceptOrReject[order?.status] && (
608
625
  <FloatingButton
626
+ disabled={props.order?.loading}
609
627
  btnText={t('REJECT', 'Reject')}
610
628
  isSecondaryBtn={false}
611
- secondButtonClick={() => (order?.isLogistic && (order?.order_group || logisticOrderStatus.includes(order?.status))) ? handleAcceptLogisticOrder(order) : handleViewActionOrder('accept')}
629
+ secondButtonClick={() => hideTimer ? handleChangeOrderStatus && handleChangeOrderStatus(8) : (order?.isLogistic && (order?.order_group || logisticOrderStatus.includes(order?.status))) ? handleAcceptLogisticOrder(order) : handleViewActionOrder('accept')}
612
630
  firstButtonClick={() => order?.isLogistic && (order?.order_group || logisticOrderStatus.includes(order?.status)) ? handleRejectLogisticOrder() : handleViewActionOrder('reject')}
613
631
  secondBtnText={t('ACCEPT', 'Accept')}
614
632
  secondButton={true}
615
633
  firstColorCustom={theme.colors.red}
616
634
  secondColorCustom={theme.colors.green}
617
- widthButton={isHideRejectButtons ? '100%': '45%'}
635
+ widthButton={isHideRejectButtons ? '100%' : '45%'}
618
636
  isHideRejectButtons={isHideRejectButtons}
619
637
  />
620
638
  )}
@@ -680,6 +698,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
680
698
  actions={actions}
681
699
  orderTitle={orderTitle}
682
700
  appTitle={appTitle}
701
+ isLoadingOrder={props.order?.loading}
683
702
  />
684
703
  </OModal>
685
704
  )}