From 46950cea1cf20aab6dee34be349c2ffab018f148 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Lyngs=C3=B8?= Date: Thu, 5 Jan 2023 13:15:49 +0100 Subject: [PATCH] extensionsOfType using AliasManifestTypeMap --- .../registry/extension.registry.ts | 32 ++++--------------- 1 file changed, 7 insertions(+), 25 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/core/extensions-api/registry/extension.registry.ts b/src/Umbraco.Web.UI.Client/src/core/extensions-api/registry/extension.registry.ts index 740672c2ee..c4cdc54ee4 100644 --- a/src/Umbraco.Web.UI.Client/src/core/extensions-api/registry/extension.registry.ts +++ b/src/Umbraco.Web.UI.Client/src/core/extensions-api/registry/extension.registry.ts @@ -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 ? AliasManifestTypeMap[T] : ManifestBase; + export class UmbExtensionRegistry { private _extensions = new BehaviorSubject>([]); public readonly extensions = this._extensions.asObservable(); @@ -78,36 +80,16 @@ export class UmbExtensionRegistry { } getByTypeAndAlias(type: Key, alias: string) { - return this.extensionsOfType(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>; - extensionsOfType(type: 'section'): Observable>; - extensionsOfType(type: 'sectionView'): Observable>; - extensionsOfType(type: 'tree'): Observable>; - extensionsOfType(type: 'workspace'): Observable>; - extensionsOfType(type: 'treeItemAction'): Observable>; - extensionsOfType(type: 'dashboard'): Observable>; - extensionsOfType(type: 'dashboardCollection'): Observable>; - extensionsOfType(type: 'workspaceView'): Observable>; - extensionsOfType(type: 'workspaceAction'): Observable>; - extensionsOfType(type: 'propertyEditorUI'): Observable>; - extensionsOfType(type: 'propertyEditorModel'): Observable>; - extensionsOfType(type: 'propertyAction'): Observable>; - extensionsOfType(type: 'packageView'): Observable>; - extensionsOfType(type: 'entrypoint'): Observable>; - extensionsOfType(type: 'custom'): Observable>; - extensionsOfType(type: 'externalLoginProvider'): Observable>; - extensionsOfType(type: 'collectionView'): Observable>; - extensionsOfType(type: 'collectionBulkAction'): Observable>; - extensionsOfType(type: string): Observable>; - extensionsOfType(type: string): Observable> { + + extensionsOfType>(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>; } extensionsOfTypes(types: string[]): Observable> { @@ -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>; } -} +} \ No newline at end of file