UmbDataTypeStore + workspace context

This commit is contained in:
Niels Lyngsø
2022-12-20 15:29:01 +01:00
parent 5c905ea54d
commit d56120af7f
8 changed files with 38 additions and 14 deletions

View File

@@ -21,7 +21,7 @@ import { css, html, LitElement } from 'lit';
import { UmbModalService } from '../core/services/modal';
import { UmbNotificationService } from '../core/services/notification';
import { UmbDataTypesStore } from '../core/stores/data-types/data-types.store';
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';
@@ -80,7 +80,7 @@ export class UmbBackofficeElement extends UmbContextConsumerMixin(UmbContextProv
this.provideContext('umbDocumentStore', new UmbDocumentStore());
this.provideContext('umbMediaStore', new UmbMediaStore());
this.provideContext('umbDataTypeStore', new UmbDataTypesStore());
this.provideContext('umbDataTypeStore', new UmbDataTypeStore());
this.provideContext('umbDocumentTypeStore', new UmbDocumentTypeStore());
this.provideContext('umbMediaTypeStore', new UmbMediaTypeStore());
this.provideContext('umbMemberTypeStore', new UmbMemberTypeStore());

View File

@@ -4,7 +4,7 @@ import { ifDefined } from 'lit-html/directives/if-defined.js';
import { customElement, property, state } from 'lit/decorators.js';
import { EMPTY, of, switchMap } from 'rxjs';
import { UmbDataTypesStore } from '../../../core/stores/data-types/data-types.store';
import { UmbDataTypeStore } from '../../../core/stores/data-type/data-type.store';
import { UmbObserverMixin } from '@umbraco-cms/observable-api';
import type { ContentProperty, ManifestTypes } from '@umbraco-cms/models';
import { umbExtensionsRegistry } from '@umbraco-cms/extensions-registry';
@@ -42,7 +42,7 @@ export class UmbContentPropertyElement extends UmbContextConsumerMixin(UmbObserv
@state()
private _dataTypeData?: any;
private _dataTypeStore?: UmbDataTypesStore;
private _dataTypeStore?: UmbDataTypeStore;
constructor() {
super();

View File

@@ -2,7 +2,7 @@ import { UUITextStyles } from '@umbraco-ui/uui-css';
import { css, html } from 'lit';
import { customElement } from 'lit/decorators.js';
import { UmbModalService } from '../../../../../core/services/modal';
import { UmbDataTypesStore } from '../../../../../core/stores/data-types/data-types.store';
import { UmbDataTypeStore } from '../../../../../core/stores/data-type/data-type.store';
import UmbTreeItemActionElement from '../../../shared/tree-item-action.element';
import { UmbContextConsumerMixin } from '@umbraco-cms/context-api';
@@ -11,7 +11,7 @@ export default class UmbTreeActionDataTypeDeleteElement extends UmbContextConsum
static styles = [UUITextStyles, css``];
private _modalService?: UmbModalService;
private _dataTypeStore?: UmbDataTypesStore;
private _dataTypeStore?: UmbDataTypeStore;
connectedCallback(): void {
super.connectedCallback();
@@ -20,7 +20,7 @@ export default class UmbTreeActionDataTypeDeleteElement extends UmbContextConsum
this._modalService = modalService;
});
this.consumeContext('umbDataTypeStore', (dataTypeStore: UmbDataTypesStore) => {
this.consumeContext('umbDataTypeStore', (dataTypeStore: UmbDataTypeStore) => {
this._dataTypeStore = dataTypeStore;
});
}

View File

@@ -6,7 +6,7 @@ import { umbExtensionsRegistry } from '@umbraco-cms/extensions-registry';
import type { ManifestTreeItemAction } from '@umbraco-cms/models';
import '../shared/tree-navigator.element';
import { UmbDataTypesStore } from 'src/core/stores/data-types/data-types.store';
import { UmbDataTypeStore } from '@umbraco-cms/stores/data-type/data-type.store';
@customElement('umb-tree-data-types')
export class UmbTreeDataTypesElement extends UmbContextProviderMixin(UmbContextConsumerMixin(UmbTreeBase)) {
@@ -16,7 +16,7 @@ export class UmbTreeDataTypesElement extends UmbContextProviderMixin(UmbContextC
this._registerTreeItemActions();
// TODO: how do we best expose the tree api to the tree navigator element?
this.consumeContext('umbDataTypeStore', (dataTypeStore: UmbDataTypesStore) => {
this.consumeContext('umbDataTypeStore', (dataTypeStore: UmbDataTypeStore) => {
this.provideContext('umbTreeStore', dataTypeStore);
});
}

View File

@@ -6,7 +6,7 @@ import type { UmbNotificationDefaultData } from '../../../../../core/services/no
import type { UmbNotificationService } from '../../../../../core/services/notification';
import { UmbDataTypeContext } from '../../data-type.context';
import { UmbContextConsumerMixin } from '@umbraco-cms/context-api';
import { UmbDataTypesStore } from 'src/core/stores/data-types/data-types.store';
import { UmbDataTypeStore } from '@umbraco-cms/stores/data-type/data-type.store';
@customElement('umb-workspace-action-data-type-save')
export class UmbWorkspaceActionDataTypeSaveElement extends UmbContextConsumerMixin(LitElement) {
@@ -15,7 +15,7 @@ export class UmbWorkspaceActionDataTypeSaveElement extends UmbContextConsumerMix
@state()
private _saveButtonState?: UUIButtonState;
private _dataTypeStore?: UmbDataTypesStore;
private _dataTypeStore?: UmbDataTypeStore;
private _dataTypeContext?: UmbDataTypeContext;
private _notificationService?: UmbNotificationService;

View File

@@ -0,0 +1,23 @@
import { UmbWorkspaceNodeContext } from "../shared/workspace-context/workspace-node.context";
import type { UmbDataTypeStore, UmbDataTypeStoreItemType } from "@umbraco-cms/stores/data-type/data-type.store";
const DefaultDataTypeData = ({
key: '',
name: '',
icon: '',
type: '',
hasChildren: false,
parentKey: '',
alias: '',
properties: [],
}) as UmbDataTypeStoreItemType;
export class UmbWorkspaceDataTypeContext extends UmbWorkspaceNodeContext<UmbDataTypeStoreItemType, UmbDataTypeStore> {
constructor(target:HTMLElement, entityKey: string) {
super(target, DefaultDataTypeData, 'umbDataTypeStore', entityKey);
}
}

View File

@@ -2,7 +2,7 @@ import { UUIInputElement, UUIInputEvent } from '@umbraco-ui/uui';
import { UUITextStyles } from '@umbraco-ui/uui-css/lib';
import { css, html, LitElement } from 'lit';
import { customElement, property, state } from 'lit/decorators.js';
import { UmbDataTypesStore } from '../../../core/stores/data-types/data-types.store';
import { UmbDataTypeStore } from '../../../core/stores/data-type/data-type.store';
import { UmbDataTypeContext } from './data-type.context';
import type { DataTypeDetails } from '@umbraco-cms/models';
import { UmbObserverMixin } from '@umbraco-cms/observable-api';
@@ -40,7 +40,7 @@ export class UmbWorkspaceDataTypeElement extends UmbContextProviderMixin(
private _dataTypeName = '';
private _dataTypeContext?: UmbDataTypeContext;
private _dataTypeStore?: UmbDataTypesStore;
private _dataTypeStore?: UmbDataTypeStore;
constructor() {
super();

View File

@@ -9,13 +9,14 @@ const isDataTypeDetails = (dataType: DataTypeDetails | FolderTreeItem): dataType
// TODO: can we make is easy to reuse store methods across different stores?
export type UmbDataTypeStoreItemType = DataTypeDetails | FolderTreeItem;
/**
* @export
* @class UmbDataTypesStore
* @extends {UmbDataStoreBase<DataTypeDetails | FolderTreeItem>}
* @description - Data Store for Data Types
*/
export class UmbDataTypesStore extends UmbDataStoreBase<DataTypeDetails | FolderTreeItem> {
export class UmbDataTypeStore extends UmbDataStoreBase<UmbDataTypeStoreItemType> {
/**
* @description - Request a Data Type by key. The Data Type is added to the store and is returned as an Observable.
* @param {string} key