ordering-ui-admin-external 1.39.9 → 1.40.0

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.
Files changed (114) hide show
  1. package/_bundles/{ordering-ui-admin.a195abab9ce10c18d568.js → ordering-ui-admin.27b7bb0f04b6581074ce.js} +2 -2
  2. package/_modules/components/BusinessIntelligence/InvoiceDriverPdf/index.js +2 -1
  3. package/_modules/components/BusinessIntelligence/Reports/ReportsSlaOrders/index.js +84 -8
  4. package/_modules/components/BusinessIntelligence/Reports/ReportsSlaOrders/styles.js +8 -4
  5. package/_modules/components/Delivery/DriversGroupAddForm/BusinessesForm/index.js +23 -4
  6. package/_modules/components/Delivery/DriversGroupAddForm/BusinessesForm/styles.js +7 -3
  7. package/_modules/components/Delivery/DriversGroupBusinesses/index.js +23 -4
  8. package/_modules/components/Delivery/DriversGroupBusinesses/styles.js +7 -3
  9. package/_modules/components/Delivery/DriversGroupsListing/index.js +2 -0
  10. package/_modules/components/Delivery/UsersListingHeader/index.js +9 -1
  11. package/_modules/components/Delivery/UsersListingHeader/styles.js +17 -2
  12. package/_modules/components/MyProducts/AdvancedSettings/index.js +20 -0
  13. package/_modules/components/MyProducts/AppLayout/index.js +56 -46
  14. package/_modules/components/MyProducts/CallCenterApp/index.js +2 -6
  15. package/_modules/components/MyProducts/CustomProject/index.js +1 -1
  16. package/_modules/components/MyProducts/CustomerApp/index.js +3 -1
  17. package/_modules/components/MyProducts/DriverApp/index.js +3 -1
  18. package/_modules/components/MyProducts/KioskApp/index.js +2 -4
  19. package/_modules/components/MyProducts/StoreApp/index.js +3 -1
  20. package/_modules/components/Orders/AllInOne/DriversManager/index.js +13 -5
  21. package/_modules/components/Orders/AllInOne/index.js +13 -4
  22. package/_modules/components/Orders/DeliveriesLocation/index.js +6 -2
  23. package/_modules/components/Orders/DriversBusyStatusFilter/index.js +5 -2
  24. package/_modules/components/Orders/DriversBusyStatusFilter/styles.js +5 -2
  25. package/_modules/components/Orders/DriversList/Driver.js +67 -0
  26. package/_modules/components/Orders/DriversList/index.js +21 -48
  27. package/_modules/components/Orders/DriversList/styles.js +35 -26
  28. package/_modules/components/Orders/DriversLocation/index.js +8 -13
  29. package/_modules/components/Orders/DriversManager/index.js +10 -1
  30. package/_modules/components/Orders/DriversManager/styles.js +18 -3
  31. package/_modules/components/Orders/DriversOnlineOfflineFilter/index.js +5 -2
  32. package/_modules/components/Orders/DriversOnlineOfflineFilter/styles.js +11 -8
  33. package/_modules/components/Orders/OrderContactInformation/index.js +39 -18
  34. package/_modules/components/Orders/OrderContactInformation/styles.js +4 -3
  35. package/_modules/components/Orders/OrderDetails/index.js +8 -3
  36. package/_modules/components/Orders/OrderDetailsHeader/styles.js +1 -1
  37. package/_modules/components/Orders/OrderStatusTypeSelector/index.js +19 -27
  38. package/_modules/components/Orders/OrdersDashboard/index.js +2 -2
  39. package/_modules/components/Orders/OrdersFilterGroup/index.js +5 -2
  40. package/_modules/components/Orders/OrdersFilterGroup/styles.js +9 -3
  41. package/_modules/components/Orders/OrdersLateralBar/index.js +1 -0
  42. package/_modules/components/Orders/OrdersListing/index.js +12 -3
  43. package/_modules/components/Orders/OrdersListing/styles.js +23 -2
  44. package/_modules/components/Orders/OrdersManager/index.js +4 -2
  45. package/_modules/components/Orders/OrdersManager/test.js +975 -0
  46. package/_modules/components/Orders/OrdersTable/Order.js +230 -0
  47. package/_modules/components/Orders/OrdersTable/index.js +30 -200
  48. package/_modules/components/Orders/ProductItemAccordion/styles.js +1 -1
  49. package/_modules/components/Settings/SettingsLogs/index.js +174 -0
  50. package/_modules/components/Settings/SettingsLogs/styles.js +80 -0
  51. package/_modules/components/Settings/index.js +7 -0
  52. package/_modules/components/SidebarMenu/index.js +6 -1
  53. package/_modules/components/Stores/BusinessAdd/BusinessDetails/index.js +8 -3
  54. package/_modules/index.js +6 -0
  55. package/index-template.js +1 -1
  56. package/package.json +2 -2
  57. package/src/components/BusinessIntelligence/InvoiceDriverPdf/index.js +1 -1
  58. package/src/components/BusinessIntelligence/Reports/ReportsSlaOrders/index.js +71 -2
  59. package/src/components/BusinessIntelligence/Reports/ReportsSlaOrders/styles.js +15 -1
  60. package/src/components/Delivery/DriversGroupAddForm/BusinessesForm/index.js +46 -18
  61. package/src/components/Delivery/DriversGroupAddForm/BusinessesForm/styles.js +12 -0
  62. package/src/components/Delivery/DriversGroupBusinesses/index.js +46 -18
  63. package/src/components/Delivery/DriversGroupBusinesses/styles.js +12 -0
  64. package/src/components/Delivery/DriversGroupsListing/index.js +2 -0
  65. package/src/components/Delivery/UsersListingHeader/index.js +14 -2
  66. package/src/components/Delivery/UsersListingHeader/styles.js +55 -0
  67. package/src/components/MyProducts/AdvancedSettings/index.js +6 -1
  68. package/src/components/MyProducts/AppLayout/index.js +82 -64
  69. package/src/components/MyProducts/CallCenterApp/index.js +2 -6
  70. package/src/components/MyProducts/CustomProject/index.js +1 -1
  71. package/src/components/MyProducts/CustomerApp/index.js +3 -1
  72. package/src/components/MyProducts/DriverApp/index.js +3 -1
  73. package/src/components/MyProducts/KioskApp/index.js +2 -4
  74. package/src/components/MyProducts/StoreApp/index.js +3 -1
  75. package/src/components/Orders/AllInOne/DriversManager/index.js +8 -2
  76. package/src/components/Orders/AllInOne/index.js +10 -2
  77. package/src/components/Orders/DeliveriesLocation/index.js +8 -2
  78. package/src/components/Orders/DriversBusyStatusFilter/index.js +3 -2
  79. package/src/components/Orders/DriversBusyStatusFilter/styles.js +5 -0
  80. package/src/components/Orders/DriversList/Driver.js +61 -0
  81. package/src/components/Orders/DriversList/index.js +14 -41
  82. package/src/components/Orders/DriversList/styles.js +25 -1
  83. package/src/components/Orders/DriversLocation/index.js +12 -25
  84. package/src/components/Orders/DriversManager/index.js +15 -2
  85. package/src/components/Orders/DriversManager/styles.js +55 -0
  86. package/src/components/Orders/DriversOnlineOfflineFilter/index.js +3 -2
  87. package/src/components/Orders/DriversOnlineOfflineFilter/styles.js +11 -0
  88. package/src/components/Orders/OrderContactInformation/index.js +26 -3
  89. package/src/components/Orders/OrderContactInformation/styles.js +16 -0
  90. package/src/components/Orders/OrderDetails/index.js +19 -2
  91. package/src/components/Orders/OrderDetailsHeader/styles.js +3 -1
  92. package/src/components/Orders/OrderStatusTypeSelector/index.js +19 -27
  93. package/src/components/Orders/OrdersDashboard/index.js +2 -2
  94. package/src/components/Orders/OrdersFilterGroup/index.js +2 -1
  95. package/src/components/Orders/OrdersFilterGroup/styles.js +14 -5
  96. package/src/components/Orders/OrdersLateralBar/index.js +1 -0
  97. package/src/components/Orders/OrdersListing/index.js +20 -4
  98. package/src/components/Orders/OrdersListing/styles.js +62 -0
  99. package/src/components/Orders/OrdersManager/index.js +2 -0
  100. package/src/components/Orders/OrdersManager/test.js +602 -0
  101. package/src/components/Orders/OrdersTable/Order.js +281 -0
  102. package/src/components/Orders/OrdersTable/index.js +35 -252
  103. package/src/components/Orders/ProductItemAccordion/styles.js +0 -4
  104. package/src/components/Settings/SettingsLogs/index.js +307 -0
  105. package/src/components/Settings/SettingsLogs/styles.js +268 -0
  106. package/src/components/Settings/index.js +2 -0
  107. package/src/components/SidebarMenu/index.js +8 -1
  108. package/src/components/Stores/BusinessAdd/BusinessDetails/index.js +9 -0
  109. package/src/index.js +2 -0
  110. package/template/app.js +4 -0
  111. package/template/components/ListenPageChanges/index.js +1 -0
  112. package/template/helmetdata.json +7 -0
  113. package/template/pages/SettingsLogs/index.js +12 -0
  114. /package/_bundles/{ordering-ui-admin.a195abab9ce10c18d568.js.LICENSE.txt → ordering-ui-admin.27b7bb0f04b6581074ce.js.LICENSE.txt} +0 -0
