implementations and corrections
This commit is contained in:
@@ -19,7 +19,7 @@ export abstract class UmbBaseExtensionController<
|
||||
#overwrites: Array<string> = [];
|
||||
#manifest?: ManifestType;
|
||||
#conditionControllers: Array<UmbExtensionCondition> = [];
|
||||
#onPermissionChanged: (isPermitted: boolean, controller: SubClassType) => void;
|
||||
#onPermissionChanged?: (isPermitted: boolean, controller: SubClassType) => void;
|
||||
protected _positive?: boolean;
|
||||
#isPermitted?: boolean;
|
||||
|
||||
@@ -52,7 +52,7 @@ export abstract class UmbBaseExtensionController<
|
||||
host: UmbControllerHost,
|
||||
extensionRegistry: UmbExtensionRegistry<ManifestCondition>,
|
||||
alias: string,
|
||||
onPermissionChanged: (isPermitted: boolean, controller: SubClassType) => void
|
||||
onPermissionChanged?: (isPermitted: boolean, controller: SubClassType) => void
|
||||
) {
|
||||
super(host, alias);
|
||||
this.#extensionRegistry = extensionRegistry;
|
||||
@@ -202,7 +202,7 @@ export abstract class UmbBaseExtensionController<
|
||||
this.#promiseResolvers.forEach((x) => x());
|
||||
this.#promiseResolvers = [];
|
||||
}
|
||||
this.#onPermissionChanged(this.#isPermitted, this as any);
|
||||
this.#onPermissionChanged?.(this.#isPermitted, this as any);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -219,7 +219,7 @@ export abstract class UmbBaseExtensionController<
|
||||
if (this.#isPermitted === true) {
|
||||
this.#isPermitted = undefined;
|
||||
this._conditionsAreBad();
|
||||
this.#onPermissionChanged(false, this as any);
|
||||
this.#onPermissionChanged?.(false, this as any);
|
||||
}
|
||||
super.destroy();
|
||||
// Destroy the conditions controllers, are begin destroyed cause they are controllers.
|
||||
|
||||
@@ -54,7 +54,7 @@ class UmbTestExtensionsController<
|
||||
extensionRegistry: UmbExtensionRegistry<ManifestWithDynamicConditions>,
|
||||
type: myTestManifestTypes,
|
||||
filter: null | ((manifest: ManifestWithDynamicConditions) => boolean),
|
||||
onChange: (permittedManifests: Array<MyPermittedControllerType>, controller: MyPermittedControllerType) => void
|
||||
onChange: (permittedManifests: Array<MyPermittedControllerType>) => void
|
||||
) {
|
||||
super(host, extensionRegistry, type, filter, onChange);
|
||||
this.#host = host;
|
||||
|
||||
@@ -24,7 +24,7 @@ export abstract class UmbBaseExtensionsController<
|
||||
#extensionRegistry: UmbExtensionRegistry<ManifestType>;
|
||||
#type: ManifestTypeName | Array<ManifestTypeName>;
|
||||
#filter: undefined | null | ((manifest: ManifestType) => boolean);
|
||||
#onChange: (permittedManifests: Array<MyPermittedControllerType>, controller: MyPermittedControllerType) => void;
|
||||
#onChange?: (permittedManifests: Array<MyPermittedControllerType>) => void;
|
||||
protected _extensions: Array<ControllerType> = [];
|
||||
private _permittedExts: Array<MyPermittedControllerType> = [];
|
||||
|
||||
@@ -33,7 +33,7 @@ export abstract class UmbBaseExtensionsController<
|
||||
extensionRegistry: UmbExtensionRegistry<ManifestType>,
|
||||
type: ManifestTypeName | Array<ManifestTypeName>,
|
||||
filter: undefined | null | ((manifest: ManifestType) => boolean),
|
||||
onChange: (permittedManifests: Array<MyPermittedControllerType>, controller: MyPermittedControllerType) => void
|
||||
onChange?: (permittedManifests: Array<MyPermittedControllerType>) => void
|
||||
) {
|
||||
super(host);
|
||||
this.#extensionRegistry = extensionRegistry;
|
||||
@@ -121,7 +121,7 @@ export abstract class UmbBaseExtensionsController<
|
||||
// Sorting:
|
||||
exposedPermittedExts.sort((a, b) => b.weight - a.weight);
|
||||
|
||||
this.#onChange(exposedPermittedExts, this as unknown as MyPermittedControllerType);
|
||||
this.#onChange?.(exposedPermittedExts);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -144,5 +144,6 @@ export abstract class UmbBaseExtensionsController<
|
||||
super.destroy();
|
||||
this._extensions.length = 0;
|
||||
this._permittedExts.length = 0;
|
||||
this.#onChange?.(this._permittedExts);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -67,7 +67,7 @@ export class UmbExtensionApiController<
|
||||
extensionRegistry: UmbExtensionRegistry<ManifestCondition>,
|
||||
alias: string,
|
||||
constructorArguments: Array<unknown> | undefined,
|
||||
onPermissionChanged: (isPermitted: boolean, controller: ControllerType) => void
|
||||
onPermissionChanged?: (isPermitted: boolean, controller: ControllerType) => void
|
||||
) {
|
||||
super(host, extensionRegistry, alias, onPermissionChanged);
|
||||
this.#constructorArguments = constructorArguments;
|
||||
|
||||
@@ -59,8 +59,8 @@ export class UmbExtensionsApiController<
|
||||
extensionRegistry: UmbExtensionRegistry<ManifestTypes>,
|
||||
type: ManifestTypeName | Array<ManifestTypeName>,
|
||||
constructorArguments: Array<unknown> | undefined,
|
||||
filter: undefined | null | ((manifest: ManifestTypeAsApi) => boolean),
|
||||
onChange: (permittedManifests: Array<MyPermittedControllerType>, controller: MyPermittedControllerType) => void
|
||||
filter?: undefined | null | ((manifest: ManifestTypeAsApi) => boolean),
|
||||
onChange?: (permittedManifests: Array<MyPermittedControllerType>) => void
|
||||
) {
|
||||
super(host, extensionRegistry, type, filter, onChange);
|
||||
this.#extensionRegistry = extensionRegistry;
|
||||
|
||||
@@ -43,7 +43,7 @@ export class UmbExtensionsElementController<
|
||||
extensionRegistry: UmbExtensionRegistry<ManifestTypes>,
|
||||
type: ManifestTypeName | Array<ManifestTypeName>,
|
||||
filter: undefined | null | ((manifest: ManifestType) => boolean),
|
||||
onChange: (permittedManifests: Array<MyPermittedControllerType>, controller: MyPermittedControllerType) => void,
|
||||
onChange: (permittedManifests: Array<MyPermittedControllerType>) => void,
|
||||
defaultElement?: string
|
||||
) {
|
||||
super(host, extensionRegistry, type, filter, onChange);
|
||||
|
||||
@@ -31,7 +31,7 @@ export class UmbExtensionsManifestController<
|
||||
extensionRegistry: UmbExtensionRegistry<ManifestTypes>,
|
||||
type: ManifestTypeName | Array<ManifestTypeName>,
|
||||
filter: null | ((manifest: ManifestType) => boolean),
|
||||
onChange: (permittedManifests: Array<MyPermittedControllerType>, controller: MyPermittedControllerType) => void
|
||||
onChange: (permittedManifests: Array<MyPermittedControllerType>) => void
|
||||
) {
|
||||
super(host, extensionRegistry, type, filter, onChange);
|
||||
this.#extensionRegistry = extensionRegistry;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { UmbBaseController, UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api';
|
||||
import { type ExtensionApi, createExtensionApi } from '@umbraco-cms/backoffice/extension-api';
|
||||
import { type ExtensionApi, UmbExtensionApiController } from '@umbraco-cms/backoffice/extension-api';
|
||||
import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry';
|
||||
|
||||
export class UmbActionBase<RepositoryType> extends UmbBaseController implements ExtensionApi {
|
||||
@@ -8,8 +8,10 @@ export class UmbActionBase<RepositoryType> extends UmbBaseController implements
|
||||
constructor(host: UmbControllerHostElement, repositoryAlias: string) {
|
||||
super(host);
|
||||
|
||||
// TODO: Could be replaced with ExtensionApiController?
|
||||
this.observe(
|
||||
new UmbExtensionApiController(this, umbExtensionsRegistry, repositoryAlias, [this._host], (permitted, ctrl) => {
|
||||
this.repository = permitted ? ctrl.api as RepositoryType : undefined;
|
||||
});
|
||||
/*this.observe(
|
||||
umbExtensionsRegistry.getByTypeAndAlias('repository', repositoryAlias),
|
||||
async (repositoryManifest) => {
|
||||
if (!repositoryManifest) return;
|
||||
@@ -21,6 +23,6 @@ export class UmbActionBase<RepositoryType> extends UmbBaseController implements
|
||||
throw new Error('Could not create repository with alias: ' + repositoryAlias + '');
|
||||
}
|
||||
}
|
||||
);
|
||||
);*/
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,5 +2,4 @@ export * from './conditions/index.js';
|
||||
export * from './extension-api-initializer.js';
|
||||
export * from './interfaces/index.js';
|
||||
export * from './models/index.js';
|
||||
export * from './multi-extensions-api-initializer.js';
|
||||
export * from './registry.js';
|
||||
|
||||
@@ -1,49 +0,0 @@
|
||||
import { createExtensionApi } from '@umbraco-cms/backoffice/extension-api';
|
||||
import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry';
|
||||
import { UmbBaseController, UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api';
|
||||
|
||||
/**
|
||||
* @deprecated
|
||||
* Initializes multiple extensions APIs for a host element.
|
||||
* Extension API will be given one argument, the host element.
|
||||
*
|
||||
* @param host The host element to initialize extension classes for.
|
||||
* @param extensionTypes The extension types(strings) to initialize.
|
||||
*
|
||||
*/
|
||||
// TODO: Get rid of this, use Extension API Controller instead.
|
||||
export class UmbMultiExtensionsApiInitializer extends UmbBaseController {
|
||||
#extensionMap = new Map();
|
||||
|
||||
constructor(host: UmbControllerHostElement, extensionTypes: Array<string>) {
|
||||
super(host);
|
||||
|
||||
this.observe(umbExtensionsRegistry.extensionsOfTypes(extensionTypes), (extensions) => {
|
||||
if (!extensions) return;
|
||||
|
||||
// Clean up removed extensions:
|
||||
this.#extensionMap.forEach((value, key) => {
|
||||
if (!extensions.find((incoming) => incoming.alias === key)) {
|
||||
this.#extensionMap.delete(key);
|
||||
value.destroy();
|
||||
}
|
||||
});
|
||||
|
||||
extensions.forEach((extension) => {
|
||||
if (this.#extensionMap.has(extension.alias)) return;
|
||||
|
||||
// Notice, currently no way to re-initialize an extension class if it changes. But that does not seem necessary currently. (Otherwise look at implementing the UmbExtensionClassInitializer)
|
||||
|
||||
// Instantiate and provide extension JS class. For Context API the classes provide them selfs when the class instantiates.
|
||||
this.#extensionMap.set(extension.alias, createExtensionApi(extension, [this._host]));
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
public destroy(): void {
|
||||
this.#extensionMap.forEach((extension) => {
|
||||
extension.destroy();
|
||||
});
|
||||
this.#extensionMap.clear();
|
||||
}
|
||||
}
|
||||
@@ -14,12 +14,8 @@ import { manifests as cultureManifests } from './culture/manifests.js';
|
||||
import { UmbNotificationContext, UMB_NOTIFICATION_CONTEXT_TOKEN } from '@umbraco-cms/backoffice/notification';
|
||||
import { UmbModalManagerContext, UMB_MODAL_MANAGER_CONTEXT_TOKEN } from '@umbraco-cms/backoffice/modal';
|
||||
import { UmbContextProviderController } from '@umbraco-cms/backoffice/context-api';
|
||||
import type { UmbEntryPointOnInit } from '@umbraco-cms/backoffice/extension-api';
|
||||
import {
|
||||
ManifestTypes,
|
||||
UmbBackofficeManifestKind,
|
||||
UmbMultiExtensionsApiInitializer,
|
||||
} from '@umbraco-cms/backoffice/extension-registry';
|
||||
import { UmbExtensionsApiController, type UmbEntryPointOnInit } from '@umbraco-cms/backoffice/extension-api';
|
||||
import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry';
|
||||
|
||||
export * from './localization/index.js';
|
||||
export * from './action/index.js';
|
||||
@@ -61,8 +57,10 @@ const manifests: Array<ManifestTypes | UmbBackofficeManifestKind> = [
|
||||
|
||||
export const onInit: UmbEntryPointOnInit = (host, extensionRegistry) => {
|
||||
|
||||
// TODO: replace this with a Extension Controller:
|
||||
new UmbMultiExtensionsApiInitializer(host, ['globalContext', 'store', 'treeStore', 'itemStore']);
|
||||
new UmbExtensionsApiController(host, extensionRegistry, 'globalContext', [host]);
|
||||
new UmbExtensionsApiController(host, extensionRegistry, 'store', [host]);
|
||||
new UmbExtensionsApiController(host, extensionRegistry, 'treeStore', [host]);
|
||||
new UmbExtensionsApiController(host, extensionRegistry, 'itemStore', [host]);
|
||||
|
||||
extensionRegistry.registerMany(manifests);
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ import { UmbPagedData, UmbTreeRepository } from '@umbraco-cms/backoffice/reposit
|
||||
import { ManifestTree, umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry';
|
||||
import { UmbBooleanState } from '@umbraco-cms/backoffice/observable-api';
|
||||
import { UmbBaseController, UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api';
|
||||
import { createExtensionApi } from '@umbraco-cms/backoffice/extension-api';
|
||||
import { UmbExtensionApiController } from '@umbraco-cms/backoffice/extension-api';
|
||||
import { ProblemDetails, TreeItemPresentationModel } from '@umbraco-cms/backoffice/backend-api';
|
||||
import { UmbSelectionManager } from '@umbraco-cms/backoffice/utils';
|
||||
import { UmbSelectionChangeEvent } from '@umbraco-cms/backoffice/event';
|
||||
@@ -153,6 +153,11 @@ export class UmbTreeContextBase<TreeItemType extends TreeItemPresentationModel>
|
||||
const repositoryAlias = treeManifest.meta.repositoryAlias;
|
||||
if (!repositoryAlias) throw new Error('Tree must have a repository alias.');
|
||||
|
||||
new UmbExtensionApiController(this, umbExtensionsRegistry, repositoryAlias, [this._host], (permitted, ctrl) => {
|
||||
this.repository = permitted ? ctrl.api as UmbTreeRepository<TreeItemType> : undefined;
|
||||
this.#checkIfInitialized();
|
||||
});
|
||||
/*
|
||||
this.observe(
|
||||
umbExtensionsRegistry.getByTypeAndAlias('repository', treeManifest.meta.repositoryAlias),
|
||||
async (repositoryManifest) => {
|
||||
@@ -168,5 +173,6 @@ export class UmbTreeContextBase<TreeItemType extends TreeItemPresentationModel>
|
||||
},
|
||||
'_observeRepository',
|
||||
);
|
||||
*/
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user