UNPKG

@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
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 { @service universe; @service('universe/menu-service') menuService; @service('universe/registry-service') 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; } }