@@ -0,0 +1,602 @@
1
+ import React, { useEffect, useState } from 'react'
2
+ import PropTypes from 'prop-types'
3
+ import { useSession, useApi, useWebsocket, useConfig, useLanguage, useToast, ToastType } from 'ordering-components-admin-external'
4
+
5
+ export const OrdersManage = (props) => {
6
+ const {
7
+ UIComponent,
8
+ statusGroup,
9
+ driversPropsToFetch,
10
+ disableSocketRoomDriver,
11
+ useBatchSockets,
12
+ useFranchiseImages
13
+ } = props
14
+
15
+ const [ordering] = useApi()
16
+ const socket = useWebsocket()
17
+ const [{ auth, user, token, loading }] = useSession()
18
+ const [configState] = useConfig()
19
+ const [, t] = useLanguage()
20
+ const [, { showToast }] = useToast()
21
+
22
+ const requestsState = {}
23
+ const orderStatuesList = {
24
+ pending: [0, 13],
25
+ inProgress: [7, 8, 4, 9, 3, 14, 18, 19, 20, 21, 22, 23, 24, 25],
26
+ completed: [1, 11, 15],
27
+ cancelled: [2, 5, 6, 10, 12, 16, 17]
28
+ }
29
+
30
+ const [searchValue, setSearchValue] = useState(null)
31
+ const [ordersStatusGroup, setOrdersStatusGroup] = useState(statusGroup || 'pending')
32
+ const [filterValues, setFilterValues] = useState({})
33
+ const [timeStatus, setTimeStatus] = useState(null)
34
+ const [updateStatus, setUpdateStatus] = useState(null)
35
+ const [startMulitOrderStatusChange, setStartMulitOrderStatusChange] = useState(false)
36
+ const [actionStatus, setActionStatus] = useState({ loading: false, error: null })
37
+ const [deletedOrderIds, setDeletedOrderIds] = useState([])
38
+ const allowColumnsModel = {
39
+ slaBar: { visable: false, title: '', className: '', draggable: false, colSpan: 1, order: -2 },
40
+ orderNumber: { visable: true, title: '', className: '', draggable: false, colSpan: 1, order: -1 },
41
+ dateTime: { visable: true, title: '', className: '', draggable: false, colSpan: 1, order: 0 },
42
+ externalId: { visable: false, title: t('EXTERNAL_ID', 'External id'), className: 'externalId', draggable: true, colSpan: 1, order: 1 },
43
+ status: { visable: true, title: t('STATUS', 'Status'), className: 'statusInfo', draggable: true, colSpan: 1, order: 2 },
44
+ cartGroupId: { visable: true, title: t('GROUP_ORDER', 'Group Order'), className: 'groupOrderId', draggable: true, colSpan: 1, order: 3 },
45
+ driverGroupId: { visable: true, title: t('EXPORT_DRIVER_GROUP_ID', 'Driver Group Id'), className: 'driverGroupId', draggable: true, colSpan: 1, order: 4 },
46
+ business: { visable: true, title: t('BUSINESS', 'Business'), className: 'businessInfo', draggable: true, colSpan: 1, order: 5 },
47
+ customer: { visable: true, title: t('CUSTOMER', 'Customer'), className: 'customerInfo', draggable: true, colSpan: 1, order: 6 },
48
+ driver: { visable: true, title: t('DRIVER', 'Driver'), className: 'driverInfo', draggable: true, colSpan: 1, order: 7 },
49
+ advanced: { visable: true, title: t('ADVANCED_LOGISTICS', 'Advanced logistics'), className: 'advanced', draggable: true, colSpan: 3, order: 8 },
50
+ timer: { visable: false, title: t('SLA_TIMER', 'SLA’s timer'), className: 'timer', draggable: true, colSpan: 1, order: 9 },
51
+ eta: { visable: true, title: t('ETA', 'ETA'), className: 'eta', draggable: true, colSpan: 1, order: 10 },
52
+ total: { visable: true, title: '', className: '', draggable: false, colSpan: 1, order: 11 }
53
+ }
54
+ const [allowColumns, setAllowColumns] = useState(allowColumnsModel)
55
+ const [franchisesList, setFranchisesList] = useState({ loading: false, franchises: [], error: null })
56
+
57
+ /**
58
+ * Object to save driver group list
59
+ */
60
+ const [driverGroupList, setDriverGroupList] = useState({ groups: [], loading: false, error: null })
61
+ /**
62
+ * Object to save drivers
63
+ */
64
+ const [driversList, setDriversList] = useState({ drivers: [], loading: true, error: null })
65
+ /**
66
+ * Object to save paymethods
67
+ */
68
+ const [paymethodsList, setPaymethodsList] = useState({ paymethods: [], loading: true, error: null })
69
+ /**
70
+ * Object to save businesses
71
+ */
72
+ const [businessesList, setBusinessesList] = useState({ businesses: [], loading: true, error: null })
73
+ /**
74
+ * Array to save the cities
75
+ */
76
+ const [citiesList, setCitiesList] = useState([])
77
+
78
+ /**
79
+ * Object to save selected order ids
80
+ */
81
+ const [selectedOrderIds, setSelectedOrderIds] = useState([])
82
+ /**
83
+ * Object to save order substatuses
84
+ */
85
+ const [selectedSubOrderStatus, setSelectedSubOrderStatus] = useState({
86
+ pending: orderStatuesList?.pending,
87
+ inProgress: orderStatuesList?.inProgress,
88
+ completed: orderStatuesList?.completed,
89
+ cancelled: orderStatuesList?.cancelled,
90
+ all: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23]
91
+ })
92
+
93
+ /**
94
+ * Save ids of orders selected
95
+ * @param {string} orderId order id
96
+ */
97
+ const handleSelectedOrderIds = (orderId) => {
98
+ let _ids = [...selectedOrderIds]
99
+ if (!_ids.includes(orderId)) {
100
+ _ids.push(orderId)
101
+ } else {
102
+ _ids = _ids.filter((_id) => _id !== orderId)
103
+ }
104
+ setSelectedOrderIds(_ids)
105
+ }
106
+ /**
107
+ * Remove id of order updated or delected
108
+ * @param {string} orderId order id
109
+ */
110
+ const handleRemoveSelectedOrderId = (orderId) => {
111
+ let _ids = [...selectedOrderIds]
112
+ _ids = _ids.filter((_id) => _id !== orderId)
113
+ setSelectedOrderIds(_ids)
114
+ }
115
+
116
+ /**
117
+ * Change orders filter by statuses selected
118
+ * @param {string} ordersStatusGroup orders status
119
+ */
120
+ const handleOrdersStatusGroupFilter = (statusGroup) => {
121
+ if (statusGroup === ordersStatusGroup) return
122
+ setOrdersStatusGroup(statusGroup)
123
+ setSelectedOrderIds([])
124
+ }
125
+ /**
126
+ * Change text to search
127
+ * @param {string} search Search value
128
+ */
129
+ const handleChangeSearch = (search) => {
130
+ setSearchValue(search)
131
+ }
132
+ /**
133
+ * Save filter type values
134
+ * @param {object} types
135
+ */
136
+ const handleChangeFilterValues = (types) => {
137
+ setFilterValues(types)
138
+ }
139
+
140
+ /**
141
+ * save status for multi orders selected
142
+ * @param {number} status order status
143
+ */
144
+ const handleChangeMultiOrdersStatus = (status) => {
145
+ setUpdateStatus(status)
146
+ setStartMulitOrderStatusChange(true)
147
+ }
148
+ /**
149
+ * Method to change multi orders status from API
150
+ */
151
+ const handleChangeMultiOrderStatus = async (orderId) => {
152
+ try {
153
+ setActionStatus({ ...actionStatus, loading: true })
154
+ const requestOptions = {
155
+ method: 'PUT',
156
+ headers: {
157
+ 'Content-Type': 'application/json',
158
+ Authorization: `Bearer ${token}`
159
+ },
160
+ body: JSON.stringify({ status: updateStatus })
161
+ }
162
+ const response = await fetch(`${ordering.root}/orders/${orderId}`, requestOptions)
163
+ const { result, error } = await response.json()
164
+
165
+ if (parseInt(result.status) === updateStatus) {
166
+ const _ordersIds = [...selectedOrderIds]
167
+ _ordersIds.shift()
168
+ if (_ordersIds.length === 0) {
169
+ setStartMulitOrderStatusChange(false)
170
+ }
171
+ setSelectedOrderIds(_ordersIds)
172
+ }
173
+ setActionStatus({
174
+ loading: false,
175
+ error: error ? result : null
176
+ })
177
+ } catch (err) {
178
+ setActionStatus({ loading: false, error: [err.message] })
179
+ setStartMulitOrderStatusChange(false)
180
+ }
181
+ }
182
+
183
+ /**
184
+ * Delete orders for orders selected
185
+ */
186
+ const handleDeleteMultiOrders = async (code) => {
187
+ try {
188
+ showToast(ToastType.Info, t('LOADING', 'Loading'))
189
+ setActionStatus({ ...actionStatus, loading: true })
190
+
191
+ const payload = {
192
+ orders_id: selectedOrderIds
193
+ }
194
+ if (code) {
195
+ payload.deleted_action_code = code
196
+ }
197
+ const requestOptions = {
198
+ method: 'DELETE',
199
+ headers: {
200
+ 'Content-Type': 'application/json',
201
+ Authorization: `Bearer ${token}`
202
+ },
203
+ body: JSON.stringify(payload)
204
+ }
205
+ const response = await fetch(`${ordering.root}/orders`, requestOptions)
206
+ const content = await response.json()
207
+ if (!content.error) {
208
+ setDeletedOrderIds(selectedOrderIds)
209
+ setSelectedOrderIds([])
210
+ showToast(ToastType.Success, t('ORDERS_DELETED', 'Orders deleted'))
211
+ } else {
212
+ setActionStatus({
213
+ loading: true,
214
+ error: content.result
215
+ })
216
+ }
217
+ } catch (error) {
218
+ setActionStatus({ loading: false, error: [error.message] })
219
+ }
220
+ }
221
+
222
+ /**
223
+ * Method to get drivers from API
224
+ */
225
+ const getDrivers = async () => {
226
+ try {
227
+ const source = {}
228
+ requestsState.drivers = source
229
+
230
+ const { content: { result } } = await ordering
231
+ .setAccessToken(token)
232
+ .users()
233
+ .select(driversPropsToFetch)
234
+ .where([{ attribute: 'level', value: [4] }])
235
+ .get({ cancelToken: source })
236
+
237
+ setDriversList({
238
+ ...driversList,
239
+ loading: false,
240
+ drivers: result
241
+ })
242
+ } catch (err) {
243
+ setDriversList({
244
+ ...driversList,
245
+ loading: false,
246
+ error: err.message
247
+ })
248
+ }
249
+ }
250
+
251
+ const getControlsOrders = async () => {
252
+ try {
253
+ setActionStatus({ ...actionStatus, loading: true })
254
+ const requestOptions = {
255
+ method: 'GET',
256
+ headers: {
257
+ 'Content-Type': 'application/json',
258
+ Authorization: `Bearer ${token}`
259
+ }
260
+ }
261
+ const response = await fetch(`${ordering.root}/controls/orders`, requestOptions)
262
+ const content = await response.json()
263
+ if (!content.error) {
264
+ setCitiesList(content.result.cities)
265
+ setDriverGroupList({
266
+ ...driverGroupList,
267
+ loading: false,
268
+ groups: content.result.driver_groups
269
+ })
270
+ setPaymethodsList({
271
+ ...paymethodsList,
272
+ loading: false,
273
+ paymethods: content.result.paymethods
274
+ })
275
+ setBusinessesList({
276
+ ...businessesList,
277
+ loading: false,
278
+ businesses: content.result.businesses
279
+ })
280
+ setActionStatus({ ...actionStatus, loading: false })
281
+ } else {
282
+ setActionStatus({ loading: false, error: content?.result })
283
+ }
284
+ } catch (err) {
285
+ setActionStatus({ loading: false, error: [err.message] })
286
+ }
287
+ }
288
+
289
+ const getFranchises = async () => {
290
+ try {
291
+ setFranchisesList({ ...franchisesList, loading: true })
292
+ let where = null
293
+ const conditions = []
294
+ conditions.push({
295
+ attribute: 'enabled',
296
+ value: true
297
+ })
298
+ if (conditions.length) {
299
+ where = {
300
+ conditions,
301
+ conector: 'AND'
302
+ }
303
+ }
304
+ const requestOptions = {
305
+ method: 'GET',
306
+ headers: {
307
+ 'Content-Type': 'application/json',
308
+ Authorization: `Bearer ${token}`
309
+ }
310
+ }
311
+ const functionFetch = `${ordering.root}/franchises?where=${JSON.stringify(where)}`
312
+ const response = await fetch(functionFetch, requestOptions)
313
+ const { error, result } = await response.json()
314
+ if (!error) {
315
+ setFranchisesList({
316
+ ...franchisesList,
317
+ loading: false,
318
+ franchises: result
319
+ })
320
+ } else {
321
+ setFranchisesList({
322
+ ...franchisesList,
323
+ loading: false,
324
+ error: result
325
+ })
326
+ }
327
+ } catch (err) {
328
+ setFranchisesList({
329
+ ...franchisesList,
330
+ loading: false,
331
+ error: err
332
+ })
333
+ }
334
+ }
335
+
336
+ const handleJoinMainRooms = () => {
337
+ if (!useBatchSockets) {
338
+ socket.join('drivers')
339
+ } else {
340
+ socket.join({
341
+ room: 'driver_locations',
342
+ user_id: user?.id,
343
+ role: 'manager'
344
+ })
345
+ socket.join({
346
+ room: 'drivers',
347
+ user_id: user?.id,
348
+ role: 'manager'
349
+ })
350
+ }
351
+ }
352
+
353
+ const handleLeaveMainRooms = () => {
354
+ if (!useBatchSockets) {
355
+ socket.leave('drivers')
356
+ } else {
357
+ socket.leave({
358
+ room: 'driver_locations',
359
+ user_id: user?.id,
360
+ role: 'manager'
361
+ })
362
+ socket.leave({
363
+ room: 'drivers',
364
+ user_id: user?.id,
365
+ role: 'manager'
366
+ })
367
+ }
368
+ }
369
+
370
+ const handleSocketDisconnect = () => {
371
+ socket.socket.on('connect', handleJoinMainRooms)
372
+ }
373
+
374
+ /**
375
+ * Listening driver change
376
+ */
377
+ useEffect(() => {
378
+ if (loading) return
379
+ const handleUpdateDriver = (driver) => {
380
+ setDriversList(prevState => {
381
+ const driverIndex = prevState.drivers.findIndex(_driver => _driver.id === driver.id)
382
+ if (driverIndex !== -1) {
383
+ const updatedDrivers = [...prevState.drivers]
384
+ Object.assign(updatedDrivers[driverIndex], driver)
385
+ return { ...prevState, drivers: updatedDrivers }
386
+ } else {
387
+ const updatedDrivers = [...prevState.drivers, driver]
388
+ return { ...prevState, drivers: updatedDrivers }
389
+ }
390
+ })
391
+ }
392
+ const handleTrackingDriver = (trackingData) => {
393
+ setDriversList(prevState => {
394
+ const updatedDrivers = prevState.drivers.map(driver => {
395
+ if (driver.id === trackingData.driver_id) {
396
+ const updatedDriver = { ...driver }
397
+ if (typeof trackingData.location === 'string') {
398
+ const trackingLocation = trackingData.location
399
+ const _location = trackingLocation.replaceAll('\\', '')
400
+ const location = JSON.parse(_location)
401
+ updatedDriver.location = location
402
+ } else {
403
+ updatedDriver.location = trackingData.location
404
+ }
405
+ return updatedDriver
406
+ }
407
+ return driver
408
+ })
409
+
410
+ return { ...prevState, drivers: updatedDrivers }
411
+ })
412
+ }
413
+ const handleBatchDriverChanges = (changes) => {
414
+ setDriversList((prevState) => {
415
+ const updatedDrivers = prevState.drivers.map((driver) => {
416
+ const changeData = changes.find((change) => change.driver_id === driver.id)
417
+ if (changeData) {
418
+ const updatedDriver = { ...driver }
419
+ for (const change of changeData.changes) {
420
+ updatedDriver[change.attribute] = change.new
421
+ }
422
+ return updatedDriver
423
+ }
424
+ return driver
425
+ })
426
+ return { ...prevState, drivers: updatedDrivers };
427
+ })
428
+ }
429
+ const handleBatchDriverLocations = (locations) => {
430
+ setDriversList((prevState) => {
431
+ const updatedDrivers = prevState.drivers.map((driver) => {
432
+ const locationData = locations.find((location) => location.driver_id === driver.id)
433
+ if (locationData) {
434
+ const updatedDriver = { ...driver }
435
+ updatedDriver.location = locationData.location
436
+ return updatedDriver
437
+ }
438
+ return driver
439
+ })
440
+ return { ...prevState, drivers: updatedDrivers }
441
+ })
442
+ }
443
+
444
+ if (!disableSocketRoomDriver) {
445
+ if (!useBatchSockets) {
446
+ socket.on('drivers_update', handleUpdateDriver)
447
+ socket.on('tracking_driver', handleTrackingDriver)
448
+ } else {
449
+ socket.on('batch_driver_locations', handleBatchDriverLocations)
450
+ socket.on('batch_driver_changes', handleBatchDriverChanges)
451
+ }
452
+ }
453
+ return () => {
454
+ if (!disableSocketRoomDriver) {
455
+ if (!useBatchSockets) {
456
+ socket.off('drivers_update', handleUpdateDriver)
457
+ socket.off('tracking_driver', handleTrackingDriver)
458
+ } else {
459
+ socket.off('batch_driver_locations', handleBatchDriverLocations)
460
+ socket.off('batch_driver_changes', handleBatchDriverChanges)
461
+ }
462
+ }
463
+ }
464
+ }, [socket, loading, useBatchSockets])
465
+
466
+ useEffect(() => {
467
+ if (!auth || loading || !socket?.socket || disableSocketRoomDriver) return
468
+ handleJoinMainRooms()
469
+ socket.socket.on('disconnect', handleSocketDisconnect)
470
+
471
+ return () => {
472
+ handleLeaveMainRooms()
473
+ socket.socket.off('disconnect', handleSocketDisconnect)
474
+ }
475
+ }, [socket?.socket, auth, loading, disableSocketRoomDriver, useBatchSockets])
476
+
477
+ /**
478
+ * Listening multi orders action start to change status
479
+ */
480
+ useEffect(() => {
481
+ if (!startMulitOrderStatusChange || selectedOrderIds.length === 0) return
482
+ handleChangeMultiOrderStatus(selectedOrderIds[0])
483
+ }, [selectedOrderIds, startMulitOrderStatusChange])
484
+
485
+ useEffect(() => {
486
+ if (loading) return
487
+ if (user?.level === 0 || user?.level === 2 || user?.level === 5) {
488
+ getDrivers()
489
+ }
490
+ getControlsOrders()
491
+
492
+ return () => {
493
+ if (requestsState.drivers) {
494
+ requestsState.drivers.cancel()
495
+ }
496
+ }
497
+ }, [user, loading])
498
+
499
+ useEffect(() => {
500
+ if (!user.id || configState?.loading) return
501
+ const getUser = async () => {
502
+ try {
503
+ const response = await ordering.users(user.id).select(['settings']).get()
504
+ const { content: { error, result } } = response
505
+ if (!error && result.settings?.orderColumns) {
506
+ setAllowColumns(result.settings?.orderColumns)
507
+ return
508
+ }
509
+
510
+ setAllowColumns({
511
+ ...allowColumnsModel,
512
+ slaBar: { ...allowColumnsModel?.slaBar, visable: configState?.configs?.order_deadlines_enabled?.value === '1' },
513
+ timer: { ...allowColumnsModel?.timer, visable: configState?.configs?.order_deadlines_enabled?.value === '1' }
514
+ })
515
+ } catch (err) {
516
+ setAllowColumns({
517
+ ...allowColumnsModel,
518
+ slaBar: { ...allowColumnsModel?.slaBar, visable: configState?.configs?.order_deadlines_enabled?.value === '1' },
519
+ timer: { ...allowColumnsModel?.timer, visable: configState?.configs?.order_deadlines_enabled?.value === '1' }
520
+ })
521
+ }
522
+ }
523
+ getUser()
524
+ }, [user, configState])
525
+
526
+ useEffect(() => {
527
+ if (!ordering || !token || !useFranchiseImages) return
528
+ getFranchises()
529
+ }, [ordering, token, useFranchiseImages])
530
+
531
+ return (
532
+ <>
533
+ {UIComponent && (
534
+ <UIComponent
535
+ {...props}
536
+ searchValue={searchValue}
537
+ driverGroupList={driverGroupList}
538
+ driversList={driversList}
539
+ paymethodsList={paymethodsList}
540
+ businessesList={businessesList}
541
+ citiesList={citiesList}
542
+ ordersStatusGroup={ordersStatusGroup}
543
+ filterValues={filterValues}
544
+ multiOrderUpdateStatus={updateStatus}
545
+ selectedOrderIds={selectedOrderIds}
546
+ deletedOrderIds={deletedOrderIds}
547
+ startMulitOrderStatusChange={startMulitOrderStatusChange}
548
+ selectedSubOrderStatus={selectedSubOrderStatus}
549
+ handleSelectedSubOrderStatus={setSelectedSubOrderStatus}
550
+ handleSelectedOrderIds={handleSelectedOrderIds}
551
+ handleRemoveSelectedOrderId={handleRemoveSelectedOrderId}
552
+ handleChangeSearch={handleChangeSearch}
553
+ handleChangeFilterValues={handleChangeFilterValues}
554
+ handleOrdersStatusGroupFilter={handleOrdersStatusGroupFilter}
555
+ handleChangeMultiOrdersStatus={handleChangeMultiOrdersStatus}
556
+ handleDeleteMultiOrders={handleDeleteMultiOrders}
557
+ setSelectedOrderIds={setSelectedOrderIds}
558
+ allowColumns={allowColumns}
559
+ setAllowColumns={setAllowColumns}
560
+ timeStatus={timeStatus}
561
+ setTimeStatus={setTimeStatus}
562
+ franchisesList={franchisesList}
563
+ />
564
+ )}
565
+ </>
566
+ )
567
+ }
568
+
569
+ OrdersManage.propTypes = {
570
+ /**
571
+ * UI Component, this must be containt all graphic elements and use parent props
572
+ */
573
+ UIComponent: PropTypes.elementType,
574
+ /**
575
+ * Components types before my orders
576
+ * Array of type components, the parent props will pass to these components
577
+ */
578
+ beforeComponents: PropTypes.arrayOf(PropTypes.elementType),
579
+ /**
580
+ * Components types after my orders
581
+ * Array of type components, the parent props will pass to these components
582
+ */
583
+ afterComponents: PropTypes.arrayOf(PropTypes.elementType),
584
+ /**
585
+ * Elements before my orders
586
+ * Array of HTML/Components elements, these components will not get the parent props
587
+ */
588
+ beforeElements: PropTypes.arrayOf(PropTypes.element),
589
+ /**
590
+ * Elements after my orders
591
+ * Array of HTML/Components elements, these components will not get the parent props
592
+ */
593
+ afterElements: PropTypes.arrayOf(PropTypes.element)
594
+ }
595
+
596
+ OrdersManage.defaultProps = {
597
+ driversPropsToFetch: ['id', 'name', 'lastname', 'assigned_orders_count', 'available', 'phone', 'cellphone', 'location', 'photo', 'qualification', 'last_order_assigned_at'],
598
+ beforeComponents: [],
599
+ afterComponents: [],
600
+ beforeElements: [],
601
+ afterElements: []
602
+ }