extensionsOfType using AliasManifestTypeMap
This commit is contained in:
@@ -25,6 +25,8 @@ import type {
|
||||
import { hasDefaultExport } from '../has-default-export.function';
|
||||
import { loadExtension } from '../load-extension.function';
|
||||
|
||||
type SpecificManifestTypeOrManifestBase<T extends keyof AliasManifestTypeMap | string> = T extends keyof AliasManifestTypeMap ? AliasManifestTypeMap[T] : ManifestBase;
|
||||
|
||||
export class UmbExtensionRegistry {
|
||||
private _extensions = new BehaviorSubject<Array<ManifestBase>>([]);
|
||||
public readonly extensions = this._extensions.asObservable();
|
||||
@@ -78,36 +80,16 @@ export class UmbExtensionRegistry {
|
||||
}
|
||||
|
||||
getByTypeAndAlias<Key extends keyof AliasManifestTypeMap>(type: Key, alias: string) {
|
||||
return this.extensionsOfType<AliasManifestTypeMap[Key]>(type).pipe(map((extensions) => extensions.find((extension) => extension.alias === alias) || null));
|
||||
return this.extensionsOfType(type).pipe(map((extensions) => extensions.find((extension) => extension.alias === alias) || null));
|
||||
}
|
||||
|
||||
// TODO: implement unregister of extension
|
||||
|
||||
// Typings concept, need to put all core types to get a good array return type for the provided type...
|
||||
extensionsOfType(type: 'headerApp'): Observable<Array<ManifestHeaderApp>>;
|
||||
extensionsOfType(type: 'section'): Observable<Array<ManifestSection>>;
|
||||
extensionsOfType(type: 'sectionView'): Observable<Array<ManifestSectionView>>;
|
||||
extensionsOfType<T = ManifestTree>(type: 'tree'): Observable<Array<T>>;
|
||||
extensionsOfType(type: 'workspace'): Observable<Array<ManifestWorkspace>>;
|
||||
extensionsOfType(type: 'treeItemAction'): Observable<Array<ManifestTreeItemAction>>;
|
||||
extensionsOfType(type: 'dashboard'): Observable<Array<ManifestDashboard>>;
|
||||
extensionsOfType(type: 'dashboardCollection'): Observable<Array<ManifestDashboard>>;
|
||||
extensionsOfType(type: 'workspaceView'): Observable<Array<ManifestWorkspaceView>>;
|
||||
extensionsOfType(type: 'workspaceAction'): Observable<Array<ManifestWorkspaceAction>>;
|
||||
extensionsOfType(type: 'propertyEditorUI'): Observable<Array<ManifestPropertyEditorUI>>;
|
||||
extensionsOfType(type: 'propertyEditorModel'): Observable<Array<ManifestPropertyEditorModel>>;
|
||||
extensionsOfType(type: 'propertyAction'): Observable<Array<ManifestPropertyAction>>;
|
||||
extensionsOfType(type: 'packageView'): Observable<Array<ManifestPackageView>>;
|
||||
extensionsOfType(type: 'entrypoint'): Observable<Array<ManifestEntrypoint>>;
|
||||
extensionsOfType(type: 'custom'): Observable<Array<ManifestCustom>>;
|
||||
extensionsOfType(type: 'externalLoginProvider'): Observable<Array<ManifestExternalLoginProvider>>;
|
||||
extensionsOfType(type: 'collectionView'): Observable<Array<ManifestCollectionView>>;
|
||||
extensionsOfType(type: 'collectionBulkAction'): Observable<Array<ManifestCollectionBulkAction>>;
|
||||
extensionsOfType<T extends ManifestTypes>(type: string): Observable<Array<T>>;
|
||||
extensionsOfType(type: string): Observable<Array<ManifestBase>> {
|
||||
|
||||
extensionsOfType<Key extends keyof AliasManifestTypeMap | string, T = SpecificManifestTypeOrManifestBase<Key>>(type: Key) {
|
||||
return this.extensions.pipe(
|
||||
map((exts) => exts.filter((ext) => ext.type === type).sort((a, b) => (b.weight || 0) - (a.weight || 0)))
|
||||
);
|
||||
) as Observable<Array<T>>;
|
||||
}
|
||||
|
||||
extensionsOfTypes<ExtensionType = ManifestBase>(types: string[]): Observable<Array<ExtensionType>> {
|
||||
@@ -115,4 +97,4 @@ export class UmbExtensionRegistry {
|
||||
map((exts) => exts.filter((ext) => (types.indexOf(ext.type) !== -1)).sort((a, b) => (b.weight || 0) - (a.weight || 0)))
|
||||
) as Observable<Array<ExtensionType>>;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user