Skip to content

Commit 623fa0c

Browse files
committed
refactor: Migrate to new specialized universe services
Refactor to use the new specialized services instead of monolithic universe: - Use menuService for menu registration - Use widgetService for widget registration - Use registryService for registry operations - Use extensionManager for extension lifecycle Files updated: - addon/extension.js - Use menuService.registerHeaderMenuItem() - addon/engine.js - Use menuService, widgetService, registryService - addon/utils/setup-customer-portal.js - Use extensionManager.afterBoot(), menuService, registryService - addon/components/order-config-manager.js - Use registryService.getRegistry() - addon/routes/virtual.js - Use registryService.getRegistry() with manual lookup - addon/components/map/leaflet-live-map.js - Use registryService.getRegistry(), universe.trigger() - addon/components/layout/fleet-ops-sidebar.js - Use registryService.getRegistry() - addon/components/map/drawer.js - Use registryService.getRegistry() This migration: - Improves performance with O(1) lookups - Phases out backward compatibility facade methods - Aligns with ember-core's new architecture - Maintains all functionality while using proper new API Requires: ember-core feature/universe-refactor branch
1 parent 350ebba commit 623fa0c

8 files changed

Lines changed: 46 additions & 24 deletions

File tree

addon/components/layout/fleet-ops-sidebar.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import DriverListingComponent from './fleet-ops-sidebar/driver-listing';
77

