@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
@@ -28,7 +28,8 @@
28
28
 
29
29
  {{#if this.load.isIdle}}
30
30
  {{! Drivers — fleetops' rotating tracking-marker matches the operational
31
- live-map's look and animates on heading changes. }}
31
+ live-map's look and animates on heading changes. The popup and tooltip
32
+ are the live map's own cards, fed from each marker's index-resource card. }}
32
33
  {{#each this.drivers as |driver|}}
33
34
  <layers.tracking-marker
34
35
  @id={{driver.uuid}}
@@ -39,28 +40,11 @@
39
40
  @draggable={{false}}
40
41
  as |marker|
41
42
  >
42
- <marker.popup @maxWidth="240" @minWidth="180">
43
- <div class="flex flex-row gap-2">
44
- <div class="w-9 h-9 flex-shrink-0">
45
- <img src={{or driver.avatar_url driver.vehicle_avatar}} alt={{driver.name}} class="rounded-md w-9 h-9 object-cover shadow-sm" />
46
- </div>
47
- <div class="flex-1 min-w-0">
48
- <div class="text-xs font-semibold truncate">{{or driver.name "Driver"}}</div>
49
- <div class="text-[11px]">
50
- {{#if driver.current_order_uuid}}
51
- <span class="text-blue-500"><FaIcon @icon="bolt" class="mr-1" />On order</span>
52
- {{else if driver.online}}
53
- <span class="text-green-500"><FaIcon @icon="circle" @size="2xs" class="mr-1" />Online</span>
54
- {{else}}
55
- <span class="text-gray-400"><FaIcon @icon="circle" @size="2xs" class="mr-1" />Offline</span>
56
- {{/if}}
57
- </div>
58
- <div class="text-[10px] text-gray-400 mt-0.5 truncate">{{driver.lat}}, {{driver.lng}}</div>
59
- </div>
60
- </div>
43
+ <marker.popup @maxWidth="500" @minWidth="225">
44
+ <Map::MarkerCard::Driver @driver={{or driver.card driver}} />
61
45
  </marker.popup>
62
46
  <marker.tooltip @permanent={{false}} @sticky={{true}} @direction="top">
63
- <div class="text-[11px] font-semibold">{{or driver.name "Driver"}}</div>
47
+ <Map::MarkerCard::Driver @driver={{or driver.card driver}} @variant="tooltip" />
64
48
  </marker.tooltip>
65
49
  </layers.tracking-marker>
66
50
  {{/each}}
@@ -77,27 +61,11 @@
77
61
  @draggable={{false}}
78
62
  as |marker|
79
63
  >
80
- <marker.popup @maxWidth="240" @minWidth="180">
81
- <div class="flex flex-row gap-2">
82
- <div class="w-9 h-9 flex-shrink-0">
83
- <img src={{or vehicle.photo_url vehicle.avatar_url}} alt={{vehicle.name}} class="rounded-md w-9 h-9 object-cover shadow-sm" />
84
- </div>
85
- <div class="flex-1 min-w-0">
86
- <div class="text-xs font-semibold truncate">{{or vehicle.name "Vehicle"}}</div>
87
- {{#if vehicle.plate_number}}
88
- <div class="text-[10px] text-gray-500 truncate">{{vehicle.plate_number}}</div>
89
- {{/if}}
90
- {{#if vehicle.driver_name}}
91
- <div class="text-[11px] text-gray-600 dark:text-gray-300 truncate">
92
- <FaIcon @icon="id-card" class="mr-1 text-gray-400" />{{vehicle.driver_name}}
93
- </div>
94
- {{/if}}
95
- <div class="text-[10px] text-gray-400 mt-0.5 truncate">{{vehicle.lat}}, {{vehicle.lng}}</div>
96
- </div>
97
- </div>
64
+ <marker.popup @maxWidth="500" @minWidth="225">
65
+ <Map::MarkerCard::Vehicle @vehicle={{or vehicle.card vehicle}} />
98
66
  </marker.popup>
99
67
  <marker.tooltip @permanent={{false}} @sticky={{true}} @direction="top">
100
- <div class="text-[11px] font-semibold">{{or vehicle.name "Vehicle"}}</div>
68
+ <Map::MarkerCard::Vehicle @vehicle={{or vehicle.card vehicle}} @variant="tooltip" />
101
69
  </marker.tooltip>
102
70
  </layers.tracking-marker>
103
71
  {{/each}}
@@ -8,7 +8,7 @@ export default class AnalyticsReportsIndexController extends Controller {
8
8
  @service intl;
9
9
 
10
10
  /** query params */
11
- @tracked queryParams = ['page', 'limit', 'sort', 'query', 'public_id', 'name', 'created_at'];
11
+ @tracked queryParams = this.reportActions.queryParamsFor(['page', 'limit', 'sort', 'query', 'public_id', 'name', 'created_at']);
12
12
  @tracked page = 1;
13
13
  @tracked limit;
14
14
  @tracked sort = '-created_at';
@@ -20,15 +20,18 @@ export default class AnalyticsReportsIndexController extends Controller {
20
20
  get actionButtons() {
21
21
  return [
22
22
  {
23
+ id: 'refresh',
23
24
  icon: 'refresh',
24
25
  onClick: this.reportActions.refresh,
25
26
  helpText: this.intl.t('common.refresh'),
26
27
  },
27
28
  {
29
+ id: 'create',
28
30
  text: this.intl.t('common.new'),
29
31
  type: 'primary',
30
32
  icon: 'plus',
31
33
  onClick: this.reportActions.transition.create,
34
+ permission: 'iam create report',
32
35
  },
33
36
  ];
34
37
  }
@@ -36,9 +39,11 @@ export default class AnalyticsReportsIndexController extends Controller {
36
39
  get bulkActions() {
37
40
  return [
38
41
  {
42
+ id: 'bulk-delete',
39
43
  label: 'Delete selected...',
40
44
  class: 'text-red-500',
41
45
  fn: this.reportActions.bulkDelete,
46
+ permission: 'iam delete report',
42
47
  },
43
48
  ];
44
49
  }
@@ -46,6 +51,7 @@ export default class AnalyticsReportsIndexController extends Controller {
46
51
  get columns() {
47
52
  return [
48
53
  {
54
+ id: 'title',
49
55
  sticky: true,
50
56
  label: 'Title',
51
57
  valuePath: 'title',
@@ -57,6 +63,7 @@ export default class AnalyticsReportsIndexController extends Controller {
57
63
  filterComponent: 'filter/string',
58
64
  },
59
65
  {
66
+ id: 'public-id',
60
67
  label: 'ID',
61
68
  valuePath: 'public_id',
62
69
  cellComponent: 'click-to-copy',
@@ -67,6 +74,7 @@ export default class AnalyticsReportsIndexController extends Controller {
67
74
  filterComponent: 'filter/string',
68
75
  },
69
76
  {
77
+ id: 'row-actions',
70
78
  label: '',
71
79
  cellComponent: 'table/cell/dropdown',
72
80
  ddButtonText: false,
@@ -79,19 +87,25 @@ export default class AnalyticsReportsIndexController extends Controller {
79
87
  width: 60,
80
88
  actions: [
81
89
  {
90
+ id: 'view',
82
91
  label: 'View report...',
83
92
  fn: this.reportActions.transition.view,
93
+ permission: 'iam view report',
84
94
  },
85
95
  {
96
+ id: 'edit',
86
97
  label: 'Edit report...',
87
98
  fn: this.reportActions.transition.edit,
99
+ permission: 'iam update report',
88
100
  },
89
101
  {
90
102
  separator: true,
91
103
  },
92
104
  {
105
+ id: 'delete',
93
106
  label: 'Delete report...',
94
107
  fn: this.reportActions.delete,
108
+ permission: 'iam delete report',
95
109
  },
96
110
  ],
97
111
  sortable: false,
@@ -39,6 +39,7 @@ export default class ConnectivityDevicesIndexDetailsController extends Controlle
39
39
  permission: 'fleet-ops update device',
40
40
  },
41
41
  {
42
+ id: 'more',
42
43
  icon: 'ellipsis-h',
43
44
  iconPrefix: 'fas',
44
45
  renderInPlace: true,
@@ -17,7 +17,7 @@ export default class ConnectivityDevicesIndexController extends Controller {
17
17
  @service trailerActions;
18
18
 
19
19
  /** query params */
20
- @tracked queryParams = [
20
+ @tracked queryParams = this.deviceActions.queryParamsFor([
21
21
  'name',
22
22
  'status',
23
23
  'attachment_state',
@@ -36,7 +36,7 @@ export default class ConnectivityDevicesIndexController extends Controller {
36
36
  'public_id',
37
37
  'created_at',
38
38
  'updated_at',
39
- ];
39
+ ]);
40
40
  @tracked page = 1;
41
41
  @tracked limit;
42
42
  @tracked sort = '-created_at';
@@ -56,37 +56,46 @@ export default class ConnectivityDevicesIndexController extends Controller {
56
56
  /** action buttons */
57
57
  @tracked actionButtons = [
58
58
  {
59
+ id: 'refresh',
59
60
  icon: 'refresh',
60
61
  onClick: this.deviceActions.refresh,
61
62
  helpText: this.intl.t('common.refresh'),
62
63
  },
63
64
  {
65
+ id: 'create',
64
66
  text: this.intl.t('common.new'),
65
67
  type: 'primary',
66
68
  icon: 'plus',
67
69
  onClick: this.deviceActions.transition.create,
70
+ permission: 'fleet-ops create device',
68
71
  },
69
72
  {
73
+ id: 'import',
70
74
  text: this.intl.t('common.import'),
71
75
  type: 'magic',
72
76
  icon: 'upload',
73
77
  onClick: this.deviceActions.import,
78
+ permission: 'fleet-ops import device',
74
79
  },
75
80
  {
81
+ id: 'export',
76
82
  text: this.intl.t('common.export'),
77
83
  icon: 'long-arrow-up',
78
84
  iconClass: 'rotate-icon-45',
79
85
  wrapperClass: 'hidden md:flex',
80
86
  onClick: this.deviceActions.export,
87
+ permission: 'fleet-ops export device',
81
88
  },
82
89
  ];
83
90
 
84
91
  /** bulk action buttons */
85
92
  @tracked bulkActions = [
86
93
  {
94
+ id: 'bulk-delete',
87
95
  label: 'Delete selected...',
88
96
  class: 'text-red-500',
89
97
  fn: this.deviceActions.bulkDelete,
98
+ permission: 'fleet-ops delete device',
90
99
  },
91
100
  ];
92
101
 
@@ -107,6 +116,7 @@ export default class ConnectivityDevicesIndexController extends Controller {
107
116
  separator: true,
108
117
  },
109
118
  {
119
+ id: 'delete',
110
120
  label: this.intl.t('common.delete-resource', { resource: this.intl.t('resource.device') }),
111
121
  fn: this.deviceActions.delete,
112
122
  permission: 'fleet-ops delete device',
@@ -78,7 +78,20 @@ export default class ConnectivityEventsIndexController extends Controller {
78
78
  @service telematicActions;
79
79
 
80
80
  /** query params */
81
- @tracked queryParams = ['page', 'limit', 'sort', 'query', 'telematic', 'device', 'event_type', 'severity', 'processed', 'occurred_at', 'created_at', 'updated_at'];
81
+ @tracked queryParams = this.deviceEventActions.queryParamsFor([
82
+ 'page',
83
+ 'limit',
84
+ 'sort',
85
+ 'query',
86
+ 'telematic',
87
+ 'device',
88
+ 'event_type',
89
+ 'severity',
90
+ 'processed',
91
+ 'occurred_at',
92
+ 'created_at',
93
+ 'updated_at',
94
+ ]);
82
95
  @tracked page = 1;
83
96
  @tracked limit;
84
97
  @tracked sort = '-created_at';
@@ -95,6 +108,7 @@ export default class ConnectivityEventsIndexController extends Controller {
95
108
  /** action buttons */
96
109
  @tracked actionButtons = [
97
110
  {
111
+ id: 'refresh',
98
112
  icon: 'refresh',
99
113
  onClick: this.deviceEventActions.refresh,
100
114
  helpText: this.intl.t('common.refresh'),
@@ -107,6 +121,7 @@ export default class ConnectivityEventsIndexController extends Controller {
107
121
  /** columns */
108
122
  @tracked columns = [
109
123
  {
124
+ id: 'event-type',
110
125
  sticky: true,
111
126
  label: 'Event',
112
127
  valuePath: 'event_type',
@@ -121,6 +136,7 @@ export default class ConnectivityEventsIndexController extends Controller {
121
136
  filterComponent: 'filter/string',
122
137
  },
123
138
  {
139
+ id: 'device-display-name',
124
140
  label: 'Device',
125
141
  valuePath: 'device.displayName',
126
142
  cellComponent: 'cell/device-identity',
@@ -137,6 +153,7 @@ export default class ConnectivityEventsIndexController extends Controller {
137
153
  modelNamePath: 'displayName',
138
154
  },
139
155
  {
156
+ id: 'provider',
140
157
  label: 'Provider',
141
158
  valuePath: 'provider',
142
159
  cellComponent: 'cell/telematic-identity',
@@ -152,6 +169,7 @@ export default class ConnectivityEventsIndexController extends Controller {
152
169
  model: 'telematic',
153
170
  },
154
171
  {
172
+ id: 'severity',
155
173
  label: 'Severity',
156
174
  valuePath: 'severity',
157
175
  cellComponent: 'table/cell/status',
@@ -165,12 +183,14 @@ export default class ConnectivityEventsIndexController extends Controller {
165
183
  filterOptionValue: 'value',
166
184
  },
167
185
  {
186
+ id: 'message',
168
187
  label: 'Message',
169
188
  valuePath: 'message',
170
189
  resizable: true,
171
190
  sortable: false,
172
191
  },
173
192
  {
193
+ id: 'code',
174
194
  label: 'Code',
175
195
  valuePath: 'code',
176
196
  resizable: true,
@@ -180,6 +200,7 @@ export default class ConnectivityEventsIndexController extends Controller {
180
200
  filterComponent: 'filter/string',
181
201
  },
182
202
  {
203
+ id: 'ident',
183
204
  label: 'IDENT',
184
205
  valuePath: 'ident',
185
206
  hidden: true,
@@ -187,6 +208,7 @@ export default class ConnectivityEventsIndexController extends Controller {
187
208
  sortable: true,
188
209
  },
189
210
  {
211
+ id: 'protocol',
190
212
  label: 'Protocol',
191
213
  valuePath: 'protocol',
192
214
  hidden: true,
@@ -194,6 +216,7 @@ export default class ConnectivityEventsIndexController extends Controller {
194
216
  sortable: true,
195
217
  },
196
218
  {
219
+ id: 'state',
197
220
  label: 'State',
198
221
  valuePath: 'state',
199
222
  hidden: true,
@@ -201,6 +224,7 @@ export default class ConnectivityEventsIndexController extends Controller {
201
224
  sortable: true,
202
225
  },
203
226
  {
227
+ id: 'processed-at',
204
228
  label: 'Processed',
205
229
  valuePath: 'processedAt',
206
230
  sortParam: 'processed_at',
@@ -214,6 +238,7 @@ export default class ConnectivityEventsIndexController extends Controller {
214
238
  filterOptionValue: 'value',
215
239
  },
216
240
  {
241
+ id: 'occurred-at',
217
242
  label: 'Occurred',
218
243
  valuePath: 'occurredAt',
219
244
  sortParam: 'occurred_at',
@@ -224,6 +249,7 @@ export default class ConnectivityEventsIndexController extends Controller {
224
249
  filterComponent: 'filter/date',
225
250
  },
226
251
  {
252
+ id: 'created-at',
227
253
  label: this.intl.t('column.created-at'),
228
254
  valuePath: 'createdAt',
229
255
  sortParam: 'created_at',
@@ -234,6 +260,7 @@ export default class ConnectivityEventsIndexController extends Controller {
234
260
  filterComponent: 'filter/date',
235
261
  },
236
262
  {
263
+ id: 'updated-at',
237
264
  label: this.intl.t('column.updated-at'),
238
265
  valuePath: 'updatedAt',
239
266
  sortParam: 'updated_at',
@@ -245,6 +272,7 @@ export default class ConnectivityEventsIndexController extends Controller {
245
272
  hidden: true,
246
273
  },
247
274
  {
275
+ id: 'row-actions',
248
276
  label: '',
249
277
  cellComponent: 'table/cell/dropdown',
250
278
  ddButtonText: false,
@@ -257,11 +285,13 @@ export default class ConnectivityEventsIndexController extends Controller {
257
285
  width: 60,
258
286
  actions: [
259
287
  {
288
+ id: 'view',
260
289
  label: this.intl.t('common.view-resource', { resource: this.intl.t('resource.device-event') }),
261
290
  fn: this.deviceEventActions.transition.view,
262
291
  permission: 'fleet-ops view device-event',
263
292
  },
264
293
  {
294
+ id: 'mark-processed',
265
295
  label: 'Mark processed',
266
296
  fn: this.markProcessed,
267
297
  permission: 'fleet-ops update device-event',
@@ -40,6 +40,7 @@ export default class ConnectivityFuelProvidersIndexController extends Controller
40
40
  text: 'Connect Integration',
41
41
  type: 'primary',
42
42
  onClick: () => this.fuelIntegrationActions.transition.create(),
43
+ permission: 'fleet-ops create fuel-provider-connection',
43
44
  },
44
45
  ];
45
46
  }
@@ -51,6 +52,7 @@ export default class ConnectivityFuelProvidersIndexController extends Controller
51
52
  {
52
53
  label: `Sync ${selected.length} selected`,
53
54
  fn: () => selected.forEach((connection) => this.syncConnection(connection)),
55
+ permission: 'fleet-ops sync fuel-provider-connection',
54
56
  },
55
57
  ];
56
58
  }
@@ -125,11 +127,11 @@ export default class ConnectivityFuelProvidersIndexController extends Controller
125
127
  sticky: 'right',
126
128
  width: 60,
127
129
  actions: [
128
- { label: 'Open Integration', fn: this.openConnection },
129
- { label: 'Edit Settings', fn: this.editConnection },
130
+ { label: 'Open Integration', fn: this.openConnection, permission: 'fleet-ops view fuel-provider-connection' },
131
+ { label: 'Edit Settings', fn: this.editConnection, permission: 'fleet-ops update fuel-provider-connection' },
130
132
  { separator: true },
131
- { label: 'Test Connection', fn: this.testConnection },
132
- { label: 'Sync Transactions', fn: this.syncConnection },
133
+ { label: 'Test Connection', fn: this.testConnection, permission: 'fleet-ops update fuel-provider-connection' },
134
+ { label: 'Sync Transactions', fn: this.syncConnection, permission: 'fleet-ops sync fuel-provider-connection' },
133
135
  ],
134
136
  sortable: false,
135
137
  filterable: false,
@@ -7,7 +7,7 @@ export default class ConnectivitySensorsIndexDetailsController extends Controlle
7
7
  @service hostRouter;
8
8
 
9
9
  get tabs() {
10
- const registeredTabs = this.menuService.getMenuItems('fleet-ops:component:place:details');
10
+ const registeredTabs = this.menuService.getMenuItems('fleet-ops:component:sensor:details');
11
11
  return [
12
12
  {
13
13
  route: 'connectivity.sensors.index.details.index',
@@ -65,7 +65,21 @@ export default class ConnectivitySensorsIndexController extends Controller {
65
65
  @service store;
66
66
 
67
67
  /** query params */
68
- @tracked queryParams = ['page', 'limit', 'sort', 'query', 'telematic', 'device', 'type', 'status', 'serial_number', 'imei', 'last_reading_at', 'created_at', 'updated_at'];
68
+ @tracked queryParams = this.sensorActions.queryParamsFor([
69
+ 'page',
70
+ 'limit',
71
+ 'sort',
72
+ 'query',
73
+ 'telematic',
74
+ 'device',
75
+ 'type',
76
+ 'status',
77
+ 'serial_number',
78
+ 'imei',
79
+ 'last_reading_at',
80
+ 'created_at',
81
+ 'updated_at',
82
+ ]);
69
83
  @tracked page = 1;
70
84
  @tracked limit;
71
85
  @tracked sort = '-created_at';
@@ -83,43 +97,53 @@ export default class ConnectivitySensorsIndexController extends Controller {
83
97
  /** action buttons */
84
98
  @tracked actionButtons = [
85
99
  {
100
+ id: 'refresh',
86
101
  icon: 'refresh',
87
102
  onClick: this.sensorActions.refresh,
88
103
  helpText: this.intl.t('common.refresh'),
89
104
  },
90
105
  {
106
+ id: 'create',
91
107
  text: this.intl.t('common.new'),
92
108
  type: 'primary',
93
109
  icon: 'plus',
94
110
  onClick: this.sensorActions.transition.create,
111
+ permission: 'fleet-ops create sensor',
95
112
  },
96
113
  {
114
+ id: 'import',
97
115
  text: this.intl.t('common.import'),
98
116
  type: 'magic',
99
117
  icon: 'upload',
100
118
  onClick: this.sensorActions.import,
119
+ permission: 'fleet-ops import sensor',
101
120
  },
102
121
  {
122
+ id: 'export',
103
123
  text: this.intl.t('common.export'),
104
124
  icon: 'long-arrow-up',
105
125
  iconClass: 'rotate-icon-45',
106
126
  wrapperClass: 'hidden md:flex',
107
127
  onClick: this.sensorActions.export,
128
+ permission: 'fleet-ops export sensor',
108
129
  },
109
130
  ];
110
131
 
111
132
  /** bulk action buttons */
112
133
  @tracked bulkActions = [
113
134
  {
135
+ id: 'bulk-delete',
114
136
  label: 'Delete selected...',
115
137
  class: 'text-red-500',
116
138
  fn: this.sensorActions.bulkDelete,
139
+ permission: 'fleet-ops delete sensor',
117
140
  },
118
141
  ];
119
142
 
120
143
  /** columns */
121
144
  @tracked columns = [
122
145
  {
146
+ id: 'display-name',
123
147
  sticky: true,
124
148
  label: this.intl.t('column.name'),
125
149
  valuePath: 'displayName',
@@ -134,6 +158,7 @@ export default class ConnectivitySensorsIndexController extends Controller {
134
158
  filterComponent: 'filter/string',
135
159
  },
136
160
  {
161
+ id: 'telematic-provider',
137
162
  label: 'Telematic',
138
163
  valuePath: 'telematic.provider',
139
164
  cellComponent: 'cell/telematic-identity',
@@ -149,6 +174,7 @@ export default class ConnectivitySensorsIndexController extends Controller {
149
174
  model: 'telematic',
150
175
  },
151
176
  {
177
+ id: 'device-display-name',
152
178
  label: 'Device',
153
179
  valuePath: 'device.displayName',
154
180
  cellComponent: 'cell/device-identity',
@@ -166,6 +192,7 @@ export default class ConnectivitySensorsIndexController extends Controller {
166
192
  query: this.telematic ? { telematic_uuid: this.telematic } : undefined,
167
193
  },
168
194
  {
195
+ id: 'type',
169
196
  label: 'Type',
170
197
  valuePath: 'type',
171
198
  cellComponent: 'table/cell/base',
@@ -180,18 +207,21 @@ export default class ConnectivitySensorsIndexController extends Controller {
180
207
  filterOptionValue: 'value',
181
208
  },
182
209
  {
210
+ id: 'last-value',
183
211
  label: 'Last Value',
184
212
  valuePath: 'last_value',
185
213
  resizable: true,
186
214
  sortable: true,
187
215
  },
188
216
  {
217
+ id: 'unit',
189
218
  label: 'Unit',
190
219
  valuePath: 'unit',
191
220
  resizable: true,
192
221
  sortable: true,
193
222
  },
194
223
  {
224
+ id: 'status',
195
225
  label: this.intl.t('column.status'),
196
226
  valuePath: 'status',
197
227
  cellComponent: 'table/cell/status',
@@ -204,6 +234,7 @@ export default class ConnectivitySensorsIndexController extends Controller {
204
234
  filterOptionValue: 'value',
205
235
  },
206
236
  {
237
+ id: 'threshold-status',
207
238
  label: 'Threshold',
208
239
  valuePath: 'threshold_status',
209
240
  cellComponent: 'table/cell/status',
@@ -211,6 +242,7 @@ export default class ConnectivitySensorsIndexController extends Controller {
211
242
  sortable: true,
212
243
  },
213
244
  {
245
+ id: 'serial-number',
214
246
  label: 'Serial Number',
215
247
  valuePath: 'serial_number',
216
248
  resizable: true,
@@ -220,6 +252,7 @@ export default class ConnectivitySensorsIndexController extends Controller {
220
252
  filterComponent: 'filter/string',
221
253
  },
222
254
  {
255
+ id: 'imei',
223
256
  label: 'IMEI',
224
257
  valuePath: 'imei',
225
258
  resizable: true,
@@ -229,6 +262,7 @@ export default class ConnectivitySensorsIndexController extends Controller {
229
262
  filterComponent: 'filter/string',
230
263
  },
231
264
  {
265
+ id: 'last-reading-at',
232
266
  label: 'Last Reading',
233
267
  valuePath: 'lastReadingAt',
234
268
  sortParam: 'last_reading_at',
@@ -239,6 +273,7 @@ export default class ConnectivitySensorsIndexController extends Controller {
239
273
  filterComponent: 'filter/date',
240
274
  },
241
275
  {
276
+ id: 'created-at',
242
277
  label: this.intl.t('column.created-at'),
243
278
  valuePath: 'createdAt',
244
279
  sortParam: 'created_at',
@@ -249,6 +284,7 @@ export default class ConnectivitySensorsIndexController extends Controller {
249
284
  filterComponent: 'filter/date',
250
285
  },
251
286
  {
287
+ id: 'updated-at',
252
288
  label: this.intl.t('column.updated-at'),
253
289
  valuePath: 'updatedAt',
254
290
  sortParam: 'updated_at',
@@ -260,6 +296,7 @@ export default class ConnectivitySensorsIndexController extends Controller {
260
296
  filterComponent: 'filter/date',
261
297
  },
262
298
  {
299
+ id: 'row-actions',
263
300
  label: '',
264
301
  cellComponent: 'table/cell/dropdown',
265
302
  ddButtonText: false,
@@ -272,11 +309,13 @@ export default class ConnectivitySensorsIndexController extends Controller {
272
309
  width: 60,
273
310
  actions: [
274
311
  {
312
+ id: 'view',
275
313
  label: this.intl.t('common.view-resource', { resource: this.intl.t('resource.sensor') }),
276
314
  fn: this.sensorActions.transition.view,
277
315
  permission: 'fleet-ops view sensor',
278
316
  },
279
317
  {
318
+ id: 'edit',
280
319
  label: this.intl.t('common.edit-resource', { resource: this.intl.t('resource.sensor') }),
281
320
  fn: this.sensorActions.transition.edit,
282
321
  permission: 'fleet-ops update sensor',
@@ -285,6 +324,7 @@ export default class ConnectivitySensorsIndexController extends Controller {
285
324
  separator: true,
286
325
  },
287
326
  {
327
+ id: 'delete',
288
328
  label: this.intl.t('common.delete-resource', { resource: this.intl.t('resource.sensor') }),
289
329
  fn: this.sensorActions.delete,
290
330
  permission: 'fleet-ops delete sensor',
@@ -38,12 +38,14 @@ export default class ConnectivityTelematicsIndexController extends Controller {
38
38
  type: 'primary',
39
39
  icon: 'plus',
40
40
  onClick: this.telematicActions.transition.create,
41
+ permission: 'fleet-ops create telematic',
41
42
  },
42
43
  {
43
44
  text: this.intl.t('common.import'),
44
45
  type: 'magic',
45
46
  icon: 'upload',
46
47
  onClick: this.telematicActions.import,
48
+ permission: 'fleet-ops import telematic',
47
49
  },
48
50
  {
49
51
  text: this.intl.t('common.export'),
@@ -51,6 +53,7 @@ export default class ConnectivityTelematicsIndexController extends Controller {
51
53
  iconClass: 'rotate-icon-45',
52
54
  wrapperClass: 'hidden md:flex',
53
55
  onClick: this.telematicActions.export,
56
+ permission: 'fleet-ops export telematic',
54
57
  },
55
58
  ];
56
59
 
@@ -60,6 +63,7 @@ export default class ConnectivityTelematicsIndexController extends Controller {
60
63
  label: 'Delete selected...',
61
64
  class: 'text-red-500',
62
65
  fn: this.telematicActions.bulkDelete,
66
+ permission: 'fleet-ops delete telematic',
63
67
  },
64
68
  ];
65
69