@fleetbase/fleetops-engine 0.6.27 → 0.6.29
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/admin/avatar-management.js +24 -26
- package/addon/components/admin/navigator-app.hbs +1 -1
- package/addon/components/driver/details.hbs +4 -0
- package/addon/components/layout/fleet-ops-sidebar.js +3 -2
- package/addon/components/map/drawer.hbs +1 -1
- package/addon/components/map/drawer.js +2 -1
- package/addon/components/map/leaflet-live-map.js +8 -7
- package/addon/components/order/details/purchase-rate.hbs +2 -2
- package/addon/components/order/form/payload.hbs +1 -1
- package/addon/components/order-config-manager.js +2 -1
- package/addon/components/vehicle/details.hbs +5 -1
- package/addon/controllers/connectivity/devices/index/details/virtual.js +7 -0
- package/addon/controllers/connectivity/devices/index/details.js +4 -0
- package/addon/controllers/connectivity/sensors/index/details/virtual.js +7 -0
- package/addon/controllers/connectivity/sensors/index/details.js +4 -0
- package/addon/controllers/management/drivers/index/details/virtual.js +7 -0
- package/addon/controllers/management/drivers/index/details.js +4 -4
- package/addon/controllers/management/fleets/index/details/virtual.js +7 -0
- package/addon/controllers/management/fleets/index/details.js +4 -0
- package/addon/controllers/management/places/index/details/virtual.js +7 -0
- package/addon/controllers/management/places/index/details.js +22 -13
- package/addon/controllers/management/vehicles/index/details/virtual.js +7 -0
- package/addon/controllers/management/vehicles/index/details.js +4 -0
- package/addon/controllers/management/vehicles/index.js +2 -2
- package/addon/engine.js +1 -128
- package/addon/extension.js +116 -0
- package/addon/instance-initializers/register-osrm.js +32 -0
- package/addon/instance-initializers/setup-customer-portal.js +10 -0
- package/addon/routes/connectivity/devices/index/details/virtual.js +23 -0
- package/addon/routes/connectivity/sensors/index/details/virtual.js +23 -0
- package/addon/routes/management/drivers/index/details/virtual.js +23 -0
- package/addon/routes/management/drivers/index/details.js +0 -4
- package/addon/routes/management/fleets/index/details/virtual.js +23 -0
- package/addon/routes/management/places/index/details/virtual.js +23 -0
- package/addon/routes/management/vehicles/index/details/virtual.js +23 -0
- package/addon/routes/management/vehicles/index/details.js +0 -4
- package/addon/routes/virtual.js +2 -1
- package/addon/routes.js +6 -0
- package/addon/styles/fleetops-engine.css +5 -0
- package/addon/templates/connectivity/devices/index/details/virtual.hbs +1 -0
- package/addon/templates/connectivity/sensors/index/details/virtual.hbs +1 -0
- package/addon/templates/management/drivers/index/details/virtual.hbs +1 -0
- package/addon/templates/management/fleets/index/details/virtual.hbs +1 -0
- package/addon/templates/management/places/index/details/virtual.hbs +1 -0
- package/addon/templates/management/vehicles/index/details/virtual.hbs +1 -0
- package/addon/templates/virtual.hbs +1 -1
- package/addon/utils/setup-customer-portal.js +49 -23
- package/app/controllers/connectivity/devices/index/details/virtual.js +1 -0
- package/app/controllers/connectivity/sensors/index/details/virtual.js +1 -0
- package/app/controllers/management/drivers/index/details/virtual.js +1 -0
- package/app/controllers/management/fleets/index/details/virtual.js +1 -0
- package/app/controllers/management/places/index/details/virtual.js +1 -0
- package/app/controllers/management/vehicles/index/details/virtual.js +1 -0
- package/app/routes/connectivity/devices/index/details/virtual.js +1 -0
- package/app/routes/connectivity/sensors/index/details/virtual.js +1 -0
- package/app/routes/management/drivers/index/details/virtual.js +1 -0
- package/app/routes/management/fleets/index/details/virtual.js +1 -0
- package/app/routes/management/places/index/details/virtual.js +1 -0
- package/app/routes/management/vehicles/index/details/virtual.js +1 -0
- package/app/templates/connectivity/devices/index/details/virtual.js +1 -0
- package/app/templates/connectivity/sensors/index/details/virtual.js +1 -0
- package/app/templates/management/drivers/index/details/virtual.js +1 -0
- package/app/templates/management/fleets/index/details/virtual.js +1 -0
- package/app/templates/management/places/index/details/virtual.js +1 -0
- package/app/templates/management/vehicles/index/details/virtual.js +1 -0
- package/composer.json +1 -1
- package/config/environment.js +1 -1
- package/extension.json +1 -1
- package/index.js +0 -11
- package/package.json +3 -3
- package/addon/helpers/avatar-url.js +0 -9
- package/addon/helpers/point-coordinates.js +0 -10
- package/addon/helpers/point-to-coordinates.js +0 -32
- package/addon/helpers/unwrap-coordinates.js +0 -83
- package/app/helpers/avatar-url.js +0 -1
- package/app/helpers/point-coordinates.js +0 -1
- package/app/helpers/point-to-coordinates.js +0 -1
- package/app/helpers/unwrap-coordinates.js +0 -1
|
@@ -36,40 +36,38 @@ export default class AdminAvatarManagementComponent extends Component {
|
|
|
36
36
|
@tracked currentCategory;
|
|
37
37
|
|
|
38
38
|
/**
|
|
39
|
-
*
|
|
39
|
+
* Selectable categories for avatar management.
|
|
40
40
|
*
|
|
41
41
|
* @memberof AdminAvatarManagementComponent
|
|
42
42
|
*/
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
43
|
+
@tracked categories = [
|
|
44
|
+
{
|
|
45
|
+
name: this.intl.t('resource.vehicles'),
|
|
46
|
+
icon: 'car',
|
|
47
|
+
type: 'vehicle',
|
|
48
|
+
avatars: [],
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
name: this.intl.t('resource.places'),
|
|
52
|
+
icon: 'building',
|
|
53
|
+
type: 'place',
|
|
54
|
+
avatars: [],
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
name: this.intl.t('resource.drivers'),
|
|
58
|
+
icon: 'id-card',
|
|
59
|
+
type: 'driver',
|
|
60
|
+
avatars: [],
|
|
61
|
+
},
|
|
62
|
+
];
|
|
46
63
|
|
|
47
64
|
/**
|
|
48
|
-
*
|
|
65
|
+
* The only acceptable file types for avatars, png or svg.
|
|
49
66
|
*
|
|
50
67
|
* @memberof AdminAvatarManagementComponent
|
|
51
68
|
*/
|
|
52
|
-
get
|
|
53
|
-
return [
|
|
54
|
-
{
|
|
55
|
-
name: this.intl.t('resource.vehicles'),
|
|
56
|
-
icon: 'car',
|
|
57
|
-
type: 'vehicle',
|
|
58
|
-
avatars: [],
|
|
59
|
-
},
|
|
60
|
-
{
|
|
61
|
-
name: this.intl.t('resource.places'),
|
|
62
|
-
icon: 'building',
|
|
63
|
-
type: 'place',
|
|
64
|
-
avatars: [],
|
|
65
|
-
},
|
|
66
|
-
{
|
|
67
|
-
name: this.intl.t('resource.drivers'),
|
|
68
|
-
icon: 'id-card',
|
|
69
|
-
type: 'driver',
|
|
70
|
-
avatars: [],
|
|
71
|
-
},
|
|
72
|
-
];
|
|
69
|
+
get acceptedFileTypes() {
|
|
70
|
+
return ['image/svg+xml', 'image/png'];
|
|
73
71
|
}
|
|
74
72
|
|
|
75
73
|
/**
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<ContentPanel @title={{t "admin.navigator-app.title"}} @open={{true}} @
|
|
1
|
+
<ContentPanel @title={{t "admin.navigator-app.title"}} @open={{true}} @wrapperClass="bordered-classic">
|
|
2
2
|
<InputGroup @name={{t "admin.navigator-app.name"}}>
|
|
3
3
|
<ClickToCopy class="px-4 py-2 border rounded-md bg-gray-100 shadow-sm dark:bg-gray-700 border-gray-200 dark:border-gray-800" @value={{this.url}}>{{this.url}}</ClickToCopy>
|
|
4
4
|
<Attach::Tooltip @class="clean" @animation="scale" @placement="top">
|
|
@@ -54,6 +54,10 @@
|
|
|
54
54
|
|
|
55
55
|
<CustomField::Yield @subject={{@resource}} @viewMode={{true}} @wrapperClass="bordered-top" />
|
|
56
56
|
|
|
57
|
+
<RegistryYield @registry="fleet-ops:component:driver:details" as |RegistryComponent|>
|
|
58
|
+
<RegistryComponent @resource={{@resource}} @controller={{@controller}} @permission={{get-write-permission @resource}} />
|
|
59
|
+
</RegistryYield>
|
|
60
|
+
|
|
57
61
|
<ContentPanel @title={{t "common.metadata"}} @open={{true}} @actionButtons={{this.metadataButtons}} @wrapperClass="bordered-top" @panelBodyWrapperClass={{unless (is-object-empty @resource.meta) "px-0i" ""}}>
|
|
58
62
|
<MetadataViewer @metadata={{@resource.meta}} />
|
|
59
63
|
</ContentPanel>
|
|
@@ -7,6 +7,7 @@ import DriverListingComponent from './fleet-ops-sidebar/driver-listing';
|
|
|
7
7
|
|
|
8
8
|
export default class LayoutFleetOpsSidebarComponent extends Component {
|
|
9
9
|
@service universe;
|
|
10
|
+
@service('universe/menu-service') menuService;
|
|
10
11
|
@service store;
|
|
11
12
|
@service intl;
|
|
12
13
|
@service abilities;
|
|
@@ -24,8 +25,8 @@ export default class LayoutFleetOpsSidebarComponent extends Component {
|
|
|
24
25
|
}
|
|
25
26
|
|
|
26
27
|
createMenuItemsFromUniverseRegistry() {
|
|
27
|
-
const registeredMenuItems = this.
|
|
28
|
-
this.universeMenuPanels = this.
|
|
28
|
+
const registeredMenuItems = this.menuService.getMenuItems('engine:fleet-ops');
|
|
29
|
+
this.universeMenuPanels = this.menuService.getMenuPanels('engine:fleet-ops');
|
|
29
30
|
this.universeMenuItems = registeredMenuItems.filter((menuItem) => menuItem.section === undefined);
|
|
30
31
|
this.universeSettingsMenuItems = registeredMenuItems.filter((menuItem) => menuItem.section === 'settings');
|
|
31
32
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<Drawer @onResizeEnd={{this.mapDrawer.handleResizeEnd}} @onResizeStart={{@onResizeStart}} @isMinimized={{this.mapDrawer.isMinimized}} @isOpen={{@isOpen}} @notchEnabled={{true}} @onLoad={{this.setDrawerContext}}>
|
|
2
2
|
<TabNavigation @tabs={{this.tabs}} @activeTabId={{this.mapDrawer.activeTabId}} @onTabChange={{this.mapDrawer.setActiveTab}} as |activeTab|>
|
|
3
|
-
{{component activeTab.component}}
|
|
3
|
+
{{component (lazy-engine-component activeTab.component)}}
|
|
4
4
|
</TabNavigation>
|
|
5
5
|
</Drawer>
|
|
@@ -6,9 +6,10 @@ import { isArray } from '@ember/array';
|
|
|
6
6
|
export default class MapDrawerComponent extends Component {
|
|
7
7
|
@service mapDrawer;
|
|
8
8
|
@service universe;
|
|
9
|
+
@service('universe/menu-service') menuService;
|
|
9
10
|
|
|
10
11
|
get tabs() {
|
|
11
|
-
const registeredTabs = this.
|
|
12
|
+
const registeredTabs = this.menuService.getMenuItems('fleet-ops:component:map:drawer');
|
|
12
13
|
return [
|
|
13
14
|
this.universe._createMenuItem('Vehicles', null, { icon: 'car', component: 'map/drawer/vehicle-listing' }),
|
|
14
15
|
this.universe._createMenuItem('Drivers', null, { icon: 'id-card', component: 'map/drawer/driver-listing' }),
|
|
@@ -28,6 +28,7 @@ export default class MapLeafletLiveMapComponent extends Component {
|
|
|
28
28
|
@service abilities;
|
|
29
29
|
@service intl;
|
|
30
30
|
@service universe;
|
|
31
|
+
@service('universe/menu-service') menuService;
|
|
31
32
|
|
|
32
33
|
/** properties */
|
|
33
34
|
id = guidFor(this);
|
|
@@ -315,7 +316,7 @@ export default class MapLeafletLiveMapComponent extends Component {
|
|
|
315
316
|
].filter(Boolean);
|
|
316
317
|
|
|
317
318
|
const registry = this.leafletContextmenuManager.createContextMenu('map', map, items);
|
|
318
|
-
this.universe.
|
|
319
|
+
this.universe.trigger('fleet-ops:contextmenu:map:created', registry, this.leafletContextmenuManager);
|
|
319
320
|
|
|
320
321
|
return registry;
|
|
321
322
|
}
|
|
@@ -341,7 +342,7 @@ export default class MapLeafletLiveMapComponent extends Component {
|
|
|
341
342
|
|
|
342
343
|
// create contextmenu registry
|
|
343
344
|
const contextmenuRegistry = this.leafletContextmenuManager.createContextMenu(`zone:${zone.public_id}`, layer, items, { zone });
|
|
344
|
-
this.universe.
|
|
345
|
+
this.universe.trigger('fleet-ops:contextmenu:zone:created', contextmenuRegistry, this.leafletContextmenuManager);
|
|
345
346
|
|
|
346
347
|
return contextmenuRegistry;
|
|
347
348
|
}
|
|
@@ -375,7 +376,7 @@ export default class MapLeafletLiveMapComponent extends Component {
|
|
|
375
376
|
|
|
376
377
|
// create contextmenu registry
|
|
377
378
|
const contextmenuRegistry = this.leafletContextmenuManager.createContextMenu(`service-area:${serviceArea.public_id}`, layer, items, { serviceArea });
|
|
378
|
-
this.universe.
|
|
379
|
+
this.universe.trigger('fleet-ops:contextmenu:service-area:created', contextmenuRegistry, this.leafletContextmenuManager);
|
|
379
380
|
|
|
380
381
|
return contextmenuRegistry;
|
|
381
382
|
}
|
|
@@ -404,7 +405,7 @@ export default class MapLeafletLiveMapComponent extends Component {
|
|
|
404
405
|
];
|
|
405
406
|
|
|
406
407
|
// append items from universe registry
|
|
407
|
-
const registeredContextMenuItems = this.
|
|
408
|
+
const registeredContextMenuItems = this.menuService.getMenuItems('fleet-ops:contextmenu:driver');
|
|
408
409
|
if (isArray(registeredContextMenuItems)) {
|
|
409
410
|
items = [
|
|
410
411
|
...items,
|
|
@@ -427,7 +428,7 @@ export default class MapLeafletLiveMapComponent extends Component {
|
|
|
427
428
|
|
|
428
429
|
// create contextmenu registry
|
|
429
430
|
const contextmenuRegistry = this.leafletContextmenuManager.createContextMenu(`driver:${driver.public_id}`, layer, items, { driver });
|
|
430
|
-
this.universe.
|
|
431
|
+
this.universe.trigger('fleet-ops:contextmenu:driver:created', contextmenuRegistry, this.leafletContextmenuManager);
|
|
431
432
|
|
|
432
433
|
return contextmenuRegistry;
|
|
433
434
|
}
|
|
@@ -452,7 +453,7 @@ export default class MapLeafletLiveMapComponent extends Component {
|
|
|
452
453
|
];
|
|
453
454
|
|
|
454
455
|
// append items from universe registry
|
|
455
|
-
const registeredContextMenuItems = this.
|
|
456
|
+
const registeredContextMenuItems = this.menuService.getMenuItems('fleet-ops:contextmenu:vehicle');
|
|
456
457
|
if (isArray(registeredContextMenuItems)) {
|
|
457
458
|
items = [
|
|
458
459
|
...items,
|
|
@@ -475,7 +476,7 @@ export default class MapLeafletLiveMapComponent extends Component {
|
|
|
475
476
|
|
|
476
477
|
// create contextmenu registry
|
|
477
478
|
const contextmenuRegistry = this.leafletContextmenuManager.createContextMenu(`vehicle:${vehicle.public_id}`, layer, items, { vehicle });
|
|
478
|
-
this.universe.
|
|
479
|
+
this.universe.trigger('fleet-ops:contextmenu:vehicle:created', contextmenuRegistry, this.leafletContextmenuManager);
|
|
479
480
|
|
|
480
481
|
return contextmenuRegistry;
|
|
481
482
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{{#if @resource.purchase_rate}}
|
|
2
|
-
<ContentPanel @title={{t "order.fields.purchase-rate-panel-title"}} @isLoading={{@isLoading}} @open={{true}} @wrapperClass="bordered-top">
|
|
2
|
+
<ContentPanel @title={{t "order.fields.purchase-rate-panel-title"}} @isLoading={{@isLoading}} @open={{true}} @wrapperClass="bordered-top" @panelBodyWrapperClass="px-0i">
|
|
3
3
|
<div class="order-view-purchase-rate-table-wrapper next-table-wrapper no-scroll h-auto table-fluid rounded-b-md">
|
|
4
4
|
<table id="order-view-purchase-rate-table" class="table table-fixed flex-1">
|
|
5
5
|
<thead>
|
|
6
6
|
<tr>
|
|
7
|
-
<th class="text-left">{{t "
|
|
7
|
+
<th class="text-left">{{t "order.fields.breakdown"}}</th>
|
|
8
8
|
<th>
|
|
9
9
|
<div class="flex flex-row items-center justify-end">{{@resource.purchase_rate.service_quote.currency}}</div>
|
|
10
10
|
</th>
|
|
@@ -111,7 +111,7 @@
|
|
|
111
111
|
<div>
|
|
112
112
|
<Input @value={{entity.sku}} @type="text" class="w-full form-input form-input-sm" placeholder={{t "order.fields.sku"}} />
|
|
113
113
|
</div>
|
|
114
|
-
<RegistryYield @registry="fleet-ops:
|
|
114
|
+
<RegistryYield @registry="fleet-ops:component:order:form:payload:entity:form" as |RegistryComponent|>
|
|
115
115
|
<RegistryComponent @entity={{entity}} @order={{@resource}} @controller={{this}} />
|
|
116
116
|
</RegistryYield>
|
|
117
117
|
{{#if @resource.payload.waypoints.length}}
|
|
@@ -20,6 +20,7 @@ import findActiveTab from '../utils/find-active-tab';
|
|
|
20
20
|
const configManagerContext = EmberObject.extend(Evented);
|
|
21
21
|
export default class OrderConfigManagerComponent extends Component {
|
|
22
22
|
@service universe;
|
|
23
|
+
@service('universe/menu-service') menuService;
|
|
23
24
|
@service notifications;
|
|
24
25
|
@service modalsManager;
|
|
25
26
|
@service store;
|
|
@@ -39,7 +40,7 @@ export default class OrderConfigManagerComponent extends Component {
|
|
|
39
40
|
* @type {Array}
|
|
40
41
|
*/
|
|
41
42
|
get tabs() {
|
|
42
|
-
const registeredTabs = this.
|
|
43
|
+
const registeredTabs = this.menuService.getMenuItems('fleet-ops:component:order-config-manager');
|
|
43
44
|
const defaultTabs = [
|
|
44
45
|
this.universe._createMenuItem(this.intl.t('order-config-manager.tabs.details'), null, { icon: 'circle-info', component: OrderConfigManagerDetailsComponent }),
|
|
45
46
|
this.universe._createMenuItem(this.intl.t('order-config-manager.tabs.custom-fields'), null, { icon: 'rectangle-list', component: OrderConfigManagerCustomFieldsComponent }),
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
|
|
10
10
|
<div class="field-info-container">
|
|
11
11
|
<div class="field-name">{{t "common.name"}}</div>
|
|
12
|
-
<div class="field-value">{{n-a @resource.
|
|
12
|
+
<div class="field-value">{{n-a @resource.name}}</div>
|
|
13
13
|
</div>
|
|
14
14
|
|
|
15
15
|
<div class="field-info-container">
|
|
@@ -629,6 +629,10 @@
|
|
|
629
629
|
</div>
|
|
630
630
|
</ContentPanel>
|
|
631
631
|
|
|
632
|
+
<RegistryYield @registry="fleet-ops:component:vehicle:details" as |RegistryComponent|>
|
|
633
|
+
<RegistryComponent @resource={{@resource}} @controller={{@controller}} @permission={{get-write-permission @resource}} />
|
|
634
|
+
</RegistryYield>
|
|
635
|
+
|
|
632
636
|
{{! METADATA }}
|
|
633
637
|
<ContentPanel
|
|
634
638
|
@title={{t "common.metadata"}}
|
|
@@ -1,15 +1,19 @@
|
|
|
1
1
|
import Controller from '@ember/controller';
|
|
2
2
|
import { inject as service } from '@ember/service';
|
|
3
|
+
import { isArray } from '@ember/array';
|
|
3
4
|
|
|
4
5
|
export default class ConnectivityDevicesIndexDetailsController extends Controller {
|
|
6
|
+
@service('universe/menu-service') menuService;
|
|
5
7
|
@service hostRouter;
|
|
6
8
|
|
|
7
9
|
get tabs() {
|
|
10
|
+
const registeredTabs = this.menuService.getMenuItems('fleet-ops:component:place:details');
|
|
8
11
|
return [
|
|
9
12
|
{
|
|
10
13
|
route: 'connectivity.devices.index.details.index',
|
|
11
14
|
label: 'Overview',
|
|
12
15
|
},
|
|
16
|
+
...(isArray(registeredTabs) ? registeredTabs : []),
|
|
13
17
|
];
|
|
14
18
|
}
|
|
15
19
|
|
|
@@ -1,15 +1,19 @@
|
|
|
1
1
|
import Controller from '@ember/controller';
|
|
2
2
|
import { inject as service } from '@ember/service';
|
|
3
|
+
import { isArray } from '@ember/array';
|
|
3
4
|
|
|
4
5
|
export default class ConnectivitySensorsIndexDetailsController extends Controller {
|
|
6
|
+
@service('universe/menu-service') menuService;
|
|
5
7
|
@service hostRouter;
|
|
6
8
|
|
|
7
9
|
get tabs() {
|
|
10
|
+
const registeredTabs = this.menuService.getMenuItems('fleet-ops:component:place:details');
|
|
8
11
|
return [
|
|
9
12
|
{
|
|
10
13
|
route: 'connectivity.sensors.index.details.index',
|
|
11
14
|
label: 'Overview',
|
|
12
15
|
},
|
|
16
|
+
...(isArray(registeredTabs) ? registeredTabs : []),
|
|
13
17
|
];
|
|
14
18
|
}
|
|
15
19
|
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import Controller from '@ember/controller';
|
|
2
2
|
import { inject as service } from '@ember/service';
|
|
3
|
+
import { isArray } from '@ember/array';
|
|
3
4
|
|
|
4
5
|
export default class ManagementDriverIndexDetailsController extends Controller {
|
|
6
|
+
@service('universe/menu-service') menuService;
|
|
5
7
|
@service hostRouter;
|
|
6
8
|
|
|
7
9
|
get tabs() {
|
|
10
|
+
const registeredTabs = this.menuService.getMenuItems('fleet-ops:component:driver:details');
|
|
8
11
|
return [
|
|
9
12
|
{
|
|
10
13
|
route: 'management.drivers.index.details.index',
|
|
@@ -14,10 +17,7 @@ export default class ManagementDriverIndexDetailsController extends Controller {
|
|
|
14
17
|
route: 'management.drivers.index.details.positions',
|
|
15
18
|
label: 'Positions',
|
|
16
19
|
},
|
|
17
|
-
|
|
18
|
-
// route: 'management.drivers.index.details.schedule',
|
|
19
|
-
// label: 'Schedule',
|
|
20
|
-
// },
|
|
20
|
+
...(isArray(registeredTabs) ? registeredTabs : []),
|
|
21
21
|
];
|
|
22
22
|
}
|
|
23
23
|
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import Controller from '@ember/controller';
|
|
2
2
|
import { inject as service } from '@ember/service';
|
|
3
|
+
import { isArray } from '@ember/array';
|
|
3
4
|
|
|
4
5
|
export default class ManagementFleetsIndexDetailsController extends Controller {
|
|
6
|
+
@service('universe/menu-service') menuService;
|
|
5
7
|
@service hostRouter;
|
|
6
8
|
|
|
7
9
|
get tabs() {
|
|
10
|
+
const registeredTabs = this.menuService.getMenuItems('fleet-ops:component:place:details');
|
|
8
11
|
return [
|
|
9
12
|
{
|
|
10
13
|
route: 'management.fleets.index.details.index',
|
|
@@ -18,6 +21,7 @@ export default class ManagementFleetsIndexDetailsController extends Controller {
|
|
|
18
21
|
route: 'management.fleets.index.details.drivers',
|
|
19
22
|
label: 'Drivers',
|
|
20
23
|
},
|
|
24
|
+
...(isArray(registeredTabs) ? registeredTabs : []),
|
|
21
25
|
];
|
|
22
26
|
}
|
|
23
27
|
|
|
@@ -1,19 +1,28 @@
|
|
|
1
1
|
import Controller from '@ember/controller';
|
|
2
|
-
import { tracked } from '@glimmer/tracking';
|
|
3
2
|
import { inject as service } from '@ember/service';
|
|
3
|
+
import { isArray } from '@ember/array';
|
|
4
4
|
|
|
5
5
|
export default class ManagementPlacesIndexDetailsController extends Controller {
|
|
6
|
+
@service('universe/menu-service') menuService;
|
|
6
7
|
@service hostRouter;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
8
|
+
|
|
9
|
+
get tabs() {
|
|
10
|
+
const registeredTabs = this.menuService.getMenuItems('fleet-ops:component:place:details');
|
|
11
|
+
return [
|
|
12
|
+
{
|
|
13
|
+
route: 'management.places.index.details.index',
|
|
14
|
+
label: 'Overview',
|
|
15
|
+
},
|
|
16
|
+
...(isArray(registeredTabs) ? registeredTabs : []),
|
|
17
|
+
];
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
get actionButtons() {
|
|
21
|
+
return [
|
|
22
|
+
{
|
|
23
|
+
icon: 'pencil',
|
|
24
|
+
fn: () => this.hostRouter.transitionTo('console.fleet-ops.management.places.index.edit', this.model),
|
|
25
|
+
},
|
|
26
|
+
];
|
|
27
|
+
}
|
|
19
28
|
}
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import Controller from '@ember/controller';
|
|
2
2
|
import { inject as service } from '@ember/service';
|
|
3
|
+
import { isArray } from '@ember/array';
|
|
3
4
|
|
|
4
5
|
export default class ManagementVehiclesIndexDetailsController extends Controller {
|
|
6
|
+
@service('universe/menu-service') menuService;
|
|
5
7
|
@service hostRouter;
|
|
6
8
|
|
|
7
9
|
get tabs() {
|
|
10
|
+
const registeredTabs = this.menuService.getMenuItems('fleet-ops:component:vehicle:details');
|
|
8
11
|
return [
|
|
9
12
|
{
|
|
10
13
|
route: 'management.vehicles.index.details.index',
|
|
@@ -18,6 +21,7 @@ export default class ManagementVehiclesIndexDetailsController extends Controller
|
|
|
18
21
|
route: 'management.vehicles.index.details.devices',
|
|
19
22
|
label: 'Devices',
|
|
20
23
|
},
|
|
24
|
+
...(isArray(registeredTabs) ? registeredTabs : []),
|
|
21
25
|
];
|
|
22
26
|
}
|
|
23
27
|
|
|
@@ -122,7 +122,7 @@ export default class ManagementVehiclesIndexController extends Controller {
|
|
|
122
122
|
{
|
|
123
123
|
sticky: true,
|
|
124
124
|
label: this.intl.t('column.name'),
|
|
125
|
-
valuePath: '
|
|
125
|
+
valuePath: 'displayName',
|
|
126
126
|
photoPath: 'avatar_url',
|
|
127
127
|
cellComponent: 'table/cell/vehicle-name',
|
|
128
128
|
permission: 'fleet-ops view vehicle',
|
|
@@ -131,7 +131,7 @@ export default class ManagementVehiclesIndexController extends Controller {
|
|
|
131
131
|
sortable: true,
|
|
132
132
|
filterable: true,
|
|
133
133
|
filterComponent: 'filter/string',
|
|
134
|
-
filterParam: '
|
|
134
|
+
filterParam: 'name',
|
|
135
135
|
showOnlineIndicator: true,
|
|
136
136
|
},
|
|
137
137
|
{
|
package/addon/engine.js
CHANGED
|
@@ -2,19 +2,9 @@ import Engine from '@ember/engine';
|
|
|
2
2
|
import loadInitializers from 'ember-load-initializers';
|
|
3
3
|
import Resolver from 'ember-resolver';
|
|
4
4
|
import config from './config/environment';
|
|
5
|
-
import services from '@fleetbase/ember-core/exports
|
|
6
|
-
import NavigatorAppConfigComponent from './components/admin/navigator-app';
|
|
7
|
-
import WidgetFleetOpsKeyMetricsComponent from './components/widget/fleet-ops-key-metrics';
|
|
8
|
-
import AdminAvatarManagementComponent from './components/admin/avatar-management';
|
|
9
|
-
import OrderTrackingLookupComponent from './components/order-tracking-lookup';
|
|
10
|
-
import { RoutingControl } from './services/leaflet-routing-control';
|
|
11
|
-
import { OSRMv1 } from '@fleetbase/leaflet-routing-machine';
|
|
12
|
-
import getRoutingHost from '@fleetbase/ember-core/utils/get-routing-host';
|
|
13
|
-
import setupCustomerPortal from './utils/setup-customer-portal';
|
|
5
|
+
import { services, externalRoutes } from '@fleetbase/ember-core/exports';
|
|
14
6
|
|
|
15
7
|
const { modulePrefix } = config;
|
|
16
|
-
const externalRoutes = ['console', 'extensions'];
|
|
17
|
-
|
|
18
8
|
export default class FleetOpsEngine extends Engine {
|
|
19
9
|
modulePrefix = modulePrefix;
|
|
20
10
|
Resolver = Resolver;
|
|
@@ -22,123 +12,6 @@ export default class FleetOpsEngine extends Engine {
|
|
|
22
12
|
services,
|
|
23
13
|
externalRoutes,
|
|
24
14
|
};
|
|
25
|
-
setupExtension = function (app, engine, universe) {
|
|
26
|
-
// register menu item in header
|
|
27
|
-
universe.registerHeaderMenuItem('Fleet-Ops', 'console.fleet-ops', { icon: 'route', priority: 0 });
|
|
28
|
-
|
|
29
|
-
// register admin settings -- create a fleet-ops menu panel with it's own setting options
|
|
30
|
-
universe.registerAdminMenuPanel(
|
|
31
|
-
'Fleet-Ops Config',
|
|
32
|
-
[
|
|
33
|
-
{
|
|
34
|
-
title: 'Navigator App',
|
|
35
|
-
icon: 'location-arrow',
|
|
36
|
-
component: NavigatorAppConfigComponent,
|
|
37
|
-
},
|
|
38
|
-
{
|
|
39
|
-
title: 'Avatar Managemenet',
|
|
40
|
-
icon: 'images',
|
|
41
|
-
component: AdminAvatarManagementComponent,
|
|
42
|
-
},
|
|
43
|
-
],
|
|
44
|
-
{
|
|
45
|
-
slug: 'fleet-ops',
|
|
46
|
-
}
|
|
47
|
-
);
|
|
48
|
-
|
|
49
|
-
// register menu item for tracking order
|
|
50
|
-
universe.registerMenuItem('auth:login', 'Track Order', {
|
|
51
|
-
route: 'virtual',
|
|
52
|
-
slug: 'track-order',
|
|
53
|
-
icon: 'barcode',
|
|
54
|
-
type: 'link',
|
|
55
|
-
wrapperClass: 'btn-block py-1 border dark:border-gray-700 border-gray-200 hover:opacity-50',
|
|
56
|
-
component: OrderTrackingLookupComponent,
|
|
57
|
-
onClick: (menuItem) => {
|
|
58
|
-
universe.transitionMenuItem('virtual', menuItem);
|
|
59
|
-
},
|
|
60
|
-
});
|
|
61
|
-
|
|
62
|
-
// Register OSRM as route optimization service
|
|
63
|
-
const routeOptimization = app.lookup('service:route-optimization');
|
|
64
|
-
const osrm = app.lookup('service:osrm');
|
|
65
|
-
if (routeOptimization && osrm) {
|
|
66
|
-
routeOptimization.register('osrm', osrm);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
// Register OSRM as Routing Controler
|
|
70
|
-
const leafletRoutingControl = app.lookup('service:leaflet-routing-control');
|
|
71
|
-
if (leafletRoutingControl) {
|
|
72
|
-
const routingHost = getRoutingHost();
|
|
73
|
-
leafletRoutingControl.register(
|
|
74
|
-
'osrm',
|
|
75
|
-
new RoutingControl({
|
|
76
|
-
name: 'OSRM',
|
|
77
|
-
router: new OSRMv1({
|
|
78
|
-
serviceUrl: `${routingHost}/route/v1`,
|
|
79
|
-
profile: 'driving',
|
|
80
|
-
}),
|
|
81
|
-
})
|
|
82
|
-
);
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
// widgets for registry
|
|
86
|
-
const KeyMetricsWidgetDefinition = {
|
|
87
|
-
widgetId: 'fleet-ops-key-metrics-widget',
|
|
88
|
-
name: 'Fleet-Ops Metrics',
|
|
89
|
-
description: 'Key metrics from Fleet-Ops.',
|
|
90
|
-
icon: 'truck',
|
|
91
|
-
component: WidgetFleetOpsKeyMetricsComponent,
|
|
92
|
-
grid_options: { w: 12, h: 12, minW: 8, minH: 12 },
|
|
93
|
-
options: {
|
|
94
|
-
title: 'Fleet-Ops Metrics',
|
|
95
|
-
},
|
|
96
|
-
};
|
|
97
|
-
|
|
98
|
-
// register widgets
|
|
99
|
-
universe.registerDefaultDashboardWidgets([KeyMetricsWidgetDefinition]);
|
|
100
|
-
universe.registerDashboardWidgets([KeyMetricsWidgetDefinition]);
|
|
101
|
-
|
|
102
|
-
// create all registries necessary
|
|
103
|
-
universe.createRegistries([
|
|
104
|
-
'engine:fleet-ops',
|
|
105
|
-
'fleet-ops:component:live-map-drawer',
|
|
106
|
-
'fleet-ops:component:vehicle:details',
|
|
107
|
-
'fleet-ops:component:driver:details',
|
|
108
|
-
'fleet-ops:component:order-config-manager',
|
|
109
|
-
'fleet-ops:component:contact:form',
|
|
110
|
-
'fleet-ops:component:contact:form:details',
|
|
111
|
-
'fleet-ops:component:customer:form',
|
|
112
|
-
'fleet-ops:component:customer:form:details',
|
|
113
|
-
'fleet-ops:component:driver:form',
|
|
114
|
-
'fleet-ops:component:driver:form:details',
|
|
115
|
-
'fleet-ops:component:fleet:form',
|
|
116
|
-
'fleet-ops:component:fleet:form:details',
|
|
117
|
-
'fleet-ops:component:place:form',
|
|
118
|
-
'fleet-ops:component:place:form:details',
|
|
119
|
-
'fleet-ops:component:vehicle:form',
|
|
120
|
-
'fleet-ops:component:vehicle:form:details',
|
|
121
|
-
'fleet-ops:component:vendor:form:edit',
|
|
122
|
-
'fleet-ops:component:vendor:form:edit:details',
|
|
123
|
-
'fleet-ops:component:vendor:form:create',
|
|
124
|
-
'fleet-ops:component:vendor:form:create:details',
|
|
125
|
-
'fleet-ops:component:issue:form',
|
|
126
|
-
'fleet-ops:component:issue:form:details',
|
|
127
|
-
'fleet-ops:component:fuel-report:form',
|
|
128
|
-
'fleet-ops:component:fuel-report:form:details',
|
|
129
|
-
'fleet-ops:contextmenu:vehicle',
|
|
130
|
-
'fleet-ops:contextmenu:driver',
|
|
131
|
-
'fleet-ops:component:order:details',
|
|
132
|
-
'fleet-ops:component:order:form',
|
|
133
|
-
'fleet-ops:template:operations:orders:view',
|
|
134
|
-
'fleet-ops:template:operations:orders:new',
|
|
135
|
-
'fleet-ops:template:operations:orders:new:entities-input',
|
|
136
|
-
'fleet-ops:template:operations:orders:new:entities-input:entity',
|
|
137
|
-
'fleet-ops:template:settings:routing',
|
|
138
|
-
]);
|
|
139
|
-
|
|
140
|
-
setupCustomerPortal(app, engine, universe);
|
|
141
|
-
};
|
|
142
15
|
}
|
|
143
16
|
|
|
144
17
|
loadInitializers(FleetOpsEngine, modulePrefix);
|