@fleetbase/ember-ui
Version:
Fleetbase UI provides all the interface components, helpers, services and utilities for building a Fleetbase extension into the Console.
120 lines (104 loc) • 3.39 kB
JavaScript
import Component from '@glimmer/component';
import { inject as service } from '@ember/service';
/**
* RegistryYield Component
*
* Yields items from a registry (menu items or components)
* Updated to work with the refactored universe service architecture
*
* @class RegistryYieldComponent
* @extends Component
*/
export default class RegistryYieldComponent extends Component {
universe;
menuService;
registryService;
/**
* Get yieldable items from the registry
* Computed as a getter for automatic reactivity
*
* @property yieldables
* @type {Array}
*/
get yieldables() {
return this.getYieldables();
}
/**
* Get yieldable items from the registry
*
* @method getYieldables
* @returns {Array} Array of items to yield
*/
getYieldables() {
const { type, registry } = this.args;
// Handle menu items
if (['buttons', 'menu', 'menuItems', 'menu-item'].includes(type)) {
return this.getMenuItems(registry);
}
// Handle components
return this.getComponents(registry);
}
/**
* Get menu items from registry
*
* @method getMenuItems
* @param {String} registry Registry name
* @returns {Array} Array of menu items
*/
getMenuItems(registry) {
// Try new MenuService first
if (this.menuService) {
const items = this.menuService.getMenuItems(registry);
if (items && items.length > 0) {
return items;
}
}
// Fallback to universe (backward compatibility)
if (typeof this.universe.getMenuItemsFromRegistry === 'function') {
return this.universe.getMenuItemsFromRegistry(registry) ?? [];
}
return [];
}
/**
* Get components from registry
*
* @method getComponents
* @param {String} registry Registry name
* @returns {Array} Array of component definitions
*/
getComponents(registry) {
// Try new RegistryService first
if (this.registryService) {
const components = this.registryService.getRenderableComponents(registry);
if (components && components.length > 0) {
return components;
}
}
// Fallback to universe (backward compatibility)
if (typeof this.universe.getRenderableComponentsFromRegistry === 'function') {
return this.universe.getRenderableComponentsFromRegistry(registry) ?? [];
}
return [];
}
/**
* Check if yieldables are components (vs menu items/buttons)
*
* @property isComponent
* @type {Boolean}
*/
get isComponent() {
const { type } = this.args;
// Explicit non-component types
if (['buttons', 'menu', 'menuItems', 'menu-item'].includes(type)) {
return false;
}
// Check if first yieldable is a component definition
if (this.yieldables.length > 0) {
const first = this.yieldables[0];
// ExtensionComponent has engine property
// Component classes are functions
return !!(first && (first.engine || typeof first === 'function'));
}
return false;
}
}