ordering-ui-react-native 0.21.62 → 0.21.63-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 -7
- package/src/DeliveryApp.tsx +43 -1
- package/src/components/BusinessesListing/index.tsx +1 -1
- package/src/components/PaymentOptionsWebView/index.tsx +1 -0
- package/src/components/StripeMethodForm/index.tsx +6 -4
- package/src/components/VerifyPhone/styles.tsx +1 -2
- package/src/types/index.tsx +3 -1
- package/themes/business/index.tsx +4 -0
- package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +4 -3
- package/themes/business/src/components/Chat/index.tsx +3 -1
- package/themes/business/src/components/DriverMap/index.tsx +36 -23
- package/themes/business/src/components/GoogleMap/index.tsx +15 -8
- package/themes/business/src/components/Home/index.tsx +5 -1
- package/themes/business/src/components/LanguageSelector/index.tsx +1 -2
- package/themes/business/src/components/LanguageSelector/lang_country.json +515 -70
- package/themes/business/src/components/LogoutButton/index.tsx +1 -1
- package/themes/business/src/components/MapView/index.tsx +30 -15
- package/themes/business/src/components/NewOrderNotification/index.tsx +76 -26
- package/themes/business/src/components/OrderDetails/Business.tsx +52 -2
- package/themes/business/src/components/OrderDetails/Delivery.tsx +36 -21
- package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +61 -55
- package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +35 -21
- package/themes/business/src/components/OrderDetails/usePrinterCommands.tsx +220 -0
- package/themes/business/src/components/OrderSummary/index.tsx +240 -76
- package/themes/business/src/components/OrdersListManager/index.tsx +9 -1
- package/themes/business/src/components/OrdersOption/index.tsx +249 -126
- package/themes/business/src/components/PhoneInputNumber/index.tsx +8 -5
- package/themes/business/src/components/PreviousMessages/index.tsx +12 -0
- package/themes/business/src/components/PreviousOrders/OrderItem.tsx +29 -19
- package/themes/business/src/components/PreviousOrders/index.tsx +5 -3
- package/themes/business/src/components/PrinterEdition/index.tsx +363 -0
- package/themes/business/src/components/PrinterEdition/styles.tsx +61 -0
- package/themes/business/src/components/PrinterSettings/index.tsx +267 -0
- package/themes/business/src/components/PrinterSettings/styles.tsx +30 -0
- package/themes/business/src/components/ProductItemAccordion/index.tsx +2 -2
- package/themes/business/src/components/ReviewCustomer/index.tsx +2 -0
- package/themes/business/src/components/Sessions/index.tsx +187 -0
- package/themes/business/src/components/Sessions/styles.tsx +20 -0
- package/themes/business/src/components/StoresList/index.tsx +2 -2
- package/themes/business/src/components/UserFormDetails/index.tsx +111 -107
- package/themes/business/src/components/UserProfileForm/index.tsx +106 -54
- package/themes/business/src/components/WebsocketStatus/index.tsx +2 -2
- package/themes/business/src/components/shared/OInput.tsx +2 -0
- package/themes/business/src/components/shared/OTextarea.tsx +8 -9
- package/themes/business/src/hooks/useLocation.tsx +5 -4
- package/themes/business/src/types/index.tsx +22 -5
- package/themes/business/src/utils/index.tsx +19 -1
- 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 +6 -0
- 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/shared/OButton.tsx +5 -18
- package/themes/original/index.tsx +13 -1
- package/themes/original/src/components/AddressDetails/index.tsx +20 -10
- package/themes/original/src/components/AddressForm/index.tsx +32 -17
- package/themes/original/src/components/AddressList/index.tsx +8 -7
- package/themes/original/src/components/AnalyticsSegment/index.tsx +6 -6
- package/themes/original/src/components/AppleLogin/index.tsx +4 -4
- package/themes/original/src/components/BusinessBasicInformation/index.tsx +6 -9
- package/themes/original/src/components/BusinessController/index.tsx +14 -9
- package/themes/original/src/components/BusinessController/styles.tsx +8 -7
- package/themes/original/src/components/BusinessItemAccordion/index.tsx +15 -7
- package/themes/original/src/components/BusinessListingSearch/BusinessSearchFooter.tsx +2 -3
- package/themes/original/src/components/BusinessListingSearch/BusinessSearchHeader.tsx +1 -3
- package/themes/original/src/components/BusinessListingSearch/index.tsx +1 -2
- package/themes/original/src/components/BusinessPreorder/index.tsx +20 -15
- package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/index.tsx +5 -5
- package/themes/original/src/components/BusinessProductsList/index.tsx +3 -3
- package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
- package/themes/original/src/components/BusinessProductsListing/index.tsx +28 -13
- 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/index.tsx +1 -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 +26 -9
- package/themes/original/src/components/CartContent/index.tsx +60 -45
- package/themes/original/src/components/Checkout/index.tsx +94 -62
- 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 -5
- package/themes/original/src/components/FavoriteList/index.tsx +0 -1
- package/themes/original/src/components/ForgotPasswordForm/index.tsx +5 -7
- package/themes/original/src/components/GiftCard/GiftCardOrdersList/index.tsx +64 -0
- package/themes/original/src/components/GiftCard/GiftCardOrdersList/styles.tsx +8 -0
- 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 +9 -11
- package/themes/original/src/components/GiftCard/SingleGiftCard/index.tsx +101 -0
- package/themes/original/src/components/GiftCard/SingleGiftCard/styles.tsx +4 -0
- package/themes/original/src/components/GiftCard/VerticalGiftCardOrdersLayout/index.tsx +82 -0
- package/themes/original/src/components/GiftCard/VerticalGiftCardOrdersLayout/styles.tsx +9 -0
- package/themes/original/src/components/GoogleMap/index.tsx +39 -18
- package/themes/original/src/components/Help/index.tsx +2 -0
- package/themes/original/src/components/HighestRatedBusinesses/index.tsx +2 -2
- package/themes/original/src/components/Home/index.tsx +2 -10
- package/themes/original/src/components/LoginForm/Otp/index.tsx +4 -19
- package/themes/original/src/components/LoginForm/index.tsx +4 -7
- package/themes/original/src/components/MessageListing/index.tsx +1 -0
- package/themes/original/src/components/Messages/index.tsx +8 -7
- package/themes/original/src/components/MomentOption/index.tsx +13 -2
- package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +7 -3
- package/themes/original/src/components/MultiCheckout/index.tsx +123 -62
- package/themes/original/src/components/MultiCheckout/styles.tsx +17 -0
- package/themes/original/src/components/MultiOrdersDetails/index.tsx +20 -14
- package/themes/original/src/components/MyOrders/index.tsx +21 -26
- package/themes/original/src/components/NavBar/index.tsx +4 -2
- 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/OrderDetails/OrderHistory.tsx +5 -7
- package/themes/original/src/components/OrderDetails/index.tsx +5 -7
- package/themes/original/src/components/OrderDetails/styles.tsx +0 -1
- package/themes/original/src/components/OrderProgress/index.tsx +22 -3
- package/themes/original/src/components/OrderTypeSelector/index.tsx +7 -6
- package/themes/original/src/components/OrdersOption/index.tsx +2 -4
- package/themes/original/src/components/PaymentOptionCard/index.tsx +4 -2
- 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 +47 -6
- package/themes/original/src/components/PlaceSpot/index.tsx +1 -3
- package/themes/original/src/components/PreviousOrders/index.tsx +1 -2
- package/themes/original/src/components/ProductForm/ActionButton.tsx +16 -19
- package/themes/original/src/components/ProductForm/index.tsx +120 -109
- package/themes/original/src/components/ProductItemAccordion/index.tsx +55 -49
- package/themes/original/src/components/ProductItemAccordion/styles.tsx +3 -4
- package/themes/original/src/components/ProductOptionSubOption/index.tsx +112 -91
- package/themes/original/src/components/ProfessionalProfile/index.tsx +4 -5
- package/themes/original/src/components/Promotions/index.tsx +6 -9
- package/themes/original/src/components/ReviewDriver/index.tsx +1 -1
- package/themes/original/src/components/ReviewOrder/index.tsx +2 -2
- package/themes/original/src/components/ReviewProducts/index.tsx +1 -1
- 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 -3
- package/themes/original/src/components/SignupForm/index.tsx +65 -67
- package/themes/original/src/components/SingleOrderCard/index.tsx +1 -2
- package/themes/original/src/components/SingleProductCard/index.tsx +5 -6
- 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 +12 -36
- package/themes/original/src/components/StripeElementsForm/index.tsx +78 -59
- package/themes/original/src/components/StripeElementsForm/naked.tsx +48 -1
- package/themes/original/src/components/StripeRedirectForm/index.tsx +0 -3
- package/themes/original/src/components/UpsellingProducts/UpsellingContent.tsx +10 -7
- package/themes/original/src/components/UpsellingProducts/UpsellingLayout.tsx +8 -3
- package/themes/original/src/components/UserFormDetails/index.tsx +83 -84
- package/themes/original/src/components/UserProfile/index.tsx +11 -2
- package/themes/original/src/components/Wallets/index.tsx +7 -4
- package/themes/original/src/components/WebsocketStatus/index.tsx +169 -0
- package/themes/original/src/components/WebsocketStatus/styles.tsx +28 -0
- package/themes/original/src/components/shared/OAlert.tsx +2 -1
- package/themes/original/src/components/shared/OButton.tsx +8 -7
- package/themes/original/src/components/shared/OInput.tsx +1 -4
- package/themes/original/src/types/index.tsx +5 -1
- package/themes/original/src/utils/index.tsx +12 -1
- 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:
|
|
61
|
-
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
|
|
76
|
-
latitudeDelta: lastRegion
|
|
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
|
|
85
|
-
latitudeDelta: lastRegion
|
|
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
|
|
137
|
-
|
|
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:
|
|
158
|
-
longitude:
|
|
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
|
>
|
|
@@ -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
|
-
|
|
42
|
-
|
|
43
|
-
|
|
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
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}, [count, isEnabledReadStorage])
|
|
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
|
+
}
|
|
51
77
|
}
|
|
52
|
-
|
|
78
|
+
// checkSoundMedia()
|
|
53
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({
|
|
140
|
+
location: JSON.stringify({
|
|
141
|
+
location: `{
|
|
142
|
+
lat: ${location.latitude},
|
|
143
|
+
lng: ${location.longitude}
|
|
144
|
+
}`
|
|
145
|
+
})
|
|
109
146
|
}),
|
|
110
|
-
headers: {
|
|
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
|
|
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,21 @@ const NewOrderNotificationUI = (props: any) => {
|
|
|
128
168
|
}
|
|
129
169
|
|
|
130
170
|
useEffect(() => {
|
|
131
|
-
events
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
171
|
+
if (!events?._events?.message_added_notification || events?._events?.message_added_notification?.length < 2) {
|
|
172
|
+
events.on('message_added_notification', (o: any) => handleEventNotification(1, o, orderStatus))
|
|
173
|
+
}
|
|
174
|
+
if (!events?._events?.order_added_notification || events?._events?.order_added_notification?.length < 2) {
|
|
175
|
+
events.on('order_added_notification', (o: any) => handleEventNotification(2, o, orderStatus))
|
|
176
|
+
}
|
|
177
|
+
if (!events?._events?.order_updated_notification || events?._events?.order_updated_notification?.length < 2) {
|
|
178
|
+
events.on('order_updated_notification', (o: any) => handleEventNotification(3, o, orderStatus))
|
|
179
|
+
}
|
|
180
|
+
if (!events?._events?.request_register_notification || events?._events?.request_register_notification?.length < 2) {
|
|
181
|
+
events.on('request_register_notification', (o: any) => handleEventNotification(2, o, orderStatus))
|
|
182
|
+
}
|
|
183
|
+
if (!events?._events?.request_update_notification || events?._events?.request_update_notification?.length < 2) {
|
|
184
|
+
events.on('request_update_notification', (o: any) => handleEventNotification(3, o, orderStatus))
|
|
185
|
+
}
|
|
136
186
|
|
|
137
187
|
return () => {
|
|
138
188
|
events.off('message_added_notification', (o: any) => handleEventNotification(1, o))
|
|
@@ -141,7 +191,7 @@ const NewOrderNotificationUI = (props: any) => {
|
|
|
141
191
|
events.off('request_register_notification', (o: any) => handleEventNotification(2, o))
|
|
142
192
|
events.off('request_update_notification', (o: any) => handleEventNotification(3, o))
|
|
143
193
|
}
|
|
144
|
-
}, [])
|
|
194
|
+
}, [orderStatus, events])
|
|
145
195
|
|
|
146
196
|
useEffect(() => {
|
|
147
197
|
return () => setCurrentEvent(null)
|
|
@@ -149,13 +199,13 @@ const NewOrderNotificationUI = (props: any) => {
|
|
|
149
199
|
|
|
150
200
|
return (
|
|
151
201
|
<>
|
|
152
|
-
{!!currentEvent
|
|
202
|
+
{!!currentEvent && (
|
|
153
203
|
<SoundPlayerComponent
|
|
154
204
|
evtList={evtList}
|
|
155
205
|
currentEvent={currentEvent}
|
|
156
206
|
handleCloseEvents={() => setCurrentEvent(null)}
|
|
157
207
|
/>
|
|
158
|
-
)
|
|
208
|
+
)}
|
|
159
209
|
</>
|
|
160
210
|
)
|
|
161
211
|
};
|
|
@@ -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
|
|
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();
|
|
@@ -393,7 +396,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
393
396
|
}, [props.order?.loading]);
|
|
394
397
|
|
|
395
398
|
useEffect(() => {
|
|
396
|
-
if (
|
|
399
|
+
if (order?.driver_id === null && session?.user?.level === 4) {
|
|
397
400
|
setAlertState({
|
|
398
401
|
open: true,
|
|
399
402
|
content: [
|
|
@@ -425,6 +428,16 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
425
428
|
forceUpdate && handleViewActionOrder && handleViewActionOrder(forceUpdate === 9 ? 'forcePickUp' : 'forceDelivery')
|
|
426
429
|
}, [forceUpdate])
|
|
427
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
|
+
|
|
428
441
|
const styles = StyleSheet.create({
|
|
429
442
|
btnPickUp: {
|
|
430
443
|
borderWidth: 0,
|
|
@@ -475,7 +488,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
475
488
|
isOrderGroup={isOrderGroup}
|
|
476
489
|
lastOrder={lastOrder}
|
|
477
490
|
/>
|
|
478
|
-
{(order?.status === 8 || order?.status === 18) && order?.delivery_type === 1 && (
|
|
491
|
+
{(order?.status === 8 || order?.status === 18) && order?.delivery_type === 1 && !props.order?.loading && (
|
|
479
492
|
<Pickup>
|
|
480
493
|
<OButton
|
|
481
494
|
style={styles.btnPickUp}
|
|
@@ -488,7 +501,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
488
501
|
/>
|
|
489
502
|
</Pickup>
|
|
490
503
|
)}
|
|
491
|
-
{order?.status === 3 && order?.delivery_type === 1 && !isHideRejectButtons && (
|
|
504
|
+
{order?.status === 3 && order?.delivery_type === 1 && !isHideRejectButtons && isEnabledOrderNotReady && !props.order?.loading && (
|
|
492
505
|
<View style={{ paddingVertical: 20, marginBottom: 20 }}>
|
|
493
506
|
<OButton
|
|
494
507
|
style={styles.btnPickUp}
|
|
@@ -532,20 +545,8 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
532
545
|
))}
|
|
533
546
|
</View>
|
|
534
547
|
)}
|
|
535
|
-
|
|
536
|
-
{(!!props.order?.error || props.order?.error?.length > 0) && (
|
|
537
|
-
<NotFoundSource
|
|
538
|
-
btnTitle={t('GO_TO_MY_ORDERS', 'Go to my orders')}
|
|
539
|
-
content={
|
|
540
|
-
props.order.error[0] ||
|
|
541
|
-
props.order.error ||
|
|
542
|
-
t('NETWORK_ERROR', 'Network Error')
|
|
543
|
-
}
|
|
544
|
-
onClickButton={() => navigation.navigate('Orders')}
|
|
545
|
-
/>
|
|
546
|
-
)}
|
|
547
548
|
{!((!order || Object.keys(order).length === 0) &&
|
|
548
|
-
(props.order?.error?.length < 1 || !props.order?.error)) && (
|
|
549
|
+
(props.order?.error?.length < 1 || !props.order?.error)) && order?.id && (
|
|
549
550
|
<View style={{ flex: 1 }}>
|
|
550
551
|
<OrderHeaderComponent
|
|
551
552
|
order={order}
|
|
@@ -583,8 +584,8 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
583
584
|
secondButton={true}
|
|
584
585
|
firstColorCustom={theme.colors.red}
|
|
585
586
|
secondColorCustom={theme.colors.green}
|
|
586
|
-
widthButton={isHideRejectButtons ? '100%': '45%'}
|
|
587
|
-
isHideRejectButtons={isHideRejectButtons}
|
|
587
|
+
widthButton={isHideRejectButtons || !isEnabledFailedPickupDriver ? '100%' : '45%'}
|
|
588
|
+
isHideRejectButtons={isHideRejectButtons || !isEnabledFailedPickupDriver}
|
|
588
589
|
/>
|
|
589
590
|
)}
|
|
590
591
|
{(validStatusComplete.includes(order?.status)) && (
|
|
@@ -603,22 +604,23 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
603
604
|
secondButton={true}
|
|
604
605
|
firstColorCustom={theme.colors.red}
|
|
605
606
|
secondColorCustom={theme.colors.green}
|
|
606
|
-
widthButton={isHideRejectButtons ? '100%': '45%'}
|
|
607
|
+
widthButton={isHideRejectButtons ? '100%' : '45%'}
|
|
607
608
|
isHideRejectButtons={isHideRejectButtons}
|
|
608
609
|
/>
|
|
609
610
|
</>
|
|
610
611
|
)}
|
|
611
612
|
{showFloatButtonsAcceptOrReject[order?.status] && (
|
|
612
613
|
<FloatingButton
|
|
614
|
+
disabled={props.order?.loading}
|
|
613
615
|
btnText={t('REJECT', 'Reject')}
|
|
614
616
|
isSecondaryBtn={false}
|
|
615
|
-
secondButtonClick={() => (order?.isLogistic && (order?.order_group || logisticOrderStatus.includes(order?.status))) ? handleAcceptLogisticOrder(order) : handleViewActionOrder('accept')}
|
|
617
|
+
secondButtonClick={() => hideTimer ? handleChangeOrderStatus && handleChangeOrderStatus(8) : (order?.isLogistic && (order?.order_group || logisticOrderStatus.includes(order?.status))) ? handleAcceptLogisticOrder(order) : handleViewActionOrder('accept')}
|
|
616
618
|
firstButtonClick={() => order?.isLogistic && (order?.order_group || logisticOrderStatus.includes(order?.status)) ? handleRejectLogisticOrder() : handleViewActionOrder('reject')}
|
|
617
619
|
secondBtnText={t('ACCEPT', 'Accept')}
|
|
618
620
|
secondButton={true}
|
|
619
621
|
firstColorCustom={theme.colors.red}
|
|
620
622
|
secondColorCustom={theme.colors.green}
|
|
621
|
-
widthButton={isHideRejectButtons ? '100%': '45%'}
|
|
623
|
+
widthButton={isHideRejectButtons ? '100%' : '45%'}
|
|
622
624
|
isHideRejectButtons={isHideRejectButtons}
|
|
623
625
|
/>
|
|
624
626
|
)}
|
|
@@ -684,11 +686,24 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
684
686
|
actions={actions}
|
|
685
687
|
orderTitle={orderTitle}
|
|
686
688
|
appTitle={appTitle}
|
|
689
|
+
isLoadingOrder={props.order?.loading}
|
|
687
690
|
/>
|
|
688
691
|
</OModal>
|
|
689
692
|
)}
|
|
690
693
|
</View>
|
|
691
694
|
)}
|
|
695
|
+
|
|
696
|
+
{(!!props.order?.error || props.order?.error?.length > 0) && (
|
|
697
|
+
<NotFoundSource
|
|
698
|
+
btnTitle={t('GO_TO_MY_ORDERS', 'Go to my orders')}
|
|
699
|
+
content={
|
|
700
|
+
props.order.error[0] ||
|
|
701
|
+
props.order.error ||
|
|
702
|
+
t('NETWORK_ERROR', 'Network Error')
|
|
703
|
+
}
|
|
704
|
+
onClickButton={() => navigation.navigate('Orders')}
|
|
705
|
+
/>
|
|
706
|
+
)}
|
|
692
707
|
{alertState?.open && (
|
|
693
708
|
<Alert
|
|
694
709
|
open={alertState.open}
|