@fleetbase/fleetops-engine 0.6.25 → 0.6.26

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 (48) hide show
  1. package/DRIVER_SCHEDULING.md +186 -0
  2. package/addon/components/driver/schedule.hbs +100 -0
  3. package/addon/components/driver/schedule.js +267 -0
  4. package/addon/components/order/kanban-card.hbs +2 -2
  5. package/addon/components/vehicle/details.hbs +594 -4
  6. package/addon/components/vehicle/form.hbs +467 -41
  7. package/addon/controllers/analytics/reports/index.js +3 -2
  8. package/addon/controllers/connectivity/devices/index.js +3 -3
  9. package/addon/controllers/connectivity/events/index.js +3 -2
  10. package/addon/controllers/connectivity/sensors/index.js +3 -5
  11. package/addon/controllers/connectivity/telematics/index.js +3 -1
  12. package/addon/controllers/maintenance/equipment/index.js +4 -4
  13. package/addon/controllers/maintenance/parts/index.js +4 -4
  14. package/addon/controllers/maintenance/work-orders/index.js +4 -4
  15. package/addon/controllers/management/contacts/customers.js +12 -10
  16. package/addon/controllers/management/contacts/index.js +3 -10
  17. package/addon/controllers/management/drivers/index/details.js +26 -13
  18. package/addon/controllers/management/drivers/index.js +4 -16
  19. package/addon/controllers/management/fleets/index.js +3 -13
  20. package/addon/controllers/management/fuel-reports/index.js +3 -10
  21. package/addon/controllers/management/issues/index.js +3 -12
  22. package/addon/controllers/management/places/index.js +4 -12
  23. package/addon/controllers/management/vehicles/index.js +3 -13
  24. package/addon/controllers/management/vendors/index.js +3 -13
  25. package/addon/controllers/operations/orders/index.js +5 -22
  26. package/addon/controllers/operations/scheduler/index.js +195 -6
  27. package/addon/controllers/operations/service-rates/index.js +34 -34
  28. package/addon/controllers/settings/payments/index.js +0 -6
  29. package/addon/routes.js +1 -0
  30. package/addon/services/driver-scheduling.js +171 -0
  31. package/addon/services/leaflet-layer-visibility-manager.js +4 -1
  32. package/addon/services/service-rate-actions.js +5 -1
  33. package/addon/templates/management/drivers/index/details/positions.hbs +1 -2
  34. package/addon/templates/management/drivers/index/details/schedule.hbs +1 -2
  35. package/addon/templates/operations/scheduler/index.hbs +48 -10
  36. package/addon/utils/fleet-ops-options.js +86 -0
  37. package/app/services/driver-scheduling.js +1 -0
  38. package/composer.json +1 -1
  39. package/extension.json +1 -1
  40. package/package.json +3 -3
  41. package/server/migrations/2025_11_17_033648_add_additional_columns_to_vehicles_table.php +142 -0
  42. package/server/src/Constraints/HOSConstraint.php +244 -0
  43. package/server/src/Http/Controllers/Api/v1/OrderController.php +1 -1
  44. package/server/src/Http/Controllers/Internal/v1/OrderController.php +8 -3
  45. package/server/src/Http/Resources/v1/Vehicle.php +197 -19
  46. package/server/src/Http/Resources/v1/VehicleWithoutDriver.php +211 -28
  47. package/server/src/Models/Driver.php +12 -8
  48. package/server/src/Models/Vehicle.php +101 -15
