ordering-ui-react-native 0.22.48 → 0.22.49-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 -25
- 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,19 +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
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
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
|
+
})),
|
|
67
72
|
{
|
|
68
|
-
edgePadding: { top: 120, right: 120, bottom: 120, left: 120 }
|
|
73
|
+
edgePadding: { top: 120, right: 120, bottom: 120, left: 120 }
|
|
69
74
|
},
|
|
70
75
|
);
|
|
71
76
|
}
|
|
@@ -136,8 +141,20 @@ const MapViewComponent = (props: MapViewParams) => {
|
|
|
136
141
|
const RenderMarker = ({ marker, customer, orderIds }: { marker: any, customer?: boolean, orderIds?: Array<number> }) => {
|
|
137
142
|
const markerRef = useRef<any>()
|
|
138
143
|
|
|
139
|
-
let coordinateLat = (customer
|
|
140
|
-
|
|
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)
|
|
141
158
|
|
|
142
159
|
useEffect(() => {
|
|
143
160
|
if (
|
|
@@ -157,11 +174,11 @@ const MapViewComponent = (props: MapViewParams) => {
|
|
|
157
174
|
}}
|
|
158
175
|
onPress={() =>
|
|
159
176
|
setLocationSelected({
|
|
160
|
-
latitude:
|
|
161
|
-
longitude:
|
|
177
|
+
latitude: coordinateLat,
|
|
178
|
+
longitude: coordinateLng
|
|
162
179
|
})
|
|
163
180
|
}
|
|
164
|
-
ref={(ref) => markerRef.current = ref}
|
|
181
|
+
ref={(ref: any) => markerRef.current = ref}
|
|
165
182
|
>
|
|
166
183
|
<Icon
|
|
167
184
|
name="map-marker"
|
|
@@ -234,22 +251,22 @@ const MapViewComponent = (props: MapViewParams) => {
|
|
|
234
251
|
return (
|
|
235
252
|
<SafeAreaView style={{ flex: 1 }}>
|
|
236
253
|
<View style={{ flex: 1 }}>
|
|
237
|
-
{!isLoadingBusinessMarkers && isFocused && (
|
|
254
|
+
{(isDeliveryApp || (!isLoadingBusinessMarkers && isFocused)) && (
|
|
238
255
|
<View style={{ flex: 1 }}>
|
|
239
256
|
<MapView
|
|
240
257
|
ref={mapRef}
|
|
241
258
|
provider={PROVIDER_GOOGLE}
|
|
242
259
|
initialRegion={{
|
|
243
|
-
latitude: initialPosition?.latitude,
|
|
244
|
-
longitude: initialPosition?.longitude,
|
|
260
|
+
latitude: initialPosition?.latitude || 0,
|
|
261
|
+
longitude: initialPosition?.longitude || 0,
|
|
245
262
|
latitudeDelta: haveOrders ? 0.01 : 0.1,
|
|
246
263
|
longitudeDelta: haveOrders ? 0.01 * ASPECT_RATIO : 0.1 * ASPECT_RATIO,
|
|
247
264
|
}}
|
|
248
265
|
style={{ flex: 1 }}
|
|
249
266
|
zoomTapEnabled
|
|
250
267
|
zoomEnabled
|
|
251
|
-
zoomControlEnabled
|
|
252
|
-
cacheEnabled
|
|
268
|
+
zoomControlEnabled={!(isDeliveryApp && Platform.OS === 'android')}
|
|
269
|
+
cacheEnabled={(isDeliveryApp && Platform.OS === 'android' && isFocused) || Platform.OS === 'ios' || !isDeliveryApp}
|
|
253
270
|
moveOnMarkerPress
|
|
254
271
|
onTouchStart={() => (following.current = false)}
|
|
255
272
|
>
|
|
@@ -271,8 +288,8 @@ const MapViewComponent = (props: MapViewParams) => {
|
|
|
271
288
|
))}
|
|
272
289
|
<Marker
|
|
273
290
|
coordinate={{
|
|
274
|
-
latitude: location.lat,
|
|
275
|
-
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,
|
|
276
293
|
}}
|
|
277
294
|
title={t('YOUR_LOCATION', 'Your Location')}
|
|
278
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
|
};
|