ordering-ui-react-native 0.21.83 → 0.21.84-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/BusinessController/index.tsx +8 -3
- 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 +44 -27
- 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 +36 -17
- package/themes/business/src/components/NewOrderNotification/index.tsx +64 -28
- package/themes/business/src/components/OrderDetails/Business.tsx +65 -7
- package/themes/business/src/components/OrderDetails/Delivery.tsx +35 -20
- package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +110 -40
- package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +50 -24
- package/themes/business/src/components/OrderDetails/styles.tsx +39 -3
- package/themes/business/src/components/OrderDetails/usePrinterCommands.tsx +221 -0
- package/themes/business/src/components/OrderSummary/index.tsx +223 -73
- package/themes/business/src/components/OrdersListManager/index.tsx +9 -1
- package/themes/business/src/components/OrdersOption/index.tsx +247 -159
- package/themes/business/src/components/PhoneInputNumber/index.tsx +8 -5
- package/themes/business/src/components/PreviousMessages/index.tsx +20 -3
- package/themes/business/src/components/PreviousOrders/OrderItem.tsx +27 -16
- package/themes/business/src/components/PreviousOrders/index.tsx +5 -3
- package/themes/business/src/components/PrinterEdition/MessageAlert.tsx +33 -0
- package/themes/business/src/components/PrinterEdition/index.tsx +431 -0
- package/themes/business/src/components/PrinterEdition/printerList.tsx +23 -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/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 +63 -30
- 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/layouts/SafeAreaContainer.tsx +35 -19
- package/themes/business/src/types/index.tsx +23 -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 +5 -8
- package/themes/original/src/components/BusinessController/index.tsx +12 -7
- package/themes/original/src/components/BusinessItemAccordion/index.tsx +13 -5
- 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 +2 -2
- package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
- package/themes/original/src/components/BusinessProductsListing/index.tsx +18 -6
- package/themes/original/src/components/BusinessTypeFilter/index.tsx +9 -8
- package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +2 -1
- package/themes/original/src/components/BusinessesListing/Layout/Original/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 +43 -15
- package/themes/original/src/components/CartContent/index.tsx +21 -8
- package/themes/original/src/components/Checkout/index.tsx +108 -60
- 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 +7 -9
- 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 +139 -87
- package/themes/original/src/components/MultiOrdersDetails/index.tsx +2 -1
- 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 +9 -9
- package/themes/original/src/components/OrderDetails/index.tsx +32 -13
- 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/OrderSummary/index.tsx +28 -9
- 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/PaymentOptionStripe/index.tsx +0 -5
- package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
- package/themes/original/src/components/PaymentOptions/index.tsx +17 -9
- 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 +17 -20
- package/themes/original/src/components/ProductForm/index.tsx +107 -102
- 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 +16 -8
- 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 +86 -78
- package/themes/original/src/components/SingleOrderCard/index.tsx +7 -5
- package/themes/original/src/components/SingleProductCard/index.tsx +3 -4
- package/themes/original/src/components/SingleProductCard/styles.tsx +0 -3
- package/themes/original/src/components/StripeCardForm/index.tsx +0 -3
- package/themes/original/src/components/StripeCardsList/index.tsx +10 -3
- package/themes/original/src/components/StripeElementsForm/index.tsx +77 -60
- 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/TaxInformation/index.tsx +3 -2
- 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/UserDetails/index.tsx +3 -2
- package/themes/original/src/components/UserFormDetails/index.tsx +155 -131
- package/themes/original/src/components/UserProfile/index.tsx +11 -2
- package/themes/original/src/components/Wallets/index.tsx +6 -3
- 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 +5 -4
- package/themes/original/src/components/shared/OInput.tsx +4 -8
- 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
|
@@ -53,16 +53,23 @@ const MapViewComponent = (props: MapViewParams) => {
|
|
|
53
53
|
|
|
54
54
|
const fitCoordinates = (location?: any) => {
|
|
55
55
|
if (mapRef.current) {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
56
|
+
const isSendCoordinates =
|
|
57
|
+
location &&
|
|
58
|
+
userLocation &&
|
|
59
|
+
location.latitude !== userLocation.latitude &&
|
|
60
|
+
location.longitude !== userLocation.longitude &&
|
|
61
|
+
location.latitude !== 0 &&
|
|
62
|
+
location.longitude !== 0 &&
|
|
63
|
+
userLocation.latitude !== 0 &&
|
|
64
|
+
userLocation.longitude !== 0
|
|
65
|
+
|
|
66
|
+
isSendCoordinates && mapRef.current.fitToCoordinates(
|
|
67
|
+
[location, userLocation].map(_location => ({
|
|
68
|
+
latitude: _location.latitude,
|
|
69
|
+
longitude: _location.longitude
|
|
70
|
+
})),
|
|
64
71
|
{
|
|
65
|
-
edgePadding: { top: 120, right: 120, bottom: 120, left: 120 }
|
|
72
|
+
edgePadding: { top: 120, right: 120, bottom: 120, left: 120 }
|
|
66
73
|
},
|
|
67
74
|
);
|
|
68
75
|
}
|
|
@@ -133,8 +140,20 @@ const MapViewComponent = (props: MapViewParams) => {
|
|
|
133
140
|
const RenderMarker = ({ marker, customer, orderIds }: { marker: any, customer?: boolean, orderIds?: Array<number> }) => {
|
|
134
141
|
const markerRef = useRef<any>()
|
|
135
142
|
|
|
136
|
-
let coordinateLat = (customer
|
|
137
|
-
|
|
143
|
+
let coordinateLat = (customer
|
|
144
|
+
? typeof marker?.customer?.location?.lat === 'number' && !Number.isNaN(marker?.customer?.location?.lat)
|
|
145
|
+
? marker?.customer?.location?.lat
|
|
146
|
+
: 0
|
|
147
|
+
: typeof marker?.business?.location?.lat === 'number' && !Number.isNaN(marker?.business?.location?.lat)
|
|
148
|
+
? marker?.business?.location?.lat
|
|
149
|
+
: 0) ?? (initialPosition?.latitude || 0)
|
|
150
|
+
let coordinateLng = (customer
|
|
151
|
+
? typeof marker?.customer?.location?.lng === 'number' && !Number.isNaN(marker?.customer?.location?.lng)
|
|
152
|
+
? marker?.customer?.location?.lng
|
|
153
|
+
: 0
|
|
154
|
+
: typeof marker?.business?.location?.lng === 'number' && !Number.isNaN(marker?.business?.location?.lng)
|
|
155
|
+
? marker?.business?.location?.lng
|
|
156
|
+
: 0) ?? (initialPosition?.longitude || 0)
|
|
138
157
|
|
|
139
158
|
useEffect(() => {
|
|
140
159
|
if (
|
|
@@ -154,8 +173,8 @@ const MapViewComponent = (props: MapViewParams) => {
|
|
|
154
173
|
}}
|
|
155
174
|
onPress={() =>
|
|
156
175
|
setLocationSelected({
|
|
157
|
-
latitude:
|
|
158
|
-
longitude:
|
|
176
|
+
latitude: coordinateLat,
|
|
177
|
+
longitude: coordinateLng
|
|
159
178
|
})
|
|
160
179
|
}
|
|
161
180
|
ref={(ref) => markerRef.current = ref}
|
|
@@ -235,8 +254,8 @@ const MapViewComponent = (props: MapViewParams) => {
|
|
|
235
254
|
ref={mapRef}
|
|
236
255
|
provider={PROVIDER_GOOGLE}
|
|
237
256
|
initialRegion={{
|
|
238
|
-
latitude: initialPosition?.latitude,
|
|
239
|
-
longitude: initialPosition?.longitude,
|
|
257
|
+
latitude: initialPosition?.latitude || 0,
|
|
258
|
+
longitude: initialPosition?.longitude || 0,
|
|
240
259
|
latitudeDelta: haveOrders ? 0.01 : 0.1,
|
|
241
260
|
longitudeDelta: haveOrders ? 0.01 * ASPECT_RATIO : 0.1 * ASPECT_RATIO,
|
|
242
261
|
}}
|
|
@@ -266,8 +285,8 @@ const MapViewComponent = (props: MapViewParams) => {
|
|
|
266
285
|
))}
|
|
267
286
|
<Marker
|
|
268
287
|
coordinate={{
|
|
269
|
-
latitude: location.lat,
|
|
270
|
-
longitude: location.lng,
|
|
288
|
+
latitude: typeof location.lat === 'number' && !Number.isNaN(location.lat) ? location.lat : 0,
|
|
289
|
+
longitude: typeof location.lng === 'number' && !Number.isNaN(location.lng) ? location.lng : 0,
|
|
271
290
|
}}
|
|
272
291
|
title={t('YOUR_LOCATION', 'Your Location')}
|
|
273
292
|
>
|
|
@@ -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'
|
|
@@ -17,7 +20,9 @@ import {
|
|
|
17
20
|
useEvent,
|
|
18
21
|
useLanguage,
|
|
19
22
|
useSession,
|
|
20
|
-
useConfig
|
|
23
|
+
useConfig,
|
|
24
|
+
useToast,
|
|
25
|
+
ToastType
|
|
21
26
|
} from 'ordering-components/native'
|
|
22
27
|
|
|
23
28
|
import { OIcon, OText } from '../shared'
|
|
@@ -32,26 +37,47 @@ const SoundPlayerComponent = (props: any) => {
|
|
|
32
37
|
|
|
33
38
|
const theme = useTheme()
|
|
34
39
|
const [count, setCount] = useState(0);
|
|
35
|
-
|
|
40
|
+
const [isEnabledReadStorage, setIsEnabledReadStorage] = useState(true)
|
|
36
41
|
const URL_SOUND = 'https://d33aymufw4jvwf.cloudfront.net/notification.mp3' ?? theme.sounds.notification
|
|
37
42
|
|
|
38
43
|
useEffect(() => {
|
|
39
44
|
const id = setInterval(() => setCount(count + 1), 2500)
|
|
40
45
|
|
|
41
46
|
const playSound = async () => {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
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()
|
|
45
57
|
}
|
|
46
|
-
|
|
47
|
-
playSound()
|
|
48
58
|
|
|
49
59
|
return () => {
|
|
50
|
-
SoundPlayer.stop()
|
|
51
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
|
+
}
|
|
52
77
|
}
|
|
53
|
-
|
|
78
|
+
// checkSoundMedia()
|
|
54
79
|
|
|
80
|
+
}, [])
|
|
55
81
|
return (
|
|
56
82
|
<Modal
|
|
57
83
|
animationType='slide'
|
|
@@ -91,23 +117,23 @@ const SoundPlayerComponent = (props: any) => {
|
|
|
91
117
|
}
|
|
92
118
|
|
|
93
119
|
const NewOrderNotificationUI = (props: any) => {
|
|
94
|
-
const { isBusinessApp, evtList } = props
|
|
95
|
-
|
|
120
|
+
const { isBusinessApp, evtList, orderStatus } = props
|
|
121
|
+
const [, t] = useLanguage()
|
|
96
122
|
const [events] = useEvent()
|
|
97
123
|
const [{ user, token }] = useSession()
|
|
98
124
|
const [ordering] = useApi()
|
|
99
|
-
const [{
|
|
125
|
+
const [, { showToast }] = useToast()
|
|
100
126
|
const { getCurrentLocation } = useLocation()
|
|
101
127
|
const [currentEvent, setCurrentEvent] = useState<any>(null)
|
|
102
128
|
|
|
103
|
-
const
|
|
104
|
-
? configs?.notification_business_states?.value.split('|').map((value: any) => Number(value)) || []
|
|
105
|
-
: configs?.notification_driver_states?.value.split('|').map((value: any) => Number(value)) || []
|
|
106
|
-
|
|
107
|
-
const handleEventNotification = async (evtType: number, value: any) => {
|
|
129
|
+
const handleEventNotification = async (evtType: number, value: any, orderStatus?: any) => {
|
|
108
130
|
if (value?.driver) {
|
|
109
131
|
try {
|
|
110
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
|
+
}
|
|
111
137
|
await fetch(`${ordering.root}/users/${user.id}/locations`, {
|
|
112
138
|
method: 'POST',
|
|
113
139
|
body: JSON.stringify({
|
|
@@ -126,11 +152,11 @@ const NewOrderNotificationUI = (props: any) => {
|
|
|
126
152
|
} catch { }
|
|
127
153
|
const duration = moment.duration(moment().diff(moment.utc(value?.last_driver_assigned_at)))
|
|
128
154
|
const assignedSecondsDiff = duration.asSeconds()
|
|
129
|
-
if (assignedSecondsDiff < 5 && !isBusinessApp && !value?.logistic_status
|
|
155
|
+
if (assignedSecondsDiff < 5 && !isBusinessApp && !value?.logistic_status) {
|
|
130
156
|
setCurrentEvent({ evt: 2, orderId: value?.id ?? value?.order_id })
|
|
131
157
|
}
|
|
132
158
|
}
|
|
133
|
-
if (!orderStatus.includes(value.status) || value?.author_id === user.id) return
|
|
159
|
+
if ((!orderStatus.includes(value.status) && evtType !== 1 && isBusinessApp) || value?.author_id === user.id) return
|
|
134
160
|
setCurrentEvent({
|
|
135
161
|
evt: evtType,
|
|
136
162
|
orderId: value?.driver
|
|
@@ -142,11 +168,21 @@ const NewOrderNotificationUI = (props: any) => {
|
|
|
142
168
|
}
|
|
143
169
|
|
|
144
170
|
useEffect(() => {
|
|
145
|
-
events
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
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
|
+
}
|
|
150
186
|
|
|
151
187
|
return () => {
|
|
152
188
|
events.off('message_added_notification', (o: any) => handleEventNotification(1, o))
|
|
@@ -155,7 +191,7 @@ const NewOrderNotificationUI = (props: any) => {
|
|
|
155
191
|
events.off('request_register_notification', (o: any) => handleEventNotification(2, o))
|
|
156
192
|
events.off('request_update_notification', (o: any) => handleEventNotification(3, o))
|
|
157
193
|
}
|
|
158
|
-
}, [])
|
|
194
|
+
}, [orderStatus, events])
|
|
159
195
|
|
|
160
196
|
useEffect(() => {
|
|
161
197
|
return () => setCurrentEvent(null)
|
|
@@ -163,13 +199,13 @@ const NewOrderNotificationUI = (props: any) => {
|
|
|
163
199
|
|
|
164
200
|
return (
|
|
165
201
|
<>
|
|
166
|
-
{!!currentEvent
|
|
202
|
+
{!!currentEvent && (
|
|
167
203
|
<SoundPlayerComponent
|
|
168
204
|
evtList={evtList}
|
|
169
205
|
currentEvent={currentEvent}
|
|
170
206
|
handleCloseEvents={() => setCurrentEvent(null)}
|
|
171
207
|
/>
|
|
172
|
-
)
|
|
208
|
+
)}
|
|
173
209
|
</>
|
|
174
210
|
)
|
|
175
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,13 @@ 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,
|
|
57
|
+
notificationApp
|
|
53
58
|
} = props;
|
|
54
59
|
|
|
55
60
|
const theme = useTheme();
|
|
@@ -57,6 +62,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
57
62
|
const [{ parsePrice, parseNumber, parseDate }] = useUtils();
|
|
58
63
|
const [{ user, token }] = useSession();
|
|
59
64
|
const [{ configs }] = useConfig();
|
|
65
|
+
const { generateCommands } = usePrinterCommands()
|
|
60
66
|
const [, { showToast }] = useToast();
|
|
61
67
|
const [unreadAlert, setUnreadAlert] = useState({
|
|
62
68
|
business: false,
|
|
@@ -70,6 +76,11 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
70
76
|
const [openModalForAccept, setOpenModalForAccept] = useState(false);
|
|
71
77
|
const [openModalForMapView, setOpenModalForMapView] = useState(false);
|
|
72
78
|
const [isDriverModalVisible, setIsDriverModalVisible] = useState(false);
|
|
79
|
+
const [printerSettings, setPrinterSettings] = useState<any>('')
|
|
80
|
+
const [autoPrintEnabled, setAutoPrintEnabled] = useState<boolean>(false)
|
|
81
|
+
|
|
82
|
+
const orderToComplete = [4, 20, 21]
|
|
83
|
+
const orderToReady = [7, 14]
|
|
73
84
|
|
|
74
85
|
if (order?.status === 7 || order?.status === 4) {
|
|
75
86
|
if (drivers?.length > 0 && drivers) {
|
|
@@ -120,6 +131,16 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
120
131
|
}
|
|
121
132
|
}
|
|
122
133
|
|
|
134
|
+
const handleChangeOrderStatus = async (status: any, isAcceptOrReject: any = {}) => {
|
|
135
|
+
if (props.handleChangeOrderStatus) {
|
|
136
|
+
const order: any = await props.handleChangeOrderStatus(status, isAcceptOrReject)
|
|
137
|
+
|
|
138
|
+
if (order?.status === 7 && autoPrintEnabled && printerSettings) {
|
|
139
|
+
handleViewSummaryOrder()
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
123
144
|
const getFormattedSubOptionName = ({ quantity, name, position, price }: any) => {
|
|
124
145
|
if (name !== 'No') {
|
|
125
146
|
const pos = position && position !== 'whole' ? `(${t(position.toUpperCase(), position)})` : '';
|
|
@@ -279,7 +300,8 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
279
300
|
|
|
280
301
|
const handleOpenMessagesForBusiness = () => {
|
|
281
302
|
setOpenModalForBusiness(true);
|
|
282
|
-
readMessages && readMessages()
|
|
303
|
+
readMessages && readMessages()
|
|
304
|
+
loadMessages && loadMessages()
|
|
283
305
|
setUnreadAlert({ ...unreadAlert, business: false });
|
|
284
306
|
};
|
|
285
307
|
|
|
@@ -291,7 +313,28 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
291
313
|
setOpenModalForAccept(true);
|
|
292
314
|
};
|
|
293
315
|
|
|
316
|
+
const printAction = async (printerSettings: any, commands: any, showAlert: boolean = true) => {
|
|
317
|
+
try {
|
|
318
|
+
var printResult = await StarPRNT.print(printerSettings?.emulation, commands, printerSettings?.portName);
|
|
319
|
+
showAlert && showToast(ToastType.Info, t('ORDER_PRINTED_SUCCESS', 'Order printed'), 1000)
|
|
320
|
+
} catch (e) {
|
|
321
|
+
showAlert && showToast(ToastType.Error, t('ORDER_PRINTED_FAILED', 'Order not printed, connection failed'), 1000)
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
|
|
294
325
|
const handleViewSummaryOrder = () => {
|
|
326
|
+
if (printerSettings) {
|
|
327
|
+
printerSettings.map((printer: any, idx: number) => {
|
|
328
|
+
const commands: any = generateCommands({
|
|
329
|
+
...order,
|
|
330
|
+
orderStatus: getOrderStatus(order?.status, t)?.value
|
|
331
|
+
}, printer?.printMode)
|
|
332
|
+
commands.push({ appendCutPaper: StarPRNT.CutPaperAction.PartialCutWithFeed })
|
|
333
|
+
|
|
334
|
+
printAction(printer, commands, idx === printerSettings.length - 1)
|
|
335
|
+
})
|
|
336
|
+
return
|
|
337
|
+
}
|
|
295
338
|
navigation?.navigate &&
|
|
296
339
|
navigation.navigate('OrderSummary', {
|
|
297
340
|
order,
|
|
@@ -300,6 +343,8 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
300
343
|
};
|
|
301
344
|
|
|
302
345
|
const handleCloseModal = () => {
|
|
346
|
+
readMessages && readMessages()
|
|
347
|
+
loadMessages && loadMessages()
|
|
303
348
|
setOpenModalForBusiness(false);
|
|
304
349
|
};
|
|
305
350
|
|
|
@@ -340,7 +385,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
340
385
|
},
|
|
341
386
|
{
|
|
342
387
|
...order?.customer?.location,
|
|
343
|
-
title: order?.customer?.name ??
|
|
388
|
+
title: order?.customer?.name ?? t('CUSTOMER', 'Customer'),
|
|
344
389
|
address: {
|
|
345
390
|
addressName: order?.customer?.address,
|
|
346
391
|
zipcode: order?.customer?.zipcode
|
|
@@ -372,6 +417,17 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
372
417
|
}
|
|
373
418
|
}, [driverLocation]);
|
|
374
419
|
|
|
420
|
+
useEffect(() => {
|
|
421
|
+
const getStorageData = async () => {
|
|
422
|
+
const printers = await _retrieveStoreData('printers')
|
|
423
|
+
const autoPrint = await _retrieveStoreData('auto_print_after_accept_order')
|
|
424
|
+
setPrinterSettings(printers?.length && printers)
|
|
425
|
+
setAutoPrintEnabled(!!autoPrint)
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
getStorageData()
|
|
429
|
+
}, [])
|
|
430
|
+
|
|
375
431
|
const styles = StyleSheet.create({
|
|
376
432
|
driverOff: {
|
|
377
433
|
backgroundColor: theme.colors.notAvailable,
|
|
@@ -432,6 +488,8 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
432
488
|
handleCopyClipboard={handleCopyClipboard}
|
|
433
489
|
handleArrowBack={handleArrowBack}
|
|
434
490
|
isCustomView={props.isCustomView}
|
|
491
|
+
messages={messages}
|
|
492
|
+
messagesReadList={messagesReadList}
|
|
435
493
|
/>
|
|
436
494
|
<OrderDetailsContainer
|
|
437
495
|
keyboardShouldPersistTaps="handled"
|
|
@@ -537,6 +595,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
537
595
|
messages={messages}
|
|
538
596
|
order={order}
|
|
539
597
|
setMessages={setMessages}
|
|
598
|
+
notificationApp={notificationApp}
|
|
540
599
|
/>
|
|
541
600
|
</OModal>
|
|
542
601
|
|
|
@@ -580,7 +639,6 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
580
639
|
</>
|
|
581
640
|
<View style={{ height: 30 }} />
|
|
582
641
|
</OrderDetailsContainer>
|
|
583
|
-
|
|
584
642
|
{order &&
|
|
585
643
|
Object.keys(order).length > 0 &&
|
|
586
644
|
getOrderStatus(order?.status, t)?.value ===
|
|
@@ -597,7 +655,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
597
655
|
widthButton={'45%'}
|
|
598
656
|
/>
|
|
599
657
|
)}
|
|
600
|
-
{order?.status
|
|
658
|
+
{orderToReady.includes(order?.status) && (
|
|
601
659
|
<FloatingButton
|
|
602
660
|
btnText={t('READY_FOR_PICKUP', 'Ready for pickup')}
|
|
603
661
|
colorTxt1={theme.colors.primary}
|
|
@@ -607,7 +665,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
607
665
|
disabled={loading}
|
|
608
666
|
/>
|
|
609
667
|
)}
|
|
610
|
-
{order?.status
|
|
668
|
+
{orderToComplete.includes(order?.status) && ![1].includes(order?.delivery_type) && (
|
|
611
669
|
<FloatingButton
|
|
612
670
|
btnText={t(
|
|
613
671
|
'ORDER_NOT_PICKEDUP_BY_CUSTOMER',
|
|
@@ -618,7 +676,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
618
676
|
secondButtonClick={() => handleChangeOrderStatus?.(15)}
|
|
619
677
|
firstButtonClick={() => handleChangeOrderStatus?.(17)}
|
|
620
678
|
secondBtnText={t(
|
|
621
|
-
'
|
|
679
|
+
'ORDER_PICKUP_COMPLETED_BY_CUSTOMER',
|
|
622
680
|
'Pickup completed by customer',
|
|
623
681
|
)}
|
|
624
682
|
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();
|
|
@@ -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}
|