88
export default class LayoutFleetOpsSidebarComponent extends Component {
99
@service universe;
10+
@service('universe/registry-service') registryService;
1011
@service store;
1112
@service intl;
1213
@service abilities;
@@ -24,8 +25,8 @@ export default class LayoutFleetOpsSidebarComponent extends Component {
2425
}
2526

2627
createMenuItemsFromUniverseRegistry() {
27-
const registeredMenuItems = this.universe.getMenuItemsFromRegistry('engine:fleet-ops');
28-
this.universeMenuPanels = this.universe.getMenuPanelsFromRegistry('engine:fleet-ops');
28+
const registeredMenuItems = this.registryService.getRegistry('engine:fleet-ops');
29+
this.universeMenuPanels = this.registryService.getRegistry('engine:fleet-ops:panels');
2930
this.universeMenuItems = registeredMenuItems.filter((menuItem) => menuItem.section === undefined);
3031
this.universeSettingsMenuItems = registeredMenuItems.filter((menuItem) => menuItem.section === 'settings');
3132
}

addon/components/map/drawer.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,10 @@ import { isArray } from '@ember/array';
66
export default class MapDrawerComponent extends Component {
77
@service mapDrawer;
88
@service universe;
9+
@service('universe/registry-service') registryService;
910

1011
get tabs() {
11-
const registeredTabs = this.universe.getMenuItemsFromRegistry('fleet-ops:component:map:drawer');
12+
const registeredTabs = this.registryService.getRegistry('fleet-ops:component:map:drawer');
1213
return [
1314
this.universe._createMenuItem('Vehicles', null, { icon: 'car', component: 'map/drawer/vehicle-listing' }),
1415
this.universe._createMenuItem('Drivers', null, { icon: 'id-card', component: 'map/drawer/driver-listing' }),

addon/components/map/leaflet-live-map.js

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ export default class MapLeafletLiveMapComponent extends Component {
2828
@service abilities;
2929
@service intl;
3030
@service universe;
31+
@service('universe/registry-service') registryService;
3132

3233
/** properties */
3334
id = guidFor(this);
@@ -315,7 +316,7 @@ export default class MapLeafletLiveMapComponent extends Component {
315316
].filter(Boolean);
316317

317318
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);
319320

320321
return registry;
321322
}
@@ -341,7 +342,7 @@ export default class MapLeafletLiveMapComponent extends Component {
341342

342343
// create contextmenu registry
343344
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);
345346

346347
return contextmenuRegistry;
347348
}
@@ -375,7 +376,7 @@ export default class MapLeafletLiveMapComponent extends Component {
375376

376377
// create contextmenu registry
377378
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);
379380

380381
return contextmenuRegistry;
381382
}
@@ -404,7 +405,7 @@ export default class MapLeafletLiveMapComponent extends Component {
404405
];
405406

406407
// append items from universe registry
407-
const registeredContextMenuItems = this.universe.getMenuItemsFromRegistry('fleet-ops:contextmenu:driver');
408+
const registeredContextMenuItems = this.registryService.getRegistry('fleet-ops:contextmenu:driver');
408409
if (isArray(registeredContextMenuItems)) {
409410
items = [
410411
...items,
@@ -427,7 +428,7 @@ export default class MapLeafletLiveMapComponent extends Component {
427428

428429
// create contextmenu registry
429430
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);
431432

432433
return contextmenuRegistry;
433434
}
@@ -452,7 +453,7 @@ export default class MapLeafletLiveMapComponent extends Component {
452453
];
453454

454455
// append items from universe registry
455-
const registeredContextMenuItems = this.universe.getMenuItemsFromRegistry('fleet-ops:contextmenu:vehicle');
456+
const registeredContextMenuItems = this.registryService.getRegistry('fleet-ops:contextmenu:vehicle');
456457
if (isArray(registeredContextMenuItems)) {
457458
items = [
458459
...items,
@@ -475,7 +476,7 @@ export default class MapLeafletLiveMapComponent extends Component {
475476

476477
// create contextmenu registry
477478
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);
479480

480481
return contextmenuRegistry;
481482
}

addon/components/order-config-manager.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import findActiveTab from '../utils/find-active-tab';
2020
const configManagerContext = EmberObject.extend(Evented);
2121
export default class OrderConfigManagerComponent extends Component {
2222
@service universe;
23+
@service('universe/registry-service') registryService;
2324
@service notifications;
2425
@service modalsManager;
2526
@service store;
@@ -39,7 +40,7 @@ export default class OrderConfigManagerComponent extends Component {
3940
* @type {Array}
4041
*/
4142
get tabs() {
42-
const registeredTabs = this.universe.getMenuItemsFromRegistry('fleet-ops:component:order-config-manager');
43+
const registeredTabs = this.registryService.getRegistry('fleet-ops:component:order-config-manager');
4344
const defaultTabs = [
4445
this.universe._createMenuItem(this.intl.t('order-config-manager.tabs.details'), null, { icon: 'circle-info', component: OrderConfigManagerDetailsComponent }),
4546
this.universe._createMenuItem(this.intl.t('order-config-manager.tabs.custom-fields'), null, { icon: 'rectangle-list', component: OrderConfigManagerCustomFieldsComponent }),

addon/engine.js

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,15 @@ export default class FleetOpsEngine extends Engine {
2323
externalRoutes,
2424
};
2525
setupExtension = function (app, engine, universe) {
26+
const menuService = universe.getService('universe/menu-service');
27+
const widgetService = universe.getService('universe/widget-service');
28+
const registryService = universe.getService('universe/registry-service');
29+
2630
// register menu item in header
27-
universe.registerHeaderMenuItem('Fleet-Ops', 'console.fleet-ops', { icon: 'route', priority: 0 });
31+
menuService.registerHeaderMenuItem('Fleet-Ops', 'console.fleet-ops', { icon: 'route', priority: 0 });
2832

2933
// register admin settings -- create a fleet-ops menu panel with it's own setting options
30-
universe.registerAdminMenuPanel(
34+
menuService.registerAdminMenuPanel(
3135
'Fleet-Ops Config',
3236
[
3337
{
@@ -47,7 +51,7 @@ export default class FleetOpsEngine extends Engine {
4751
);
4852

4953
// register menu item for tracking order
50-
universe.registerMenuItem('auth:login', 'Track Order', {
54+
menuService.registerMenuItem('auth:login', 'Track Order', {
5155
route: 'virtual',
5256
slug: 'track-order',
5357
icon: 'barcode',
@@ -96,11 +100,11 @@ export default class FleetOpsEngine extends Engine {
96100
};
97101

98102
// register widgets
99-
universe.registerDefaultDashboardWidgets([KeyMetricsWidgetDefinition]);
100-
universe.registerDashboardWidgets([KeyMetricsWidgetDefinition]);
103+
widgetService.registerDefaultWidgets('dashboard', [KeyMetricsWidgetDefinition]);
104+
widgetService.registerWidgets('dashboard', [KeyMetricsWidgetDefinition]);
101105

102106
// create all registries necessary
103-
universe.createRegistries([
107+
registryService.createRegistries([
104108
'engine:fleet-ops',
105109
'fleet-ops:component:live-map-drawer',
106110
'fleet-ops:component:vehicle:details',

addon/extension.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,6 @@ import { MenuItem, MenuPanel, Widget, ExtensionComponent, Hook } from '@fleetbas
33
export default function (app, universe) {
44
console.log('[FleetOps] Setting up extension...');
55

6-
universe.registerHeaderMenuItem('Fleet-Ops', 'console.fleet-ops', { icon: 'route', priority: 0 });
6+
const menuService = universe.getService('universe/menu-service');
7+
menuService.registerHeaderMenuItem('Fleet-Ops', 'console.fleet-ops', { icon: 'route', priority: 0 });
78
}

addon/routes/virtual.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { inject as service } from '@ember/service';
33

44
export default class VirtualRoute extends Route {
55
@service universe;
6+
@service('universe/registry-service') registryService;
67

78
queryParams = {
89
view: {
@@ -12,6 +13,12 @@ export default class VirtualRoute extends Route {
1213

1314
model({ section = null, slug }, transition) {
1415
const view = this.universe.getViewFromTransition(transition);
15-
return this.universe.lookupMenuItemFromRegistry('engine:fleet-ops', slug, view, section);
16+
const items = this.registryService.getRegistry('engine:fleet-ops');
17+
return items.find(item => {
18+
const slugMatch = item.slug === slug;
19+
const viewMatch = !view || item.view === view;
20+
const sectionMatch = !section || item.section === section;
21+
return slugMatch && viewMatch && sectionMatch;
22+
});
1623
}
1724
}

addon/utils/setup-customer-portal.js

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ import { debug } from '@ember/debug';
66
export default function setupCustomerPortal(app, engine, universe) {
77
if (!customerPortalInstalled(app)) return;
88

9-
universe.afterBoot(function (u) {
9+
const extensionManager = universe.getService('universe/extension-manager');
10+
extensionManager.afterBoot(function (u) {
1011
const portal = u.getEngineInstance('@fleetbase/customer-portal-engine');
1112
if (!portal) {
1213
debug('Could not resolve @fleetbase/customer-portal-engine');
@@ -16,15 +17,20 @@ export default function setupCustomerPortal(app, engine, universe) {
1617
// Alias FleetOps services into Customer Portal before rendering
1718
createServiceAlias(engine, portal, ['leaflet-map-manager', 'location', 'movement-tracker', 'leaflet-routing-control', 'order-config-actions', 'order-creation', 'order-validation']);
1819

19-
// Now it’s safe to wire menus + renderables that might use those services
20-
u.registerMenuItems('customer-portal:sidebar', [
20+
// Now it's safe to wire menus + renderables that might use those services
21+
const menuService = u.getService('universe/menu-service');
22+
const registryService = u.getService('universe/registry-service');
23+
24+
// Register menu items
25+
const menuItems = [
2126
u._createMenuItem('Orders', 'customer-portal.portal.virtual', {
2227
icon: 'boxes-packing',
2328
component: createEngineBoundComponent(portal, CustomerOrdersComponent),
2429
}),
25-
]);
30+
];
31+
menuItems.forEach(item => menuService.registerMenuItem('customer-portal:sidebar', item.title, item.route, item));
2632

27-
u.registerRenderableComponent('@fleetbase/customer-portal-engine', 'customer-portal:admin-settings', CustomerAdminSettingsComponent);
33+
registryService.register('customer-portal:admin-settings', '@fleetbase/customer-portal-engine', CustomerAdminSettingsComponent);
2834
});
2935
}
3036

0 commit comments

Comments
 (0)