Files
Umbraco-CMS/src/Umbraco.Web.UI.Client/src/backoffice/backoffice.element.ts
2022-12-12 14:24:16 +01:00

110 lines
4.8 KiB
TypeScript

//TODO: we need to figure out what components should be available for extensions and load them upfront
import './components/backoffice-header.element';
import './components/backoffice-main.element';
import './components/backoffice-modal-container.element';
import './components/backoffice-notification-container.element';
import './components/node-property/node-property.element';
import './components/table/table.element';
import './components/shared/code-block.element';
import './sections/shared/section-main/section-main.element';
import './sections/shared/section-sidebar/section-sidebar.element';
import './sections/shared/section.element';
import './trees/shared/tree-base.element';
import './trees/shared/tree.element';
import { defineElement } from '@umbraco-ui/uui-base/lib/registration';
import { UUITextStyles } from '@umbraco-ui/uui-css/lib';
import { css, html, LitElement } from 'lit';
import { UmbModalService } from '../core/services/modal';
import { UmbNotificationService } from '../core/services/notification';
import { UmbDataTypeStore } from '../core/stores/data-type/data-type.store';
import { UmbDocumentTypeStore } from '../core/stores/document-type/document-type.store';
import { UmbMediaTypeStore } from '../core/stores/media-type/media-type.store';
import { UmbMemberTypeStore } from '../core/stores/member-type/member-type.store';
import { UmbDocumentStore } from '../core/stores/document/document.store';
import { UmbMediaStore } from '../core/stores/media/media.store';
import { UmbMemberGroupStore } from '../core/stores/member-group/member-group.store';
import { UmbSectionStore } from '../core/stores/section.store';
import { UmbUserStore } from '../core/stores/user/user.store';
import { UmbIconStore } from '../core/stores/icon/icon.store';
import { UmbUserGroupStore } from '../core/stores/user/user-group.store';
import { manifests as sectionManifests } from './sections/manifests';
import { manifests as propertyEditorModelManifests } from './property-editor-models/manifests';
import { manifests as propertyEditorUIManifests } from './property-editor-uis/manifests';
import { manifests as treeManifests } from './trees/manifests';
import { manifests as editorManifests } from './editors/manifests';
import { manifests as propertyActionManifests } from './property-actions/manifests';
import { UmbContextConsumerMixin, UmbContextProviderMixin } from '@umbraco-cms/context-api';
import { umbExtensionsRegistry } from '@umbraco-cms/extensions-registry';
import type { ManifestTypes, ManifestWithLoader } from '@umbraco-cms/models';
@defineElement('umb-backoffice')
export class UmbBackofficeElement extends UmbContextConsumerMixin(UmbContextProviderMixin(LitElement)) {
static styles = [
UUITextStyles,
css`
:host {
display: flex;
flex-direction: column;
height: 100%;
width: 100%;
color: var(--uui-color-text);
font-size: 14px;
box-sizing: border-box;
}
`,
];
private _umbIconRegistry = new UmbIconStore();
constructor() {
super();
this._registerExtensions(sectionManifests);
this._registerExtensions(treeManifests);
this._registerExtensions(editorManifests);
this._registerExtensions(propertyEditorModelManifests);
this._registerExtensions(propertyEditorUIManifests);
this._registerExtensions(propertyActionManifests);
this._umbIconRegistry.attach(this);
this.provideContext('umbDocumentStore', new UmbDocumentStore());
this.provideContext('umbMediaStore', new UmbMediaStore());
this.provideContext('umbDataTypeStore', new UmbDataTypeStore());
this.provideContext('umbDocumentTypeStore', new UmbDocumentTypeStore());
this.provideContext('umbMediaTypeStore', new UmbMediaTypeStore());
this.provideContext('umbMemberTypeStore', new UmbMemberTypeStore());
this.provideContext('umbUserStore', new UmbUserStore());
this.provideContext('umbUserGroupStore', new UmbUserGroupStore());
this.provideContext('umbMemberGroupStore', new UmbMemberGroupStore());
this.provideContext('umbNotificationService', new UmbNotificationService());
this.provideContext('umbModalService', new UmbModalService());
this.provideContext('umbSectionStore', new UmbSectionStore());
}
private _registerExtensions(manifests: Array<ManifestWithLoader<ManifestTypes>> | Array<ManifestTypes>) {
manifests.forEach((manifest) => {
if (umbExtensionsRegistry.isRegistered(manifest.alias)) return;
umbExtensionsRegistry.register(manifest);
});
}
render() {
return html`
<umb-backoffice-header></umb-backoffice-header>
<umb-backoffice-main></umb-backoffice-main>
<umb-backoffice-notification-container></umb-backoffice-notification-container>
<umb-backoffice-modal-container></umb-backoffice-modal-container>
`;
}
}
export default UmbBackofficeElement;
declare global {
interface HTMLElementTagNameMap {
'umb-backoffice': UmbBackofficeElement;
}
}