@fleetbase/fleetops-engine 0.6.26 → 0.6.28

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 (78) hide show
  1. package/addon/components/admin/avatar-management.js +24 -26
  2. package/addon/components/admin/navigator-app.hbs +1 -1
  3. package/addon/components/driver/details.hbs +4 -0
  4. package/addon/components/layout/fleet-ops-sidebar.js +3 -2
  5. package/addon/components/map/drawer.hbs +1 -1
  6. package/addon/components/map/drawer.js +2 -1
  7. package/addon/components/map/leaflet-live-map.js +8 -7
  8. package/addon/components/order/details/purchase-rate.hbs +2 -2
  9. package/addon/components/order/form/payload.hbs +1 -1
  10. package/addon/components/order-config-manager.js +2 -1
  11. package/addon/components/vehicle/details.hbs +5 -1
  12. package/addon/controllers/connectivity/devices/index/details/virtual.js +7 -0
  13. package/addon/controllers/connectivity/devices/index/details.js +4 -0
  14. package/addon/controllers/connectivity/sensors/index/details/virtual.js +7 -0
  15. package/addon/controllers/connectivity/sensors/index/details.js +4 -0
  16. package/addon/controllers/management/drivers/index/details/virtual.js +7 -0
  17. package/addon/controllers/management/drivers/index/details.js +4 -4
  18. package/addon/controllers/management/fleets/index/details/virtual.js +7 -0
  19. package/addon/controllers/management/fleets/index/details.js +4 -0
  20. package/addon/controllers/management/places/index/details/virtual.js +7 -0
  21. package/addon/controllers/management/places/index/details.js +22 -13
  22. package/addon/controllers/management/vehicles/index/details/virtual.js +7 -0
  23. package/addon/controllers/management/vehicles/index/details.js +4 -0
  24. package/addon/controllers/management/vehicles/index.js +2 -2
  25. package/addon/engine.js +1 -128
  26. package/addon/extension.js +116 -0
  27. package/addon/instance-initializers/register-osrm.js +32 -0
  28. package/addon/instance-initializers/setup-customer-portal.js +10 -0
  29. package/addon/routes/connectivity/devices/index/details/virtual.js +23 -0
  30. package/addon/routes/connectivity/sensors/index/details/virtual.js +23 -0
  31. package/addon/routes/management/drivers/index/details/virtual.js +23 -0
  32. package/addon/routes/management/drivers/index/details.js +0 -4
  33. package/addon/routes/management/fleets/index/details/virtual.js +23 -0
  34. package/addon/routes/management/places/index/details/virtual.js +23 -0
  35. package/addon/routes/management/vehicles/index/details/virtual.js +23 -0
  36. package/addon/routes/management/vehicles/index/details.js +0 -4
  37. package/addon/routes/virtual.js +2 -1
  38. package/addon/routes.js +6 -0
  39. package/addon/styles/fleetops-engine.css +5 -0
  40. package/addon/templates/connectivity/devices/index/details/virtual.hbs +1 -0
  41. package/addon/templates/connectivity/sensors/index/details/virtual.hbs +1 -0
  42. package/addon/templates/management/drivers/index/details/virtual.hbs +1 -0
  43. package/addon/templates/management/fleets/index/details/virtual.hbs +1 -0
  44. package/addon/templates/management/places/index/details/virtual.hbs +1 -0
  45. package/addon/templates/management/vehicles/index/details/virtual.hbs +1 -0
  46. package/addon/templates/virtual.hbs +1 -1
  47. package/addon/utils/setup-customer-portal.js +49 -23
  48. package/app/controllers/connectivity/devices/index/details/virtual.js +1 -0
  49. package/app/controllers/connectivity/sensors/index/details/virtual.js +1 -0
  50. package/app/controllers/management/drivers/index/details/virtual.js +1 -0
  51. package/app/controllers/management/fleets/index/details/virtual.js +1 -0
  52. package/app/controllers/management/places/index/details/virtual.js +1 -0
  53. package/app/controllers/management/vehicles/index/details/virtual.js +1 -0
  54. package/app/routes/connectivity/devices/index/details/virtual.js +1 -0
  55. package/app/routes/connectivity/sensors/index/details/virtual.js +1 -0
  56. package/app/routes/management/drivers/index/details/virtual.js +1 -0
  57. package/app/routes/management/fleets/index/details/virtual.js +1 -0
  58. package/app/routes/management/places/index/details/virtual.js +1 -0
  59. package/app/routes/management/vehicles/index/details/virtual.js +1 -0
  60. package/app/templates/connectivity/devices/index/details/virtual.js +1 -0
  61. package/app/templates/connectivity/sensors/index/details/virtual.js +1 -0
  62. package/app/templates/management/drivers/index/details/virtual.js +1 -0
  63. package/app/templates/management/fleets/index/details/virtual.js +1 -0
  64. package/app/templates/management/places/index/details/virtual.js +1 -0
  65. package/app/templates/management/vehicles/index/details/virtual.js +1 -0
  66. package/composer.json +1 -1
  67. package/config/environment.js +1 -1
  68. package/extension.json +1 -1
  69. package/package.json +3 -3
  70. package/server/src/Models/Place.php +2 -2
  71. package/addon/helpers/avatar-url.js +0 -9
  72. package/addon/helpers/point-coordinates.js +0 -10
  73. package/addon/helpers/point-to-coordinates.js +0 -32
  74. package/addon/helpers/unwrap-coordinates.js +0 -83
  75. package/app/helpers/avatar-url.js +0 -1
  76. package/app/helpers/point-coordinates.js +0 -1
  77. package/app/helpers/point-to-coordinates.js +0 -1
  78. 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
