@fleetbase/fleetops-engine 0.6.52 → 0.6.54
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/addon/components/device/details.hbs +106 -135
- package/addon/components/device/details.js +174 -1
- package/addon/components/device/panel-header.hbs +2 -2
- package/addon/components/layout/fleet-ops-sidebar/operations-monitor.hbs +201 -0
- package/addon/components/layout/fleet-ops-sidebar/operations-monitor.js +654 -0
- package/addon/components/layout/fleet-ops-sidebar.hbs +19 -233
- package/addon/components/layout/fleet-ops-sidebar.js +364 -395
- package/addon/components/maintenance-schedule/form.js +1 -0
- package/addon/components/order/form/details.hbs +1 -43
- package/addon/components/order/form/details.js +18 -53
- package/addon/components/order/form/orchestrator-constraints.hbs +40 -0
- package/addon/components/order/form/orchestrator-constraints.js +61 -0
- package/addon/components/order/form/payload.js +50 -2
- package/addon/components/order/form/route.js +15 -0
- package/addon/components/order/form/service-rate.hbs +62 -11
- package/addon/components/order/form/service-rate.js +124 -2
- package/addon/components/order/form.hbs +2 -0
- package/addon/components/telematic/details.hbs +7 -1
- package/addon/components/telematic/form.js +16 -8
- package/addon/components/work-order/details.hbs +5 -1
- package/addon/components/work-order/form.hbs +26 -4
- package/addon/components/work-order/form.js +5 -1
- package/addon/controllers/connectivity/devices/index/details/events.js +244 -1
- package/addon/controllers/connectivity/devices/index/details/sensors.js +199 -0
- package/addon/controllers/connectivity/devices/index/details/vehicle.js +74 -0
- package/addon/controllers/connectivity/devices/index/details.js +12 -0
- package/addon/controllers/connectivity/devices/index.js +4 -1
- package/addon/controllers/connectivity/telematics/details/attachments.js +220 -54
- package/addon/controllers/connectivity/telematics/details/devices.js +90 -41
- package/addon/controllers/connectivity/telematics/details/events.js +39 -11
- package/addon/controllers/connectivity/telematics/details/sensors.js +39 -19
- package/addon/controllers/maintenance/index.js +100 -0
- package/addon/controllers/maintenance/work-orders/index.js +18 -1
- package/addon/controllers/management/fuel-transactions/index.js +1 -1
- package/addon/controllers/management/index.js +88 -0
- package/addon/controllers/settings/index.js +142 -0
- package/addon/extension.js +21 -0
- package/addon/routes/analytics/index.js +3 -0
- package/addon/routes/connectivity/devices/index/details/events.js +37 -1
- package/addon/routes/connectivity/devices/index/details/sensors.js +35 -0
- package/addon/routes/connectivity/devices/index/details/vehicle.js +7 -0
- package/addon/routes/connectivity/devices/index.js +3 -0
- package/addon/routes/connectivity/telematics/details/attachments.js +72 -9
- package/addon/routes/connectivity/telematics/details/devices.js +4 -0
- package/addon/routes/connectivity/telematics/details/sensors.js +1 -0
- package/addon/routes/connectivity/telematics/details.js +1 -1
- package/addon/routes/connectivity/telematics/edit.js +1 -1
- package/addon/routes/maintenance/index.js +3 -0
- package/addon/routes/maintenance/work-orders/index.js +3 -0
- package/addon/routes/settings/index.js +3 -0
- package/addon/routes.js +2 -0
- package/addon/services/order-creation.js +54 -1
- package/addon/services/order-validation.js +3 -2
- package/addon/services/service-rate-actions.js +1 -0
- package/addon/styles/fleetops-engine.css +1821 -6
- package/addon/templates/analytics/index.hbs +14 -0
- package/addon/templates/analytics/reports/index.hbs +4 -4
- package/addon/templates/connectivity/devices/index/details/events.hbs +85 -1
- package/addon/templates/connectivity/devices/index/details/sensors.hbs +73 -0
- package/addon/templates/connectivity/devices/index/details/vehicle.hbs +84 -0
- package/addon/templates/connectivity/telematics/details/attachments.hbs +198 -121
- package/addon/templates/connectivity/telematics/details/devices.hbs +4 -1
- package/addon/templates/connectivity/telematics/details/events.hbs +4 -1
- package/addon/templates/connectivity/telematics/details/sensors.hbs +3 -0
- package/addon/templates/maintenance/index.hbs +113 -0
- package/addon/templates/management/fuel-transactions/index/details.hbs +1 -1
- package/addon/templates/management/index.hbs +109 -73
- package/addon/templates/management/vehicles/index/edit.hbs +1 -1
- package/addon/templates/operations/orders/index.hbs +1 -1
- package/addon/templates/operations/service-rates/index.hbs +1 -1
- package/addon/templates/settings/index.hbs +83 -0
- package/addon/templates/settings/routing.hbs +2 -2
- package/addon/utils/fleet-ops-options.js +38 -0
- package/app/components/order/form/orchestrator-constraints.js +1 -0
- package/app/controllers/connectivity/devices/index/details/sensors.js +1 -0
- package/app/controllers/connectivity/devices/index/details/vehicle.js +1 -0
- package/app/controllers/maintenance/index.js +1 -0
- package/app/controllers/management/index.js +1 -0
- package/app/controllers/settings/index.js +1 -0
- package/app/routes/analytics/index.js +1 -0
- package/app/routes/connectivity/devices/index/details/sensors.js +1 -0
- package/app/routes/connectivity/devices/index/details/vehicle.js +1 -0
- package/app/routes/maintenance/index.js +1 -0
- package/app/routes/settings/index.js +1 -0
- package/app/templates/analytics/index.js +1 -0
- package/app/templates/connectivity/devices/index/details/sensors.js +1 -0
- package/app/templates/connectivity/devices/index/details/vehicle.js +1 -0
- package/app/templates/maintenance/index.js +1 -0
- package/app/templates/management/index.js +1 -0
- package/app/templates/settings/index.js +1 -0
- package/composer.json +1 -1
- package/extension.json +1 -1
- package/package.json +3 -3
- package/server/migrations/2025_08_28_054930_create_work_orders_table.php +1 -0
- package/server/migrations/2026_06_15_000001_normalize_device_attachable_vehicle_morph_types.php +30 -0
- package/server/migrations/2026_06_18_000001_add_category_to_work_orders_table.php +32 -0
- package/server/seeders/Testing/MaintenanceSeeder.php +5 -4
- package/server/src/Console/Commands/FixInvalidPolymorphicRelationTypeNamespaces.php +1 -0
- package/server/src/Console/Commands/ProcessMaintenanceTriggers.php +1 -0
- package/server/src/Console/Commands/SyncTelematics.php +89 -0
- package/server/src/Exceptions/TelematicProviderException.php +13 -2
- package/server/src/Http/Controllers/Api/v1/OrderController.php +6 -21
- package/server/src/Http/Controllers/Internal/v1/DeviceController.php +112 -11
- package/server/src/Http/Controllers/Internal/v1/DeviceEventController.php +16 -5
- package/server/src/Http/Controllers/Internal/v1/FleetController.php +9 -0
- package/server/src/Http/Controllers/Internal/v1/HubController.php +300 -0
- package/server/src/Http/Controllers/Internal/v1/LiveController.php +177 -0
- package/server/src/Http/Controllers/Internal/v1/MaintenanceScheduleController.php +1 -0
- package/server/src/Http/Controllers/Internal/v1/OrderController.php +4 -32
- package/server/src/Http/Controllers/Internal/v1/SearchController.php +506 -0
- package/server/src/Http/Controllers/Internal/v1/ServiceQuoteController.php +4 -4
- package/server/src/Http/Controllers/Internal/v1/TelematicController.php +1 -1
- package/server/src/Http/Controllers/Internal/v1/VehicleController.php +94 -10
- package/server/src/Http/Filter/DeviceEventFilter.php +44 -0
- package/server/src/Http/Filter/DeviceFilter.php +131 -0
- package/server/src/Http/Filter/DriverFilter.php +6 -0
- package/server/src/Http/Filter/SensorFilter.php +125 -0
- package/server/src/Http/Filter/VehicleFilter.php +19 -0
- package/server/src/Http/Requests/CreateDriverRequest.php +14 -13
- package/server/src/Http/Requests/Internal/CreateDriverRequest.php +1 -0
- package/server/src/Http/Resources/v1/Driver.php +11 -2
- package/server/src/Http/Resources/v1/WorkOrder.php +1 -0
- package/server/src/Jobs/FinalizeApiOrderCreation.php +47 -0
- package/server/src/Jobs/FinalizeInternalOrderCreation.php +35 -0
- package/server/src/Jobs/NotifyBulkAssignedDriver.php +47 -0
- package/server/src/Jobs/SyncTelematicDevicesJob.php +181 -66
- package/server/src/Models/Device.php +15 -1
- package/server/src/Models/DeviceEvent.php +1 -1
- package/server/src/Models/Driver.php +17 -1
- package/server/src/Models/Sensor.php +15 -2
- package/server/src/Models/Telematic.php +1 -1
- package/server/src/Models/Vehicle.php +5 -1
- package/server/src/Models/WorkOrder.php +5 -2
- package/server/src/Observers/DriverObserver.php +3 -3
- package/server/src/Observers/FleetObserver.php +23 -0
- package/server/src/Observers/VehicleObserver.php +3 -3
- package/server/src/Providers/FleetOpsServiceProvider.php +12 -0
- package/server/src/Support/LiveCacheService.php +1 -1
- package/server/src/Support/Telematics/Providers/AfaqyProvider.php +188 -28
- package/server/src/Support/Telematics/Providers/SafeeProvider.php +44 -3
- package/server/src/Support/Telematics/TelematicService.php +330 -30
- package/server/src/routes.php +10 -0
- package/server/tests/DeviceFilterTest.php +36 -0
- package/server/tests/HubRoutesTest.php +62 -0
- package/server/tests/OperationsMonitorEndpointTest.php +38 -0
- package/server/tests/OrderQueuedClosureRegressionTest.php +36 -0
- package/server/tests/TelematicsHardeningTest.php +455 -3
- package/server/tests/VehicleDriverAssignmentTest.php +27 -0
- package/translations/ar-ae.yml +1 -1
- package/translations/en-us.yaml +1 -0
- package/translations/vi-vn.yaml +1 -1
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
<div class="fleet-ops-operations-monitor" {{did-insert this.registerMonitor}}>
|
|
2
|
+
<div class="fleet-ops-operations-monitor-divider"></div>
|
|
3
|
+
|
|
4
|
+
<div class="mb-2 flex items-center justify-between px-1">
|
|
5
|
+
<div class="min-w-0">
|
|
6
|
+
<div class="text-xs font-semibold uppercase tracking-wide text-gray-500 dark:text-gray-400">Live Operations</div>
|
|
7
|
+
<div class="mt-1 flex flex-col gap-0.5 text-xs text-gray-500 dark:text-gray-400">
|
|
8
|
+
<span class="flex items-center gap-1"><span class="h-1.5 w-1.5 rounded-full bg-green-500"></span>{{this.driverOnlineSummary}}</span>
|
|
9
|
+
<span class="flex items-center gap-1"><span class="h-1.5 w-1.5 rounded-full bg-blue-500"></span>{{this.vehicleOnlineSummary}}</span>
|
|
10
|
+
</div>
|
|
11
|
+
</div>
|
|
12
|
+
</div>
|
|
13
|
+
|
|
14
|
+
<div class="mb-2 grid grid-cols-3 gap-1 rounded-md bg-gray-100 p-1 dark:bg-gray-800">
|
|
15
|
+
{{#each this.tabs as |tab|}}
|
|
16
|
+
<button
|
|
17
|
+
type="button"
|
|
18
|
+
class="rounded px-1.5 py-1 text-xs font-medium {{if (eq this.activeTab tab.id) 'bg-white text-gray-900 shadow-sm dark:bg-gray-700 dark:text-white' 'text-gray-500 hover:text-gray-900 dark:text-gray-400 dark:hover:text-white'}}"
|
|
19
|
+
data-test-operations-monitor-tab={{tab.id}}
|
|
20
|
+
{{on "click" (fn this.setActiveTab tab.id)}}
|
|
21
|
+
>
|
|
22
|
+
<span>{{tab.label}}</span>
|
|
23
|
+
</button>
|
|
24
|
+
{{/each}}
|
|
25
|
+
</div>
|
|
26
|
+
|
|
27
|
+
<div class="mb-2 flex items-center gap-1.5 rounded-md bg-gray-50 px-2 py-1 text-gray-400 dark:bg-gray-800">
|
|
28
|
+
<FaIcon @icon="magnifying-glass" @size="xs" />
|
|
29
|
+
<input
|
|
30
|
+
type="search"
|
|
31
|
+
value={{this.query}}
|
|
32
|
+
placeholder="Filter resources..."
|
|
33
|
+
class="min-w-0 flex-1 appearance-none border-0 bg-transparent p-0 text-xs leading-5 text-gray-700 outline-none shadow-none ring-0 focus:border-transparent focus:outline-none focus:ring-0 dark:text-gray-100"
|
|
34
|
+
data-test-operations-monitor-filter
|
|
35
|
+
{{on "input" this.updateQuery}}
|
|
36
|
+
/>
|
|
37
|
+
</div>
|
|
38
|
+
|
|
39
|
+
<div class="fleet-ops-operations-monitor-list space-y-1" data-test-operations-monitor-list {{did-insert this.registerList}}>
|
|
40
|
+
{{#if (eq this.activeTab "drivers")}}
|
|
41
|
+
{{#each this.drivers as |driver|}}
|
|
42
|
+
<div class="fleet-ops-operations-monitor-row group flex items-start gap-2 rounded-md px-2 py-1.5 text-sm text-gray-700 hover:bg-gray-100 dark:text-gray-200 dark:hover:bg-gray-800" data-test-operations-monitor-row>
|
|
43
|
+
<button type="button" class="flex min-w-0 flex-1 items-center gap-2 text-left" {{on "click" (fn this.locateDriver driver)}}>
|
|
44
|
+
<span class="h-2 w-2 shrink-0 rounded-full {{if driver.online 'bg-green-500' 'bg-yellow-300'}}"></span>
|
|
45
|
+
<span class="min-w-0 flex-1">
|
|
46
|
+
<span class="block truncate leading-5">{{or driver.displayName driver.display_name driver.name driver.public_id}}</span>
|
|
47
|
+
<span class="block truncate text-xs leading-4 text-gray-400">{{if driver.online "Online" "Offline"}} - {{or driver.vehicle_name driver.public_id driver.status}}</span>
|
|
48
|
+
</span>
|
|
49
|
+
</button>
|
|
50
|
+
<div class="fleet-ops-operations-monitor-row-actions">
|
|
51
|
+
<DropdownButton
|
|
52
|
+
@icon="ellipsis-h"
|
|
53
|
+
@iconPrefix="fas"
|
|
54
|
+
@size="xs"
|
|
55
|
+
@buttonClass="fleetops-btn-xxs"
|
|
56
|
+
@contentClass="dropdown-menu fleet-ops-operations-monitor-dropdown"
|
|
57
|
+
@horizontalPosition="right"
|
|
58
|
+
@calculatePosition={{this.calculateDropdownPosition}}
|
|
59
|
+
as |dd|
|
|
60
|
+
>
|
|
61
|
+
<div class="next-dd-menu mx-0 mt-1" role="menu">
|
|
62
|
+
<a href="javascript:;" class="next-dd-item" {{on "click" (dropdown-fn dd this.viewDriver driver)}}>View details</a>
|
|
63
|
+
<a href="javascript:;" class="next-dd-item" {{on "click" (dropdown-fn dd this.editDriver driver)}}>Edit details</a>
|
|
64
|
+
<div class="next-dd-menu-seperator"></div>
|
|
65
|
+
<a href="javascript:;" class="next-dd-item" {{on "click" (dropdown-fn dd this.assignOrderToDriver driver)}}>Assign order</a>
|
|
66
|
+
<a href="javascript:;" class="next-dd-item" {{on "click" (dropdown-fn dd this.assignVehicleToDriver driver)}}>Assign vehicle</a>
|
|
67
|
+
<a href="javascript:;" class="next-dd-item" {{on "click" (dropdown-fn dd this.locateDriver driver)}}>Locate on map</a>
|
|
68
|
+
<div class="next-dd-menu-seperator"></div>
|
|
69
|
+
<a href="javascript:;" class="next-dd-item text-danger" {{on "click" (dropdown-fn dd this.deleteDriver driver)}}>Delete driver</a>
|
|
70
|
+
</div>
|
|
71
|
+
</DropdownButton>
|
|
72
|
+
</div>
|
|
73
|
+
</div>
|
|
74
|
+
{{else}}
|
|
75
|
+
{{#let this.emptyState as |emptyState|}}
|
|
76
|
+
<div class="fleet-ops-operations-monitor-empty" data-test-operations-monitor-empty-state>
|
|
77
|
+
<span class="fleet-ops-operations-monitor-empty-icon"><FaIcon @icon={{emptyState.icon}} @size="xs" /></span>
|
|
78
|
+
<span class="fleet-ops-operations-monitor-empty-title">{{emptyState.title}}</span>
|
|
79
|
+
<span class="fleet-ops-operations-monitor-empty-description">{{emptyState.description}}</span>
|
|
80
|
+
<button type="button" class="fleet-ops-operations-monitor-empty-action" {{on "click" this.performEmptyStateAction}}>{{emptyState.action}}</button>
|
|
81
|
+
</div>
|
|
82
|
+
{{/let}}
|
|
83
|
+
{{/each}}
|
|
84
|
+
{{else if (eq this.activeTab "vehicles")}}
|
|
85
|
+
{{#each this.vehicles as |vehicle|}}
|
|
86
|
+
<div class="fleet-ops-operations-monitor-row group flex items-start gap-2 rounded-md px-2 py-1.5 text-sm text-gray-700 hover:bg-gray-100 dark:text-gray-200 dark:hover:bg-gray-800" data-test-operations-monitor-row>
|
|
87
|
+
<button type="button" class="flex min-w-0 flex-1 items-center gap-2 text-left" {{on "click" (fn this.locateVehicle vehicle)}}>
|
|
88
|
+
<span class="h-2 w-2 shrink-0 rounded-full {{if vehicle.online 'bg-green-500' 'bg-yellow-300'}}"></span>
|
|
89
|
+
<span class="min-w-0 flex-1">
|
|
90
|
+
<span class="block truncate leading-5">{{or vehicle.displayName vehicle.display_name vehicle.name vehicle.public_id}}</span>
|
|
91
|
+
<span class="block truncate text-xs leading-4 text-gray-400">{{if vehicle.online "Online" "Offline"}} - {{or vehicle.driver_name vehicle.public_id vehicle.status}}</span>
|
|
92
|
+
</span>
|
|
93
|
+
</button>
|
|
94
|
+
<div class="fleet-ops-operations-monitor-row-actions">
|
|
95
|
+
<DropdownButton
|
|
96
|
+
@icon="ellipsis-h"
|
|
97
|
+
@iconPrefix="fas"
|
|
98
|
+
@size="xs"
|
|
99
|
+
@buttonClass="fleetops-btn-xxs"
|
|
100
|
+
@contentClass="dropdown-menu fleet-ops-operations-monitor-dropdown"
|
|
101
|
+
@horizontalPosition="right"
|
|
102
|
+
@calculatePosition={{this.calculateDropdownPosition}}
|
|
103
|
+
as |dd|
|
|
104
|
+
>
|
|
105
|
+
<div class="next-dd-menu mx-0 mt-1" role="menu">
|
|
106
|
+
<a href="javascript:;" class="next-dd-item" {{on "click" (dropdown-fn dd this.viewVehicle vehicle)}}>View details</a>
|
|
107
|
+
<a href="javascript:;" class="next-dd-item" {{on "click" (dropdown-fn dd this.editVehicle vehicle)}}>Edit details</a>
|
|
108
|
+
<a href="javascript:;" class="next-dd-item" {{on "click" (dropdown-fn dd this.locateVehicle vehicle)}}>Locate on map</a>
|
|
109
|
+
<div class="next-dd-menu-seperator"></div>
|
|
110
|
+
<a href="javascript:;" class="next-dd-item text-danger" {{on "click" (dropdown-fn dd this.deleteVehicle vehicle)}}>Delete vehicle</a>
|
|
111
|
+
</div>
|
|
112
|
+
</DropdownButton>
|
|
113
|
+
</div>
|
|
114
|
+
</div>
|
|
115
|
+
{{else}}
|
|
116
|
+
{{#let this.emptyState as |emptyState|}}
|
|
117
|
+
<div class="fleet-ops-operations-monitor-empty" data-test-operations-monitor-empty-state>
|
|
118
|
+
<span class="fleet-ops-operations-monitor-empty-icon"><FaIcon @icon={{emptyState.icon}} @size="xs" /></span>
|
|
119
|
+
<span class="fleet-ops-operations-monitor-empty-title">{{emptyState.title}}</span>
|
|
120
|
+
<span class="fleet-ops-operations-monitor-empty-description">{{emptyState.description}}</span>
|
|
121
|
+
<button type="button" class="fleet-ops-operations-monitor-empty-action" {{on "click" this.performEmptyStateAction}}>{{emptyState.action}}</button>
|
|
122
|
+
</div>
|
|
123
|
+
{{/let}}
|
|
124
|
+
{{/each}}
|
|
125
|
+
{{else}}
|
|
126
|
+
{{#each this.fleetRows as |row|}}
|
|
127
|
+
{{#if (eq row.type "fleet")}}
|
|
128
|
+
<div class="fleet-ops-operations-monitor-row fleet-ops-operations-monitor-row-depth-{{row.depth}} group flex items-start gap-2 rounded-md px-2 py-1.5 text-sm text-gray-700 hover:bg-gray-100 dark:text-gray-200 dark:hover:bg-gray-800" data-test-operations-monitor-row>
|
|
129
|
+
<button type="button" class="flex min-w-0 flex-1 items-start gap-2 text-left" {{on "click" (fn this.toggleFleet row.fleet)}}>
|
|
130
|
+
<span class="mt-0.5 flex h-5 w-5 shrink-0 items-center justify-center rounded bg-gray-100 text-gray-400 dark:bg-gray-800">
|
|
131
|
+
{{#if (this.fleetHasChildren row.fleet)}}
|
|
132
|
+
<FaIcon @icon={{if (this.isFleetExpanded row.fleet) "chevron-down" "chevron-right"}} @size="xs" />
|
|
133
|
+
{{else}}
|
|
134
|
+
<FaIcon @icon="user-group" @size="xs" />
|
|
135
|
+
{{/if}}
|
|
136
|
+
</span>
|
|
137
|
+
<span class="min-w-0 flex-1">
|
|
138
|
+
<span class="block truncate leading-5">{{or row.fleet.displayName row.fleet.display_name row.fleet.name row.fleet.public_id}}</span>
|
|
139
|
+
<span class="block truncate text-xs leading-4 text-gray-400">{{this.fleetSubtitle row.fleet}}</span>
|
|
140
|
+
</span>
|
|
141
|
+
</button>
|
|
142
|
+
<div class="fleet-ops-operations-monitor-row-actions">
|
|
143
|
+
<DropdownButton
|
|
144
|
+
@icon="ellipsis-h"
|
|
145
|
+
@iconPrefix="fas"
|
|
146
|
+
@size="xs"
|
|
147
|
+
@buttonClass="fleetops-btn-xxs"
|
|
148
|
+
@contentClass="dropdown-menu fleet-ops-operations-monitor-dropdown"
|
|
149
|
+
@horizontalPosition="right"
|
|
150
|
+
@calculatePosition={{this.calculateDropdownPosition}}
|
|
151
|
+
as |dd|
|
|
152
|
+
>
|
|
153
|
+
<div class="next-dd-menu mx-0 mt-1" role="menu">
|
|
154
|
+
<a href="javascript:;" class="next-dd-item" {{on "click" (dropdown-fn dd this.viewFleet row.fleet)}}>View details</a>
|
|
155
|
+
<div class="next-dd-menu-seperator"></div>
|
|
156
|
+
<a href="javascript:;" class="next-dd-item" {{on "click" (dropdown-fn dd this.assignDriverToFleet row.fleet)}}>Assign driver</a>
|
|
157
|
+
<a href="javascript:;" class="next-dd-item" {{on "click" (dropdown-fn dd this.assignVehicleToFleet row.fleet)}}>Assign vehicle</a>
|
|
158
|
+
</div>
|
|
159
|
+
</DropdownButton>
|
|
160
|
+
</div>
|
|
161
|
+
</div>
|
|
162
|
+
{{else if (eq row.type "driver")}}
|
|
163
|
+
<button
|
|
164
|
+
type="button"
|
|
165
|
+
class="fleet-ops-operations-monitor-child-row fleet-ops-operations-monitor-row-depth-{{row.depth}} flex w-full min-w-0 items-start gap-2 rounded-md px-2 py-1 text-left text-xs text-gray-500 hover:bg-gray-100 dark:text-gray-400 dark:hover:bg-gray-800"
|
|
166
|
+
data-test-operations-monitor-row
|
|
167
|
+
{{on "click" (fn this.locateDriver row.driver)}}
|
|
168
|
+
>
|
|
169
|
+
<span class="mt-1 h-1.5 w-1.5 shrink-0 rounded-full {{if row.driver.online 'bg-green-500' 'bg-yellow-300'}}"></span>
|
|
170
|
+
<span class="min-w-0 flex-1">
|
|
171
|
+
<span class="block truncate leading-4">{{or row.driver.displayName row.driver.display_name row.driver.name row.driver.public_id}}</span>
|
|
172
|
+
<span class="block truncate text-xs leading-4 text-gray-400">Driver - {{if row.driver.online "Online" "Offline"}}</span>
|
|
173
|
+
</span>
|
|
174
|
+
</button>
|
|
175
|
+
{{else}}
|
|
176
|
+
<button
|
|
177
|
+
type="button"
|
|
178
|
+
class="fleet-ops-operations-monitor-child-row fleet-ops-operations-monitor-row-depth-{{row.depth}} flex w-full min-w-0 items-start gap-2 rounded-md px-2 py-1 text-left text-xs text-gray-500 hover:bg-gray-100 dark:text-gray-400 dark:hover:bg-gray-800"
|
|
179
|
+
data-test-operations-monitor-row
|
|
180
|
+
{{on "click" (fn this.locateVehicle row.vehicle)}}
|
|
181
|
+
>
|
|
182
|
+
<span class="mt-1 h-1.5 w-1.5 shrink-0 rounded-full {{if row.vehicle.online 'bg-green-500' 'bg-yellow-300'}}"></span>
|
|
183
|
+
<span class="min-w-0 flex-1">
|
|
184
|
+
<span class="block truncate leading-4">{{or row.vehicle.displayName row.vehicle.display_name row.vehicle.name row.vehicle.public_id}}</span>
|
|
185
|
+
<span class="block truncate text-xs leading-4 text-gray-400">Vehicle - {{if row.vehicle.online "Online" "Offline"}}</span>
|
|
186
|
+
</span>
|
|
187
|
+
</button>
|
|
188
|
+
{{/if}}
|
|
189
|
+
{{else}}
|
|
190
|
+
{{#let this.emptyState as |emptyState|}}
|
|
191
|
+
<div class="fleet-ops-operations-monitor-empty" data-test-operations-monitor-empty-state>
|
|
192
|
+
<span class="fleet-ops-operations-monitor-empty-icon"><FaIcon @icon={{emptyState.icon}} @size="xs" /></span>
|
|
193
|
+
<span class="fleet-ops-operations-monitor-empty-title">{{emptyState.title}}</span>
|
|
194
|
+
<span class="fleet-ops-operations-monitor-empty-description">{{emptyState.description}}</span>
|
|
195
|
+
<button type="button" class="fleet-ops-operations-monitor-empty-action" {{on "click" this.performEmptyStateAction}}>{{emptyState.action}}</button>
|
|
196
|
+
</div>
|
|
197
|
+
{{/let}}
|
|
198
|
+
{{/each}}
|
|
199
|
+
{{/if}}
|
|
200
|
+
</div>
|
|
201
|
+
</div>
|