ordering-ui-react-native 0.21.53 → 0.21.54-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 +8 -8
- 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/BusinessProductList/ProductList.tsx +72 -27
- package/themes/business/src/components/BusinessProductList/index.tsx +57 -25
- 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 +66 -26
- package/themes/business/src/components/OrderDetails/Business.tsx +52 -2
- package/themes/business/src/components/OrderDetails/Delivery.tsx +42 -23
- package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +68 -61
- package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +36 -22
- 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/OrdersOption/index.tsx +245 -112
- package/themes/business/src/components/PhoneInputNumber/index.tsx +8 -5
- 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/SearchBar/index.tsx +2 -1
- 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 +4 -3
- 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 +5 -0
- 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 +6 -2
- 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 +18 -10
- 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 +316 -0
- package/themes/original/src/components/BusinessListingSearch/BusinessSearchHeader.tsx +94 -0
- package/themes/original/src/components/BusinessListingSearch/index.tsx +48 -359
- package/themes/original/src/components/BusinessPreorder/index.tsx +20 -16
- 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 +29 -14
- 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/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 +106 -64
- 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/DatePicker/index.tsx +18 -2
- 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 +124 -63
- 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 +2 -8
- package/themes/original/src/components/NotFoundSource/index.tsx +0 -3
- package/themes/original/src/components/Notifications/index.tsx +2 -4
- 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 +123 -112
- 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 +88 -91
- package/themes/original/src/components/UserFormDetails/styles.tsx +7 -0
- 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/Wallets/styles.tsx +1 -1
- 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/layouts/Container.tsx +4 -2
- 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
|
+
}
|
|
51
66
|
}
|
|
52
|
-
}, [count])
|
|
67
|
+
}, [count, isEnabledReadStorage])
|
|
53
68
|
|
|
69
|
+
useEffect(() => {
|
|
70
|
+
const checkSoundMedia = async () => {
|
|
71
|
+
if (Platform.OS === 'android') {
|
|
72
|
+
const enabled = await PermissionsAndroid.check(PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE)
|
|
73
|
+
setIsEnabledReadStorage(enabled)
|
|
74
|
+
} else {
|
|
75
|
+
setIsEnabledReadStorage(true)
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
// checkSoundMedia()
|
|
79
|
+
|
|
80
|
+
}, [])
|
|
54
81
|
return (
|
|
55
82
|
<Modal
|
|
56
83
|
animationType='slide'
|
|
@@ -90,37 +117,50 @@ const SoundPlayerComponent = (props: any) => {
|
|
|
90
117
|
}
|
|
91
118
|
|
|
92
119
|
const NewOrderNotificationUI = (props: any) => {
|
|
93
|
-
const { isBusinessApp, evtList } = props
|
|
94
|
-
|
|
120
|
+
const { isBusinessApp, evtList, orderStatus } = props
|
|
121
|
+
const [, t] = useLanguage()
|
|
95
122
|
const [events] = useEvent()
|
|
96
123
|
const [{ user, token }] = useSession()
|
|
97
124
|
const [ordering] = useApi()
|
|
125
|
+
const [, { showToast }] = useToast()
|
|
98
126
|
const { getCurrentLocation } = useLocation()
|
|
99
127
|
const [currentEvent, setCurrentEvent] = useState<any>(null)
|
|
100
128
|
|
|
101
|
-
const handleEventNotification = async (evtType: number, value: any) => {
|
|
129
|
+
const handleEventNotification = async (evtType: number, value: any, orderStatus?: any) => {
|
|
102
130
|
if (value?.driver) {
|
|
103
131
|
try {
|
|
104
132
|
const location = await getCurrentLocation()
|
|
133
|
+
if (!location?.latitude || !location?.longitude) {
|
|
134
|
+
showToast(t('ERROR_UPDATING_COORDS', 'Error updating coords'), ToastType.Error)
|
|
135
|
+
return
|
|
136
|
+
}
|
|
105
137
|
await fetch(`${ordering.root}/users/${user.id}/locations`, {
|
|
106
138
|
method: 'POST',
|
|
107
139
|
body: JSON.stringify({
|
|
108
|
-
location: JSON.stringify({
|
|
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,11 @@ const NewOrderNotificationUI = (props: any) => {
|
|
|
128
168
|
}
|
|
129
169
|
|
|
130
170
|
useEffect(() => {
|
|
131
|
-
events.on('message_added_notification', (o: any) => handleEventNotification(1, o))
|
|
132
|
-
events.on('order_added_notification', (o: any) => handleEventNotification(2, o))
|
|
133
|
-
events.on('order_updated_notification', (o: any) => handleEventNotification(3, o))
|
|
134
|
-
events.on('request_register_notification', (o: any) => handleEventNotification(2, o))
|
|
135
|
-
events.on('request_update_notification', (o: any) => handleEventNotification(3, o))
|
|
171
|
+
events.on('message_added_notification', (o: any) => handleEventNotification(1, o, orderStatus))
|
|
172
|
+
events.on('order_added_notification', (o: any) => handleEventNotification(2, o, orderStatus))
|
|
173
|
+
events.on('order_updated_notification', (o: any) => handleEventNotification(3, o, orderStatus))
|
|
174
|
+
events.on('request_register_notification', (o: any) => handleEventNotification(2, o, orderStatus))
|
|
175
|
+
events.on('request_update_notification', (o: any) => handleEventNotification(3, o, orderStatus))
|
|
136
176
|
|
|
137
177
|
return () => {
|
|
138
178
|
events.off('message_added_notification', (o: any) => handleEventNotification(1, o))
|
|
@@ -141,7 +181,7 @@ const NewOrderNotificationUI = (props: any) => {
|
|
|
141
181
|
events.off('request_register_notification', (o: any) => handleEventNotification(2, o))
|
|
142
182
|
events.off('request_update_notification', (o: any) => handleEventNotification(3, o))
|
|
143
183
|
}
|
|
144
|
-
}, [])
|
|
184
|
+
}, [orderStatus])
|
|
145
185
|
|
|
146
186
|
useEffect(() => {
|
|
147
187
|
return () => setCurrentEvent(null)
|
|
@@ -149,13 +189,13 @@ const NewOrderNotificationUI = (props: any) => {
|
|
|
149
189
|
|
|
150
190
|
return (
|
|
151
191
|
<>
|
|
152
|
-
{!!currentEvent
|
|
192
|
+
{!!currentEvent && (
|
|
153
193
|
<SoundPlayerComponent
|
|
154
194
|
evtList={evtList}
|
|
155
195
|
currentEvent={currentEvent}
|
|
156
196
|
handleCloseEvents={() => setCurrentEvent(null)}
|
|
157
197
|
/>
|
|
158
|
-
)
|
|
198
|
+
)}
|
|
159
199
|
</>
|
|
160
200
|
)
|
|
161
201
|
};
|
|
@@ -4,8 +4,10 @@ import {
|
|
|
4
4
|
View,
|
|
5
5
|
TouchableOpacity,
|
|
6
6
|
ActivityIndicator,
|
|
7
|
+
Alert,
|
|
7
8
|
} from 'react-native';
|
|
8
9
|
import Clipboard from '@react-native-clipboard/clipboard';
|
|
10
|
+
import { StarPRNT } from 'react-native-star-prnt';
|
|
9
11
|
import { Placeholder, PlaceholderLine, Fade } from 'rn-placeholder';
|
|
10
12
|
import { useTheme } from 'styled-components/native';
|
|
11
13
|
import {
|
|
@@ -35,6 +37,8 @@ import CountryPicker from 'react-native-country-picker-modal';
|
|
|
35
37
|
import { NotFoundSource } from '../NotFoundSource';
|
|
36
38
|
import { OrderHeaderComponent } from './OrderHeaderComponent';
|
|
37
39
|
import { OrderContentComponent } from './OrderContentComponent';
|
|
40
|
+
import { _retrieveStoreData } from '../../providers/StoreUtil'
|
|
41
|
+
import { usePrinterCommands } from './usePrinterCommands'
|
|
38
42
|
|
|
39
43
|
export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
40
44
|
const {
|
|
@@ -44,7 +48,6 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
44
48
|
readMessages,
|
|
45
49
|
messagesReadList,
|
|
46
50
|
handleAssignDriver,
|
|
47
|
-
handleChangeOrderStatus,
|
|
48
51
|
isFromCheckout,
|
|
49
52
|
driverLocation,
|
|
50
53
|
actions,
|
|
@@ -57,6 +60,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
57
60
|
const [{ parsePrice, parseNumber, parseDate }] = useUtils();
|
|
58
61
|
const [{ user, token }] = useSession();
|
|
59
62
|
const [{ configs }] = useConfig();
|
|
63
|
+
const { generateCommands } = usePrinterCommands()
|
|
60
64
|
const [, { showToast }] = useToast();
|
|
61
65
|
const [unreadAlert, setUnreadAlert] = useState({
|
|
62
66
|
business: false,
|
|
@@ -70,6 +74,10 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
70
74
|
const [openModalForAccept, setOpenModalForAccept] = useState(false);
|
|
71
75
|
const [openModalForMapView, setOpenModalForMapView] = useState(false);
|
|
72
76
|
const [isDriverModalVisible, setIsDriverModalVisible] = useState(false);
|
|
77
|
+
const [printerSettings, setPrinterSettings] = useState<any>('')
|
|
78
|
+
const [autoPrintEnabled, setAutoPrintEnabled] = useState<boolean>(false)
|
|
79
|
+
|
|
80
|
+
const orderToComplete = [4,20,21]
|
|
73
81
|
|
|
74
82
|
if (order?.status === 7 || order?.status === 4) {
|
|
75
83
|
if (drivers?.length > 0 && drivers) {
|
|
@@ -120,6 +128,16 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
120
128
|
}
|
|
121
129
|
}
|
|
122
130
|
|
|
131
|
+
const handleChangeOrderStatus = async (status: any, isAcceptOrReject: any = {}) => {
|
|
132
|
+
if (props.handleChangeOrderStatus) {
|
|
133
|
+
const order: any = await props.handleChangeOrderStatus(status, isAcceptOrReject)
|
|
134
|
+
|
|
135
|
+
if (order?.status === 7 && autoPrintEnabled && printerSettings) {
|
|
136
|
+
handleViewSummaryOrder()
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
123
141
|
const getFormattedSubOptionName = ({ quantity, name, position, price }: any) => {
|
|
124
142
|
if (name !== 'No') {
|
|
125
143
|
const pos = position && position !== 'whole' ? `(${t(position.toUpperCase(), position)})` : '';
|
|
@@ -291,7 +309,28 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
291
309
|
setOpenModalForAccept(true);
|
|
292
310
|
};
|
|
293
311
|
|
|
312
|
+
const printAction = async (printerSettings: any, commands: any, showAlert: boolean = true) => {
|
|
313
|
+
try {
|
|
314
|
+
var printResult = await StarPRNT.print(printerSettings?.emulation, commands, printerSettings?.portName);
|
|
315
|
+
showAlert && showToast(ToastType.Info, t('ORDER_PRINTED_SUCCESS', 'Order printed'), 1000)
|
|
316
|
+
} catch (e) {
|
|
317
|
+
showAlert && showToast(ToastType.Error, t('ORDER_PRINTED_FAILED', 'Order not printed, connection failed'), 1000)
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
|
|
294
321
|
const handleViewSummaryOrder = () => {
|
|
322
|
+
if (printerSettings) {
|
|
323
|
+
printerSettings.map((printer: any, idx: number) => {
|
|
324
|
+
const commands: any = generateCommands({
|
|
325
|
+
...order,
|
|
326
|
+
orderStatus: getOrderStatus(order?.status, t)?.value
|
|
327
|
+
}, printer?.printMode)
|
|
328
|
+
commands.push({ appendCutPaper: StarPRNT.CutPaperAction.PartialCutWithFeed })
|
|
329
|
+
|
|
330
|
+
printAction(printer, commands, idx === printerSettings.length - 1)
|
|
331
|
+
})
|
|
332
|
+
return
|
|
333
|
+
}
|
|
295
334
|
navigation?.navigate &&
|
|
296
335
|
navigation.navigate('OrderSummary', {
|
|
297
336
|
order,
|
|
@@ -372,6 +411,17 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
372
411
|
}
|
|
373
412
|
}, [driverLocation]);
|
|
374
413
|
|
|
414
|
+
useEffect(() => {
|
|
415
|
+
const getStorageData = async () => {
|
|
416
|
+
const printers = await _retrieveStoreData('printers')
|
|
417
|
+
const autoPrint = await _retrieveStoreData('auto_print_after_accept_order')
|
|
418
|
+
setPrinterSettings(printers?.length && printers)
|
|
419
|
+
setAutoPrintEnabled(!!autoPrint)
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
getStorageData()
|
|
423
|
+
}, [])
|
|
424
|
+
|
|
375
425
|
const styles = StyleSheet.create({
|
|
376
426
|
driverOff: {
|
|
377
427
|
backgroundColor: theme.colors.notAvailable,
|
|
@@ -607,7 +657,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
607
657
|
disabled={loading}
|
|
608
658
|
/>
|
|
609
659
|
)}
|
|
610
|
-
{order?.status
|
|
660
|
+
{orderToComplete.includes(order?.status) && ![1].includes(order?.delivery_type) && (
|
|
611
661
|
<FloatingButton
|
|
612
662
|
btnText={t(
|
|
613
663
|
'ORDER_NOT_PICKEDUP_BY_CUSTOMER',
|
|
@@ -64,8 +64,11 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
64
64
|
|
|
65
65
|
const { order } = props.order
|
|
66
66
|
|
|
67
|
+
const hideTimer = configs?.hidden_driver_eta_time?.value === '1'
|
|
67
68
|
const isAllowedDriverRejectOrder = configs?.allow_driver_reject_order?.value === '1'
|
|
68
69
|
const isHideRejectButtons = configs?.reject_orders_enabled && configs?.reject_orders_enabled?.value !== '1'
|
|
70
|
+
const isEnabledOrderNotReady = configs?.order_not_ready_enabled?.value === '1'
|
|
71
|
+
const isEnabledFailedPickupDriver = configs?.failed_pickup_by_driver_enabled?.value === '1'
|
|
69
72
|
const theme = useTheme();
|
|
70
73
|
const [, t] = useLanguage();
|
|
71
74
|
const [session] = useSession();
|
|
@@ -115,6 +118,10 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
115
118
|
readMessages && readMessages();
|
|
116
119
|
};
|
|
117
120
|
|
|
121
|
+
const goToPermissionPage = () => {
|
|
122
|
+
navigation.navigate('RequestPermissions')
|
|
123
|
+
}
|
|
124
|
+
|
|
118
125
|
const handleOpenMapView = async () => {
|
|
119
126
|
if (!isGrantedPermissions) {
|
|
120
127
|
navigation.navigate('RequestPermissions')
|
|
@@ -389,7 +396,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
389
396
|
}, [props.order?.loading]);
|
|
390
397
|
|
|
391
398
|
useEffect(() => {
|
|
392
|
-
if (
|
|
399
|
+
if (order?.driver_id === null && session?.user?.level === 4) {
|
|
393
400
|
setAlertState({
|
|
394
401
|
open: true,
|
|
395
402
|
content: [
|
|
@@ -421,6 +428,16 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
421
428
|
forceUpdate && handleViewActionOrder && handleViewActionOrder(forceUpdate === 9 ? 'forcePickUp' : 'forceDelivery')
|
|
422
429
|
}, [forceUpdate])
|
|
423
430
|
|
|
431
|
+
useEffect(() => {
|
|
432
|
+
if (!!props.order?.error || props.order?.error?.length > 0) {
|
|
433
|
+
showToast(ToastType.Error,
|
|
434
|
+
props.order?.error?.[0] ||
|
|
435
|
+
props.order?.error ||
|
|
436
|
+
t('NETWORK_ERROR', 'Network Error'),
|
|
437
|
+
5000)
|
|
438
|
+
}
|
|
439
|
+
}, [props.order?.error])
|
|
440
|
+
|
|
424
441
|
const styles = StyleSheet.create({
|
|
425
442
|
btnPickUp: {
|
|
426
443
|
borderWidth: 0,
|
|
@@ -471,20 +488,20 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
471
488
|
isOrderGroup={isOrderGroup}
|
|
472
489
|
lastOrder={lastOrder}
|
|
473
490
|
/>
|
|
474
|
-
{(order?.status === 8 || order?.status === 18) && order?.delivery_type === 1 && (
|
|
491
|
+
{(order?.status === 8 || order?.status === 18) && order?.delivery_type === 1 && !props.order?.loading && (
|
|
475
492
|
<Pickup>
|
|
476
493
|
<OButton
|
|
477
494
|
style={styles.btnPickUp}
|
|
478
495
|
textStyle={{ color: theme.colors.primary }}
|
|
479
496
|
text={t('ARRIVED_TO_BUSINESS', 'Arrived to bussiness')}
|
|
480
497
|
onClick={() =>
|
|
481
|
-
handleChangeOrderStatus && handleChangeOrderStatus(3)
|
|
498
|
+
handleChangeOrderStatus && isGrantedPermissions ? handleChangeOrderStatus(3) : goToPermissionPage()
|
|
482
499
|
}
|
|
483
500
|
imgLeftStyle={{ tintColor: theme.colors.backArrow }}
|
|
484
501
|
/>
|
|
485
502
|
</Pickup>
|
|
486
503
|
)}
|
|
487
|
-
{order?.status === 3 && order?.delivery_type === 1 && !isHideRejectButtons && (
|
|
504
|
+
{order?.status === 3 && order?.delivery_type === 1 && !isHideRejectButtons && isEnabledOrderNotReady && !props.order?.loading && (
|
|
488
505
|
<View style={{ paddingVertical: 20, marginBottom: 20 }}>
|
|
489
506
|
<OButton
|
|
490
507
|
style={styles.btnPickUp}
|
|
@@ -528,18 +545,6 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
528
545
|
))}
|
|
529
546
|
</View>
|
|
530
547
|
)}
|
|
531
|
-
|
|
532
|
-
{(!!props.order?.error || props.order?.error?.length > 0) && (
|
|
533
|
-
<NotFoundSource
|
|
534
|
-
btnTitle={t('GO_TO_MY_ORDERS', 'Go to my orders')}
|
|
535
|
-
content={
|
|
536
|
-
props.order.error[0] ||
|
|
537
|
-
props.order.error ||
|
|
538
|
-
t('NETWORK_ERROR', 'Network Error')
|
|
539
|
-
}
|
|
540
|
-
onClickButton={() => navigation.navigate('Orders')}
|
|
541
|
-
/>
|
|
542
|
-
)}
|
|
543
548
|
{!((!order || Object.keys(order).length === 0) &&
|
|
544
549
|
(props.order?.error?.length < 1 || !props.order?.error)) && (
|
|
545
550
|
<View style={{ flex: 1 }}>
|
|
@@ -570,7 +575,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
570
575
|
btnText={t('PICKUP_FAILED', 'Pickup failed')}
|
|
571
576
|
isSecondaryBtn={false}
|
|
572
577
|
secondButtonClick={() =>
|
|
573
|
-
handleChangeOrderStatus && handleChangeOrderStatus(9)
|
|
578
|
+
handleChangeOrderStatus && isGrantedPermissions ? handleChangeOrderStatus(9) : goToPermissionPage()
|
|
574
579
|
}
|
|
575
580
|
firstButtonClick={() =>
|
|
576
581
|
handleViewActionOrder && handleViewActionOrder('pickupFailed')
|
|
@@ -579,8 +584,8 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
579
584
|
secondButton={true}
|
|
580
585
|
firstColorCustom={theme.colors.red}
|
|
581
586
|
secondColorCustom={theme.colors.green}
|
|
582
|
-
widthButton={isHideRejectButtons ? '100%': '45%'}
|
|
583
|
-
isHideRejectButtons={isHideRejectButtons}
|
|
587
|
+
widthButton={isHideRejectButtons || !isEnabledFailedPickupDriver ? '100%' : '45%'}
|
|
588
|
+
isHideRejectButtons={isHideRejectButtons || !isEnabledFailedPickupDriver}
|
|
584
589
|
/>
|
|
585
590
|
)}
|
|
586
591
|
{(validStatusComplete.includes(order?.status)) && (
|
|
@@ -590,7 +595,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
590
595
|
btnText={t('DELIVERY_FAILED', 'Delivery Failed')}
|
|
591
596
|
isSecondaryBtn={false}
|
|
592
597
|
secondButtonClick={() =>
|
|
593
|
-
handleChangeOrderStatus && handleChangeOrderStatus(11)
|
|
598
|
+
handleChangeOrderStatus && isGrantedPermissions ? handleChangeOrderStatus(11) : goToPermissionPage()
|
|
594
599
|
}
|
|
595
600
|
firstButtonClick={() =>
|
|
596
601
|
handleViewActionOrder && handleViewActionOrder('deliveryFailed')
|
|
@@ -599,22 +604,23 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
599
604
|
secondButton={true}
|
|
600
605
|
firstColorCustom={theme.colors.red}
|
|
601
606
|
secondColorCustom={theme.colors.green}
|
|
602
|
-
widthButton={isHideRejectButtons ? '100%': '45%'}
|
|
607
|
+
widthButton={isHideRejectButtons ? '100%' : '45%'}
|
|
603
608
|
isHideRejectButtons={isHideRejectButtons}
|
|
604
609
|
/>
|
|
605
610
|
</>
|
|
606
611
|
)}
|
|
607
612
|
{showFloatButtonsAcceptOrReject[order?.status] && (
|
|
608
613
|
<FloatingButton
|
|
614
|
+
disabled={props.order?.loading}
|
|
609
615
|
btnText={t('REJECT', 'Reject')}
|
|
610
616
|
isSecondaryBtn={false}
|
|
611
|
-
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')}
|
|
612
618
|
firstButtonClick={() => order?.isLogistic && (order?.order_group || logisticOrderStatus.includes(order?.status)) ? handleRejectLogisticOrder() : handleViewActionOrder('reject')}
|
|
613
619
|
secondBtnText={t('ACCEPT', 'Accept')}
|
|
614
620
|
secondButton={true}
|
|
615
621
|
firstColorCustom={theme.colors.red}
|
|
616
622
|
secondColorCustom={theme.colors.green}
|
|
617
|
-
widthButton={isHideRejectButtons ? '100%': '45%'}
|
|
623
|
+
widthButton={isHideRejectButtons ? '100%' : '45%'}
|
|
618
624
|
isHideRejectButtons={isHideRejectButtons}
|
|
619
625
|
/>
|
|
620
626
|
)}
|
|
@@ -680,11 +686,24 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
680
686
|
actions={actions}
|
|
681
687
|
orderTitle={orderTitle}
|
|
682
688
|
appTitle={appTitle}
|
|
689
|
+
isLoadingOrder={props.order?.loading}
|
|
683
690
|
/>
|
|
684
691
|
</OModal>
|
|
685
692
|
)}
|
|
686
693
|
</View>
|
|
687
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
|
+
)}
|
|
688
707
|
{alertState?.open && (
|
|
689
708
|
<Alert
|
|
690
709
|
open={alertState.open}
|