ordering-ui-react-native 0.22.47 → 0.22.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.
- package/package.json +6 -8
- package/src/DeliveryApp.tsx +1 -1
- package/src/components/BusinessesListing/index.tsx +1 -1
- package/src/components/Checkout/index.tsx +40 -39
- package/src/components/VerifyPhone/styles.tsx +1 -2
- package/src/context/OfflineActions/index.tsx +236 -0
- package/src/providers/AlertProvider.tsx +3 -1
- package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +9 -6
- package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +1 -0
- package/themes/business/src/components/BusinessController/index.tsx +8 -3
- package/themes/business/src/components/BusinessProductList/index.tsx +3 -2
- package/themes/business/src/components/Chat/index.tsx +15 -3
- package/themes/business/src/components/DriverMap/index.tsx +44 -33
- package/themes/business/src/components/FloatingButton/index.tsx +3 -2
- package/themes/business/src/components/LanguageSelector/index.tsx +1 -1
- package/themes/business/src/components/LoginForm/index.tsx +123 -98
- package/themes/business/src/components/LogoutButton/index.tsx +13 -4
- package/themes/business/src/components/MapView/index.tsx +42 -22
- package/themes/business/src/components/NewOrderNotification/index.tsx +38 -19
- package/themes/business/src/components/OrderDetails/Business.tsx +88 -20
- package/themes/business/src/components/OrderDetails/Delivery.tsx +134 -53
- package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +155 -45
- package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +51 -28
- package/themes/business/src/components/OrderDetails/styles.tsx +39 -3
- package/themes/business/src/components/OrderDetails/usePrinterCommands.tsx +17 -16
- package/themes/business/src/components/OrderDetailsLogistic/index.tsx +3 -2
- package/themes/business/src/components/OrderSummary/index.tsx +271 -176
- package/themes/business/src/components/OrdersListManager/index.tsx +13 -1
- package/themes/business/src/components/OrdersOption/index.tsx +332 -231
- package/themes/business/src/components/OrdersOption/styles.tsx +14 -0
- package/themes/business/src/components/PreviousMessages/index.tsx +26 -3
- package/themes/business/src/components/PreviousOrders/OrderItem.tsx +30 -18
- package/themes/business/src/components/PreviousOrders/index.tsx +74 -66
- package/themes/business/src/components/PreviousOrders/styles.tsx +2 -1
- package/themes/business/src/components/PrinterEdition/MessageAlert.tsx +33 -0
- package/themes/business/src/components/PrinterEdition/index.tsx +143 -75
- package/themes/business/src/components/PrinterEdition/printerList.tsx +23 -0
- package/themes/business/src/components/PrinterSettings/index.tsx +1 -1
- package/themes/business/src/components/ProductItemAccordion/index.tsx +3 -2
- package/themes/business/src/components/ReviewCustomer/index.tsx +2 -0
- package/themes/business/src/components/StoresList/index.tsx +2 -2
- package/themes/business/src/components/UserProfileForm/index.tsx +48 -10
- package/themes/business/src/components/UserProfileForm/styles.tsx +7 -0
- package/themes/business/src/components/WebsocketStatus/index.tsx +2 -2
- package/themes/business/src/components/shared/OTextarea.tsx +8 -9
- package/themes/business/src/config/currency.tsx +1010 -0
- package/themes/business/src/hooks/useLocation.tsx +16 -12
- package/themes/business/src/layouts/SafeAreaContainer.tsx +35 -19
- package/themes/business/src/types/index.tsx +22 -7
- package/themes/business/src/utils/index.tsx +28 -3
- package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
- package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
- package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
- package/themes/kiosk/src/components/Checkout/index.tsx +9 -5
- package/themes/kiosk/src/components/CustomerName/index.tsx +1 -1
- package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
- package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
- package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
- package/themes/kiosk/src/components/PaymentOptions/index.tsx +121 -57
- package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
- package/themes/original/index.tsx +9 -1
- package/themes/original/src/components/AddressForm/index.tsx +19 -19
- package/themes/original/src/components/AddressList/index.tsx +0 -13
- package/themes/original/src/components/AppleLogin/index.tsx +4 -4
- package/themes/original/src/components/BusinessBasicInformation/index.tsx +1 -1
- package/themes/original/src/components/BusinessItemAccordion/index.tsx +14 -6
- package/themes/original/src/components/BusinessListingSearch/BusinessSearchFooter.tsx +103 -92
- package/themes/original/src/components/BusinessListingSearch/BusinessSearchHeader.tsx +8 -6
- package/themes/original/src/components/BusinessListingSearch/index.tsx +1 -2
- package/themes/original/src/components/BusinessPreorder/index.tsx +46 -28
- package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/index.tsx +73 -70
- package/themes/original/src/components/BusinessProductsList/index.tsx +6 -7
- package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
- package/themes/original/src/components/BusinessProductsListing/index.tsx +10 -6
- package/themes/original/src/components/BusinessTypeFilter/index.tsx +9 -8
- package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +2 -1
- package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -1
- package/themes/original/src/components/BusinessesListing/index.tsx +0 -1
- package/themes/original/src/components/Cart/index.tsx +49 -15
- package/themes/original/src/components/CartContent/index.tsx +2 -4
- package/themes/original/src/components/Checkout/index.tsx +109 -88
- package/themes/original/src/components/CitiesControl/index.tsx +0 -3
- package/themes/original/src/components/CouponControl/index.tsx +1 -3
- package/themes/original/src/components/DriverTips/index.tsx +1 -3
- package/themes/original/src/components/Favorite/index.tsx +1 -10
- package/themes/original/src/components/FavoriteList/index.tsx +0 -1
- package/themes/original/src/components/ForgotPasswordForm/index.tsx +5 -12
- package/themes/original/src/components/GiftCard/GiftCardUI/index.tsx +15 -17
- package/themes/original/src/components/GiftCard/PurchaseGiftCard/index.tsx +3 -7
- package/themes/original/src/components/GiftCard/RedeemGiftCard/index.tsx +24 -32
- package/themes/original/src/components/GiftCard/SendGiftCard/index.tsx +7 -9
- package/themes/original/src/components/GiftCard/VerticalGiftCardOrdersLayout/index.tsx +11 -12
- package/themes/original/src/components/GoogleMap/index.tsx +39 -18
- package/themes/original/src/components/Help/index.tsx +0 -5
- package/themes/original/src/components/HelpAccountAndPayment/index.tsx +0 -5
- package/themes/original/src/components/HelpGuide/index.tsx +0 -5
- package/themes/original/src/components/HelpOrder/index.tsx +0 -5
- package/themes/original/src/components/HighestRatedBusinesses/index.tsx +1 -1
- package/themes/original/src/components/Home/index.tsx +35 -19
- package/themes/original/src/components/LoginForm/Otp/index.tsx +0 -3
- package/themes/original/src/components/LoginForm/index.tsx +12 -14
- package/themes/original/src/components/MessageListing/index.tsx +1 -6
- package/themes/original/src/components/Messages/index.tsx +20 -13
- package/themes/original/src/components/MomentOption/TimeListItem.tsx +56 -0
- package/themes/original/src/components/MomentOption/index.tsx +73 -59
- package/themes/original/src/components/MomentSelector/index.tsx +5 -2
- package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +7 -4
- package/themes/original/src/components/MultiCheckout/index.tsx +55 -27
- package/themes/original/src/components/MultiOrdersDetails/index.tsx +1 -0
- package/themes/original/src/components/MyOrders/index.tsx +2 -7
- package/themes/original/src/components/NavBar/index.tsx +7 -6
- package/themes/original/src/components/NetworkError/index.tsx +0 -5
- package/themes/original/src/components/NotFoundSource/index.tsx +0 -3
- package/themes/original/src/components/Notifications/index.tsx +0 -5
- package/themes/original/src/components/OrderDetails/OrderEta.tsx +4 -3
- package/themes/original/src/components/OrderDetails/OrderHistory.tsx +16 -11
- package/themes/original/src/components/OrderDetails/index.tsx +44 -21
- package/themes/original/src/components/OrderDetails/styles.tsx +0 -1
- package/themes/original/src/components/OrderProgress/index.tsx +4 -3
- package/themes/original/src/components/OrderSummary/index.tsx +32 -11
- package/themes/original/src/components/OrderTypeSelector/index.tsx +7 -11
- package/themes/original/src/components/OrdersOption/index.tsx +3 -6
- package/themes/original/src/components/PaymentOptionStripe/index.tsx +0 -5
- package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
- package/themes/original/src/components/PaymentOptions/index.tsx +462 -461
- package/themes/original/src/components/PhoneInputNumber/index.tsx +92 -7
- package/themes/original/src/components/PlaceSpot/index.tsx +1 -3
- package/themes/original/src/components/PreviousOrders/index.tsx +1 -4
- package/themes/original/src/components/ProductForm/ActionButton.tsx +7 -12
- package/themes/original/src/components/ProductItemAccordion/index.tsx +28 -37
- package/themes/original/src/components/ProductOptionSubOption/index.tsx +16 -8
- package/themes/original/src/components/ProfessionalProfile/index.tsx +4 -5
- package/themes/original/src/components/Promotions/index.tsx +2 -7
- package/themes/original/src/components/ReviewDriver/index.tsx +1 -6
- package/themes/original/src/components/ReviewOrder/index.tsx +2 -7
- package/themes/original/src/components/ReviewProducts/index.tsx +1 -6
- package/themes/original/src/components/ReviewTrigger/index.tsx +2 -2
- package/themes/original/src/components/ServiceForm/index.tsx +52 -54
- package/themes/original/src/components/Sessions/index.tsx +3 -8
- package/themes/original/src/components/SignupForm/index.tsx +44 -37
- package/themes/original/src/components/SingleOrderCard/index.tsx +7 -5
- package/themes/original/src/components/SingleProductCard/index.tsx +3 -4
- package/themes/original/src/components/SingleProductCard/styles.tsx +0 -3
- package/themes/original/src/components/StripeCardForm/index.tsx +0 -3
- package/themes/original/src/components/StripeCardsList/index.tsx +16 -3
- package/themes/original/src/components/StripeElementsForm/index.tsx +8 -4
- package/themes/original/src/components/StripeElementsForm/naked.tsx +1 -1
- package/themes/original/src/components/StripeRedirectForm/index.tsx +0 -3
- package/themes/original/src/components/TaxInformation/index.tsx +3 -2
- package/themes/original/src/components/UpsellingProducts/UpsellingContent.tsx +8 -5
- package/themes/original/src/components/UserDetails/index.tsx +17 -16
- package/themes/original/src/components/UserFormDetails/index.tsx +113 -73
- package/themes/original/src/components/UserProfile/index.tsx +9 -1
- package/themes/original/src/components/UserProfileForm/index.tsx +0 -5
- package/themes/original/src/components/UserVerification/index.tsx +18 -5
- package/themes/original/src/components/Wallets/index.tsx +1 -3
- package/themes/original/src/components/WebsocketStatus/index.tsx +1 -4
- package/themes/original/src/components/shared/OAlert.tsx +2 -1
- package/themes/original/src/components/shared/OButton.tsx +5 -4
- package/themes/original/src/components/shared/OInput.tsx +4 -8
- package/themes/original/src/components/shared/OModal.tsx +7 -2
- package/themes/original/src/types/index.tsx +12 -4
- package/themes/original/src/utils/index.tsx +29 -0
- package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React, { useState, useEffect, useRef, useCallback } from 'react';
|
|
2
|
-
import { Dimensions, SafeAreaView, StyleSheet, View } from 'react-native';
|
|
2
|
+
import { Dimensions, Platform, SafeAreaView, StyleSheet, View } from 'react-native';
|
|
3
3
|
import { useFocusEffect } from '@react-navigation/native'
|
|
4
4
|
import MapView, {
|
|
5
5
|
PROVIDER_GOOGLE,
|
|
@@ -24,6 +24,7 @@ const MapViewComponent = (props: MapViewParams) => {
|
|
|
24
24
|
setDriverLocation,
|
|
25
25
|
onNavigationRedirect,
|
|
26
26
|
getBusinessLocations,
|
|
27
|
+
isDeliveryApp
|
|
27
28
|
} = props;
|
|
28
29
|
|
|
29
30
|
const theme = useTheme();
|
|
@@ -53,16 +54,23 @@ const MapViewComponent = (props: MapViewParams) => {
|
|
|
53
54
|
|
|
54
55
|
const fitCoordinates = (location?: any) => {
|
|
55
56
|
if (mapRef.current) {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
57
|
+
const isSendCoordinates =
|
|
58
|
+
location &&
|
|
59
|
+
userLocation &&
|
|
60
|
+
location.latitude !== userLocation.latitude &&
|
|
61
|
+
location.longitude !== userLocation.longitude &&
|
|
62
|
+
location.latitude !== 0 &&
|
|
63
|
+
location.longitude !== 0 &&
|
|
64
|
+
userLocation.latitude !== 0 &&
|
|
65
|
+
userLocation.longitude !== 0
|
|
66
|
+
|
|
67
|
+
isSendCoordinates && mapRef.current.fitToCoordinates(
|
|
68
|
+
[location, userLocation].map(_location => ({
|
|
69
|
+
latitude: _location.latitude,
|
|
70
|
+
longitude: _location.longitude
|
|
71
|
+
})),
|
|
64
72
|
{
|
|
65
|
-
edgePadding: { top: 120, right: 120, bottom: 120, left: 120 }
|
|
73
|
+
edgePadding: { top: 120, right: 120, bottom: 120, left: 120 }
|
|
66
74
|
},
|
|
67
75
|
);
|
|
68
76
|
}
|
|
@@ -133,8 +141,20 @@ const MapViewComponent = (props: MapViewParams) => {
|
|
|
133
141
|
const RenderMarker = ({ marker, customer, orderIds }: { marker: any, customer?: boolean, orderIds?: Array<number> }) => {
|
|
134
142
|
const markerRef = useRef<any>()
|
|
135
143
|
|
|
136
|
-
let coordinateLat = (customer
|
|
137
|
-
|
|
144
|
+
let coordinateLat = (customer
|
|
145
|
+
? typeof marker?.customer?.location?.lat === 'number' && !Number.isNaN(marker?.customer?.location?.lat)
|
|
146
|
+
? marker?.customer?.location?.lat
|
|
147
|
+
: 0
|
|
148
|
+
: typeof marker?.business?.location?.lat === 'number' && !Number.isNaN(marker?.business?.location?.lat)
|
|
149
|
+
? marker?.business?.location?.lat
|
|
150
|
+
: 0) ?? (initialPosition?.latitude || 0)
|
|
151
|
+
let coordinateLng = (customer
|
|
152
|
+
? typeof marker?.customer?.location?.lng === 'number' && !Number.isNaN(marker?.customer?.location?.lng)
|
|
153
|
+
? marker?.customer?.location?.lng
|
|
154
|
+
: 0
|
|
155
|
+
: typeof marker?.business?.location?.lng === 'number' && !Number.isNaN(marker?.business?.location?.lng)
|
|
156
|
+
? marker?.business?.location?.lng
|
|
157
|
+
: 0) ?? (initialPosition?.longitude || 0)
|
|
138
158
|
|
|
139
159
|
useEffect(() => {
|
|
140
160
|
if (
|
|
@@ -154,11 +174,11 @@ const MapViewComponent = (props: MapViewParams) => {
|
|
|
154
174
|
}}
|
|
155
175
|
onPress={() =>
|
|
156
176
|
setLocationSelected({
|
|
157
|
-
latitude:
|
|
158
|
-
longitude:
|
|
177
|
+
latitude: coordinateLat,
|
|
178
|
+
longitude: coordinateLng
|
|
159
179
|
})
|
|
160
180
|
}
|
|
161
|
-
ref={(ref) => markerRef.current = ref}
|
|
181
|
+
ref={(ref: any) => markerRef.current = ref}
|
|
162
182
|
>
|
|
163
183
|
<Icon
|
|
164
184
|
name="map-marker"
|
|
@@ -231,22 +251,22 @@ const MapViewComponent = (props: MapViewParams) => {
|
|
|
231
251
|
return (
|
|
232
252
|
<SafeAreaView style={{ flex: 1 }}>
|
|
233
253
|
<View style={{ flex: 1 }}>
|
|
234
|
-
{!isLoadingBusinessMarkers && isFocused && (
|
|
254
|
+
{(isDeliveryApp || (!isLoadingBusinessMarkers && isFocused)) && (
|
|
235
255
|
<View style={{ flex: 1 }}>
|
|
236
256
|
<MapView
|
|
237
257
|
ref={mapRef}
|
|
238
258
|
provider={PROVIDER_GOOGLE}
|
|
239
259
|
initialRegion={{
|
|
240
|
-
latitude: initialPosition?.latitude,
|
|
241
|
-
longitude: initialPosition?.longitude,
|
|
260
|
+
latitude: initialPosition?.latitude || 0,
|
|
261
|
+
longitude: initialPosition?.longitude || 0,
|
|
242
262
|
latitudeDelta: haveOrders ? 0.01 : 0.1,
|
|
243
263
|
longitudeDelta: haveOrders ? 0.01 * ASPECT_RATIO : 0.1 * ASPECT_RATIO,
|
|
244
264
|
}}
|
|
245
265
|
style={{ flex: 1 }}
|
|
246
266
|
zoomTapEnabled
|
|
247
267
|
zoomEnabled
|
|
248
|
-
zoomControlEnabled
|
|
249
|
-
cacheEnabled
|
|
268
|
+
zoomControlEnabled={!(isDeliveryApp && Platform.OS === 'android')}
|
|
269
|
+
cacheEnabled={(isDeliveryApp && Platform.OS === 'android' && isFocused) || Platform.OS === 'ios' || !isDeliveryApp}
|
|
250
270
|
moveOnMarkerPress
|
|
251
271
|
onTouchStart={() => (following.current = false)}
|
|
252
272
|
>
|
|
@@ -268,8 +288,8 @@ const MapViewComponent = (props: MapViewParams) => {
|
|
|
268
288
|
))}
|
|
269
289
|
<Marker
|
|
270
290
|
coordinate={{
|
|
271
|
-
latitude: location.lat,
|
|
272
|
-
longitude: location.lng,
|
|
291
|
+
latitude: typeof location.lat === 'number' && !Number.isNaN(location.lat) ? location.lat : 0,
|
|
292
|
+
longitude: typeof location.lng === 'number' && !Number.isNaN(location.lng) ? location.lng : 0,
|
|
273
293
|
}}
|
|
274
294
|
title={t('YOUR_LOCATION', 'Your Location')}
|
|
275
295
|
>
|
|
@@ -44,17 +44,25 @@ const SoundPlayerComponent = (props: any) => {
|
|
|
44
44
|
const id = setInterval(() => setCount(count + 1), 2500)
|
|
45
45
|
|
|
46
46
|
const playSound = async () => {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
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
|
+
}
|
|
50
54
|
}
|
|
51
55
|
if (NativeModules?.RNSoundPlayer?.playUrl && typeof URL_SOUND === 'string' && isEnabledReadStorage) {
|
|
52
56
|
playSound()
|
|
53
57
|
}
|
|
54
58
|
|
|
55
59
|
return () => {
|
|
56
|
-
SoundPlayer.stop()
|
|
57
60
|
clearInterval(id);
|
|
61
|
+
try {
|
|
62
|
+
SoundPlayer.stop()
|
|
63
|
+
} catch (err: any) {
|
|
64
|
+
console.log('Sound Error - ', err.message)
|
|
65
|
+
}
|
|
58
66
|
}
|
|
59
67
|
}, [count, isEnabledReadStorage])
|
|
60
68
|
|
|
@@ -67,7 +75,7 @@ const SoundPlayerComponent = (props: any) => {
|
|
|
67
75
|
setIsEnabledReadStorage(true)
|
|
68
76
|
}
|
|
69
77
|
}
|
|
70
|
-
checkSoundMedia()
|
|
78
|
+
// checkSoundMedia()
|
|
71
79
|
|
|
72
80
|
}, [])
|
|
73
81
|
return (
|
|
@@ -132,7 +140,8 @@ const NewOrderNotificationUI = (props: any) => {
|
|
|
132
140
|
location: JSON.stringify({
|
|
133
141
|
location: `{
|
|
134
142
|
lat: ${location.latitude},
|
|
135
|
-
lng: ${location.longitude}
|
|
143
|
+
lng: ${location.longitude},
|
|
144
|
+
mock: ${location.mocked}
|
|
136
145
|
}`
|
|
137
146
|
})
|
|
138
147
|
}),
|
|
@@ -144,11 +153,11 @@ const NewOrderNotificationUI = (props: any) => {
|
|
|
144
153
|
} catch { }
|
|
145
154
|
const duration = moment.duration(moment().diff(moment.utc(value?.last_driver_assigned_at)))
|
|
146
155
|
const assignedSecondsDiff = duration.asSeconds()
|
|
147
|
-
if (assignedSecondsDiff < 5 && !isBusinessApp && !value?.logistic_status
|
|
156
|
+
if (assignedSecondsDiff < 5 && !isBusinessApp && !value?.logistic_status) {
|
|
148
157
|
setCurrentEvent({ evt: 2, orderId: value?.id ?? value?.order_id })
|
|
149
158
|
}
|
|
150
159
|
}
|
|
151
|
-
if (!orderStatus.includes(value.status) || value?.author_id === user.id) return
|
|
160
|
+
if ((!orderStatus.includes(value.status) && evtType !== 1 && isBusinessApp && orderStatus?.length > 0) || value?.author_id === user.id) return
|
|
152
161
|
setCurrentEvent({
|
|
153
162
|
evt: evtType,
|
|
154
163
|
orderId: value?.driver
|
|
@@ -160,20 +169,30 @@ const NewOrderNotificationUI = (props: any) => {
|
|
|
160
169
|
}
|
|
161
170
|
|
|
162
171
|
useEffect(() => {
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
172
|
+
const handleEventTypeOne = (o: any) => {
|
|
173
|
+
handleEventNotification(1, o, orderStatus)
|
|
174
|
+
}
|
|
175
|
+
const handleEventTypeTwo = (o: any) => {
|
|
176
|
+
handleEventNotification(2, o, orderStatus)
|
|
177
|
+
}
|
|
178
|
+
const handleEventTypeThree = (o: any) => {
|
|
179
|
+
handleEventNotification(3, o, orderStatus)
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
events.on('message_added_notification', handleEventTypeOne)
|
|
183
|
+
events.on('order_added_notification', handleEventTypeTwo)
|
|
184
|
+
events.on('order_updated_notification', handleEventTypeThree)
|
|
185
|
+
events.on('request_register_notification', handleEventTypeTwo)
|
|
186
|
+
events.on('request_update_notification', handleEventTypeThree)
|
|
168
187
|
|
|
169
188
|
return () => {
|
|
170
|
-
events.off('message_added_notification',
|
|
171
|
-
events.off('order_added_notification',
|
|
172
|
-
events.off('order_updated_notification',
|
|
173
|
-
events.off('request_register_notification',
|
|
174
|
-
events.off('request_update_notification',
|
|
189
|
+
events.off('message_added_notification', handleEventTypeOne)
|
|
190
|
+
events.off('order_added_notification', handleEventTypeTwo)
|
|
191
|
+
events.off('order_updated_notification', handleEventTypeThree)
|
|
192
|
+
events.off('request_register_notification', handleEventTypeTwo)
|
|
193
|
+
events.off('request_update_notification', handleEventTypeThree)
|
|
175
194
|
}
|
|
176
|
-
}, [orderStatus])
|
|
195
|
+
}, [orderStatus, events])
|
|
177
196
|
|
|
178
197
|
useEffect(() => {
|
|
179
198
|
return () => setCurrentEvent(null)
|
|
@@ -3,8 +3,7 @@ import {
|
|
|
3
3
|
StyleSheet,
|
|
4
4
|
View,
|
|
5
5
|
TouchableOpacity,
|
|
6
|
-
ActivityIndicator
|
|
7
|
-
Alert,
|
|
6
|
+
ActivityIndicator
|
|
8
7
|
} from 'react-native';
|
|
9
8
|
import Clipboard from '@react-native-clipboard/clipboard';
|
|
10
9
|
import { StarPRNT } from 'react-native-star-prnt';
|
|
@@ -31,7 +30,7 @@ import { FloatingButton } from '../FloatingButton';
|
|
|
31
30
|
import { GoogleMap } from '../GoogleMap';
|
|
32
31
|
import { OButton, OModal, OText, OIcon } from '../shared';
|
|
33
32
|
import { OrderDetailsParams } from '../../types';
|
|
34
|
-
import { verifyDecimals, getProductPrice, getOrderStatus } from '../../utils';
|
|
33
|
+
import { verifyDecimals, getProductPrice, getOrderStatus, getCurrenySymbol } from '../../utils';
|
|
35
34
|
import { USER_TYPE } from '../../config/constants';
|
|
36
35
|
import CountryPicker from 'react-native-country-picker-modal';
|
|
37
36
|
import { NotFoundSource } from '../NotFoundSource';
|
|
@@ -39,6 +38,7 @@ import { OrderHeaderComponent } from './OrderHeaderComponent';
|
|
|
39
38
|
import { OrderContentComponent } from './OrderContentComponent';
|
|
40
39
|
import { _retrieveStoreData } from '../../providers/StoreUtil'
|
|
41
40
|
import { usePrinterCommands } from './usePrinterCommands'
|
|
41
|
+
import Alert from '../../../../../src/providers/AlertProvider'
|
|
42
42
|
|
|
43
43
|
export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
44
44
|
const {
|
|
@@ -53,6 +53,8 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
53
53
|
actions,
|
|
54
54
|
orderTitle,
|
|
55
55
|
appTitle,
|
|
56
|
+
loadMessages,
|
|
57
|
+
notificationApp
|
|
56
58
|
} = props;
|
|
57
59
|
|
|
58
60
|
const theme = useTheme();
|
|
@@ -76,8 +78,11 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
76
78
|
const [isDriverModalVisible, setIsDriverModalVisible] = useState(false);
|
|
77
79
|
const [printerSettings, setPrinterSettings] = useState<any>('')
|
|
78
80
|
const [autoPrintEnabled, setAutoPrintEnabled] = useState<boolean>(false)
|
|
81
|
+
const [alertState, setAlertState] = useState<any>({ open: false, title: '', content: [] })
|
|
79
82
|
|
|
80
|
-
const orderToComplete = [4,20,21]
|
|
83
|
+
const orderToComplete = [4, 20, 21]
|
|
84
|
+
const orderToReady = [7, 14]
|
|
85
|
+
const deliveryTypes = [1, 7]
|
|
81
86
|
|
|
82
87
|
if (order?.status === 7 || order?.status === 4) {
|
|
83
88
|
if (drivers?.length > 0 && drivers) {
|
|
@@ -135,6 +140,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
135
140
|
if (order?.status === 7 && autoPrintEnabled && printerSettings) {
|
|
136
141
|
handleViewSummaryOrder()
|
|
137
142
|
}
|
|
143
|
+
return order
|
|
138
144
|
}
|
|
139
145
|
}
|
|
140
146
|
|
|
@@ -142,8 +148,8 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
142
148
|
if (name !== 'No') {
|
|
143
149
|
const pos = position && position !== 'whole' ? `(${t(position.toUpperCase(), position)})` : '';
|
|
144
150
|
return pos
|
|
145
|
-
? `${quantity} x ${name} ${pos} +${parsePrice(price)}\n`
|
|
146
|
-
: `${quantity} x ${name} +${parsePrice(price)}\n`;
|
|
151
|
+
? `${quantity} x ${name} ${pos} +${parsePrice(price, { currency: getCurrenySymbol(order?.currency) })}\n`
|
|
152
|
+
: `${quantity} x ${name} +${parsePrice(price, { currency: getCurrenySymbol(order?.currency) })}\n`;
|
|
147
153
|
} else {
|
|
148
154
|
return 'No\n';
|
|
149
155
|
}
|
|
@@ -208,7 +214,13 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
208
214
|
? t('EAT_IN', 'Eat in')
|
|
209
215
|
: order.delivery_type === 4
|
|
210
216
|
? t('CURBSIDE', 'Curbside')
|
|
211
|
-
:
|
|
217
|
+
: order.delivery_type === 5
|
|
218
|
+
? t('DRIVER_THRU', 'Driver thru')
|
|
219
|
+
: order.delivery_type === 7
|
|
220
|
+
? t('CATERING_DELIVERY', 'Catering delivery')
|
|
221
|
+
: order.delivery_type === 8
|
|
222
|
+
? t('CATERING_PICKUP', 'Catering pickup')
|
|
223
|
+
: t('DELIVERY', 'Delivery')
|
|
212
224
|
}\n`
|
|
213
225
|
: '';
|
|
214
226
|
|
|
@@ -245,7 +257,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
245
257
|
order?.products.length &&
|
|
246
258
|
order?.products.map((product: any, i: number) => {
|
|
247
259
|
const string =
|
|
248
|
-
`${product?.quantity} X ${product?.name} ${parsePrice(product.total ?? getProductPrice(product))}\n${getOptions(product.options, product.comment)}`;
|
|
260
|
+
`${product?.quantity} X ${product?.name} ${parsePrice(product.total ?? getProductPrice(product), { currency: getCurrenySymbol(order?.currency) })}\n${getOptions(product.options, product.comment)}`;
|
|
249
261
|
|
|
250
262
|
return i === 0 ? ` ${string}` : string
|
|
251
263
|
});
|
|
@@ -258,19 +270,22 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
258
270
|
|
|
259
271
|
const subtotal = `${t('SUBTOTAL', 'Subtotal')}: ${parsePrice(
|
|
260
272
|
order?.subtotal,
|
|
273
|
+
{ currency: getCurrenySymbol(order?.currency) }
|
|
261
274
|
)}\n`;
|
|
262
275
|
|
|
263
276
|
const drivertip = `${t('DRIVER_TIP', 'Driver tip')} ${parsePrice(
|
|
264
277
|
order?.summary?.driver_tip || order?.totalDriverTip,
|
|
278
|
+
{ currency: getCurrenySymbol(order?.currency) }
|
|
265
279
|
)}\n`;
|
|
266
280
|
|
|
267
281
|
const deliveryFee = `${t('DELIVERY_FEE', 'Delivery fee')} ${verifyDecimals(
|
|
268
282
|
order?.service_fee,
|
|
269
283
|
parseNumber,
|
|
270
|
-
)}% ${parsePrice(order?.summary?.service_fee || order?.serviceFee || 0)}\n`;
|
|
284
|
+
)}% ${parsePrice(order?.summary?.service_fee || order?.serviceFee || 0, { currency: getCurrenySymbol(order?.currency) })}\n`;
|
|
271
285
|
|
|
272
286
|
const total = `${t('TOTAL', 'Total')} ${parsePrice(
|
|
273
287
|
order?.summary?.total || order?.total,
|
|
288
|
+
{ currency: getCurrenySymbol(order?.currency) }
|
|
274
289
|
)}\n`;
|
|
275
290
|
|
|
276
291
|
const orderStatus = `${t('INVOICE_ORDER_NO', 'Order No.')} ${order.id} ${t(
|
|
@@ -297,14 +312,47 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
297
312
|
|
|
298
313
|
const handleOpenMessagesForBusiness = () => {
|
|
299
314
|
setOpenModalForBusiness(true);
|
|
300
|
-
readMessages && readMessages()
|
|
315
|
+
readMessages && readMessages()
|
|
316
|
+
loadMessages && loadMessages()
|
|
301
317
|
setUnreadAlert({ ...unreadAlert, business: false });
|
|
302
318
|
};
|
|
303
319
|
|
|
304
|
-
const handleViewActionOrder = (action: string) => {
|
|
320
|
+
const handleViewActionOrder = (action: string, options?: any) => {
|
|
305
321
|
if (openModalForMapView) {
|
|
306
322
|
setOpenModalForMapView(false);
|
|
307
323
|
}
|
|
324
|
+
if (options?.alert) {
|
|
325
|
+
let bodyToSend: any = {};
|
|
326
|
+
const orderStatus: any = {
|
|
327
|
+
acceptByBusiness: {
|
|
328
|
+
status: 7,
|
|
329
|
+
},
|
|
330
|
+
};
|
|
331
|
+
|
|
332
|
+
if (actions && action === 'accept') {
|
|
333
|
+
bodyToSend = orderStatus[actions.accept];
|
|
334
|
+
}
|
|
335
|
+
bodyToSend.id = order?.id;
|
|
336
|
+
setAlertState({
|
|
337
|
+
open: true,
|
|
338
|
+
content: options?.content,
|
|
339
|
+
title: t('ORDER_STATUS', 'Order status'),
|
|
340
|
+
onAccept: async () => {
|
|
341
|
+
setAlertState({
|
|
342
|
+
open: false,
|
|
343
|
+
content: []
|
|
344
|
+
})
|
|
345
|
+
const order = await handleChangeOrderStatus(bodyToSend?.status, bodyToSend)
|
|
346
|
+
if (order?.id) {
|
|
347
|
+
setActionOrder(action);
|
|
348
|
+
setOpenModalForAccept(true);
|
|
349
|
+
} else {
|
|
350
|
+
showToast(ToastType.Error, t('FAILED_TO_UPDATE_ORDER', 'Failed to update order'), 5000)
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
})
|
|
354
|
+
return
|
|
355
|
+
}
|
|
308
356
|
setActionOrder(action);
|
|
309
357
|
setOpenModalForAccept(true);
|
|
310
358
|
};
|
|
@@ -339,6 +387,8 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
339
387
|
};
|
|
340
388
|
|
|
341
389
|
const handleCloseModal = () => {
|
|
390
|
+
readMessages && readMessages()
|
|
391
|
+
loadMessages && loadMessages()
|
|
342
392
|
setOpenModalForBusiness(false);
|
|
343
393
|
};
|
|
344
394
|
|
|
@@ -350,6 +400,14 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
350
400
|
navigation?.canGoBack() && navigation.goBack();
|
|
351
401
|
};
|
|
352
402
|
|
|
403
|
+
const closeAlert = () => {
|
|
404
|
+
setAlertState({
|
|
405
|
+
open: false,
|
|
406
|
+
title: '',
|
|
407
|
+
content: []
|
|
408
|
+
})
|
|
409
|
+
}
|
|
410
|
+
|
|
353
411
|
useEffect(() => {
|
|
354
412
|
if (messagesReadList?.length) {
|
|
355
413
|
openModalForBusiness
|
|
@@ -379,7 +437,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
379
437
|
},
|
|
380
438
|
{
|
|
381
439
|
...order?.customer?.location,
|
|
382
|
-
title: order?.customer?.name ??
|
|
440
|
+
title: order?.customer?.name ?? t('CUSTOMER', 'Customer'),
|
|
383
441
|
address: {
|
|
384
442
|
addressName: order?.customer?.address,
|
|
385
443
|
zipcode: order?.customer?.zipcode
|
|
@@ -392,7 +450,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
392
450
|
];
|
|
393
451
|
|
|
394
452
|
useEffect(() => {
|
|
395
|
-
if (openModalForAccept) {
|
|
453
|
+
if (openModalForAccept && !loading) {
|
|
396
454
|
setOpenModalForAccept(false);
|
|
397
455
|
}
|
|
398
456
|
|
|
@@ -413,7 +471,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
413
471
|
|
|
414
472
|
useEffect(() => {
|
|
415
473
|
const getStorageData = async () => {
|
|
416
|
-
|
|
474
|
+
const printers = await _retrieveStoreData('printers')
|
|
417
475
|
const autoPrint = await _retrieveStoreData('auto_print_after_accept_order')
|
|
418
476
|
setPrinterSettings(printers?.length && printers)
|
|
419
477
|
setAutoPrintEnabled(!!autoPrint)
|
|
@@ -482,6 +540,8 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
482
540
|
handleCopyClipboard={handleCopyClipboard}
|
|
483
541
|
handleArrowBack={handleArrowBack}
|
|
484
542
|
isCustomView={props.isCustomView}
|
|
543
|
+
messages={messages}
|
|
544
|
+
messagesReadList={messagesReadList}
|
|
485
545
|
/>
|
|
486
546
|
<OrderDetailsContainer
|
|
487
547
|
keyboardShouldPersistTaps="handled"
|
|
@@ -489,7 +549,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
489
549
|
<>
|
|
490
550
|
<OrderContentComponent order={order} />
|
|
491
551
|
{(order?.status === 7 || order?.status === 4) &&
|
|
492
|
-
order?.delivery_type
|
|
552
|
+
deliveryTypes.includes(order?.delivery_type) && configs?.assign_driver_enabled?.value === '1' && (
|
|
493
553
|
<AssignDriver>
|
|
494
554
|
<OText style={{ marginBottom: 5 }} size={16} weight="600">
|
|
495
555
|
{t('ASSIGN_DRIVER', 'Assign driver')}
|
|
@@ -587,6 +647,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
587
647
|
messages={messages}
|
|
588
648
|
order={order}
|
|
589
649
|
setMessages={setMessages}
|
|
650
|
+
notificationApp={notificationApp}
|
|
590
651
|
/>
|
|
591
652
|
</OModal>
|
|
592
653
|
|
|
@@ -630,7 +691,6 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
630
691
|
</>
|
|
631
692
|
<View style={{ height: 30 }} />
|
|
632
693
|
</OrderDetailsContainer>
|
|
633
|
-
|
|
634
694
|
{order &&
|
|
635
695
|
Object.keys(order).length > 0 &&
|
|
636
696
|
getOrderStatus(order?.status, t)?.value ===
|
|
@@ -638,7 +698,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
638
698
|
<FloatingButton
|
|
639
699
|
btnText={t('REJECT', 'Reject')}
|
|
640
700
|
isSecondaryBtn={false}
|
|
641
|
-
secondButtonClick={() => handleViewActionOrder('accept')}
|
|
701
|
+
secondButtonClick={() => handleViewActionOrder('accept', { alert: true, content: t('DO_YOU_WANT_ACCEPT_ORDER', 'Do you want to accept the order?') })}
|
|
642
702
|
firstButtonClick={() => handleViewActionOrder('reject')}
|
|
643
703
|
secondBtnText={t('ACCEPT', 'Accept')}
|
|
644
704
|
secondButton={true}
|
|
@@ -647,7 +707,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
647
707
|
widthButton={'45%'}
|
|
648
708
|
/>
|
|
649
709
|
)}
|
|
650
|
-
{order?.status
|
|
710
|
+
{orderToReady.includes(order?.status) && (
|
|
651
711
|
<FloatingButton
|
|
652
712
|
btnText={t('READY_FOR_PICKUP', 'Ready for pickup')}
|
|
653
713
|
colorTxt1={theme.colors.primary}
|
|
@@ -657,7 +717,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
657
717
|
disabled={loading}
|
|
658
718
|
/>
|
|
659
719
|
)}
|
|
660
|
-
{orderToComplete.includes(order?.status) && !
|
|
720
|
+
{orderToComplete.includes(order?.status) && !deliveryTypes.includes(order?.delivery_type) && (
|
|
661
721
|
<FloatingButton
|
|
662
722
|
btnText={t(
|
|
663
723
|
'ORDER_NOT_PICKEDUP_BY_CUSTOMER',
|
|
@@ -668,7 +728,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
668
728
|
secondButtonClick={() => handleChangeOrderStatus?.(15)}
|
|
669
729
|
firstButtonClick={() => handleChangeOrderStatus?.(17)}
|
|
670
730
|
secondBtnText={t(
|
|
671
|
-
'
|
|
731
|
+
'ORDER_PICKUP_COMPLETED_BY_CUSTOMER',
|
|
672
732
|
'Pickup completed by customer',
|
|
673
733
|
)}
|
|
674
734
|
secondButton={true}
|
|
@@ -680,6 +740,14 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
680
740
|
)}
|
|
681
741
|
</View>
|
|
682
742
|
)}
|
|
743
|
+
<Alert
|
|
744
|
+
open={alertState.open}
|
|
745
|
+
content={alertState.content}
|
|
746
|
+
title={alertState.title || ''}
|
|
747
|
+
onAccept={alertState.onAccept}
|
|
748
|
+
onClose={closeAlert}
|
|
749
|
+
onCancel={closeAlert}
|
|
750
|
+
/>
|
|
683
751
|
</>
|
|
684
752
|
);
|
|
685
753
|
};
|