- * The only acceptable file types for avatars, png or svg.
39
+ * Selectable categories for avatar management.
40
40
  *
41
41
  * @memberof AdminAvatarManagementComponent
42
42
  */
43
- get acceptedFileTypes() {
44
- return ['image/svg+xml', 'image/png'];
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
- * Selectable categories for avatar management.
65
+ * The only acceptable file types for avatars, png or svg.
49
66
  *
50
67
  * @memberof AdminAvatarManagementComponent
51
68
  */
52
- get categories() {
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}} @panelBodyClass="bg-white dark:bg-gray-800 mb-4">
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.universe.getMenuItemsFromRegistry('engine:fleet-ops');
28
- this.universeMenuPanels = this.universe.getMenuPanelsFromRegistry('engine:fleet-ops');
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.universe.getMenuItemsFromRegistry('fleet-ops:component:map:drawer');
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.createRegistryEvent('fleet-ops:contextmenu:map', 'created', registry, this.leafletContextmenuManager);
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.createRegistryEvent('fleet-ops:contextmenu:zone', 'created', contextmenuRegistry, this.leafletContextmenuManager);
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.createRegistryEvent('fleet-ops:contextmenu:service-area', 'created', contextmenuRegistry, this.leafletContextmenuManager);
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.universe.getMenuItemsFromRegistry('fleet-ops:contextmenu:driver');
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.createRegistryEvent('fleet-ops:contextmenu:driver', 'created', contextmenuRegistry, this.leafletContextmenuManager);
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.universe.getMenuItemsFromRegistry('fleet-ops:contextmenu:vehicle');
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.createRegistryEvent('fleet-ops:contextmenu:vehicle', 'created', contextmenuRegistry, this.leafletContextmenuManager);
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 "fleet-ops.operations.orders.index.new.breakdown"}}</th>
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:template:operations:orders:new:entities-input:entity" as |RegistryComponent|>
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.universe.getMenuItemsFromRegistry('fleet-ops:component:order-config-manager');
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.display_name}}</div>
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"}}
@@ -0,0 +1,7 @@
1
+ import Controller from '@ember/controller';
2
+ import { tracked } from '@glimmer/tracking';
3
+
4
+ export default class ConnectivityDevicesIndexDetailsVirtualController extends Controller {
5
+ @tracked view;
6
+ queryParams = ['view'];
7
+ }
@@ -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
 
@@ -0,0 +1,7 @@
1
+ import Controller from '@ember/controller';
2
+ import { tracked } from '@glimmer/tracking';
3
+
4
+ export default class ConnectivitySensorsIndexDetailsVirtualController extends Controller {
5
+ @tracked view;
6
+ queryParams = ['view'];
7
+ }
@@ -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
 
@@ -0,0 +1,7 @@
1
+ import Controller from '@ember/controller';
2
+ import { tracked } from '@glimmer/tracking';
3
+
4
+ export default class ManagementDriversIndexDetailsVirtualController extends Controller {
5
+ @tracked view;
6
+ queryParams = ['view'];
7
+ }
@@ -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
 
@@ -0,0 +1,7 @@
1
+ import Controller from '@ember/controller';
2
+ import { tracked } from '@glimmer/tracking';
3
+
4
+ export default class ManagementFleetsIndexDetailsVirtualController extends Controller {
5
+ @tracked view;
6
+ queryParams = ['view'];
7
+ }
@@ -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
 
@@ -0,0 +1,7 @@
1
+ import Controller from '@ember/controller';
2
+ import { tracked } from '@glimmer/tracking';
3
+
4
+ export default class ManagementPlacesIndexDetailsVirtualController extends Controller {
5
+ @tracked view;
6
+ queryParams = ['view'];
7
+ }
@@ -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
- @tracked tabs = [
8
- {
9
- route: 'management.places.index.details.index',
10
- label: 'Overview',
11
- },
12
- ];
13
- @tracked actionButtons = [
14
- {
15
- icon: 'pencil',
16
- fn: () => this.hostRouter.transitionTo('console.fleet-ops.management.places.index.edit', this.model),
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
  }
@@ -0,0 +1,7 @@
1
+ import Controller from '@ember/controller';
2
+ import { tracked } from '@glimmer/tracking';
3
+
4
+ export default class ManagementVehiclesIndexDetailsVirtualController extends Controller {
5
+ @tracked view;
6
+ queryParams = ['view'];
7
+ }
@@ -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: 'display_name',
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: 'display_name',
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/services';
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);