ordering-ui-react-native 0.21.66 → 0.21.67-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 +9 -6
- package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +1 -0
- package/themes/business/src/components/BusinessProductList/index.tsx +2 -1
- 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 +2 -3
- 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 +26 -11
- package/themes/business/src/components/NewOrderNotification/index.tsx +76 -26
- package/themes/business/src/components/OrderDetails/Business.tsx +63 -7
- package/themes/business/src/components/OrderDetails/Delivery.tsx +36 -21
- package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +90 -35
- package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +61 -35
- package/themes/business/src/components/OrderDetails/styles.tsx +39 -3
- 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 +250 -127
- 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 +4 -4
- 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 -4
- 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 +12 -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 +17 -8
- 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 +1 -1
- package/themes/original/src/components/Home/index.tsx +2 -10
- package/themes/original/src/components/LoginForm/Otp/index.tsx +0 -3
- 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/OrderEta.tsx +1 -1
- 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 ?? 0, longitude: location.longitude ?? 0},
|
|
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
|
{
|
|
@@ -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,12 +48,12 @@ 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,
|
|
51
54
|
orderTitle,
|
|
52
55
|
appTitle,
|
|
56
|
+
loadMessages
|
|
53
57
|
} = props;
|
|
54
58
|
|
|
55
59
|
const theme = useTheme();
|
|
@@ -57,6 +61,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
57
61
|
const [{ parsePrice, parseNumber, parseDate }] = useUtils();
|
|
58
62
|
const [{ user, token }] = useSession();
|
|
59
63
|
const [{ configs }] = useConfig();
|
|
64
|
+
const { generateCommands } = usePrinterCommands()
|
|
60
65
|
const [, { showToast }] = useToast();
|
|
61
66
|
const [unreadAlert, setUnreadAlert] = useState({
|
|
62
67
|
business: false,
|
|
@@ -70,6 +75,11 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
70
75
|
const [openModalForAccept, setOpenModalForAccept] = useState(false);
|
|
71
76
|
const [openModalForMapView, setOpenModalForMapView] = useState(false);
|
|
72
77
|
const [isDriverModalVisible, setIsDriverModalVisible] = useState(false);
|
|
78
|
+
const [printerSettings, setPrinterSettings] = useState<any>('')
|
|
79
|
+
const [autoPrintEnabled, setAutoPrintEnabled] = useState<boolean>(false)
|
|
80
|
+
|
|
81
|
+
const orderToComplete = [4, 20, 21]
|
|
82
|
+
const orderToReady = [7, 14]
|
|
73
83
|
|
|
74
84
|
if (order?.status === 7 || order?.status === 4) {
|
|
75
85
|
if (drivers?.length > 0 && drivers) {
|
|
@@ -120,6 +130,16 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
120
130
|
}
|
|
121
131
|
}
|
|
122
132
|
|
|
133
|
+
const handleChangeOrderStatus = async (status: any, isAcceptOrReject: any = {}) => {
|
|
134
|
+
if (props.handleChangeOrderStatus) {
|
|
135
|
+
const order: any = await props.handleChangeOrderStatus(status, isAcceptOrReject)
|
|
136
|
+
|
|
137
|
+
if (order?.status === 7 && autoPrintEnabled && printerSettings) {
|
|
138
|
+
handleViewSummaryOrder()
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
123
143
|
const getFormattedSubOptionName = ({ quantity, name, position, price }: any) => {
|
|
124
144
|
if (name !== 'No') {
|
|
125
145
|
const pos = position && position !== 'whole' ? `(${t(position.toUpperCase(), position)})` : '';
|
|
@@ -279,7 +299,8 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
279
299
|
|
|
280
300
|
const handleOpenMessagesForBusiness = () => {
|
|
281
301
|
setOpenModalForBusiness(true);
|
|
282
|
-
readMessages && readMessages()
|
|
302
|
+
readMessages && readMessages()
|
|
303
|
+
loadMessages && loadMessages()
|
|
283
304
|
setUnreadAlert({ ...unreadAlert, business: false });
|
|
284
305
|
};
|
|
285
306
|
|
|
@@ -291,7 +312,28 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
291
312
|
setOpenModalForAccept(true);
|
|
292
313
|
};
|
|
293
314
|
|
|
315
|
+
const printAction = async (printerSettings: any, commands: any, showAlert: boolean = true) => {
|
|
316
|
+
try {
|
|
317
|
+
var printResult = await StarPRNT.print(printerSettings?.emulation, commands, printerSettings?.portName);
|
|
318
|
+
showAlert && showToast(ToastType.Info, t('ORDER_PRINTED_SUCCESS', 'Order printed'), 1000)
|
|
319
|
+
} catch (e) {
|
|
320
|
+
showAlert && showToast(ToastType.Error, t('ORDER_PRINTED_FAILED', 'Order not printed, connection failed'), 1000)
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
|
|
294
324
|
const handleViewSummaryOrder = () => {
|
|
325
|
+
if (printerSettings) {
|
|
326
|
+
printerSettings.map((printer: any, idx: number) => {
|
|
327
|
+
const commands: any = generateCommands({
|
|
328
|
+
...order,
|
|
329
|
+
orderStatus: getOrderStatus(order?.status, t)?.value
|
|
330
|
+
}, printer?.printMode)
|
|
331
|
+
commands.push({ appendCutPaper: StarPRNT.CutPaperAction.PartialCutWithFeed })
|
|
332
|
+
|
|
333
|
+
printAction(printer, commands, idx === printerSettings.length - 1)
|
|
334
|
+
})
|
|
335
|
+
return
|
|
336
|
+
}
|
|
295
337
|
navigation?.navigate &&
|
|
296
338
|
navigation.navigate('OrderSummary', {
|
|
297
339
|
order,
|
|
@@ -300,6 +342,8 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
300
342
|
};
|
|
301
343
|
|
|
302
344
|
const handleCloseModal = () => {
|
|
345
|
+
readMessages && readMessages()
|
|
346
|
+
loadMessages && loadMessages()
|
|
303
347
|
setOpenModalForBusiness(false);
|
|
304
348
|
};
|
|
305
349
|
|
|
@@ -340,7 +384,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
340
384
|
},
|
|
341
385
|
{
|
|
342
386
|
...order?.customer?.location,
|
|
343
|
-
title: order?.customer?.name ??
|
|
387
|
+
title: order?.customer?.name ?? t('CUSTOMER', 'Customer'),
|
|
344
388
|
address: {
|
|
345
389
|
addressName: order?.customer?.address,
|
|
346
390
|
zipcode: order?.customer?.zipcode
|
|
@@ -372,6 +416,17 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
372
416
|
}
|
|
373
417
|
}, [driverLocation]);
|
|
374
418
|
|
|
419
|
+
useEffect(() => {
|
|
420
|
+
const getStorageData = async () => {
|
|
421
|
+
const printers = await _retrieveStoreData('printers')
|
|
422
|
+
const autoPrint = await _retrieveStoreData('auto_print_after_accept_order')
|
|
423
|
+
setPrinterSettings(printers?.length && printers)
|
|
424
|
+
setAutoPrintEnabled(!!autoPrint)
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
getStorageData()
|
|
428
|
+
}, [])
|
|
429
|
+
|
|
375
430
|
const styles = StyleSheet.create({
|
|
376
431
|
driverOff: {
|
|
377
432
|
backgroundColor: theme.colors.notAvailable,
|
|
@@ -432,6 +487,8 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
432
487
|
handleCopyClipboard={handleCopyClipboard}
|
|
433
488
|
handleArrowBack={handleArrowBack}
|
|
434
489
|
isCustomView={props.isCustomView}
|
|
490
|
+
messages={messages}
|
|
491
|
+
messagesReadList={messagesReadList}
|
|
435
492
|
/>
|
|
436
493
|
<OrderDetailsContainer
|
|
437
494
|
keyboardShouldPersistTaps="handled"
|
|
@@ -580,7 +637,6 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
580
637
|
</>
|
|
581
638
|
<View style={{ height: 30 }} />
|
|
582
639
|
</OrderDetailsContainer>
|
|
583
|
-
|
|
584
640
|
{order &&
|
|
585
641
|
Object.keys(order).length > 0 &&
|
|
586
642
|
getOrderStatus(order?.status, t)?.value ===
|
|
@@ -597,7 +653,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
597
653
|
widthButton={'45%'}
|
|
598
654
|
/>
|
|
599
655
|
)}
|
|
600
|
-
{order?.status
|
|
656
|
+
{orderToReady.includes(order?.status) && (
|
|
601
657
|
<FloatingButton
|
|
602
658
|
btnText={t('READY_FOR_PICKUP', 'Ready for pickup')}
|
|
603
659
|
colorTxt1={theme.colors.primary}
|
|
@@ -607,7 +663,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
607
663
|
disabled={loading}
|
|
608
664
|
/>
|
|
609
665
|
)}
|
|
610
|
-
{order?.status
|
|
666
|
+
{orderToComplete.includes(order?.status) && ![1].includes(order?.delivery_type) && (
|
|
611
667
|
<FloatingButton
|
|
612
668
|
btnText={t(
|
|
613
669
|
'ORDER_NOT_PICKEDUP_BY_CUSTOMER',
|
|
@@ -618,7 +674,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
618
674
|
secondButtonClick={() => handleChangeOrderStatus?.(15)}
|
|
619
675
|
firstButtonClick={() => handleChangeOrderStatus?.(17)}
|
|
620
676
|
secondBtnText={t(
|
|
621
|
-
'
|
|
677
|
+
'ORDER_PICKUP_COMPLETED_BY_CUSTOMER',
|
|
622
678
|
'Pickup completed by customer',
|
|
623
679
|
)}
|
|
624
680
|
secondButton={true}
|
|
@@ -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}
|