From ab2d551af34cef71219673129e534b91184fb5c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Lyngs=C3=B8?= Date: Fri, 3 Feb 2023 11:54:26 +0100 Subject: [PATCH] ClassConstructor and ManifestClass type --- .../libs/extensions-registry/models.ts | 104 ++++++++++-------- .../extensions-registry/repository.models.ts | 5 + .../libs/extensions-registry/tree.models.ts | 4 +- .../libs/models/index.ts | 10 +- 4 files changed, 66 insertions(+), 57 deletions(-) create mode 100644 src/Umbraco.Web.UI.Client/libs/extensions-registry/repository.models.ts diff --git a/src/Umbraco.Web.UI.Client/libs/extensions-registry/models.ts b/src/Umbraco.Web.UI.Client/libs/extensions-registry/models.ts index 0b8f3a8890..daaef92105 100644 --- a/src/Umbraco.Web.UI.Client/libs/extensions-registry/models.ts +++ b/src/Umbraco.Web.UI.Client/libs/extensions-registry/models.ts @@ -1,75 +1,78 @@ +import type { ManifestCollectionBulkAction } from './collection-bulk-action.models'; +import type { ManifestCollectionView } from './collection-view.models'; +import type { ManifestDashboard } from './dashboard.models'; +import type { ManifestDashboardCollection } from './dashboard-collection.models'; +import type { ManifestEntityAction } from './entity-action.models'; +import type { ManifestExternalLoginProvider } from './external-login-provider.models'; import type { ManifestHeaderApp } from './header-app.models'; +import type { ManifestHealthCheck } from './health-check.models'; +import type { ManifestPackageView } from './package-view.models'; +import type { ManifestPropertyAction } from './property-action.models'; +import type { ManifestPropertyEditorUI, ManifestPropertyEditorModel } from './property-editor.models'; import type { ManifestSection } from './section.models'; import type { ManifestSectionView } from './section-view.models'; +import type { ManifestSidebarMenuItem } from './sidebar-menu-item.models'; +import type { ManifestTheme } from './theme.models'; import type { ManifestTree } from './tree.models'; import type { ManifestTreeItemAction } from './tree-item-action.models'; +import type { ManifestUserDashboard } from './user-dashboard.models'; import type { ManifestWorkspace } from './workspace.models'; import type { ManifestWorkspaceAction } from './workspace-action.models'; import type { ManifestWorkspaceView } from './workspace-view.models'; import type { ManifestWorkspaceViewCollection } from './workspace-view-collection.models'; -import type { ManifestPropertyEditorUI, ManifestPropertyEditorModel } from './property-editor.models'; -import type { ManifestDashboard } from './dashboard.models'; -import type { ManifestDashboardCollection } from './dashboard-collection.models'; -import type { ManifestUserDashboard } from './user-dashboard.models'; -import type { ManifestPropertyAction } from './property-action.models'; -import type { ManifestPackageView } from './package-view.models'; -import type { ManifestExternalLoginProvider } from './external-login-provider.models'; -import type { ManifestCollectionBulkAction } from './collection-bulk-action.models'; -import type { ManifestCollectionView } from './collection-view.models'; -import type { ManifestHealthCheck } from './health-check.models'; -import type { ManifestSidebarMenuItem } from './sidebar-menu-item.models'; -import type { ManifestTheme } from './theme.models'; -import type { ManifestEntityAction } from './entity-action.models'; +import { ManifestRepository } from './repository.models'; +import type { ClassConstructor } from '@umbraco-cms/models'; -export * from './header-app.models'; -export * from './section.models'; -export * from './section-view.models'; -export * from './tree.models'; -export * from './tree-item-action.models'; -export * from './workspace.models'; -export * from './workspace-action.models'; -export * from './workspace-view.models'; -export * from './workspace-view-collection.models'; -export * from './property-editor.models'; -export * from './dashboard.models'; -export * from './dashboard-collection.models'; -export * from './user-dashboard.models'; -export * from './property-action.models'; -export * from './package-view.models'; -export * from './external-login-provider.models'; export * from './collection-bulk-action.models'; export * from './collection-view.models'; +export * from './dashboard-collection.models'; +export * from './dashboard.models'; +export * from './entity-action.models'; +export * from './external-login-provider.models'; +export * from './header-app.models'; export * from './health-check.models'; +export * from './package-view.models'; +export * from './property-action.models'; +export * from './property-editor.models'; +export * from './section-view.models'; +export * from './section.models'; export * from './sidebar-menu-item.models'; export * from './theme.models'; -export * from './entity-action.models'; +export * from './tree-item-action.models'; +export * from './tree.models'; +export * from './user-dashboard.models'; +export * from './workspace-action.models'; +export * from './workspace-view-collection.models'; +export * from './workspace-view.models'; +export * from './workspace.models'; export type ManifestTypes = + | ManifestCollectionBulkAction + | ManifestCollectionView | ManifestCustom + | ManifestDashboard + | ManifestDashboardCollection + | ManifestEntityAction + | ManifestEntrypoint + | ManifestExternalLoginProvider | ManifestHeaderApp + | ManifestHealthCheck + | ManifestPackageView + | ManifestPropertyAction + | ManifestPropertyEditorModel + | ManifestPropertyEditorUI + | ManifestRepository | ManifestSection | ManifestSectionView + | ManifestSidebarMenuItem + | ManifestTheme | ManifestTree + | ManifestTreeItemAction + | ManifestUserDashboard | ManifestWorkspace | ManifestWorkspaceAction | ManifestWorkspaceView - | ManifestWorkspaceViewCollection - | ManifestTreeItemAction - | ManifestPropertyEditorUI - | ManifestPropertyEditorModel - | ManifestDashboard - | ManifestDashboardCollection - | ManifestUserDashboard - | ManifestPropertyAction - | ManifestPackageView - | ManifestExternalLoginProvider - | ManifestEntrypoint - | ManifestCollectionBulkAction - | ManifestCollectionView - | ManifestHealthCheck - | ManifestSidebarMenuItem - | ManifestTheme - | ManifestEntityAction; + | ManifestWorkspaceViewCollection; export type ManifestStandardTypes = ManifestTypes['type']; @@ -88,6 +91,13 @@ export interface ManifestWithLoader extends ManifestBase { loader?: () => Promise; } +export interface ManifestClass extends ManifestWithLoader { + type: ManifestStandardTypes; + js?: string; + className?: string; + class?: ClassConstructor; + //loader?: () => Promise; +} export interface ManifestElement extends ManifestWithLoader { type: ManifestStandardTypes; js?: string; diff --git a/src/Umbraco.Web.UI.Client/libs/extensions-registry/repository.models.ts b/src/Umbraco.Web.UI.Client/libs/extensions-registry/repository.models.ts new file mode 100644 index 0000000000..7f4847dd74 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/libs/extensions-registry/repository.models.ts @@ -0,0 +1,5 @@ +import type { ManifestClass } from './models'; + +export interface ManifestRepository extends ManifestClass { + type: 'repository'; +} diff --git a/src/Umbraco.Web.UI.Client/libs/extensions-registry/tree.models.ts b/src/Umbraco.Web.UI.Client/libs/extensions-registry/tree.models.ts index 017bede8bd..b0f83e99f7 100644 --- a/src/Umbraco.Web.UI.Client/libs/extensions-registry/tree.models.ts +++ b/src/Umbraco.Web.UI.Client/libs/extensions-registry/tree.models.ts @@ -1,5 +1,5 @@ import type { ManifestBase } from './models'; -import type { UmbRepositoryFactory } from '@umbraco-cms/models'; +import type { ClassConstructor } from '@umbraco-cms/models'; export interface ManifestTree extends ManifestBase { type: 'tree'; @@ -8,5 +8,5 @@ export interface ManifestTree extends ManifestBase { export interface MetaTree { storeAlias?: string; - repository?: UmbRepositoryFactory; + repository?: ClassConstructor; } diff --git a/src/Umbraco.Web.UI.Client/libs/models/index.ts b/src/Umbraco.Web.UI.Client/libs/models/index.ts index 22756bffb9..fcf4400f8f 100644 --- a/src/Umbraco.Web.UI.Client/libs/models/index.ts +++ b/src/Umbraco.Web.UI.Client/libs/models/index.ts @@ -4,11 +4,8 @@ import { DocumentTypeTreeItem, EntityTreeItem, FolderTreeItem, - PagedEntityTreeItem, ProblemDetails, } from '@umbraco-cms/backend-api'; -import { UmbTreeRepository } from 'libs/repository/tree-repository.interface'; -import { Observable } from 'rxjs'; // Extension Manifests export * from '@umbraco-cms/extensions-registry'; @@ -16,6 +13,8 @@ export * from '@umbraco-cms/extensions-registry'; // eslint-disable-next-line @typescript-eslint/no-explicit-any export type HTMLElementConstructor = new (...args: any[]) => T; +export type ClassConstructor = new (...args: any[]) => T; + // Users // TODO: would the right name be Node? as entity is just something with a Key. But node is something in a content structure, aka. with hasChildren and parentKey. export interface Entity { @@ -158,8 +157,3 @@ export interface DataSourceResponse { data?: T; error?: ProblemDetails; } - -// TODO; figure out why we can't add UmbControllerHostInterface as host type -export interface UmbRepositoryFactory { - new (host: any): UmbTreeRepository; -}