@@ -69,11 +69,11 @@ export default class ManagementFuelReportsIndexController extends Controller {
69
69
  get columns() {
70
70
  return [
71
71
  {
72
+ sticky: true,
72
73
  label: this.intl.t('column.id'),
73
74
  valuePath: 'public_id',
74
75
  cellComponent: 'table/cell/anchor',
75
76
  action: this.fuelReportActions.transition.view,
76
- width: '130px',
77
77
  resizable: true,
78
78
  sortable: true,
79
79
  filterable: true,
@@ -83,7 +83,6 @@ export default class ManagementFuelReportsIndexController extends Controller {
83
83
  {
84
84
  label: this.intl.t('column.reporter'),
85
85
  valuePath: 'reporter_name',
86
- width: '100px',
87
86
  resizable: true,
88
87
  sortable: true,
89
88
  filterable: true,
@@ -95,7 +94,6 @@ export default class ManagementFuelReportsIndexController extends Controller {
95
94
  {
96
95
  label: this.intl.t('column.driver'),
97
96
  valuePath: 'driver_name',
98
- width: '120px',
99
97
  cellComponent: 'table/cell/anchor',
100
98
  permission: 'fleet-ops view driver',
101
99
  onClick: this.fuelReportActions.viewDriver,
@@ -110,7 +108,6 @@ export default class ManagementFuelReportsIndexController extends Controller {
110
108
  {
111
109
  label: this.intl.t('column.vehicle'),
112
110
  valuePath: 'vehicle_name',
113
- width: '100px',
114
111
  cellComponent: 'table/cell/anchor',
115
112
  permission: 'fleet-ops view vehicle',
116
113
  onClick: this.fuelReportActions.viewVehicle,
@@ -127,7 +124,6 @@ export default class ManagementFuelReportsIndexController extends Controller {
127
124
  label: this.intl.t('column.status'),
128
125
  valuePath: 'status',
129
126
  cellComponent: 'table/cell/status',
130
- width: '100px',
131
127
  resizable: true,
132
128
  sortable: true,
133
129
  filterable: true,
@@ -137,7 +133,6 @@ export default class ManagementFuelReportsIndexController extends Controller {
137
133
  {
138
134
  label: this.intl.t('column.volume'),
139
135
  valuePath: 'volume',
140
- width: '130px',
141
136
  cellComponent: 'click-to-copy',
142
137
  resizable: true,
143
138
  sortable: true,
@@ -148,7 +143,6 @@ export default class ManagementFuelReportsIndexController extends Controller {
148
143
  {
149
144
  label: this.intl.t('column.odometer'),
150
145
  valuePath: 'odometer',
151
- width: '130px',
152
146
  cellComponent: 'click-to-copy',
153
147
  resizable: true,
154
148
  sortable: true,
@@ -160,7 +154,6 @@ export default class ManagementFuelReportsIndexController extends Controller {
160
154
  label: this.intl.t('column.created-at'),
161
155
  valuePath: 'createdAt',
162
156
  sortParam: 'created_at',
163
- width: '120px',
164
157
  resizable: true,
165
158
  sortable: true,
166
159
  filterable: true,
@@ -170,7 +163,6 @@ export default class ManagementFuelReportsIndexController extends Controller {
170
163
  label: this.intl.t('column.updated-at'),
171
164
  valuePath: 'updatedAt',
172
165
  sortParam: 'updated_at',
173
- width: '120px',
174
166
  resizable: true,
175
167
  sortable: true,
176
168
  hidden: true,
@@ -186,7 +178,8 @@ export default class ManagementFuelReportsIndexController extends Controller {
186
178
  ddMenuLabel: this.intl.t('common.resource-actions', { resource: this.intl.t('resource.fuel-report') }),
187
179
  cellClassNames: 'overflow-visible',
188
180
  wrapperClass: 'flex items-center justify-end mx-2',
189
- width: '10%',
181
+ sticky: 'right',
182
+ width: 60,
190
183
  actions: [
191
184
  {
192
185
  label: this.intl.t('common.view-resource', { resource: this.intl.t('resource.fuel-report') }),
@@ -88,12 +88,12 @@ export default class ManagementIssuesIndexController extends Controller {
88
88
  get columns() {
89
89
  return [
90
90
  {
91
+ sticky: true,
91
92
  label: this.intl.t('column.id'),
92
93
  valuePath: 'public_id',
93
94
  cellComponent: 'table/cell/anchor',
94
95
  action: this.issueActions.transition.view,
95
96
  permission: 'fleet-ops view issue',
96
- width: '110px',
97
97
  resizable: true,
98
98
  sortable: true,
99
99
  },
@@ -101,7 +101,6 @@ export default class ManagementIssuesIndexController extends Controller {
101
101
  label: this.intl.t('column.priority'),
102
102
  valuePath: 'priority',
103
103
  cellComponent: 'table/cell/status',
104
- width: '100px',
105
104
  resizable: true,
106
105
  sortable: true,
107
106
  filterable: true,
@@ -111,7 +110,6 @@ export default class ManagementIssuesIndexController extends Controller {
111
110
  {
112
111
  label: this.intl.t('column.type'),
113
112
  valuePath: 'type',
114
- width: '100px',
115
113
  humanize: true,
116
114
  resizable: true,
117
115
  sortable: true,
@@ -125,7 +123,6 @@ export default class ManagementIssuesIndexController extends Controller {
125
123
  {
126
124
  label: this.intl.t('column.category'),
127
125
  valuePath: 'category',
128
- width: '120px',
129
126
  humanize: true,
130
127
  resizable: true,
131
128
  sortable: true,
@@ -139,7 +136,6 @@ export default class ManagementIssuesIndexController extends Controller {
139
136
  {
140
137
  label: this.intl.t('column.reporter'),
141
138
  valuePath: 'reporter_name',
142
- width: '100px',
143
139
  permission: 'iam view user',
144
140
  resizable: true,
145
141
  sortable: true,
@@ -153,7 +149,6 @@ export default class ManagementIssuesIndexController extends Controller {
153
149
  {
154
150
  label: this.intl.t('column.assignee'),
155
151
  valuePath: 'assignee_name',
156
- width: '100px',
157
152
  permission: 'iam view user',
158
153
  hidden: true,
159
154
  resizable: true,
@@ -167,7 +162,6 @@ export default class ManagementIssuesIndexController extends Controller {
167
162
  {
168
163
  label: this.intl.t('column.driver'),
169
164
  valuePath: 'driver_name',
170
- width: '100px',
171
165
  cellComponent: 'table/cell/anchor',
172
166
  permission: 'fleet-ops view driver',
173
167
  onClick: this.issueActions.viewDriver,
@@ -182,7 +176,6 @@ export default class ManagementIssuesIndexController extends Controller {
182
176
  {
183
177
  label: this.intl.t('column.vehicle'),
184
178
  valuePath: 'vehicle_name',
185
- width: '100px',
186
179
  cellComponent: 'table/cell/anchor',
187
180
  permission: 'fleet-ops view vehicle',
188
181
  onClick: this.issueActions.viewVehicle,
@@ -199,7 +192,6 @@ export default class ManagementIssuesIndexController extends Controller {
199
192
  label: this.intl.t('column.status'),
200
193
  valuePath: 'status',
201
194
  cellComponent: 'table/cell/status',
202
- width: '120px',
203
195
  resizable: true,
204
196
  sortable: true,
205
197
  filterable: true,
@@ -210,7 +202,6 @@ export default class ManagementIssuesIndexController extends Controller {
210
202
  label: this.intl.t('column.created-at'),
211
203
  valuePath: 'createdAt',
212
204
  sortParam: 'created_at',
213
- width: '120px',
214
205
  resizable: true,
215
206
  sortable: true,
216
207
  filterable: true,
@@ -220,7 +211,6 @@ export default class ManagementIssuesIndexController extends Controller {
220
211
  label: this.intl.t('column.updated-at'),
221
212
  valuePath: 'updatedAt',
222
213
  sortParam: 'updated_at',
223
- width: '120px',
224
214
  resizable: true,
225
215
  sortable: true,
226
216
  hidden: true,
@@ -236,7 +226,8 @@ export default class ManagementIssuesIndexController extends Controller {
236
226
  ddMenuLabel: this.intl.t('common.resource-actions', { resource: this.intl.t('resource.issue') }),
237
227
  cellClassNames: 'overflow-visible',
238
228
  wrapperClass: 'flex items-center justify-end mx-2',
239
- width: '10%',
229
+ sticky: 'right',
230
+ width: 60,
240
231
  actions: [
241
232
  {
242
233
  label: this.intl.t('common.view-resource', { resource: this.intl.t('resource.issue') }),
@@ -68,9 +68,9 @@ export default class ManagementPlacesIndexController extends Controller {
68
68
  get columns() {
69
69
  return [
70
70
  {
71
+ sticky: true,
71
72
  label: this.intl.t('column.name'),
72
73
  valuePath: 'name',
73
- width: '180px',
74
74
  cellComponent: 'table/cell/anchor',
75
75
  cellClassNames: 'uppercase',
76
76
  action: this.placeActions.transition.view,
@@ -83,12 +83,12 @@ export default class ManagementPlacesIndexController extends Controller {
83
83
  filterComponent: 'filter/string',
84
84
  },
85
85
  {
86
+ sticky: true,
86
87
  label: this.intl.t('column.address'),
87
88
  valuePath: 'address',
88
89
  cellComponent: 'table/cell/anchor',
89
90
  action: this.placeActions.transition.view,
90
91
  permission: 'fleet-ops view place',
91
- width: '320px',
92
92
  resizable: true,
93
93
  sortable: true,
94
94
  filterable: true,
@@ -98,7 +98,6 @@ export default class ManagementPlacesIndexController extends Controller {
98
98
  {
99
99
  label: this.intl.t('column.id'),
100
100
  valuePath: 'public_id',
101
- width: '120px',
102
101
  cellComponent: 'click-to-copy',
103
102
  resizable: true,
104
103
  sortable: true,
@@ -113,7 +112,6 @@ export default class ManagementPlacesIndexController extends Controller {
113
112
  cellClassNames: 'uppercase',
114
113
  action: this.placeActions.transition.view,
115
114
  permission: 'fleet-ops view place',
116
- width: '100px',
117
115
  hidden: true,
118
116
  resizable: true,
119
117
  sortable: true,
@@ -128,7 +126,6 @@ export default class ManagementPlacesIndexController extends Controller {
128
126
  cellClassNames: 'uppercase',
129
127
  action: this.placeActions.transition.view,
130
128
  permission: 'fleet-ops view place',
131
- width: '100px',
132
129
  hidden: true,
133
130
  resizable: true,
134
131
  sortable: true,
@@ -142,7 +139,6 @@ export default class ManagementPlacesIndexController extends Controller {
142
139
  cellComponent: 'table/cell/anchor',
143
140
  action: this.placeActions.transition.view,
144
141
  permission: 'fleet-ops view place',
145
- width: '100px',
146
142
  resizable: true,
147
143
  sortable: true,
148
144
  filterable: true,
@@ -153,7 +149,6 @@ export default class ManagementPlacesIndexController extends Controller {
153
149
  valuePath: 'country_name',
154
150
  cellComponent: 'table/cell/base',
155
151
  cellClassNames: 'uppercase',
156
- width: '120px',
157
152
  resizable: true,
158
153
  sortable: true,
159
154
  filterable: true,
@@ -167,7 +162,6 @@ export default class ManagementPlacesIndexController extends Controller {
167
162
  cellClassNames: 'uppercase',
168
163
  action: this.placeActions.transition.view,
169
164
  permission: 'fleet-ops view place',
170
- width: '100px',
171
165
  hidden: true,
172
166
  resizable: true,
173
167
  sortable: true,
@@ -179,7 +173,6 @@ export default class ManagementPlacesIndexController extends Controller {
179
173
  label: this.intl.t('column.phone'),
180
174
  valuePath: 'phone',
181
175
  cellComponent: 'table/cell/base',
182
- width: '120px',
183
176
  hidden: true,
184
177
  resizable: true,
185
178
  sortable: true,
@@ -190,7 +183,6 @@ export default class ManagementPlacesIndexController extends Controller {
190
183
  label: this.intl.t('column.created-at'),
191
184
  valuePath: 'createdAt',
192
185
  sortParam: 'created_at',
193
- width: '10%',
194
186
  resizable: true,
195
187
  sortable: true,
196
188
  filterable: true,
@@ -200,7 +192,6 @@ export default class ManagementPlacesIndexController extends Controller {
200
192
  label: this.intl.t('column.updated-at'),
201
193
  valuePath: 'updatedAt',
202
194
  sortParam: 'updated_at',
203
- width: '10%',
204
195
  resizable: true,
205
196
  sortable: true,
206
197
  hidden: true,
@@ -217,7 +208,8 @@ export default class ManagementPlacesIndexController extends Controller {
217
208
  ddMenuLabel: this.intl.t('common.resource-actions', { resource: this.intl.t('resource.place') }),
218
209
  cellClassNames: 'overflow-visible',
219
210
  wrapperClass: 'flex items-center justify-end mx-2',
220
- width: '10%',
211
+ sticky: 'right',
212
+ width: 60,
221
213
  actions: [
222
214
  {
223
215
  label: this.intl.t('common.view-resource', { resource: this.intl.t('resource.place') }),
@@ -120,10 +120,10 @@ export default class ManagementVehiclesIndexController extends Controller {
120
120
  get columns() {
121
121
  return [
122
122
  {
123
+ sticky: true,
123
124
  label: this.intl.t('column.name'),
124
125
  valuePath: 'display_name',
125
126
  photoPath: 'avatar_url',
126
- width: '200px',
127
127
  cellComponent: 'table/cell/vehicle-name',
128
128
  permission: 'fleet-ops view vehicle',
129
129
  action: this.vehicleActions.transition.view,
@@ -139,7 +139,6 @@ export default class ManagementVehiclesIndexController extends Controller {
139
139
  valuePath: 'plate_number',
140
140
  cellComponent: 'table/cell/base',
141
141
  action: this.vehicleActions.transition.view,
142
- width: '100px',
143
142
  resizable: true,
144
143
  sortable: true,
145
144
  filterable: true,
@@ -150,7 +149,6 @@ export default class ManagementVehiclesIndexController extends Controller {
150
149
  label: this.intl.t('column.internal-id'),
151
150
  valuePath: 'internal_id',
152
151
  cellComponent: 'table/cell/base',
153
- width: '100px',
154
152
  resizable: true,
155
153
  sortable: true,
156
154
  filterable: true,
@@ -168,7 +166,6 @@ export default class ManagementVehiclesIndexController extends Controller {
168
166
  return this.driverActions.panel.view(driver);
169
167
  },
170
168
  valuePath: 'driver_name',
171
- width: '120px',
172
169
  resizable: true,
173
170
  filterable: true,
174
171
  filterComponent: 'filter/model',
@@ -180,7 +177,6 @@ export default class ManagementVehiclesIndexController extends Controller {
180
177
  label: this.intl.t('column.id'),
181
178
  valuePath: 'public_id',
182
179
  cellComponent: 'click-to-copy',
183
- width: '120px',
184
180
  resizable: true,
185
181
  sortable: true,
186
182
  filterable: true,
@@ -190,7 +186,6 @@ export default class ManagementVehiclesIndexController extends Controller {
190
186
  label: this.intl.t('column.make'),
191
187
  valuePath: 'make',
192
188
  cellComponent: 'table/cell/base',
193
- width: '80px',
194
189
  resizable: true,
195
190
  sortable: true,
196
191
  hidden: true,
@@ -202,7 +197,6 @@ export default class ManagementVehiclesIndexController extends Controller {
202
197
  label: this.intl.t('column.model'),
203
198
  valuePath: 'model',
204
199
  cellComponent: 'table/cell/base',
205
- width: '80px',
206
200
  resizable: true,
207
201
  sortable: true,
208
202
  hidden: true,
@@ -214,7 +208,6 @@ export default class ManagementVehiclesIndexController extends Controller {
214
208
  label: this.intl.t('column.year'),
215
209
  valuePath: 'year',
216
210
  cellComponent: 'table/cell/base',
217
- width: '80px',
218
211
  resizable: true,
219
212
  sortable: true,
220
213
  hidden: true,
@@ -231,7 +224,6 @@ export default class ManagementVehiclesIndexController extends Controller {
231
224
  this.vendorActions.viewVendor(vendor);
232
225
  },
233
226
  valuePath: 'vendor_name',
234
- width: '150px',
235
227
  hidden: true,
236
228
  resizable: true,
237
229
  filterable: true,
@@ -244,7 +236,6 @@ export default class ManagementVehiclesIndexController extends Controller {
244
236
  label: this.intl.t('column.status'),
245
237
  valuePath: 'status',
246
238
  cellComponent: 'table/cell/status',
247
- width: '10%',
248
239
  resizable: true,
249
240
  sortable: true,
250
241
  filterable: true,
@@ -255,7 +246,6 @@ export default class ManagementVehiclesIndexController extends Controller {
255
246
  label: this.intl.t('column.created-at'),
256
247
  valuePath: 'createdAt',
257
248
  sortParam: 'created_at',
258
- width: '120px',
259
249
  resizable: true,
260
250
  sortable: true,
261
251
  filterable: true,
@@ -267,7 +257,6 @@ export default class ManagementVehiclesIndexController extends Controller {
267
257
  label: this.intl.t('column.updated-at'),
268
258
  valuePath: 'updatedAt',
269
259
  sortParam: 'updated_at',
270
- width: '12%',
271
260
  resizable: true,
272
261
  sortable: true,
273
262
  hidden: true,
@@ -285,7 +274,8 @@ export default class ManagementVehiclesIndexController extends Controller {
285
274
  ddMenuLabel: this.intl.t('common.resource-actions', { resource: this.intl.t('resource.vehicle') }),
286
275
  cellClassNames: 'overflow-visible',
287
276
  wrapperClass: 'flex items-center justify-end mx-2',
288
- width: '90px',
277
+ sticky: 'right',
278
+ width: 60,
289
279
  actions: [
290
280
  {
291
281
  label: this.intl.t('common.view-resource', { resource: this.intl.t('resource.vehicle') }),
@@ -88,9 +88,9 @@ export default class ManagementVendorsIndexController extends Controller {
88
88
  get columns() {
89
89
  return [
90
90
  {
91
+ sticky: true,
91
92
  label: this.intl.t('column.name'),
92
93
  valuePath: 'name',
93
- width: '190px',
94
94
  cellComponent: 'table/cell/media-name',
95
95
  mediaPath: 'logo_url',
96
96
  action: this.vendorActions.transition.view,
@@ -104,7 +104,6 @@ export default class ManagementVendorsIndexController extends Controller {
104
104
  label: this.intl.t('column.id'),
105
105
  valuePath: 'public_id',
106
106
  cellComponent: 'click-to-copy',
107
- width: '110px',
108
107
  resizable: true,
109
108
  sortable: true,
110
109
  filterable: true,
@@ -114,7 +113,6 @@ export default class ManagementVendorsIndexController extends Controller {
114
113
  label: this.intl.t('column.internal-id'),
115
114
  valuePath: 'internal_id',
116
115
  cellComponent: 'click-to-copy',
117
- width: '100px',
118
116
  resizable: true,
119
117
  sortable: true,
120
118
  filterable: true,
@@ -124,7 +122,6 @@ export default class ManagementVendorsIndexController extends Controller {
124
122
  label: this.intl.t('column.email'),
125
123
  valuePath: 'email',
126
124
  cellComponent: 'click-to-copy',
127
- width: '80px',
128
125
  resizable: true,
129
126
  sortable: true,
130
127
  hidden: true,
@@ -135,7 +132,6 @@ export default class ManagementVendorsIndexController extends Controller {
135
132
  label: this.intl.t('column.website-url'),
136
133
  valuePath: 'website_url',
137
134
  cellComponent: 'click-to-copy',
138
- width: '80px',
139
135
  resizable: true,
140
136
  sortable: true,
141
137
  hidden: true,
@@ -146,7 +142,6 @@ export default class ManagementVendorsIndexController extends Controller {
146
142
  label: this.intl.t('column.phone'),
147
143
  valuePath: 'phone',
148
144
  cellComponent: 'click-to-copy',
149
- width: '80px',
150
145
  resizable: true,
151
146
  sortable: true,
152
147
  hidden: true,
@@ -158,7 +153,6 @@ export default class ManagementVendorsIndexController extends Controller {
158
153
  valuePath: 'address',
159
154
  cellComponent: 'table/cell/anchor',
160
155
  action: this.vendorActions.viewPlace,
161
- width: '170px',
162
156
  resizable: true,
163
157
  sortable: true,
164
158
  filterable: true,
@@ -169,7 +163,6 @@ export default class ManagementVendorsIndexController extends Controller {
169
163
  label: this.intl.t('column.type'),
170
164
  valuePath: 'prettyType',
171
165
  humanize: true,
172
- width: '150px',
173
166
  resizable: true,
174
167
  sortable: true,
175
168
  filterable: true,
@@ -181,7 +174,6 @@ export default class ManagementVendorsIndexController extends Controller {
181
174
  valuePath: 'country',
182
175
  cellComponent: 'table/cell/base',
183
176
  cellClassNames: 'uppercase',
184
- width: '120px',
185
177
  resizable: true,
186
178
  sortable: true,
187
179
  filterable: true,
@@ -193,7 +185,6 @@ export default class ManagementVendorsIndexController extends Controller {
193
185
  label: this.intl.t('column.created-at'),
194
186
  valuePath: 'createdAt',
195
187
  sortParam: 'created_at',
196
- width: '170px',
197
188
  resizable: true,
198
189
  sortable: true,
199
190
  filterable: true,
@@ -203,7 +194,6 @@ export default class ManagementVendorsIndexController extends Controller {
203
194
  label: this.intl.t('column.updated-at'),
204
195
  valuePath: 'updatedAt',
205
196
  sortParam: 'updated_at',
206
- width: '170px',
207
197
  resizable: true,
208
198
  sortable: true,
209
199
  hidden: true,
@@ -214,7 +204,6 @@ export default class ManagementVendorsIndexController extends Controller {
214
204
  label: this.intl.t('column.status'),
215
205
  valuePath: 'status',
216
206
  cellComponent: 'table/cell/status',
217
- width: '100px',
218
207
  resizable: true,
219
208
  sortable: true,
220
209
  filterable: true,
@@ -232,7 +221,8 @@ export default class ManagementVendorsIndexController extends Controller {
232
221
  ddMenuLabel: this.intl.t('common.resource-actions', { resource: this.intl.t('resource.vendor') }),
233
222
  cellClassNames: 'overflow-visible',
234
223
  wrapperClass: 'flex items-center justify-end mx-2',
235
- width: '7%',
224
+ sticky: 'right',
225
+ width: 60,
236
226
  actions: [
237
227
  {
238
228
  label: this.intl.t('common.view-resource', { resource: this.intl.t('resource.vendor') }),
@@ -124,9 +124,9 @@ export default class OperationsOrdersIndexController extends Controller {
124
124
  get columns() {
125
125
  return [
126
126
  {
127
+ sticky: true,
127
128
  label: this.intl.t('column.id'),
128
129
  valuePath: 'public_id',
129
- width: '140px',
130
130
  cellComponent: 'table/cell/link-to',
131
131
  route: 'operations.orders.index.details',
132
132
  onLinkClick: this.orderActions.transition.view,
@@ -140,7 +140,6 @@ export default class OperationsOrdersIndexController extends Controller {
140
140
  label: this.intl.t('column.internal-id'),
141
141
  valuePath: 'internal_id',
142
142
  cellComponent: 'click-to-copy',
143
- width: '125px',
144
143
  hidden: true,
145
144
  resizable: true,
146
145
  sortable: true,
@@ -153,7 +152,6 @@ export default class OperationsOrdersIndexController extends Controller {
153
152
  cellComponent: 'click-to-copy',
154
153
  resizable: true,
155
154
  hidden: true,
156
- width: '125px',
157
155
  filterable: true,
158
156
  filterLabel: 'Payload ID',
159
157
  filterParam: 'payload',
@@ -164,7 +162,6 @@ export default class OperationsOrdersIndexController extends Controller {
164
162
  cellComponent: 'cell/driver-name',
165
163
  valuePath: 'driver_assigned',
166
164
  modelPath: 'driver_assigned',
167
- width: '210px',
168
165
  resizable: true,
169
166
  sortable: true,
170
167
  filterable: true,
@@ -177,7 +174,6 @@ export default class OperationsOrdersIndexController extends Controller {
177
174
  label: this.intl.t('column.pickup'),
178
175
  valuePath: 'pickupName',
179
176
  cellComponent: 'table/cell/base',
180
- width: '160px',
181
177
  resizable: true,
182
178
  sortable: true,
183
179
  filterable: true,
@@ -192,7 +188,6 @@ export default class OperationsOrdersIndexController extends Controller {
192
188
  label: this.intl.t('column.dropoff'),
193
189
  valuePath: 'dropoffName',
194
190
  cellComponent: 'table/cell/base',
195
- width: '160px',
196
191
  resizable: true,
197
192
  sortable: true,
198
193
  filterable: true,
@@ -206,7 +201,6 @@ export default class OperationsOrdersIndexController extends Controller {
206
201
  label: this.intl.t('column.customer'),
207
202
  valuePath: 'customer.name',
208
203
  cellComponent: 'table/cell/base',
209
- width: '125px',
210
204
  resizable: true,
211
205
  sortable: true,
212
206
  hidden: false,
@@ -222,7 +216,6 @@ export default class OperationsOrdersIndexController extends Controller {
222
216
  valuePath: 'vehicle_assigned.display_name',
223
217
  modelPath: 'vehicle_assigned',
224
218
  showOnlineIndicator: true,
225
- width: '170px',
226
219
  hidden: true,
227
220
  resizable: true,
228
221
  sortable: true,
@@ -237,7 +230,6 @@ export default class OperationsOrdersIndexController extends Controller {
237
230
  label: this.intl.t('column.facilitator'),
238
231
  valuePath: 'facilitator.name',
239
232
  cellComponent: 'table/cell/base',
240
- width: '125px',
241
233
  resizable: true,
242
234
  hidden: true,
243
235
  sortable: true,
@@ -252,7 +244,6 @@ export default class OperationsOrdersIndexController extends Controller {
252
244
  valuePath: 'scheduledAt',
253
245
  sortParam: 'scheduled_at',
254
246
  filterParam: 'scheduled_at',
255
- width: '150px',
256
247
  resizable: true,
257
248
  sortable: true,
258
249
  filterable: true,
@@ -264,13 +255,11 @@ export default class OperationsOrdersIndexController extends Controller {
264
255
  valuePath: 'item_count',
265
256
  resizable: true,
266
257
  hidden: true,
267
- width: '50px',
268
258
  },
269
259
  {
270
260
  label: this.intl.t('column.transaction'),
271
261
  cellComponent: 'table/cell/base',
272
262
  valuePath: 'transaction_amount',
273
- width: '50px',
274
263
  resizable: true,
275
264
  hidden: true,
276
265
  sortable: true,
@@ -279,7 +268,6 @@ export default class OperationsOrdersIndexController extends Controller {
279
268
  label: this.intl.t('column.tracking'),
280
269
  valuePath: 'tracking_number.tracking_number',
281
270
  cellComponent: 'click-to-copy',
282
- width: '170px',
283
271
  resizable: true,
284
272
  sortable: true,
285
273
  filterable: true,
@@ -288,7 +276,6 @@ export default class OperationsOrdersIndexController extends Controller {
288
276
  {
289
277
  label: this.intl.t('column.type'),
290
278
  valuePath: 'type',
291
- width: '100px',
292
279
  resizable: true,
293
280
  hidden: true,
294
281
  sortable: true,
@@ -301,7 +288,6 @@ export default class OperationsOrdersIndexController extends Controller {
301
288
  label: this.intl.t('column.status'),
302
289
  valuePath: 'status',
303
290
  cellComponent: 'table/cell/status',
304
- width: '120px',
305
291
  resizable: true,
306
292
  sortable: true,
307
293
  filterable: true,
@@ -310,10 +296,9 @@ export default class OperationsOrdersIndexController extends Controller {
310
296
  },
311
297
  {
312
298
  label: this.intl.t('column.created-at'),
313
- valuePath: 'createdAtShort',
299
+ valuePath: 'createdAt',
314
300
  sortParam: 'created_at',
315
301
  filterParam: 'created_at',
316
- width: '140px',
317
302
  resizable: true,
318
303
  sortable: true,
319
304
  filterable: true,
@@ -321,10 +306,9 @@ export default class OperationsOrdersIndexController extends Controller {
321
306
  },
322
307
  {
323
308
  label: this.intl.t('column.updated-at'),
324
- valuePath: 'updatedAtShort',
309
+ valuePath: 'updatedAt',
325
310
  sortParam: 'updated_at',
326
311
  filterParam: 'updated_at',
327
- width: '125px',
328
312
  resizable: true,
329
313
  sortable: true,
330
314
  hidden: true,
@@ -334,7 +318,6 @@ export default class OperationsOrdersIndexController extends Controller {
334
318
  {
335
319
  label: this.intl.t('column.created-by'),
336
320
  valuePath: 'created_by_name',
337
- width: '125px',
338
321
  resizable: true,
339
322
  hidden: true,
340
323
  filterable: true,
@@ -346,7 +329,6 @@ export default class OperationsOrdersIndexController extends Controller {
346
329
  {
347
330
  label: this.intl.t('column.updated-by'),
348
331
  valuePath: 'updated_by_name',
349
- width: '125px',
350
332
  resizable: true,
351
333
  hidden: true,
352
334
  filterable: true,
@@ -374,7 +356,8 @@ export default class OperationsOrdersIndexController extends Controller {
374
356
  ddMenuLabel: this.intl.t('common.resource-actions', { resource: this.intl.t('resource.order') }),
375
357
  cellClassNames: 'overflow-visible',
376
358
  wrapperClass: 'flex items-center justify-end mx-2',
377
- width: '12%',
359
+ sticky: 'right',
360
+ width: 60,
378
361
  actions: [
379
362
  {
380
363
  label: this.intl.t('common.view-resource', { resource: this.intl.t('resource.order') }),