import extension registry singleton instead of consuming through context api
This commit is contained in:
@@ -12,9 +12,9 @@ import { css, html, LitElement } from 'lit';
|
||||
import { customElement, state } from 'lit/decorators.js';
|
||||
|
||||
import type { Guard, IRoute } from 'router-slot/model';
|
||||
import { umbExtensionsRegistry } from '@umbraco-cms/extensions-registry';
|
||||
import { internalManifests } from './temp-internal-manifests';
|
||||
import { getManifests, getServerStatus } from '@umbraco-cms/backend-api';
|
||||
import { UmbExtensionRegistry } from '@umbraco-cms/extensions-api';
|
||||
import { UmbContextProviderMixin } from '@umbraco-cms/context-api';
|
||||
|
||||
import type { ServerStatus } from '@umbraco-cms/models';
|
||||
@@ -56,7 +56,6 @@ export class UmbApp extends UmbContextProviderMixin(LitElement) {
|
||||
},
|
||||
];
|
||||
|
||||
private _extensionRegistry = new UmbExtensionRegistry();
|
||||
private _iconRegistry = new UUIIconRegistryEssential();
|
||||
private _serverStatus: ServerStatus = 'running';
|
||||
|
||||
@@ -67,8 +66,6 @@ export class UmbApp extends UmbContextProviderMixin(LitElement) {
|
||||
|
||||
private async _setup() {
|
||||
this._iconRegistry.attach(this);
|
||||
this.provideContext('umbExtensionRegistry', this._extensionRegistry);
|
||||
|
||||
await this._registerExtensionManifestsFromServer();
|
||||
await this._registerInternalManifests();
|
||||
await this._setInitStatus();
|
||||
@@ -129,12 +126,12 @@ export class UmbApp extends UmbContextProviderMixin(LitElement) {
|
||||
private async _registerExtensionManifestsFromServer() {
|
||||
const res = await getManifests({});
|
||||
const { manifests } = res.data;
|
||||
manifests.forEach((manifest) => this._extensionRegistry.register(manifest));
|
||||
manifests.forEach((manifest) => umbExtensionsRegistry.register(manifest));
|
||||
}
|
||||
|
||||
private async _registerInternalManifests() {
|
||||
// TODO: where do we get these from?
|
||||
internalManifests.forEach((manifest) => this._extensionRegistry.register(manifest));
|
||||
internalManifests.forEach((manifest) => umbExtensionsRegistry.register(manifest));
|
||||
}
|
||||
|
||||
render() {
|
||||
|
||||
@@ -49,7 +49,6 @@ export class UmbBackofficeElement extends UmbContextConsumerMixin(UmbContextProv
|
||||
|
||||
private _umbIconRegistry = new UmbIconStore();
|
||||
private _umbEntityStore = new UmbEntityStore();
|
||||
private _umbSectionStore?: UmbSectionStore;
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
@@ -66,12 +65,7 @@ export class UmbBackofficeElement extends UmbContextConsumerMixin(UmbContextProv
|
||||
this.provideContext('umbPropertyEditorConfigStore', new UmbPropertyEditorConfigStore());
|
||||
this.provideContext('umbNotificationService', new UmbNotificationService());
|
||||
this.provideContext('umbModalService', new UmbModalService());
|
||||
|
||||
// TODO: how do we want to handle context aware DI?
|
||||
this.consumeContext('umbExtensionRegistry', (extensionRegistry) => {
|
||||
this._umbSectionStore = new UmbSectionStore(extensionRegistry);
|
||||
this.provideContext('umbSectionStore', this._umbSectionStore);
|
||||
});
|
||||
this.provideContext('umbSectionStore', new UmbSectionStore());
|
||||
}
|
||||
|
||||
render() {
|
||||
|
||||
@@ -2,7 +2,8 @@ import { UUITextStyles } from '@umbraco-ui/uui-css/lib';
|
||||
import { css, html, LitElement, PropertyValueMap } from 'lit';
|
||||
import { customElement, property, state } from 'lit/decorators.js';
|
||||
import { UmbObserverMixin } from '@umbraco-cms/observable-api';
|
||||
import { createExtensionElement, UmbExtensionRegistry } from '@umbraco-cms/extensions-api';
|
||||
import { createExtensionElement } from '@umbraco-cms/extensions-api';
|
||||
import { umbExtensionsRegistry } from '@umbraco-cms/extensions-registry';
|
||||
import { UmbContextConsumerMixin } from '@umbraco-cms/context-api';
|
||||
import type { ManifestPropertyEditorUI, ManifestTypes } from '@umbraco-cms/models';
|
||||
|
||||
@@ -113,26 +114,14 @@ export class UmbEntityPropertyElement extends UmbContextConsumerMixin(UmbObserve
|
||||
@state()
|
||||
private _element?: { value?: any; config?: any } & HTMLElement; // TODO: invent interface for propertyEditorUI.
|
||||
|
||||
private _extensionRegistry?: UmbExtensionRegistry;
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
this.consumeContext('umbExtensionRegistry', (_instance: UmbExtensionRegistry) => {
|
||||
this._extensionRegistry = _instance;
|
||||
this._observePropertyEditorUI();
|
||||
});
|
||||
}
|
||||
|
||||
connectedCallback(): void {
|
||||
super.connectedCallback();
|
||||
this._observePropertyEditorUI();
|
||||
this.addEventListener('property-editor-change', this._onPropertyEditorChange as any as EventListener);
|
||||
}
|
||||
|
||||
private _observePropertyEditorUI() {
|
||||
if (!this._extensionRegistry) return;
|
||||
|
||||
this.observe<ManifestTypes>(this._extensionRegistry.getByAlias(this.propertyEditorUIAlias), (manifest) => {
|
||||
this.observe<ManifestTypes>(umbExtensionsRegistry.getByAlias(this.propertyEditorUIAlias), (manifest) => {
|
||||
if (manifest?.type === 'propertyEditorUI') {
|
||||
this._gotData(manifest);
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@ import { UmbDataTypeStore } from '../../../core/stores/data-type/data-type.store
|
||||
import { NodeProperty } from '../../../core/mocks/data/node.data';
|
||||
import { UmbObserverMixin } from '@umbraco-cms/observable-api';
|
||||
import type { ManifestTypes } from '@umbraco-cms/models';
|
||||
import { UmbExtensionRegistry } from '@umbraco-cms/extensions-api';
|
||||
import { umbExtensionsRegistry } from '@umbraco-cms/extensions-registry';
|
||||
import { UmbContextConsumerMixin } from '@umbraco-cms/context-api';
|
||||
|
||||
import '../entity-property/entity-property.element';
|
||||
@@ -43,28 +43,26 @@ export class UmbNodePropertyElement extends UmbContextConsumerMixin(UmbObserverM
|
||||
@state()
|
||||
private _dataTypeData?: any;
|
||||
|
||||
private _extensionRegistry?: UmbExtensionRegistry;
|
||||
private _dataTypeStore?: UmbDataTypeStore;
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
this.consumeAllContexts(['umbDataTypeStore', 'umbExtensionRegistry'], (instances) => {
|
||||
this._extensionRegistry = instances['umbExtensionRegistry'];
|
||||
this._dataTypeStore = instances['umbDataTypeStore'];
|
||||
this.consumeContext('umbDataTypeStore', (instance) => {
|
||||
this._dataTypeStore = instance;
|
||||
this._observeDataType();
|
||||
});
|
||||
}
|
||||
|
||||
private _observeDataType() {
|
||||
if (!this._dataTypeStore || !this._extensionRegistry || !this._property) return;
|
||||
if (!this._dataTypeStore || !this._property) return;
|
||||
|
||||
this.observe<ManifestTypes>(
|
||||
this._dataTypeStore.getByKey(this._property.dataTypeKey).pipe(
|
||||
switchMap((dataType) => {
|
||||
if (!dataType?.propertyEditorUIAlias) return EMPTY;
|
||||
this._dataTypeData = dataType.data;
|
||||
return this._extensionRegistry?.getByAlias(dataType.propertyEditorUIAlias) ?? of(null);
|
||||
return umbExtensionsRegistry.getByAlias(dataType.propertyEditorUIAlias) ?? of(null);
|
||||
})
|
||||
),
|
||||
(manifest) => {
|
||||
|
||||
@@ -6,9 +6,9 @@ import { UmbDataTypeContext } from '../../data-type.context';
|
||||
import type { DataTypeDetails } from '../../../../../core/mocks/data/data-type.data';
|
||||
import type { UmbPropertyEditorStore } from '../../../../../core/stores/property-editor/property-editor.store';
|
||||
import { UmbObserverMixin } from '@umbraco-cms/observable-api';
|
||||
import type { UmbExtensionRegistry } from '@umbraco-cms/extensions-api';
|
||||
import { UmbContextConsumerMixin } from '@umbraco-cms/context-api';
|
||||
import type { ManifestPropertyEditorUI } from '@umbraco-cms/models';
|
||||
import { umbExtensionsRegistry } from '@umbraco-cms/extensions-registry';
|
||||
|
||||
import '../../../../property-editor-uis/shared/property-editor-config/property-editor-config.element';
|
||||
|
||||
@@ -35,27 +35,22 @@ export class UmbEditorViewDataTypeEditElement extends UmbContextConsumerMixin(Um
|
||||
private _data: Array<any> = [];
|
||||
|
||||
private _dataTypeContext?: UmbDataTypeContext;
|
||||
private _extensionRegistry?: UmbExtensionRegistry;
|
||||
private _propertyEditorStore?: UmbPropertyEditorStore;
|
||||
private _modalService?: UmbModalService;
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
this.consumeAllContexts(
|
||||
['umbDataTypeContext', 'umbPropertyEditorStore', 'umbExtensionRegistry', 'umbModalService'],
|
||||
(result) => {
|
||||
this._dataTypeContext = result['umbDataTypeContext'];
|
||||
this._propertyEditorStore = result['umbPropertyEditorStore'];
|
||||
this._extensionRegistry = result['umbExtensionRegistry'];
|
||||
this._modalService = result['umbModalService'];
|
||||
this._observeDataType();
|
||||
}
|
||||
);
|
||||
this.consumeAllContexts(['umbDataTypeContext', 'umbPropertyEditorStore', 'umbModalService'], (result) => {
|
||||
this._dataTypeContext = result['umbDataTypeContext'];
|
||||
this._propertyEditorStore = result['umbPropertyEditorStore'];
|
||||
this._modalService = result['umbModalService'];
|
||||
this._observeDataType();
|
||||
});
|
||||
}
|
||||
|
||||
private _observeDataType() {
|
||||
if (!this._dataTypeContext || !this._propertyEditorStore || !this._extensionRegistry) return;
|
||||
if (!this._dataTypeContext || !this._propertyEditorStore) return;
|
||||
|
||||
this.observe<DataTypeDetails>(this._dataTypeContext.data, (dataType) => {
|
||||
this._dataType = dataType;
|
||||
@@ -77,10 +72,10 @@ export class UmbEditorViewDataTypeEditElement extends UmbContextConsumerMixin(Um
|
||||
}
|
||||
|
||||
private _observePropertyEditorUI(propertyEditorUIAlias: string | null) {
|
||||
if (!propertyEditorUIAlias || !this._extensionRegistry) return;
|
||||
if (!propertyEditorUIAlias) return;
|
||||
|
||||
this.observe<ManifestPropertyEditorUI>(
|
||||
this._extensionRegistry?.getByAlias<ManifestPropertyEditorUI>(propertyEditorUIAlias),
|
||||
umbExtensionsRegistry.getByAlias<ManifestPropertyEditorUI>(propertyEditorUIAlias),
|
||||
(propertyEditorUI) => {
|
||||
this._propertyEditorUIName = propertyEditorUI?.meta.label ?? propertyEditorUI?.name ?? '';
|
||||
this._propertyEditorUIAlias = propertyEditorUI?.alias ?? '';
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
import { html, LitElement } from 'lit';
|
||||
import { customElement, state } from 'lit/decorators.js';
|
||||
import { UmbObserverMixin } from '@umbraco-cms/observable-api';
|
||||
import { UmbExtensionRegistry, isManifestElementType } from '@umbraco-cms/extensions-api';
|
||||
import { isManifestElementType } from '@umbraco-cms/extensions-api';
|
||||
import { umbExtensionsRegistry } from '@umbraco-cms/extensions-registry';
|
||||
import { UmbContextConsumerMixin } from '@umbraco-cms/context-api';
|
||||
import type { ManifestTypes } from '@umbraco-cms/models';
|
||||
|
||||
@@ -12,22 +13,14 @@ export class UmbEditorExtensionsElement extends UmbContextConsumerMixin(UmbObser
|
||||
@state()
|
||||
private _extensions: Array<ManifestTypes> = [];
|
||||
|
||||
private _extensionRegistry?: UmbExtensionRegistry;
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
this.consumeContext('umbExtensionRegistry', (_instance: UmbExtensionRegistry) => {
|
||||
this._extensionRegistry = _instance;
|
||||
this._observeExtensions();
|
||||
});
|
||||
connectedCallback(): void {
|
||||
super.connectedCallback();
|
||||
this._observeExtensions();
|
||||
}
|
||||
|
||||
private _observeExtensions() {
|
||||
if (!this._extensionRegistry) return;
|
||||
|
||||
this.observe<Array<ManifestTypes>>(this._extensionRegistry.extensions, (extensions) => {
|
||||
this._extensions = [...extensions]; // TODO: Though, this is a shallow clone, wouldn't we either do a deep clone or no clone at all?
|
||||
this.observe<Array<ManifestTypes>>(umbExtensionsRegistry.extensions, (extensions) => {
|
||||
this._extensions = [...extensions];
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -5,7 +5,8 @@ import { IRoute, IRoutingInfo, PageComponent, RouterSlot } from 'router-slot';
|
||||
import { map } from 'rxjs';
|
||||
|
||||
import { UmbObserverMixin } from '@umbraco-cms/observable-api';
|
||||
import { createExtensionElement, UmbExtensionRegistry } from '@umbraco-cms/extensions-api';
|
||||
import { createExtensionElement } from '@umbraco-cms/extensions-api';
|
||||
import { umbExtensionsRegistry } from '@umbraco-cms/extensions-registry';
|
||||
import { UmbContextConsumerMixin } from '@umbraco-cms/context-api';
|
||||
import type { ManifestEditorAction, ManifestEditorView } from '@umbraco-cms/models';
|
||||
|
||||
@@ -97,30 +98,21 @@ export class UmbEditorEntityLayout extends UmbContextConsumerMixin(UmbObserverMi
|
||||
@state()
|
||||
private _routes: Array<IRoute> = [];
|
||||
|
||||
private _extensionRegistry?: UmbExtensionRegistry;
|
||||
private _routerFolder = '';
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
this.consumeContext('umbExtensionRegistry', (extensionRegistry: UmbExtensionRegistry) => {
|
||||
this._extensionRegistry = extensionRegistry;
|
||||
this._observeEditorViews();
|
||||
this._observeEditorActions();
|
||||
});
|
||||
}
|
||||
|
||||
connectedCallback(): void {
|
||||
super.connectedCallback();
|
||||
|
||||
this._observeEditorViews();
|
||||
this._observeEditorActions();
|
||||
|
||||
/* TODO: find a way to construct absolute urls */
|
||||
this._routerFolder = window.location.pathname.split('/view')[0];
|
||||
}
|
||||
|
||||
private _observeEditorViews() {
|
||||
if (!this._extensionRegistry) return;
|
||||
|
||||
this.observe<ManifestEditorView[]>(
|
||||
this._extensionRegistry
|
||||
umbExtensionsRegistry
|
||||
.extensionsOfType('editorView')
|
||||
.pipe(map((extensions) => extensions.filter((extension) => extension.meta.editors.includes(this.alias)))),
|
||||
(editorViews) => {
|
||||
@@ -131,10 +123,8 @@ export class UmbEditorEntityLayout extends UmbContextConsumerMixin(UmbObserverMi
|
||||
}
|
||||
|
||||
private _observeEditorActions() {
|
||||
if (!this._extensionRegistry) return;
|
||||
|
||||
this.observe(
|
||||
this._extensionRegistry
|
||||
umbExtensionsRegistry
|
||||
?.extensionsOfType('editorAction')
|
||||
.pipe(map((extensions) => extensions.filter((extension) => extension.meta.editors.includes(this.alias)))),
|
||||
(editorActions) => {
|
||||
|
||||
@@ -4,7 +4,8 @@ import { customElement, property, state } from 'lit/decorators.js';
|
||||
import { map } from 'rxjs';
|
||||
|
||||
import { UmbObserverMixin } from '@umbraco-cms/observable-api';
|
||||
import { createExtensionElement, UmbExtensionRegistry } from '@umbraco-cms/extensions-api';
|
||||
import { createExtensionElement } from '@umbraco-cms/extensions-api';
|
||||
import { umbExtensionsRegistry } from '@umbraco-cms/extensions-registry';
|
||||
import { UmbContextConsumerMixin } from '@umbraco-cms/context-api';
|
||||
import type { ManifestEditor } from '@umbraco-cms/models';
|
||||
|
||||
@@ -37,25 +38,22 @@ export class UmbEditorEntityElement extends UmbContextConsumerMixin(UmbObserverM
|
||||
@state()
|
||||
private _element?: any;
|
||||
|
||||
private _extensionRegistry?: UmbExtensionRegistry;
|
||||
private _currentEditorAlias = '';
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
this.consumeContext('umbExtensionRegistry', (extensionRegistry: UmbExtensionRegistry) => {
|
||||
this._extensionRegistry = extensionRegistry;
|
||||
this._observeEditors();
|
||||
});
|
||||
connectedCallback(): void {
|
||||
super.connectedCallback();
|
||||
this._observeEditors();
|
||||
}
|
||||
|
||||
private _observeEditors() {
|
||||
if (!this._extensionRegistry) return;
|
||||
|
||||
this.observe<ManifestEditor>(
|
||||
this._extensionRegistry
|
||||
umbExtensionsRegistry
|
||||
.extensionsOfType('editor')
|
||||
.pipe(map((editors) => editors.find((editor) => editor.meta.entityType === this.entityType))),
|
||||
(editor) => {
|
||||
// don't rerender editor if it's the same
|
||||
if (this._currentEditorAlias === editor.alias) return;
|
||||
this._currentEditorAlias = editor.alias;
|
||||
this._createElement(editor);
|
||||
}
|
||||
);
|
||||
|
||||
@@ -4,10 +4,9 @@ import { map } from 'rxjs';
|
||||
import { UUITextStyles } from '@umbraco-ui/uui';
|
||||
import { UmbPropertyActionMenuContext } from './property-action-menu.context';
|
||||
import { UmbObserverMixin } from '@umbraco-cms/observable-api';
|
||||
import { UmbExtensionRegistry } from '@umbraco-cms/extensions-api';
|
||||
|
||||
import { UmbContextProviderMixin, UmbContextConsumerMixin } from '@umbraco-cms/context-api';
|
||||
import type { ManifestPropertyAction } from '@umbraco-cms/models';
|
||||
import { umbExtensionsRegistry } from '@umbraco-cms/extensions-registry';
|
||||
|
||||
import '../property-action/property-action.element';
|
||||
|
||||
@@ -57,33 +56,20 @@ export class UmbPropertyActionMenuElement extends UmbContextProviderMixin(
|
||||
@state()
|
||||
private _open = false;
|
||||
|
||||
private _extensionRegistry?: UmbExtensionRegistry;
|
||||
private _propertyActionMenuContext = new UmbPropertyActionMenuContext();
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
this.consumeContext('umbExtensionRegistry', (extensionRegistry: UmbExtensionRegistry) => {
|
||||
this._extensionRegistry = extensionRegistry;
|
||||
this._observePropertyActions();
|
||||
});
|
||||
|
||||
this.provideContext('umbPropertyActionMenu', this._propertyActionMenuContext);
|
||||
}
|
||||
|
||||
connectedCallback(): void {
|
||||
super.connectedCallback();
|
||||
|
||||
this.observe<boolean>(this._propertyActionMenuContext.isOpen, (value) => {
|
||||
this._open = value;
|
||||
});
|
||||
this._observePropertyActions();
|
||||
this._observePropertyActionMenuOpenState();
|
||||
|
||||
this.provideContext('umbPropertyActionMenu', this._propertyActionMenuContext);
|
||||
}
|
||||
|
||||
private _observePropertyActions() {
|
||||
if (!this._extensionRegistry) return;
|
||||
|
||||
this.observe<ManifestPropertyAction[]>(
|
||||
this._extensionRegistry
|
||||
umbExtensionsRegistry
|
||||
.extensionsOfType('propertyAction')
|
||||
.pipe(
|
||||
map((propertyActions) =>
|
||||
@@ -98,8 +84,13 @@ export class UmbPropertyActionMenuElement extends UmbContextProviderMixin(
|
||||
);
|
||||
}
|
||||
|
||||
private _observePropertyActionMenuOpenState() {
|
||||
this.observe<boolean>(this._propertyActionMenuContext.isOpen, (value) => {
|
||||
this._open = value;
|
||||
});
|
||||
}
|
||||
|
||||
private _toggleMenu() {
|
||||
//this._open = !this._open;
|
||||
this._open ? this._propertyActionMenuContext.close() : this._propertyActionMenuContext.open();
|
||||
}
|
||||
|
||||
|
||||
@@ -7,9 +7,9 @@ import {
|
||||
UmbPropertyEditorConfigStore,
|
||||
} from '../../../../core/stores/property-editor-config/property-editor-config.store';
|
||||
import { UmbObserverMixin } from '@umbraco-cms/observable-api';
|
||||
import { UmbExtensionRegistry } from '@umbraco-cms/extensions-api';
|
||||
import { UmbContextConsumerMixin } from '@umbraco-cms/context-api';
|
||||
import type { ManifestTypes, PropertyEditorConfigDefaultData, PropertyEditorConfigProperty } from '@umbraco-cms/models';
|
||||
import { umbExtensionsRegistry } from '@umbraco-cms/extensions-registry';
|
||||
|
||||
import '../../../components/entity-property/entity-property.element';
|
||||
|
||||
@@ -79,7 +79,6 @@ export class UmbPropertyEditorConfigElement extends UmbContextConsumerMixin(UmbO
|
||||
private _propertyEditorUIConfigProperties: Array<PropertyEditorConfigProperty> = [];
|
||||
|
||||
private _propertyEditorConfigStore?: UmbPropertyEditorConfigStore;
|
||||
private _extensionRegistry?: UmbExtensionRegistry;
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
@@ -88,11 +87,11 @@ export class UmbPropertyEditorConfigElement extends UmbContextConsumerMixin(UmbO
|
||||
this._propertyEditorConfigStore = propertyEditorConfigStore;
|
||||
this._observePropertyEditorConfig();
|
||||
});
|
||||
}
|
||||
|
||||
this.consumeContext('umbExtensionRegistry', (extensionRegistry) => {
|
||||
this._extensionRegistry = extensionRegistry;
|
||||
this._observePropertyEditorUIConfig();
|
||||
});
|
||||
connectedCallback(): void {
|
||||
super.connectedCallback();
|
||||
this._observePropertyEditorUIConfig();
|
||||
}
|
||||
|
||||
private _observePropertyEditorConfig() {
|
||||
@@ -111,9 +110,9 @@ export class UmbPropertyEditorConfigElement extends UmbContextConsumerMixin(UmbO
|
||||
}
|
||||
|
||||
private _observePropertyEditorUIConfig() {
|
||||
if (!this._extensionRegistry || !this._propertyEditorUIAlias) return;
|
||||
if (!this._propertyEditorUIAlias) return;
|
||||
|
||||
this.observe<ManifestTypes>(this._extensionRegistry.getByAlias(this.propertyEditorUIAlias), (manifest) => {
|
||||
this.observe<ManifestTypes>(umbExtensionsRegistry.getByAlias(this.propertyEditorUIAlias), (manifest) => {
|
||||
if (manifest?.type === 'propertyEditorUI') {
|
||||
this._propertyEditorUIConfigProperties = manifest?.meta.config?.properties || [];
|
||||
this._mergeProperties();
|
||||
|
||||
@@ -7,6 +7,7 @@ import { createExtensionElement, UmbExtensionRegistry } from '@umbraco-cms/exten
|
||||
|
||||
import { UmbContextConsumerMixin } from '@umbraco-cms/context-api';
|
||||
import type { ManifestPackageView, PackageInstalled } from '@umbraco-cms/models';
|
||||
import { umbExtensionsRegistry } from '@umbraco-cms/extensions-registry';
|
||||
|
||||
@customElement('umb-packages-installed-item')
|
||||
export class UmbPackagesInstalledItem extends UmbContextConsumerMixin(LitElement) {
|
||||
@@ -22,19 +23,18 @@ export class UmbPackagesInstalledItem extends UmbContextConsumerMixin(LitElement
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
this.consumeContext('umbExtensionRegistry', (umbExtensionRegistry: UmbExtensionRegistry) => {
|
||||
this._umbExtensionRegistry = umbExtensionRegistry;
|
||||
|
||||
this.findPackageView(this.package.alias);
|
||||
});
|
||||
|
||||
this.consumeContext('umbModalService', (modalService: UmbModalService) => {
|
||||
this._umbModalService = modalService;
|
||||
});
|
||||
}
|
||||
|
||||
connectedCallback(): void {
|
||||
super.connectedCallback();
|
||||
this.findPackageView(this.package.alias);
|
||||
}
|
||||
|
||||
private async findPackageView(alias: string) {
|
||||
const observable = this._umbExtensionRegistry
|
||||
const observable = umbExtensionsRegistry
|
||||
?.extensionsOfType('packageView')
|
||||
.pipe(map((e) => e.filter((m) => m.meta.packageAlias === alias)));
|
||||
|
||||
|
||||
@@ -3,13 +3,12 @@ import { css, html, LitElement, nothing } from 'lit';
|
||||
import { customElement, state } from 'lit/decorators.js';
|
||||
import { IRoutingInfo } from 'router-slot';
|
||||
import { first, map } from 'rxjs';
|
||||
|
||||
import { UmbSectionContext } from '../../section.context';
|
||||
import { UmbObserverMixin } from '@umbraco-cms/observable-api';
|
||||
import { createExtensionElement, UmbExtensionRegistry } from '@umbraco-cms/extensions-api';
|
||||
import { createExtensionElement } from '@umbraco-cms/extensions-api';
|
||||
import { UmbContextConsumerMixin } from '@umbraco-cms/context-api';
|
||||
|
||||
import type { ManifestDashboard, ManifestSection } from '@umbraco-cms/models';
|
||||
import { umbExtensionsRegistry } from '@umbraco-cms/extensions-registry';
|
||||
|
||||
@customElement('umb-section-dashboards')
|
||||
export class UmbSectionDashboardsElement extends UmbContextConsumerMixin(UmbObserverMixin(LitElement)) {
|
||||
@@ -55,18 +54,11 @@ export class UmbSectionDashboardsElement extends UmbContextConsumerMixin(UmbObse
|
||||
private _currentSectionPathname = '';
|
||||
|
||||
private _currentSectionAlias = '';
|
||||
|
||||
private _extensionRegistry?: UmbExtensionRegistry;
|
||||
private _sectionContext?: UmbSectionContext;
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
// TODO: wait for more contexts
|
||||
this.consumeContext('umbExtensionRegistry', (_instance: UmbExtensionRegistry) => {
|
||||
this._extensionRegistry = _instance;
|
||||
});
|
||||
|
||||
this.consumeContext('umbSectionContext', (context: UmbSectionContext) => {
|
||||
this._sectionContext = context;
|
||||
this._observeSectionContext();
|
||||
@@ -84,10 +76,10 @@ export class UmbSectionDashboardsElement extends UmbContextConsumerMixin(UmbObse
|
||||
}
|
||||
|
||||
private _observeDashboards() {
|
||||
if (!this._extensionRegistry || !this._currentSectionAlias) return;
|
||||
if (!this._currentSectionAlias) return;
|
||||
|
||||
this.observe<ManifestDashboard[]>(
|
||||
this._extensionRegistry
|
||||
umbExtensionsRegistry
|
||||
?.extensionsOfType('dashboard')
|
||||
.pipe(
|
||||
map((extensions) =>
|
||||
|
||||
@@ -5,8 +5,8 @@ import { map, switchMap, EMPTY, of } from 'rxjs';
|
||||
|
||||
import { UmbSectionContext } from '../../section.context';
|
||||
import { UmbObserverMixin } from '@umbraco-cms/observable-api';
|
||||
import { UmbExtensionRegistry } from '@umbraco-cms/extensions-api';
|
||||
import { UmbContextConsumerMixin } from '@umbraco-cms/context-api';
|
||||
import { umbExtensionsRegistry } from '@umbraco-cms/extensions-registry';
|
||||
|
||||
import '../../../trees/shared/tree-extension.element';
|
||||
|
||||
@@ -17,21 +17,19 @@ export class UmbSectionTreesElement extends UmbContextConsumerMixin(UmbObserverM
|
||||
@state()
|
||||
private _treeAliases: Array<string> = [];
|
||||
|
||||
private _extensionStore?: UmbExtensionRegistry;
|
||||
private _sectionContext?: UmbSectionContext;
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
this.consumeAllContexts(['umbExtensionRegistry', 'umbSectionContext'], (instances) => {
|
||||
this._extensionStore = instances['umbExtensionRegistry'];
|
||||
this._sectionContext = instances['umbSectionContext'];
|
||||
this.consumeContext('umbSectionContext', (instance) => {
|
||||
this._sectionContext = instance;
|
||||
this._observeTrees();
|
||||
});
|
||||
}
|
||||
|
||||
private _observeTrees() {
|
||||
if (!this._extensionStore || !this._sectionContext) return;
|
||||
if (!this._sectionContext) return;
|
||||
|
||||
this.observe<string[]>(
|
||||
this._sectionContext?.data.pipe(
|
||||
@@ -39,7 +37,7 @@ export class UmbSectionTreesElement extends UmbContextConsumerMixin(UmbObserverM
|
||||
if (!section) return EMPTY;
|
||||
|
||||
return (
|
||||
this._extensionStore
|
||||
umbExtensionsRegistry
|
||||
?.extensionsOfType('tree')
|
||||
.pipe(
|
||||
map((trees) =>
|
||||
|
||||
@@ -3,9 +3,9 @@ import { css, html, LitElement, nothing } from 'lit';
|
||||
import { customElement, state } from 'lit/decorators.js';
|
||||
import { EMPTY, map, of, Subscription, switchMap } from 'rxjs';
|
||||
import { UmbSectionContext } from '../../section.context';
|
||||
import { UmbExtensionRegistry } from '@umbraco-cms/extensions-api';
|
||||
import { UmbContextConsumerMixin } from '@umbraco-cms/context-api';
|
||||
import type { ManifestSectionView } from '@umbraco-cms/models';
|
||||
import { umbExtensionsRegistry } from '@umbraco-cms/extensions-registry';
|
||||
|
||||
@customElement('umb-section-views')
|
||||
export class UmbSectionViewsElement extends UmbContextConsumerMixin(LitElement) {
|
||||
@@ -37,7 +37,6 @@ export class UmbSectionViewsElement extends UmbContextConsumerMixin(LitElement)
|
||||
@state()
|
||||
private _activeView?: ManifestSectionView;
|
||||
|
||||
private _extensionRegistry?: UmbExtensionRegistry;
|
||||
private _sectionContext?: UmbSectionContext;
|
||||
private _viewsSubscription?: Subscription;
|
||||
private _activeViewSubscription?: Subscription;
|
||||
@@ -45,12 +44,6 @@ export class UmbSectionViewsElement extends UmbContextConsumerMixin(LitElement)
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
// TODO: wait for more contexts
|
||||
this.consumeContext('umbExtensionRegistry', (extensionsRegistry: UmbExtensionRegistry) => {
|
||||
this._extensionRegistry = extensionsRegistry;
|
||||
this._observeViews();
|
||||
});
|
||||
|
||||
this.consumeContext('umbSectionContext', (sectionContext: UmbSectionContext) => {
|
||||
this._sectionContext = sectionContext;
|
||||
this._observeViews();
|
||||
@@ -65,7 +58,7 @@ export class UmbSectionViewsElement extends UmbContextConsumerMixin(LitElement)
|
||||
}
|
||||
|
||||
private _observeViews() {
|
||||
if (!this._sectionContext || !this._extensionRegistry) return;
|
||||
if (!this._sectionContext) return;
|
||||
|
||||
this._viewsSubscription?.unsubscribe();
|
||||
|
||||
@@ -75,7 +68,7 @@ export class UmbSectionViewsElement extends UmbContextConsumerMixin(LitElement)
|
||||
if (!section) return EMPTY;
|
||||
|
||||
return (
|
||||
this._extensionRegistry
|
||||
umbExtensionsRegistry
|
||||
?.extensionsOfType('sectionView')
|
||||
.pipe(
|
||||
map((views) =>
|
||||
|
||||
@@ -6,12 +6,13 @@ import { UmbSectionContext } from '../section.context';
|
||||
import { UmbEditorEntityElement } from '../../editors/shared/editor-entity/editor-entity.element';
|
||||
import { UmbEntityStore } from '../../../core/stores/entity.store';
|
||||
import { UmbObserverMixin } from '@umbraco-cms/observable-api';
|
||||
import { createExtensionElement, UmbExtensionRegistry } from '@umbraco-cms/extensions-api';
|
||||
import { createExtensionElement } from '@umbraco-cms/extensions-api';
|
||||
import { UmbContextConsumerMixin } from '@umbraco-cms/context-api';
|
||||
import type { ManifestTree, ManifestSectionView } from '@umbraco-cms/models';
|
||||
|
||||
import './section-trees/section-trees.element.ts';
|
||||
import '../shared/section-views/section-views.element.ts';
|
||||
import { umbExtensionsRegistry } from '@umbraco-cms/extensions-registry';
|
||||
|
||||
@customElement('umb-section')
|
||||
export class UmbSectionElement extends UmbContextConsumerMixin(UmbObserverMixin(LitElement)) {
|
||||
@@ -55,13 +56,11 @@ export class UmbSectionElement extends UmbContextConsumerMixin(UmbObserverMixin(
|
||||
|
||||
private _entityStore?: UmbEntityStore;
|
||||
private _sectionContext?: UmbSectionContext;
|
||||
private _extensionRegistry?: UmbExtensionRegistry;
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
this.consumeAllContexts(['umbExtensionRegistry', 'umbSectionContext', 'umbEntityStore'], (instances) => {
|
||||
this._extensionRegistry = instances['umbExtensionRegistry'];
|
||||
this.consumeAllContexts(['umbSectionContext', 'umbEntityStore'], (instances) => {
|
||||
this._sectionContext = instances['umbSectionContext'];
|
||||
this._entityStore = instances['umbEntityStore'];
|
||||
|
||||
@@ -71,7 +70,7 @@ export class UmbSectionElement extends UmbContextConsumerMixin(UmbObserverMixin(
|
||||
}
|
||||
|
||||
private _observeTrees() {
|
||||
if (!this._sectionContext || !this._extensionRegistry || !this._entityStore) return;
|
||||
if (!this._sectionContext || !this._entityStore) return;
|
||||
|
||||
this.observe<ManifestTree[]>(
|
||||
this._sectionContext?.data.pipe(
|
||||
@@ -79,7 +78,7 @@ export class UmbSectionElement extends UmbContextConsumerMixin(UmbObserverMixin(
|
||||
if (!section) return EMPTY;
|
||||
|
||||
return (
|
||||
this._extensionRegistry
|
||||
umbExtensionsRegistry
|
||||
?.extensionsOfType('tree')
|
||||
.pipe(map((trees) => trees.filter((tree) => tree.meta.sections.includes(section.alias)))) ?? of([])
|
||||
);
|
||||
@@ -120,7 +119,7 @@ export class UmbSectionElement extends UmbContextConsumerMixin(UmbObserverMixin(
|
||||
}
|
||||
|
||||
private _observeViews() {
|
||||
if (!this._sectionContext || !this._extensionRegistry || !this._entityStore) return;
|
||||
if (!this._sectionContext || !this._entityStore) return;
|
||||
|
||||
this.observe<ManifestSectionView[]>(
|
||||
this._sectionContext.data.pipe(
|
||||
@@ -128,7 +127,7 @@ export class UmbSectionElement extends UmbContextConsumerMixin(UmbObserverMixin(
|
||||
if (!section) return EMPTY;
|
||||
|
||||
return (
|
||||
this._extensionRegistry
|
||||
umbExtensionsRegistry
|
||||
?.extensionsOfType('sectionView')
|
||||
.pipe(
|
||||
map((views) =>
|
||||
|
||||
@@ -5,9 +5,9 @@ import { map } from 'rxjs';
|
||||
import { UmbSectionContext } from '../../../sections/section.context';
|
||||
import { Entity } from '../../../../core/mocks/data/entities';
|
||||
import { UmbObserverMixin } from '@umbraco-cms/observable-api';
|
||||
import { UmbExtensionRegistry } from '@umbraco-cms/extensions-api';
|
||||
import { UmbContextConsumerMixin } from '@umbraco-cms/context-api';
|
||||
import type { ManifestTreeItemAction, ManifestTree } from '@umbraco-cms/models';
|
||||
import { umbExtensionsRegistry } from '@umbraco-cms/extensions-registry';
|
||||
|
||||
@customElement('umb-tree-context-menu-page-action-list')
|
||||
export class UmbTreeContextMenuPageActionListElement extends UmbContextConsumerMixin(UmbObserverMixin(LitElement)) {
|
||||
@@ -38,16 +38,10 @@ export class UmbTreeContextMenuPageActionListElement extends UmbContextConsumerM
|
||||
@state()
|
||||
private _activeTreeItem?: Entity;
|
||||
|
||||
private _extensionRegistry?: UmbExtensionRegistry;
|
||||
private _sectionContext?: UmbSectionContext;
|
||||
|
||||
connectedCallback() {
|
||||
super.connectedCallback();
|
||||
|
||||
this.consumeContext('umbExtensionRegistry', (extensionRegistry) => {
|
||||
this._extensionRegistry = extensionRegistry;
|
||||
this._observeTreeItemActions();
|
||||
});
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
this.consumeContext('umbSectionContext', (sectionContext) => {
|
||||
this._sectionContext = sectionContext;
|
||||
@@ -58,10 +52,10 @@ export class UmbTreeContextMenuPageActionListElement extends UmbContextConsumerM
|
||||
}
|
||||
|
||||
private _observeTreeItemActions() {
|
||||
if (!this._extensionRegistry || !this._sectionContext) return;
|
||||
if (!this._sectionContext) return;
|
||||
|
||||
this.observe<ManifestTreeItemAction[]>(
|
||||
this._extensionRegistry
|
||||
umbExtensionsRegistry
|
||||
.extensionsOfType('treeItemAction')
|
||||
.pipe(map((actions) => actions.filter((action) => action.meta.trees.includes(this._activeTree?.alias || '')))),
|
||||
(actions) => {
|
||||
|
||||
@@ -4,9 +4,9 @@ import { customElement, property, state } from 'lit/decorators.js';
|
||||
import { map } from 'rxjs';
|
||||
import { UmbTreeContextBase } from '../tree.context';
|
||||
import { UmbObserverMixin } from '@umbraco-cms/observable-api';
|
||||
import { UmbExtensionRegistry } from '@umbraco-cms/extensions-api';
|
||||
import { UmbContextConsumerMixin, UmbContextProviderMixin } from '@umbraco-cms/context-api';
|
||||
import type { ManifestTree } from '@umbraco-cms/models';
|
||||
import { umbExtensionsRegistry } from '@umbraco-cms/extensions-registry';
|
||||
|
||||
@customElement('umb-tree')
|
||||
export class UmbTreeElement extends UmbContextProviderMixin(UmbContextConsumerMixin(UmbObserverMixin(LitElement))) {
|
||||
@@ -50,21 +50,17 @@ export class UmbTreeElement extends UmbContextProviderMixin(UmbContextConsumerMi
|
||||
private _tree?: ManifestTree;
|
||||
|
||||
private _treeContext?: UmbTreeContextBase;
|
||||
private _extensionRegistry?: UmbExtensionRegistry;
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
this.consumeContext('umbExtensionRegistry', (extensionRegistry) => {
|
||||
this._extensionRegistry = extensionRegistry;
|
||||
this._observeTree();
|
||||
});
|
||||
connectedCallback(): void {
|
||||
super.connectedCallback();
|
||||
this._observeTree();
|
||||
}
|
||||
|
||||
private _observeTree() {
|
||||
if (!this._extensionRegistry || !this.alias) return;
|
||||
if (!this.alias) return;
|
||||
|
||||
this.observe<ManifestTree>(
|
||||
this._extensionRegistry
|
||||
umbExtensionsRegistry
|
||||
.extensionsOfType('tree')
|
||||
.pipe(map((trees) => trees.find((tree) => tree.alias === this.alias))),
|
||||
(tree) => {
|
||||
|
||||
@@ -7,9 +7,8 @@ import type { UUIInputEvent } from '@umbraco-ui/uui';
|
||||
import type { UmbModalHandler } from '../../modal-handler';
|
||||
import { UmbObserverMixin } from '@umbraco-cms/observable-api';
|
||||
import { UmbContextConsumerMixin } from '@umbraco-cms/context-api';
|
||||
|
||||
import type { UmbExtensionRegistry } from '@umbraco-cms/extensions-api';
|
||||
import type { ManifestPropertyEditorUI } from '@umbraco-cms/models';
|
||||
import { umbExtensionsRegistry } from '@umbraco-cms/extensions-registry';
|
||||
|
||||
export interface UmbModalPropertyEditorUIPickerData {
|
||||
selection?: Array<string>;
|
||||
@@ -104,29 +103,20 @@ export class UmbModalLayoutPropertyEditorUIPickerElement extends UmbContextConsu
|
||||
@state()
|
||||
private _submitLabel = 'Select';
|
||||
|
||||
private _extensionRegistry?: UmbExtensionRegistry;
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
this.consumeContext('umbExtensionRegistry', (registry) => {
|
||||
this._extensionRegistry = registry;
|
||||
this._usePropertyEditorUIs();
|
||||
});
|
||||
}
|
||||
|
||||
connectedCallback(): void {
|
||||
super.connectedCallback();
|
||||
|
||||
this._selection = this.data?.selection ?? [];
|
||||
this._submitLabel = this.data?.submitLabel ?? this._submitLabel;
|
||||
|
||||
this._usePropertyEditorUIs();
|
||||
}
|
||||
|
||||
private _usePropertyEditorUIs() {
|
||||
if (!this.data || !this._extensionRegistry) return;
|
||||
if (!this.data) return;
|
||||
|
||||
this.observe<ManifestPropertyEditorUI[]>(
|
||||
this._extensionRegistry.extensionsOfType('propertyEditorUI'),
|
||||
umbExtensionsRegistry.extensionsOfType('propertyEditorUI'),
|
||||
(propertyEditorUIs) => {
|
||||
this._propertyEditorUIs = propertyEditorUIs;
|
||||
this._groupedPropertyEditorUIs = groupBy(propertyEditorUIs, 'meta.group');
|
||||
|
||||
@@ -1,18 +1,11 @@
|
||||
import { Observable, ReplaySubject } from 'rxjs';
|
||||
import { UmbExtensionRegistry } from '@umbraco-cms/extensions-api';
|
||||
import { umbExtensionsRegistry } from '@umbraco-cms/extensions-registry';
|
||||
|
||||
// TODO: maybe this should be named something else than store?
|
||||
export class UmbSectionStore {
|
||||
private _extensionRegistry: UmbExtensionRegistry;
|
||||
|
||||
private _currentAlias: ReplaySubject<string> = new ReplaySubject(1);
|
||||
public readonly currentAlias: Observable<string> = this._currentAlias.asObservable();
|
||||
|
||||
// TODO: how do we want to handle DI in contexts?
|
||||
constructor(extensionRegistry: UmbExtensionRegistry) {
|
||||
this._extensionRegistry = extensionRegistry;
|
||||
}
|
||||
|
||||
public getAllowed() {
|
||||
// TODO: implemented allowed filtering
|
||||
/*
|
||||
@@ -20,7 +13,7 @@ export class UmbSectionStore {
|
||||
this._allowedSection = data.sections;
|
||||
*/
|
||||
|
||||
return this._extensionRegistry?.extensionsOfType('section');
|
||||
return umbExtensionsRegistry.extensionsOfType('section');
|
||||
}
|
||||
|
||||
public setCurrent(alias: string) {
|
||||
|
||||
Reference in New Issue
Block a user