@fleetbase/fleetops-engine 0.6.69 → 0.6.71

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 (324) hide show
  1. package/RELEASE.md +21 -14
  2. package/addon/components/admin/telematics-settings.hbs +143 -0
  3. package/addon/components/admin/telematics-settings.js +145 -0
  4. package/addon/components/fuel-integration/hub.hbs +1 -1
  5. package/addon/components/layout/fleet-ops-sidebar.js +37 -17
  6. package/addon/components/map/leaflet-live-map.hbs +4 -242
  7. package/addon/components/map/leaflet-live-map.js +2 -1
  8. package/addon/components/map/marker-card/driver.hbs +57 -0
  9. package/addon/components/map/marker-card/driver.js +3 -0
  10. package/addon/components/map/marker-card/vehicle.hbs +78 -0
  11. package/addon/components/map/marker-card/vehicle.js +3 -0
  12. package/addon/components/order/details/activity.hbs +8 -6
  13. package/addon/components/order/details/activity.js +9 -0
  14. package/addon/components/order/details.hbs +29 -0
  15. package/addon/components/order/details.js +26 -0
  16. package/addon/components/order/form/details.hbs +30 -4
  17. package/addon/components/order/form/details.js +46 -0
  18. package/addon/components/order/form/route.hbs +4 -2
  19. package/addon/components/order/form/route.js +11 -0
  20. package/addon/components/order/form.hbs +12 -0
  21. package/addon/components/order/form.js +21 -1
  22. package/addon/components/order/kanban.js +72 -0
  23. package/addon/components/order-config-manager/activity-flow.js +45 -10
  24. package/addon/components/order-config-manager/lifecycle.hbs +250 -0
  25. package/addon/components/order-config-manager/lifecycle.js +358 -0
  26. package/addon/components/order-config-manager.js +5 -1
  27. package/addon/components/telematic/hub.hbs +1 -1
  28. package/addon/components/widget/live-fleet.hbs +8 -40
  29. package/addon/controllers/analytics/reports/index.js +15 -1
  30. package/addon/controllers/connectivity/devices/index/details.js +1 -0
  31. package/addon/controllers/connectivity/devices/index.js +12 -2
  32. package/addon/controllers/connectivity/events/index.js +31 -1
  33. package/addon/controllers/connectivity/fuel-providers/index.js +6 -4
  34. package/addon/controllers/connectivity/sensors/index/details.js +1 -1
  35. package/addon/controllers/connectivity/sensors/index.js +41 -1
  36. package/addon/controllers/connectivity/telematics/index.js +4 -0
  37. package/addon/controllers/maintenance/equipment/index/details.js +2 -2
  38. package/addon/controllers/maintenance/equipment/index.js +36 -10
  39. package/addon/controllers/maintenance/inspection-forms/index.js +32 -12
  40. package/addon/controllers/maintenance/inspection-submissions/index/details.js +2 -1
  41. package/addon/controllers/maintenance/inspection-submissions/index.js +56 -10
  42. package/addon/controllers/maintenance/maintenances/index/details.js +2 -0
  43. package/addon/controllers/maintenance/maintenances/index.js +24 -1
  44. package/addon/controllers/maintenance/parts/index/details.js +2 -2
  45. package/addon/controllers/maintenance/parts/index.js +36 -9
  46. package/addon/controllers/maintenance/schedules/index.js +48 -6
  47. package/addon/controllers/maintenance/work-orders/index/details.js +3 -3
  48. package/addon/controllers/maintenance/work-orders/index.js +47 -9
  49. package/addon/controllers/management/contacts/customers.js +13 -0
  50. package/addon/controllers/management/contacts/index.js +47 -1
  51. package/addon/controllers/management/drivers/index/details.js +1 -0
  52. package/addon/controllers/management/drivers/index.js +36 -2
  53. package/addon/controllers/management/fleets/index/details.js +1 -0
  54. package/addon/controllers/management/fleets/index.js +43 -1
  55. package/addon/controllers/management/fuel-reports/index.js +26 -2
  56. package/addon/controllers/management/fuel-transactions/index.js +45 -7
  57. package/addon/controllers/management/issues/index/details.js +1 -0
  58. package/addon/controllers/management/issues/index.js +26 -2
  59. package/addon/controllers/management/places/index.js +40 -1
  60. package/addon/controllers/management/trailers/index/details.js +1 -0
  61. package/addon/controllers/management/trailers/index.js +50 -2
  62. package/addon/controllers/management/vehicles/index/details.js +1 -0
  63. package/addon/controllers/management/vehicles/index.js +37 -2
  64. package/addon/controllers/management/vendors/index.js +30 -2
  65. package/addon/controllers/operations/orders/index/details.js +61 -5
  66. package/addon/controllers/operations/orders/index.js +66 -4
  67. package/addon/controllers/operations/service-rates/index.js +18 -1
  68. package/addon/controllers/settings/index.js +13 -0
  69. package/addon/controllers/settings/telematics.js +113 -0
  70. package/addon/extension.js +70 -6
  71. package/addon/routes/analytics/index.js +14 -1
  72. package/addon/routes/analytics/reports/index/details.js +1 -1
  73. package/addon/routes/analytics/reports/index/edit.js +1 -1
  74. package/addon/routes/analytics/reports/index/new.js +14 -1
  75. package/addon/routes/analytics/reports.js +14 -1
  76. package/addon/routes/connectivity/devices/index/new.js +14 -1
  77. package/addon/routes/connectivity/devices.js +14 -1
  78. package/addon/routes/connectivity/events.js +14 -1
  79. package/addon/routes/connectivity/fuel-providers/details/transactions.js +12 -0
  80. package/addon/routes/connectivity/fuel-providers/details.js +9 -0
  81. package/addon/routes/connectivity/fuel-providers/edit.js +9 -0
  82. package/addon/routes/connectivity/fuel-providers/new.js +14 -1
  83. package/addon/routes/connectivity/fuel-providers.js +14 -1
  84. package/addon/routes/connectivity/sensors/index/new.js +14 -1
  85. package/addon/routes/connectivity/sensors.js +14 -1
  86. package/addon/routes/connectivity/telematics/new.js +14 -1
  87. package/addon/routes/connectivity/telematics.js +14 -1
  88. package/addon/routes/connectivity/tracking.js +14 -1
  89. package/addon/routes/maintenance/equipment/index/details.js +2 -2
  90. package/addon/routes/maintenance/equipment/index/edit.js +2 -2
  91. package/addon/routes/maintenance/equipment/index/new.js +14 -1
  92. package/addon/routes/maintenance/equipment.js +14 -1
  93. package/addon/routes/maintenance/index.js +14 -1
  94. package/addon/routes/maintenance/inspection-forms/index/details.js +10 -1
  95. package/addon/routes/maintenance/inspection-forms/index/edit.js +10 -1
  96. package/addon/routes/maintenance/inspection-forms/index/new.js +14 -1
  97. package/addon/routes/maintenance/inspection-forms.js +14 -1
  98. package/addon/routes/maintenance/inspection-submissions/index/details.js +10 -1
  99. package/addon/routes/maintenance/inspection-submissions/index/edit.js +10 -1
  100. package/addon/routes/maintenance/inspection-submissions/index/new.js +14 -1
  101. package/addon/routes/maintenance/inspection-submissions.js +14 -1
  102. package/addon/routes/maintenance/maintenances/index/details.js +2 -2
  103. package/addon/routes/maintenance/maintenances/index/edit.js +2 -2
  104. package/addon/routes/maintenance/maintenances/index/new.js +14 -1
  105. package/addon/routes/maintenance/maintenances.js +14 -1
  106. package/addon/routes/maintenance/parts/index/details.js +2 -2
  107. package/addon/routes/maintenance/parts/index/edit.js +2 -2
  108. package/addon/routes/maintenance/parts/index/new.js +14 -1
  109. package/addon/routes/maintenance/parts.js +14 -1
  110. package/addon/routes/maintenance/schedules/index/details.js +2 -2
  111. package/addon/routes/maintenance/schedules/index/edit.js +2 -2
  112. package/addon/routes/maintenance/schedules/index/new.js +15 -1
  113. package/addon/routes/maintenance/schedules.js +15 -1
  114. package/addon/routes/maintenance/work-orders/index/details.js +2 -2
  115. package/addon/routes/maintenance/work-orders/index/edit.js +2 -2
  116. package/addon/routes/maintenance/work-orders/index/new.js +14 -1
  117. package/addon/routes/maintenance/work-orders.js +14 -1
  118. package/addon/routes/management/fuel-transactions/index/details.js +9 -0
  119. package/addon/routes/management/fuel-transactions.js +14 -1
  120. package/addon/routes/management/index.js +13 -0
  121. package/addon/routes/management/trailers.js +16 -0
  122. package/addon/routes/management/vendors/integrated/details.js +14 -1
  123. package/addon/routes/management/vendors/integrated/edit.js +14 -1
  124. package/addon/routes/management/vendors/integrated/new.js +14 -1
  125. package/addon/routes/management/vendors/integrated.js +14 -1
  126. package/addon/routes/operations/orders/index/details.js +1 -0
  127. package/addon/routes/operations/orders.js +40 -1
  128. package/addon/routes/operations/routes/index/details.js +14 -1
  129. package/addon/routes/operations/routes/index/new.js +13 -0
  130. package/addon/routes/operations/routes.js +14 -1
  131. package/addon/routes/operations/service-rates/index/new.js +11 -0
  132. package/addon/routes/operations/service-rates.js +14 -1
  133. package/addon/routes/settings/avatars.js +14 -1
  134. package/addon/routes/settings/custom-fields.js +14 -1
  135. package/addon/routes/settings/map.js +14 -1
  136. package/addon/routes/settings/notifications.js +11 -0
  137. package/addon/routes/settings/orchestrator.js +1 -1
  138. package/addon/routes/settings/payments/index.js +1 -1
  139. package/addon/routes/settings/routing.js +14 -1
  140. package/addon/routes/settings/scheduling.js +14 -1
  141. package/addon/routes/settings/telematics.js +21 -0
  142. package/addon/routes/virtual.js +11 -0
  143. package/addon/routes.js +1 -0
  144. package/addon/services/contact-actions.js +1 -0
  145. package/addon/services/customer-actions.js +2 -1
  146. package/addon/services/device-actions.js +1 -0
  147. package/addon/services/device-event-actions.js +1 -0
  148. package/addon/services/driver-actions.js +4 -13
  149. package/addon/services/equipment-actions.js +1 -0
  150. package/addon/services/fleet-actions.js +1 -0
  151. package/addon/services/fuel-report-actions.js +1 -0
  152. package/addon/services/inspection-form-actions.js +1 -0
  153. package/addon/services/inspection-submission-actions.js +1 -0
  154. package/addon/services/integrated-vendor-actions.js +1 -0
  155. package/addon/services/issue-actions.js +1 -0
  156. package/addon/services/maintenance-actions.js +1 -0
  157. package/addon/services/maintenance-schedule-actions.js +2 -1
  158. package/addon/services/order-actions.js +7 -0
  159. package/addon/services/order-presentation.js +129 -0
  160. package/addon/services/part-actions.js +1 -0
  161. package/addon/services/place-actions.js +1 -0
  162. package/addon/services/sensor-actions.js +1 -0
  163. package/addon/services/service-area-actions.js +1 -0
  164. package/addon/services/service-rate-actions.js +1 -0
  165. package/addon/services/telematic-actions.js +1 -0
  166. package/addon/services/trailer-actions.js +4 -14
  167. package/addon/services/vehicle-actions.js +4 -13
  168. package/addon/services/vendor-actions.js +1 -0
  169. package/addon/services/work-order-actions.js +1 -0
  170. package/addon/services/zone-actions.js +1 -0
  171. package/addon/templates/analytics/reports/index/details.hbs +1 -0
  172. package/addon/templates/analytics/reports/index.hbs +1 -0
  173. package/addon/templates/connectivity/devices/index/details.hbs +1 -0
  174. package/addon/templates/connectivity/devices/index.hbs +1 -0
  175. package/addon/templates/connectivity/events/index.hbs +1 -0
  176. package/addon/templates/connectivity/sensors/index/details.hbs +1 -0
  177. package/addon/templates/connectivity/sensors/index.hbs +1 -0
  178. package/addon/templates/maintenance/equipment/index/details.hbs +1 -0
  179. package/addon/templates/maintenance/equipment/index.hbs +2 -0
  180. package/addon/templates/maintenance/inspection-forms/index/details.hbs +1 -0
  181. package/addon/templates/maintenance/inspection-forms/index.hbs +1 -0
  182. package/addon/templates/maintenance/inspection-submissions/index/details.hbs +1 -0
  183. package/addon/templates/maintenance/inspection-submissions/index.hbs +1 -0
  184. package/addon/templates/maintenance/maintenances/index/details.hbs +1 -0
  185. package/addon/templates/maintenance/maintenances/index.hbs +1 -0
  186. package/addon/templates/maintenance/parts/index/details.hbs +1 -0
  187. package/addon/templates/maintenance/parts/index.hbs +2 -0
  188. package/addon/templates/maintenance/schedules/index/details.hbs +1 -0
  189. package/addon/templates/maintenance/schedules/index.hbs +2 -0
  190. package/addon/templates/maintenance/work-orders/index/details.hbs +1 -0
  191. package/addon/templates/maintenance/work-orders/index.hbs +1 -0
  192. package/addon/templates/management/contacts/customers/details.hbs +1 -0
  193. package/addon/templates/management/contacts/customers.hbs +1 -0
  194. package/addon/templates/management/contacts/index/details.hbs +1 -0
  195. package/addon/templates/management/contacts/index.hbs +1 -0
  196. package/addon/templates/management/contacts.hbs +1 -0
  197. package/addon/templates/management/drivers/index/details.hbs +1 -0
  198. package/addon/templates/management/drivers/index.hbs +2 -0
  199. package/addon/templates/management/fleets/index/details.hbs +1 -0
  200. package/addon/templates/management/fleets/index.hbs +1 -0
  201. package/addon/templates/management/fuel-reports/index/details.hbs +1 -0
  202. package/addon/templates/management/fuel-reports/index.hbs +1 -0
  203. package/addon/templates/management/fuel-transactions/index.hbs +1 -0
  204. package/addon/templates/management/issues/index/details.hbs +1 -0
  205. package/addon/templates/management/issues/index.hbs +1 -0
  206. package/addon/templates/management/places/index/details.hbs +1 -0
  207. package/addon/templates/management/places/index.hbs +1 -0
  208. package/addon/templates/management/trailers/index/details.hbs +1 -0
  209. package/addon/templates/management/trailers/index.hbs +2 -0
  210. package/addon/templates/management/vehicles/index/details.hbs +1 -0
  211. package/addon/templates/management/vehicles/index.hbs +2 -0
  212. package/addon/templates/management/vendors/index/details.hbs +1 -0
  213. package/addon/templates/management/vendors/index.hbs +2 -0
  214. package/addon/templates/management/vendors/integrated.hbs +1 -0
  215. package/addon/templates/operations/orders/index/details.hbs +1 -0
  216. package/addon/templates/operations/orders/index.hbs +1 -0
  217. package/addon/templates/operations/service-rates/index/details.hbs +1 -0
  218. package/addon/templates/operations/service-rates/index.hbs +1 -0
  219. package/addon/templates/settings/telematics.hbs +70 -0
  220. package/addon/utils/normalize-order-config-flow.js +6 -1
  221. package/app/components/admin/telematics-settings.js +1 -0
  222. package/app/components/map/marker-card/driver.js +1 -0
  223. package/app/components/map/marker-card/vehicle.js +1 -0
  224. package/app/controllers/settings/telematics.js +1 -0
  225. package/app/routes/settings/telematics.js +1 -0
  226. package/app/services/order-presentation.js +1 -0
  227. package/app/templates/settings/telematics.js +1 -0
  228. package/composer.json +2 -2
  229. package/docs/AFAQY.md +1 -1
  230. package/docs/TELEMATICS_QUEUES.md +1 -1
  231. package/docs/TELEMETRY_ARCHITECTURE.md +72 -1
  232. package/extension.json +1 -1
  233. package/package.json +3 -3
  234. package/server/config/telemetry.php +12 -0
  235. package/server/migrations/2026_09_23_000001_add_retention_index_to_device_events.php +40 -0
  236. package/server/migrations/2026_09_23_000002_add_retention_index_to_positions.php +40 -0
  237. package/server/migrations/2026_09_23_000003_add_retention_index_to_telematic_sync_runs.php +40 -0
  238. package/server/src/Auth/Schemas/FleetOps.php +104 -5
  239. package/server/src/Console/Commands/DrainTelematicInbox.php +3 -13
  240. package/server/src/Console/Commands/ProcessOperationalAlerts.php +3 -3
  241. package/server/src/Console/Commands/PruneTelematicsData.php +318 -0
  242. package/server/src/Http/Controllers/Api/v1/OrchestrationController.php +9 -0
  243. package/server/src/Http/Controllers/FleetOpsController.php +21 -0
  244. package/server/src/Http/Controllers/Internal/v1/AnalyticsController.php +11 -0
  245. package/server/src/Http/Controllers/Internal/v1/ContactController.php +11 -0
  246. package/server/src/Http/Controllers/Internal/v1/CustomerController.php +14 -0
  247. package/server/src/Http/Controllers/Internal/v1/DeviceController.php +13 -0
  248. package/server/src/Http/Controllers/Internal/v1/DeviceEventController.php +11 -0
  249. package/server/src/Http/Controllers/Internal/v1/DriverController.php +22 -0
  250. package/server/src/Http/Controllers/Internal/v1/FuelProviderConnectionController.php +13 -0
  251. package/server/src/Http/Controllers/Internal/v1/FuelProviderTransactionController.php +15 -0
  252. package/server/src/Http/Controllers/Internal/v1/FuelReportController.php +9 -3
  253. package/server/src/Http/Controllers/Internal/v1/InspectionFormController.php +15 -0
  254. package/server/src/Http/Controllers/Internal/v1/LiveController.php +16 -0
  255. package/server/src/Http/Controllers/Internal/v1/MaintenanceController.php +15 -0
  256. package/server/src/Http/Controllers/Internal/v1/MaintenanceScheduleController.php +15 -0
  257. package/server/src/Http/Controllers/Internal/v1/ManifestController.php +15 -0
  258. package/server/src/Http/Controllers/Internal/v1/MetricsController.php +11 -0
  259. package/server/src/Http/Controllers/Internal/v1/NavigatorController.php +42 -1
  260. package/server/src/Http/Controllers/Internal/v1/OrchestrationController.php +12 -0
  261. package/server/src/Http/Controllers/Internal/v1/OrderController.php +56 -4
  262. package/server/src/Http/Controllers/Internal/v1/PaymentController.php +13 -0
  263. package/server/src/Http/Controllers/Internal/v1/RadarController.php +19 -0
  264. package/server/src/Http/Controllers/Internal/v1/ServiceAreaController.php +9 -3
  265. package/server/src/Http/Controllers/Internal/v1/SettingController.php +465 -14
  266. package/server/src/Http/Controllers/Internal/v1/TelematicController.php +21 -0
  267. package/server/src/Http/Controllers/Internal/v1/TrailerController.php +21 -0
  268. package/server/src/Http/Controllers/Internal/v1/VehicleController.php +21 -0
  269. package/server/src/Http/Controllers/Internal/v1/VendorController.php +17 -0
  270. package/server/src/Http/Controllers/Internal/v1/WorkOrderController.php +11 -0
  271. package/server/src/Jobs/DispatchTelematicsRetentionJobs.php +70 -0
  272. package/server/src/Jobs/PruneTelematicsDataJob.php +74 -0
  273. package/server/src/Listeners/NotifyDriverOnShiftChange.php +3 -3
  274. package/server/src/Mail/CustomerCredentialsMail.php +1 -1
  275. package/server/src/Models/Order.php +35 -3
  276. package/server/src/Models/OrderConfig.php +129 -0
  277. package/server/src/Models/TrackingNumber.php +8 -4
  278. package/server/src/Orchestration/Engines/VroomOrchestrationEngine.php +9 -1
  279. package/server/src/Providers/FleetOpsServiceProvider.php +3 -0
  280. package/server/src/Support/Analytics/LiveFleet.php +18 -2
  281. package/server/src/Support/Authorization.php +103 -0
  282. package/server/src/Support/Database/TableIndexes.php +66 -0
  283. package/server/src/Support/OrderTracker.php +2 -2
  284. package/server/src/Support/Reporting/FleetOpsReportSchema.php +476 -116
  285. package/server/src/Support/Telematics/Retention/RetentionPolicy.php +300 -0
  286. package/server/src/Support/Telematics/Retention/TelemetryActivity.php +40 -0
  287. package/server/src/Support/Telematics/TelematicService.php +12 -2
  288. package/server/src/Support/Telematics/Telemetry/Ingestor.php +4 -2
  289. package/server/src/Tracking/TrackingIntelligenceService.php +1 -1
  290. package/server/src/Tracking/TrackingOptions.php +2 -2
  291. package/server/src/Traits/AuthorizesMethods.php +37 -0
  292. package/server/src/routes.php +9 -1
  293. package/server/tests/AnalyticsRoutesTest.php +29 -2
  294. package/server/tests/Feature/Http/AfaqyRealtimeIngestionTest.php +16 -1
  295. package/server/tests/Feature/Http/Api/TelematicsRetentionIndexMigrationTest.php +115 -0
  296. package/server/tests/Feature/Http/Internal/OrderControllerActivityFlowsTest.php +72 -0
  297. package/server/tests/Feature/Http/Internal/OrderControllerCreateRecordTest.php +26 -0
  298. package/server/tests/Feature/Http/Internal/SettingControllerHelpersTest.php +71 -0
  299. package/server/tests/Feature/Http/Internal/TelematicsStorageDeadlinesTest.php +119 -0
  300. package/server/tests/InternalImportExportControllerContractsTest.php +5 -8
  301. package/server/tests/NavigatorControllerContractsTest.php +36 -4
  302. package/server/tests/NotificationAndMailContractsTest.php +31 -0
  303. package/server/tests/ObserverContractsTest.php +1 -1
  304. package/server/tests/OrchestratorConsumableApiTest.php +42 -0
  305. package/server/tests/OrderConfigLifecycleTest.php +120 -0
  306. package/server/tests/ProviderContractsTest.php +10 -0
  307. package/server/tests/ReportSchemaContractsTest.php +120 -6
  308. package/server/tests/SettingControllerContractsTest.php +429 -18
  309. package/server/tests/SmallControllerContractsTest.php +8 -5
  310. package/server/tests/Support/PruneTelematicsDataProbe.php +55 -0
  311. package/server/tests/Unit/Console/Commands/ProcessOperationalAlertsCommandTest.php +2 -2
  312. package/server/tests/Unit/Console/PruneTelematicsDataCommandTest.php +353 -0
  313. package/server/tests/Unit/Events/OrderDispatchFailedTest.php +2 -1
  314. package/server/tests/Unit/Jobs/DispatchTelematicsRetentionJobsTest.php +114 -0
  315. package/server/tests/Unit/Jobs/PruneTelematicsDataJobTest.php +60 -0
  316. package/server/tests/Unit/Orchestration/VroomEngineTransportAndSettingsTest.php +20 -0
  317. package/server/tests/Unit/Support/Analytics/LiveFleetTest.php +6 -0
  318. package/server/tests/Unit/Support/AuthorizationTest.php +142 -0
  319. package/server/tests/Unit/Support/MaintainableAndOperationalAlertsTest.php +12 -1
  320. package/server/tests/Unit/Support/MoreQuerySeamsTest.php +11 -2
  321. package/server/tests/Unit/Support/Telematics/Retention/RetentionPolicyTest.php +190 -0
  322. package/server/tests/Unit/Support/Telematics/Retention/TelemetryActivityTest.php +68 -0
  323. package/server/tests/Unit/Tracking/TrackingOptionsCompanySettingsTest.php +109 -0
  324. package/translations/en-us.yaml +108 -0
