Skip to content

Commit

Permalink
add actio nmenu ext
Browse files Browse the repository at this point in the history
  • Loading branch information
ashutosh16 committed Aug 22, 2024
1 parent 18ef874 commit a332515
Showing 1 changed file with 52 additions and 9 deletions.
61 changes: 52 additions & 9 deletions ui/src/app/shared/services/extensions-service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,34 @@ import * as minimatch from 'minimatch';

import {Application, ApplicationTree, State} from '../models';

type ExtensionsEventType = 'resource' | 'systemLevel' | 'appView' | 'statusPanel'| 'topBar';
type ExtensionsType = ResourceTabExtension | SystemLevelExtension | AppViewExtension | StatusPanelExtension | TopBarExtension;

class ExtensionsEventTarget {
private listeners: Map<ExtensionsEventType, Array<(extension: ExtensionsType) => void>> = new Map();

addEventListener(eventName: ExtensionsEventType, listener: (extension: ExtensionsType) => void) {
if (!this.listeners.has(eventName)) {
this.listeners.set(eventName, []);
}
this.listeners.get(eventName)?.push(listener);
}

removeEventListener(eventName: ExtensionsEventType, listenerToRemove: (extension: ExtensionsType) => void) {
const listeners = this.listeners.get(eventName);
if (!listeners) return;

const filteredListeners = listeners.filter(listener => listener !== listenerToRemove);
this.listeners.set(eventName, filteredListeners);
}

emit(eventName: ExtensionsEventType, extension: ExtensionsType) {
this.listeners.get(eventName)?.forEach(listener => listener(extension));
}
}

const extensions = {
eventTarget: new ExtensionsEventTarget(),
resourceExtentions: new Array<ResourceTabExtension>(),
systemLevelExtensions: new Array<SystemLevelExtension>(),
appViewExtensions: new Array<AppViewExtension>(),
Expand All @@ -12,23 +39,33 @@ const extensions = {
};

function registerResourceExtension(component: ExtensionComponent, group: string, kind: string, tabTitle: string, opts?: {icon: string}) {
extensions.resourceExtentions.push({component, group, kind, title: tabTitle, icon: opts?.icon});
const ext = {component, group, kind, title: tabTitle, icon: opts?.icon};
extensions.resourceExtentions.push(ext);
extensions.eventTarget.emit('resource', ext);
}

function registerSystemLevelExtension(component: ExtensionComponent, title: string, path: string, icon: string) {
extensions.systemLevelExtensions.push({component, title, icon, path});
const ext = {component, title, icon, path};
extensions.systemLevelExtensions.push(ext);
extensions.eventTarget.emit('systemLevel', ext);
}

function registerAppViewExtension(component: ExtensionComponent, title: string, icon: string) {
extensions.appViewExtensions.push({component, title, icon});
const ext = {component, title, icon};
extensions.appViewExtensions.push(ext);
extensions.eventTarget.emit('appView', ext);
}

function registerStatusPanelExtension(component: StatusPanelExtensionComponent, title: string, id: string, flyout?: ExtensionComponent, isMiddle = false, isNarrow = false) {
extensions.statusPanelExtensions.push({component, flyout, title, id, isMiddle, isNarrow});
function registerStatusPanelExtension(component: StatusPanelExtensionComponent, title: string, id: string, flyout?: ExtensionComponent) {
const ext = {component, flyout, title, id};
extensions.statusPanelExtensions.push(ext);
extensions.eventTarget.emit('statusPanel', ext);
}

function registerTopBarExtension(component: TopBarExtensionComponent, title: string, id: string, flyout?: ExtensionComponent, isMiddle = false, isNarrow = false) {
extensions.TopBarExtensions.push({component, flyout, title, id, isMiddle, isNarrow});
const ext = {component, flyout, title, id, isMiddle, isNarrow};
extensions.TopBarExtensions.push(ext);
extensions.eventTarget.emit('topBar', ext);
}

let legacyInitialized = false;
Expand Down Expand Up @@ -71,8 +108,6 @@ export interface StatusPanelExtension {
flyout?: StatusPanelExtensionFlyoutComponent;
title: string;
id: string;
isMiddle: boolean;
isNarrow: boolean;
}

export interface TopBarExtension {
Expand Down Expand Up @@ -129,6 +164,14 @@ export interface TopBarExtensionFlyoutProps {
}

export class ExtensionsService {
public addEventListener(evtType: ExtensionsEventType, cb: (ext: ExtensionsType) => void) {
extensions.eventTarget.addEventListener(evtType, cb);
}

public removeEventListener(evtType: ExtensionsEventType, cb: (ext: ExtensionsType) => void) {
extensions.eventTarget.removeEventListener(evtType, cb);
}

public getResourceTabs(group: string, kind: string): ResourceTabExtension[] {
initLegacyExtensions();
const items = extensions.resourceExtentions.filter(extension => minimatch(group, extension.group) && minimatch(kind, extension.kind)).slice();
Expand Down Expand Up @@ -161,4 +204,4 @@ export class ExtensionsService {
registerStatusPanelExtension,
registerTopBarExtension
};
})(window);
})(window);

0 comments on commit a332515

Please sign in to comment.