Skip to content

Commit 20e398e

Browse files
authored
Merge pull request #210 from fleetbase/feature/header-menu-shortcuts
feat: add description and shortcuts to header menu registration
2 parents 071a0f0 + 1a6c81f commit 20e398e

10 files changed

Lines changed: 125 additions & 14 deletions

File tree

addon/controllers/operations/orders/index/details.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@ import Controller, { inject as controller } from '@ember/controller';
22
import { tracked } from '@glimmer/tracking';
33
import { inject as service } from '@ember/service';
44
import { action } from '@ember/object';
5+
import { isArray } from '@ember/array';
56
import { task } from 'ember-concurrency';
67

78
export default class OperationsOrdersIndexDetailsController extends Controller {
89
@controller('operations.orders.index') index;
10+
@service('universe/menu-service') menuService;
911
@service orderActions;
1012
@service orderSocketEvents;
1113
@service leafletMapManager;
@@ -16,11 +18,14 @@ export default class OperationsOrdersIndexDetailsController extends Controller {
1618
@tracked routingControl;
1719

1820
get tabs() {
21+
const registeredTabs = this.menuService.getMenuItems('fleet-ops:component:order:details');
1922
return [
2023
{
2124
route: 'operations.orders.index.details.index',
2225
label: 'Overview',
26+
icon: 'folder-open',
2327
},
28+
...(isArray(registeredTabs) ? registeredTabs : []),
2429
];
2530
}
2631

addon/extension.js

Lines changed: 55 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,61 @@ export default {
77
const widgetService = universe.getService('widget');
88

99
// Register header navigation
10-
menuService.registerHeaderMenuItem('Fleet-Ops', 'console.fleet-ops', { icon: 'route', priority: 0 });
10+
menuService.registerHeaderMenuItem('Fleet-Ops', 'console.fleet-ops', {
11+
icon: 'route',
12+
priority: 0,
13+
description: 'Dispatch, fleet management, driver tracking, and logistics operations.',
14+
shortcuts: [
15+
{
16+
title: 'Orders',
17+
description: 'Create, dispatch, and track delivery orders in real time.',
18+
icon: 'boxes-stacked',
19+
route: 'console.fleet-ops.operations.orders',
20+
},
21+
{
22+
title: 'Places',
23+
description: 'Manage saved locations, addresses, and points of interest.',
24+
icon: 'location-dot',
25+
route: 'console.fleet-ops.management.places',
26+
},
27+
{
28+
title: 'Drivers',
29+
description: 'Manage driver profiles, assignments, and live locations.',
30+
icon: 'id-card',
31+
route: 'console.fleet-ops.management.drivers',
32+
},
33+
{
34+
title: 'Vehicles',
35+
description: 'View and manage your vehicle fleet and telematics.',
36+
icon: 'truck',
37+
route: 'console.fleet-ops.management.vehicles',
38+
},
39+
{
40+
title: 'Fleets',
41+
description: 'Organise drivers and vehicles into operational fleets.',
42+
icon: 'layer-group',
43+
route: 'console.fleet-ops.management.fleets',
44+
},
45+
{
46+
title: 'Service Rates',
47+
description: 'Configure pricing rules and service rate cards.',
48+
icon: 'tags',
49+
route: 'console.fleet-ops.operations.service-rates',
50+
},
51+
{
52+
title: 'Devices',
53+
description: 'Manage connected telematics devices and their sensor data.',
54+
icon: 'microchip',
55+
route: 'console.fleet-ops.connectivity.devices',
56+
},
57+
{
58+
title: 'Reports',
59+
description: 'Generate and review operational analytics reports.',
60+
icon: 'chart-bar',
61+
route: 'console.fleet-ops.analytics.reports',
62+
},
63+
],
64+
});
1165

1266
// Register admin sections
1367
menuService.registerAdminMenuPanel(

addon/routes.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
/* eslint-disable ember/no-shadow-route-definition */
12
import buildRoutes from 'ember-engines/routes';
23

34
export default buildRoutes(function () {
@@ -19,6 +20,7 @@ export default buildRoutes(function () {
1920
this.route('new');
2021
this.route('details', { path: '/:public_id' }, function () {
2122
this.route('index', { path: '/' });
23+
this.route('virtual', { path: '/:slug' });
2224
});
2325
});
2426
});
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import Route from '@ember/routing/route';
2+
import { inject as service } from '@ember/service';
3+
4+
export default class OperationsOrdersIndexDetailsVirtualRoute extends Route {
5+
@service universe;
6+
@service('universe/menu-service') menuService;
7+
8+
queryParams = {
9+
view: {
10+
refreshModel: true,
11+
},
12+
};
13+
14+
model({ section = null, slug }, transition) {
15+
const view = this.universe.getViewFromTransition(transition);
16+
return this.menuService.lookupMenuItem('fleet-ops:component:order:details', slug, view, section);
17+
}
18+
19+
setupController(controller) {
20+
super.setupController(...arguments);
21+
controller.resource = this.modelFor('operations.orders.index.details');
22+
}
23+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{{component (lazy-engine-component @model.component) resource=this.resource order=this.resource params=@model.componentParams}}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export { default } from '@fleetbase/fleetops-engine/routes/operations/orders/index/details/virtual';
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export { default } from '@fleetbase/fleetops-engine/templates/operations/orders/index/details/virtual';

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@
4242
},
4343
"dependencies": {
4444
"@babel/core": "^7.23.2",
45-
"@fleetbase/ember-core": "^0.3.12",
46-
"@fleetbase/ember-ui": "^0.3.21",
45+
"@fleetbase/ember-core": "^0.3.17",
46+
"@fleetbase/ember-ui": "^0.3.25",
4747
"@fleetbase/fleetops-data": "^0.1.25",
4848
"@fleetbase/leaflet-routing-machine": "^3.2.17",
4949
"@fortawesome/ember-fontawesome": "^2.0.0",

pnpm-lock.yaml

Lines changed: 24 additions & 11 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { module, test } from 'qunit';
2+
import { setupTest } from 'dummy/tests/helpers';
3+
4+
module('Unit | Route | operations/orders/index/details/virtual', function (hooks) {
5+
setupTest(hooks);
6+
7+
test('it exists', function (assert) {
8+
let route = this.owner.lookup('route:operations/orders/index/details/virtual');
9+
assert.ok(route);
10+
});
11+
});

0 commit comments

Comments
 (0)