@@ -7,7 +7,7 @@ export default class MaintenancePartsIndexController extends Controller {
7
7
  @service intl;
8
8
  @service appCache;
9
9
 
10
- @tracked queryParams = ['type', 'status', 'page', 'limit', 'sort', 'query', 'public_id', 'created_at', 'updated_at'];
10
+ @tracked queryParams = this.partActions.queryParamsFor(['type', 'status', 'page', 'limit', 'sort', 'query', 'public_id', 'created_at', 'updated_at']);
11
11
  @tracked page = 1;
12
12
  @tracked limit;
13
13
  @tracked sort = '-created_at';
@@ -21,6 +21,7 @@ export default class MaintenancePartsIndexController extends Controller {
21
21
  get actionButtons() {
22
22
  return [
23
23
  {
24
+ id: 'more',
24
25
  component: 'dropdown-button',
25
26
  icon: 'display',
26
27
  size: 'xs',
@@ -45,20 +46,29 @@ export default class MaintenancePartsIndexController extends Controller {
45
46
  renderInPlace: true,
46
47
  helpText: 'Change the layout',
47
48
  },
48
- { icon: 'refresh', onClick: this.partActions.refresh, helpText: this.intl.t('common.refresh') },
49
- { text: this.intl.t('common.new'), type: 'primary', icon: 'plus', onClick: this.partActions.transition.create },
50
- { text: this.intl.t('common.import'), type: 'magic', icon: 'upload', onClick: this.partActions.import },
51
- { text: this.intl.t('common.export'), icon: 'long-arrow-up', iconClass: 'rotate-icon-45', wrapperClass: 'hidden md:flex', onClick: this.partActions.export },
49
+ { id: 'refresh', icon: 'refresh', onClick: this.partActions.refresh, helpText: this.intl.t('common.refresh') },
50
+ { id: 'create', text: this.intl.t('common.new'), type: 'primary', icon: 'plus', onClick: this.partActions.transition.create, permission: 'fleet-ops create part' },
51
+ { id: 'import', text: this.intl.t('common.import'), type: 'magic', icon: 'upload', onClick: this.partActions.import, permission: 'fleet-ops import part' },
52
+ {
53
+ id: 'export',
54
+ text: this.intl.t('common.export'),
55
+ icon: 'long-arrow-up',
56
+ iconClass: 'rotate-icon-45',
57
+ wrapperClass: 'hidden md:flex',
58
+ onClick: this.partActions.export,
59
+ permission: 'fleet-ops export part',
60
+ },
52
61
  ];
53
62
  }
54
63
 
55
64
  get bulkActions() {
56
- return [{ label: 'Delete selected...', class: 'text-red-500', fn: this.partActions.bulkDelete }];
65
+ return [{ id: 'bulk-delete', label: 'Delete selected...', class: 'text-red-500', fn: this.partActions.bulkDelete, permission: 'fleet-ops delete part' }];
57
66
  }
58
67
 
59
68
  get columns() {
60
69
  return [
61
70
  {
71
+ id: 'name',
62
72
  label: this.intl.t('column.name'),
63
73
  valuePath: 'name',
64
74
  cellComponent: 'cell/part-identity',
@@ -71,6 +81,7 @@ export default class MaintenancePartsIndexController extends Controller {
71
81
  filterComponent: 'filter/string',
72
82
  },
73
83
  {
84
+ id: 'sku',
74
85
  label: this.intl.t('column.part-number'),
75
86
  valuePath: 'sku',
76
87
  resizable: true,
@@ -80,6 +91,7 @@ export default class MaintenancePartsIndexController extends Controller {
80
91
  filterComponent: 'filter/string',
81
92
  },
82
93
  {
94
+ id: 'type',
83
95
  label: this.intl.t('column.type'),
84
96
  valuePath: 'type',
85
97
  cellComponent: 'table/cell/base',
@@ -91,6 +103,7 @@ export default class MaintenancePartsIndexController extends Controller {
91
103
  filterComponent: 'filter/string',
92
104
  },
93
105
  {
106
+ id: 'status',
94
107
  label: this.intl.t('column.status'),
95
108
  valuePath: 'status',
96
109
  cellComponent: 'table/cell/status',
@@ -100,10 +113,20 @@ export default class MaintenancePartsIndexController extends Controller {
100
113
  filterParam: 'status',
101
114
  filterComponent: 'filter/string',
102
115
  },
103
- { label: this.intl.t('column.quantity-on-hand'), valuePath: 'quantity_on_hand', resizable: true, sortable: true },
104
- { label: this.intl.t('column.unit-cost'), valuePath: 'unit_cost', cellComponent: 'table/cell/currency', resizable: true, sortable: true },
105
- { label: this.intl.t('column.created-at'), valuePath: 'createdAt', sortParam: 'created_at', resizable: true, sortable: true, filterable: true, filterComponent: 'filter/date' },
116
+ { id: 'quantity-on-hand', label: this.intl.t('column.quantity-on-hand'), valuePath: 'quantity_on_hand', resizable: true, sortable: true },
117
+ { id: 'unit-cost', label: this.intl.t('column.unit-cost'), valuePath: 'unit_cost', cellComponent: 'table/cell/currency', resizable: true, sortable: true },
118
+ {
119
+ id: 'created-at',
120
+ label: this.intl.t('column.created-at'),
121
+ valuePath: 'createdAt',
122
+ sortParam: 'created_at',
123
+ resizable: true,
124
+ sortable: true,
125
+ filterable: true,
126
+ filterComponent: 'filter/date',
127
+ },
106
128
  {
129
+ id: 'updated-at',
107
130
  label: this.intl.t('column.updated-at'),
108
131
  valuePath: 'updatedAt',
109
132
  sortParam: 'updated_at',
@@ -114,6 +137,7 @@ export default class MaintenancePartsIndexController extends Controller {
114
137
  filterComponent: 'filter/date',
115
138
  },
116
139
  {
140
+ id: 'row-actions',
117
141
  label: '',
118
142
  cellComponent: 'table/cell/dropdown',
119
143
  ddButtonText: false,
@@ -124,17 +148,20 @@ export default class MaintenancePartsIndexController extends Controller {
124
148
  wrapperClass: 'flex items-center justify-end mx-2',
125
149
  actions: [
126
150
  {
151
+ id: 'view',
127
152
  label: this.intl.t('common.view-resource', { resource: this.intl.t('resource.part') }),
128
153
  fn: this.partActions.transition.view,
129
154
  permission: 'fleet-ops view part',
130
155
  },
131
156
  {
157
+ id: 'edit',
132
158
  label: this.intl.t('common.edit-resource', { resource: this.intl.t('resource.part') }),
133
159
  fn: this.partActions.transition.edit,
134
160
  permission: 'fleet-ops update part',
135
161
  },
136
162
  { separator: true },
137
163
  {
164
+ id: 'delete',
138
165
  label: this.intl.t('common.delete-resource', { resource: this.intl.t('resource.part') }),
139
166
  fn: this.partActions.delete,
140
167
  permission: 'fleet-ops delete part',
@@ -33,7 +33,7 @@ export default class MaintenanceSchedulesIndexController extends Controller {
33
33
  return this.maintenanceScheduleActions;
34
34
  }
35
35
 
36
- @tracked queryParams = ['status', 'page', 'limit', 'sort', 'query', 'public_id', 'created_at', 'updated_at'];
36
+ @tracked queryParams = this.maintenanceScheduleActions.queryParamsFor(['status', 'page', 'limit', 'sort', 'query', 'public_id', 'created_at', 'updated_at']);
37
37
  @tracked page = 1;
38
38
  @tracked limit;
39
39
  @tracked sort = '-created_at';
@@ -132,16 +132,19 @@ export default class MaintenanceSchedulesIndexController extends Controller {
132
132
  get actionButtons() {
133
133
  return [
134
134
  {
135
+ id: 'more',
135
136
  component: 'dropdown-button',
136
137
  icon: 'display',
137
138
  size: 'xs',
138
139
  items: [
139
140
  {
141
+ id: 'list-view',
140
142
  label: this.intl.t('common.table-view'),
141
143
  icon: 'table-list',
142
144
  onClick: this.setLayoutList,
143
145
  },
144
146
  {
147
+ id: 'calendar-view',
145
148
  label: this.intl.t('common.calendar-view'),
146
149
  icon: 'calendar',
147
150
  onClick: this.setLayoutCalendar,
@@ -150,20 +153,45 @@ export default class MaintenanceSchedulesIndexController extends Controller {
150
153
  renderInPlace: true,
151
154
  helpText: this.intl.t('common.change-layout'),
152
155
  },
153
- { icon: 'refresh', onClick: this.maintenanceScheduleActions.refresh, helpText: this.intl.t('common.refresh') },
154
- { text: this.intl.t('common.new'), type: 'primary', icon: 'plus', onClick: this.maintenanceScheduleActions.transition.create },
155
- { text: this.intl.t('common.import'), type: 'magic', icon: 'upload', onClick: this.maintenanceScheduleActions.import },
156
- { text: this.intl.t('common.export'), icon: 'long-arrow-up', iconClass: 'rotate-icon-45', wrapperClass: 'hidden md:flex', onClick: this.maintenanceScheduleActions.export },
156
+ { id: 'refresh', icon: 'refresh', onClick: this.maintenanceScheduleActions.refresh, helpText: this.intl.t('common.refresh') },
157
+ {
158
+ id: 'create',
159
+ text: this.intl.t('common.new'),
160
+ type: 'primary',
161
+ icon: 'plus',
162
+ onClick: this.maintenanceScheduleActions.transition.create,
163
+ permission: 'fleet-ops create maintenance-schedule',
164
+ },
165
+ {
166
+ id: 'import',
167
+ text: this.intl.t('common.import'),
168
+ type: 'magic',
169
+ icon: 'upload',
170
+ onClick: this.maintenanceScheduleActions.import,
171
+ permission: 'fleet-ops import maintenance-schedule',
172
+ },
173
+ {
174
+ id: 'export',
175
+ text: this.intl.t('common.export'),
176
+ icon: 'long-arrow-up',
177
+ iconClass: 'rotate-icon-45',
178
+ wrapperClass: 'hidden md:flex',
179
+ onClick: this.maintenanceScheduleActions.export,
180
+ permission: 'fleet-ops export maintenance-schedule',
181
+ },
157
182
  ];
158
183
  }
159
184
 
160
185
  get bulkActions() {
161
- return [{ label: 'Delete selected...', class: 'text-red-500', fn: this.maintenanceScheduleActions.bulkDelete }];
186
+ return [
187
+ { id: 'bulk-delete', label: 'Delete selected...', class: 'text-red-500', fn: this.maintenanceScheduleActions.bulkDelete, permission: 'fleet-ops delete maintenance-schedule' },
188
+ ];
162
189
  }
163
190
 
164
191
  get columns() {
165
192
  return [
166
193
  {
194
+ id: 'public-id',
167
195
  label: this.intl.t('column.id'),
168
196
  valuePath: 'public_id',
169
197
  cellComponent: 'table/cell/anchor',
@@ -177,6 +205,7 @@ export default class MaintenanceSchedulesIndexController extends Controller {
177
205
  filterComponent: 'filter/string',
178
206
  },
179
207
  {
208
+ id: 'name',
180
209
  label: this.intl.t('column.name'),
181
210
  valuePath: 'name',
182
211
  resizable: true,
@@ -186,6 +215,7 @@ export default class MaintenanceSchedulesIndexController extends Controller {
186
215
  filterComponent: 'filter/string',
187
216
  },
188
217
  {
218
+ id: 'subject-name',
189
219
  label: this.intl.t('column.subject'),
190
220
  valuePath: 'subject.name',
191
221
  cellComponent: 'cell/maintenance-subject-identity',
@@ -195,6 +225,7 @@ export default class MaintenanceSchedulesIndexController extends Controller {
195
225
  sortable: false,
196
226
  },
197
227
  {
228
+ id: 'default-assignee-name',
198
229
  label: this.intl.t('column.assignee'),
199
230
  valuePath: 'default_assignee_name',
200
231
  cellComponent: 'cell/facilitator-identity',
@@ -205,6 +236,7 @@ export default class MaintenanceSchedulesIndexController extends Controller {
205
236
  hidden: true,
206
237
  },
207
238
  {
239
+ id: 'type',
208
240
  label: this.intl.t('column.type'),
209
241
  valuePath: 'type',
210
242
  cellComponent: 'table/cell/base',
@@ -216,6 +248,7 @@ export default class MaintenanceSchedulesIndexController extends Controller {
216
248
  filterComponent: 'filter/string',
217
249
  },
218
250
  {
251
+ id: 'status',
219
252
  label: this.intl.t('column.status'),
220
253
  valuePath: 'status',
221
254
  cellComponent: 'table/cell/status',
@@ -226,6 +259,7 @@ export default class MaintenanceSchedulesIndexController extends Controller {
226
259
  filterComponent: 'filter/string',
227
260
  },
228
261
  {
262
+ id: 'next-due-at-short',
229
263
  label: this.intl.t('column.next-due'),
230
264
  valuePath: 'nextDueAtShort',
231
265
  sortParam: 'next_due_date',
@@ -235,6 +269,7 @@ export default class MaintenanceSchedulesIndexController extends Controller {
235
269
  filterComponent: 'filter/date',
236
270
  },
237
271
  {
272
+ id: 'created-at',
238
273
  label: this.intl.t('column.created-at'),
239
274
  valuePath: 'createdAt',
240
275
  sortParam: 'created_at',
@@ -244,6 +279,7 @@ export default class MaintenanceSchedulesIndexController extends Controller {
244
279
  filterComponent: 'filter/date',
245
280
  },
246
281
  {
282
+ id: 'row-actions',
247
283
  label: '',
248
284
  cellComponent: 'table/cell/dropdown',
249
285
  ddButtonText: false,
@@ -254,33 +290,39 @@ export default class MaintenanceSchedulesIndexController extends Controller {
254
290
  wrapperClass: 'flex items-center justify-end mx-2',
255
291
  actions: [
256
292
  {
293
+ id: 'view',
257
294
  label: this.intl.t('common.view-resource', { resource: this.intl.t('resource.maintenance-schedule') }),
258
295
  fn: this.maintenanceScheduleActions.transition.view,
259
296
  permission: 'fleet-ops view maintenance-schedule',
260
297
  },
261
298
  {
299
+ id: 'edit',
262
300
  label: this.intl.t('common.edit-resource', { resource: this.intl.t('resource.maintenance-schedule') }),
263
301
  fn: this.maintenanceScheduleActions.transition.edit,
264
302
  permission: 'fleet-ops update maintenance-schedule',
265
303
  },
266
304
  {
305
+ id: 'trigger-now',
267
306
  label: this.intl.t('maintenance-schedule.actions.trigger-now'),
268
307
  fn: this.maintenanceScheduleActions.triggerNow,
269
308
  permission: 'fleet-ops update maintenance-schedule',
270
309
  },
271
310
  { separator: true },
272
311
  {
312
+ id: 'pause',
273
313
  label: this.intl.t('maintenance-schedule.actions.pause'),
274
314
  fn: this.maintenanceScheduleActions.pause,
275
315
  permission: 'fleet-ops update maintenance-schedule',
276
316
  },
277
317
  {
318
+ id: 'resume',
278
319
  label: this.intl.t('maintenance-schedule.actions.resume'),
279
320
  fn: this.maintenanceScheduleActions.resume,
280
321
  permission: 'fleet-ops update maintenance-schedule',
281
322
  },
282
323
  { separator: true },
283
324
  {
325
+ id: 'delete',
284
326
  label: this.intl.t('common.delete-resource', { resource: this.intl.t('resource.maintenance-schedule') }),
285
327
  fn: this.maintenanceScheduleActions.delete,
286
328
  permission: 'fleet-ops delete maintenance-schedule',
@@ -19,9 +19,9 @@ export default class MaintenanceWorkOrdersIndexDetailsController extends Control
19
19
 
20
20
  get actionButtons() {
21
21
  return [
22
- { icon: 'paper-plane', fn: this.sendEmail, text: 'Send to Vendor', permission: 'fleet-ops update work-order' },
23
- { icon: 'edit', fn: this.edit, permission: 'fleet-ops update work-order' },
24
- { icon: 'trash', fn: this.delete, type: 'danger', permission: 'fleet-ops delete work-order' },
22
+ { id: 'send-email', icon: 'paper-plane', fn: this.sendEmail, text: 'Send to Vendor', permission: 'fleet-ops update work-order' },
23
+ { id: 'edit', icon: 'edit', fn: this.edit, permission: 'fleet-ops update work-order' },
24
+ { id: 'delete', icon: 'trash', fn: this.delete, type: 'danger', permission: 'fleet-ops delete work-order' },
25
25
  ];
26
26
  }
27
27
 
@@ -9,7 +9,7 @@ export default class MaintenanceWorkOrdersIndexController extends Controller {
9
9
  @service workOrderActions;
10
10
  @service intl;
11
11
 
12
- @tracked queryParams = ['category', 'status', 'priority', 'page', 'limit', 'sort', 'query', 'public_id', 'created_at', 'updated_at'];
12
+ @tracked queryParams = this.workOrderActions.queryParamsFor(['category', 'status', 'priority', 'page', 'limit', 'sort', 'query', 'public_id', 'created_at', 'updated_at']);
13
13
  @tracked page = 1;
14
14
  @tracked limit;
15
15
  @tracked sort = '-created_at';
@@ -20,20 +20,29 @@ export default class MaintenanceWorkOrdersIndexController extends Controller {
20
20
 
21
21
  get actionButtons() {
22
22
  return [
23
- { icon: 'refresh', onClick: this.workOrderActions.refresh, helpText: this.intl.t('common.refresh') },
24
- { text: this.intl.t('common.new'), type: 'primary', icon: 'plus', onClick: this.workOrderActions.transition.create },
25
- { text: this.intl.t('common.import'), type: 'magic', icon: 'upload', onClick: this.workOrderActions.import },
26
- { text: this.intl.t('common.export'), icon: 'long-arrow-up', iconClass: 'rotate-icon-45', wrapperClass: 'hidden md:flex', onClick: this.workOrderActions.export },
23
+ { id: 'refresh', icon: 'refresh', onClick: this.workOrderActions.refresh, helpText: this.intl.t('common.refresh') },
24
+ { id: 'create', text: this.intl.t('common.new'), type: 'primary', icon: 'plus', onClick: this.workOrderActions.transition.create, permission: 'fleet-ops create work-order' },
25
+ { id: 'import', text: this.intl.t('common.import'), type: 'magic', icon: 'upload', onClick: this.workOrderActions.import, permission: 'fleet-ops import work-order' },
26
+ {
27
+ id: 'export',
28
+ text: this.intl.t('common.export'),
29
+ icon: 'long-arrow-up',
30
+ iconClass: 'rotate-icon-45',
31
+ wrapperClass: 'hidden md:flex',
32
+ onClick: this.workOrderActions.export,
33
+ permission: 'fleet-ops export work-order',
34
+ },
27
35
  ];
28
36
  }
29
37
 
30
38
  get bulkActions() {
31
- return [{ label: 'Delete selected...', class: 'text-red-500', fn: this.workOrderActions.bulkDelete }];
39
+ return [{ id: 'bulk-delete', label: 'Delete selected...', class: 'text-red-500', fn: this.workOrderActions.bulkDelete, permission: 'fleet-ops delete work-order' }];
32
40
  }
33
41
 
34
42
  get columns() {
35
43
  return [
36
44
  {
45
+ id: 'code',
37
46
  label: this.intl.t('column.code'),
38
47
  valuePath: 'code',
39
48
  cellComponent: 'table/cell/anchor',
@@ -46,8 +55,18 @@ export default class MaintenanceWorkOrdersIndexController extends Controller {
46
55
  filterParam: 'code',
47
56
  filterComponent: 'filter/string',
48
57
  },
49
- { label: this.intl.t('column.subject'), valuePath: 'subject', resizable: true, sortable: true, filterable: true, filterParam: 'subject', filterComponent: 'filter/string' },
50
58
  {
59
+ id: 'subject',
60
+ label: this.intl.t('column.subject'),
61
+ valuePath: 'subject',
62
+ resizable: true,
63
+ sortable: true,
64
+ filterable: true,
65
+ filterParam: 'subject',
66
+ filterComponent: 'filter/string',
67
+ },
68
+ {
69
+ id: 'category',
51
70
  label: this.intl.t('column.category'),
52
71
  valuePath: 'category',
53
72
  cellComponent: 'table/cell/base',
@@ -63,6 +82,7 @@ export default class MaintenanceWorkOrdersIndexController extends Controller {
63
82
  placeholder: 'Select work order category',
64
83
  },
65
84
  {
85
+ id: 'status',
66
86
  label: this.intl.t('column.status'),
67
87
  valuePath: 'status',
68
88
  cellComponent: 'table/cell/status',
@@ -73,6 +93,7 @@ export default class MaintenanceWorkOrdersIndexController extends Controller {
73
93
  filterComponent: 'filter/string',
74
94
  },
75
95
  {
96
+ id: 'priority',
76
97
  label: this.intl.t('column.priority'),
77
98
  valuePath: 'priority',
78
99
  cellComponent: 'table/cell/base',
@@ -84,6 +105,7 @@ export default class MaintenanceWorkOrdersIndexController extends Controller {
84
105
  filterComponent: 'filter/string',
85
106
  },
86
107
  {
108
+ id: 'target-name',
87
109
  label: this.intl.t('column.target'),
88
110
  valuePath: 'target_name',
89
111
  cellComponent: 'cell/maintenance-subject-identity',
@@ -93,6 +115,7 @@ export default class MaintenanceWorkOrdersIndexController extends Controller {
93
115
  hidden: true,
94
116
  },
95
117
  {
118
+ id: 'assignee-name',
96
119
  label: this.intl.t('column.assignee'),
97
120
  valuePath: 'assignee_name',
98
121
  cellComponent: 'cell/facilitator-identity',
@@ -100,9 +123,19 @@ export default class MaintenanceWorkOrdersIndexController extends Controller {
100
123
  resizable: true,
101
124
  sortable: false,
102
125
  },
103
- { label: this.intl.t('column.due-at'), valuePath: 'dueAt', sortParam: 'due_at', resizable: true, sortable: true, filterable: true, filterComponent: 'filter/date' },
104
- { label: this.intl.t('column.created-at'), valuePath: 'createdAt', sortParam: 'created_at', resizable: true, sortable: true, filterable: true, filterComponent: 'filter/date' },
126
+ { id: 'due-at', label: this.intl.t('column.due-at'), valuePath: 'dueAt', sortParam: 'due_at', resizable: true, sortable: true, filterable: true, filterComponent: 'filter/date' },
127
+ {
128
+ id: 'created-at',
129
+ label: this.intl.t('column.created-at'),
130
+ valuePath: 'createdAt',
131
+ sortParam: 'created_at',
132
+ resizable: true,
133
+ sortable: true,
134
+ filterable: true,
135
+ filterComponent: 'filter/date',
136
+ },
105
137
  {
138
+ id: 'updated-at',
106
139
  label: this.intl.t('column.updated-at'),
107
140
  valuePath: 'updatedAt',
108
141
  sortParam: 'updated_at',
@@ -113,6 +146,7 @@ export default class MaintenanceWorkOrdersIndexController extends Controller {
113
146
  filterComponent: 'filter/date',
114
147
  },
115
148
  {
149
+ id: 'row-actions',
116
150
  label: '',
117
151
  cellComponent: 'table/cell/dropdown',
118
152
  ddButtonText: false,
@@ -123,17 +157,20 @@ export default class MaintenanceWorkOrdersIndexController extends Controller {
123
157
  wrapperClass: 'flex items-center justify-end mx-2',
124
158
  actions: [
125
159
  {
160
+ id: 'view',
126
161
  label: this.intl.t('common.view-resource', { resource: this.intl.t('resource.work-order') }),
127
162
  fn: this.workOrderActions.transition.view,
128
163
  permission: 'fleet-ops view work-order',
129
164
  },
130
165
  {
166
+ id: 'edit',
131
167
  label: this.intl.t('common.edit-resource', { resource: this.intl.t('resource.work-order') }),
132
168
  fn: this.workOrderActions.transition.edit,
133
169
  permission: 'fleet-ops update work-order',
134
170
  },
135
171
  { separator: true },
136
172
  {
173
+ id: 'send-email',
137
174
  label: 'Send Work Order to Vendor',
138
175
  fn: this.workOrderActions.sendEmail,
139
176
  icon: 'paper-plane',
@@ -141,6 +178,7 @@ export default class MaintenanceWorkOrdersIndexController extends Controller {
141
178
  },
142
179
  { separator: true },
143
180
  {
181
+ id: 'delete',
144
182
  label: this.intl.t('common.delete-resource', { resource: this.intl.t('resource.work-order') }),
145
183
  fn: this.workOrderActions.delete,
146
184
  permission: 'fleet-ops delete work-order',
@@ -18,6 +18,7 @@ export default class ManagementContactsCustomersController extends ManagementCon
18
18
  get columns() {
19
19
  return [
20
20
  {
21
+ id: 'name',
21
22
  sticky: true,
22
23
  label: this.intl.t('column.name'),
23
24
  valuePath: 'name',
@@ -31,6 +32,7 @@ export default class ManagementContactsCustomersController extends ManagementCon
31
32
  filterComponent: 'filter/string',
32
33
  },
33
34
  {
35
+ id: 'public-id',
34
36
  label: this.intl.t('column.id'),
35
37
  valuePath: 'public_id',
36
38
  cellComponent: 'click-to-copy',
@@ -41,6 +43,7 @@ export default class ManagementContactsCustomersController extends ManagementCon
41
43
  filterComponent: 'filter/string',
42
44
  },
43
45
  {
46
+ id: 'internal-id',
44
47
  label: this.intl.t('column.internal-id'),
45
48
  valuePath: 'internal_id',
46
49
  cellComponent: 'click-to-copy',
@@ -51,6 +54,7 @@ export default class ManagementContactsCustomersController extends ManagementCon
51
54
  filterComponent: 'filter/string',
52
55
  },
53
56
  {
57
+ id: 'title',
54
58
  label: this.intl.t('column.title'),
55
59
  valuePath: 'title',
56
60
  cellComponent: 'click-to-copy',
@@ -62,6 +66,7 @@ export default class ManagementContactsCustomersController extends ManagementCon
62
66
  filterComponent: 'filter/string',
63
67
  },
64
68
  {
69
+ id: 'email',
65
70
  label: this.intl.t('column.email'),
66
71
  valuePath: 'email',
67
72
  cellComponent: 'click-to-copy',
@@ -72,6 +77,7 @@ export default class ManagementContactsCustomersController extends ManagementCon
72
77
  filterComponent: 'filter/string',
73
78
  },
74
79
  {
80
+ id: 'phone',
75
81
  label: this.intl.t('column.phone'),
76
82
  valuePath: 'phone',
77
83
  cellComponent: 'click-to-copy',
@@ -82,6 +88,7 @@ export default class ManagementContactsCustomersController extends ManagementCon
82
88
  filterComponent: 'filter/string',
83
89
  },
84
90
  {
91
+ id: 'address',
85
92
  label: this.intl.t('column.address'),
86
93
  valuePath: 'address',
87
94
  cellComponent: 'cell/place-identity',
@@ -94,6 +101,7 @@ export default class ManagementContactsCustomersController extends ManagementCon
94
101
  filterComponent: 'filter/string',
95
102
  },
96
103
  {
104
+ id: 'created-at',
97
105
  label: this.intl.t('column.created'),
98
106
  valuePath: 'createdAt',
99
107
  sortParam: 'created_at',
@@ -104,6 +112,7 @@ export default class ManagementContactsCustomersController extends ManagementCon
104
112
  filterComponent: 'filter/date',
105
113
  },
106
114
  {
115
+ id: 'updated-at',
107
116
  label: this.intl.t('column.updated'),
108
117
  valuePath: 'updatedAt',
109
118
  sortParam: 'updated_at',
@@ -115,6 +124,7 @@ export default class ManagementContactsCustomersController extends ManagementCon
115
124
  filterComponent: 'filter/date',
116
125
  },
117
126
  {
127
+ id: 'row-actions',
118
128
  label: '',
119
129
  cellComponent: 'table/cell/dropdown',
120
130
  ddButtonText: false,
@@ -127,12 +137,14 @@ export default class ManagementContactsCustomersController extends ManagementCon
127
137
  width: 60,
128
138
  actions: [
129
139
  {
140
+ id: 'view',
130
141
  label: this.intl.t('common.view-resource', { resource: this.intl.t('resource.customer') }),
131
142
  icon: 'eye',
132
143
  fn: this.customerActions.transition.view,
133
144
  permission: 'fleet-ops view contact',
134
145
  },
135
146
  {
147
+ id: 'edit',
136
148
  label: this.intl.t('common.edit-resource', { resource: this.intl.t('resource.customer') }),
137
149
  icon: 'pencil',
138
150
  fn: this.customerActions.transition.edit,
@@ -146,6 +158,7 @@ export default class ManagementContactsCustomersController extends ManagementCon
146
158
  separator: true,
147
159
  },
148
160
  {
161
+ id: 'delete',
149
162
  label: this.intl.t('common.delete-resource', { resource: this.intl.t('resource.customer') }),
150
163
  icon: 'trash',
151
164
  fn: this.customerActions.delete,