remove entity tree

This commit is contained in:
Mads Rasmussen
2024-02-14 22:19:16 +01:00
parent 23d053cb01
commit edcdfc5e92
26 changed files with 52 additions and 184 deletions

View File

@@ -1,8 +1,8 @@
import type { UmbPickerModalValue, UmbTreePickerModalData } from '../modal.interfaces.js';
import { UmbModalToken } from './modal-token.js';
import type { UmbEntityTreeItemModel } from '@umbraco-cms/backoffice/tree';
import type { UmbUniqueTreeItemModel } from '@umbraco-cms/backoffice/tree';
export type UmbDataTypePickerModalData = UmbTreePickerModalData<UmbEntityTreeItemModel>;
export type UmbDataTypePickerModalData = UmbTreePickerModalData<UmbUniqueTreeItemModel>;
export type UmbDataTypePickerModalValue = UmbPickerModalValue;
export const UMB_DATA_TYPE_PICKER_MODAL = new UmbModalToken<UmbDataTypePickerModalData, UmbDataTypePickerModalValue>(

View File

@@ -1,8 +1,8 @@
import type { UmbEntityTreeItemModel } from '../../tree/types.js';
import type { UmbUniqueTreeItemModel } from '../../tree/types.js';
import { UmbModalToken } from './modal-token.js';
import type { UmbPickerModalValue, UmbTreePickerModalData } from '@umbraco-cms/backoffice/modal';
export type UmbDictionaryItemPickerModalData = UmbTreePickerModalData<UmbEntityTreeItemModel>;
export type UmbDictionaryItemPickerModalData = UmbTreePickerModalData<UmbUniqueTreeItemModel>;
export type UmbDictionaryItemPickerModalValue = UmbPickerModalValue;
export const UMB_DICTIONARY_ITEM_PICKER_MODAL = new UmbModalToken<

View File

@@ -1,8 +1,8 @@
import { UmbModalToken } from './modal-token.js';
import type { UmbPickerModalValue, UmbTreePickerModalData } from '@umbraco-cms/backoffice/modal';
import type { UmbEntityTreeItemModel } from '@umbraco-cms/backoffice/tree';
import type { UmbUniqueTreeItemModel } from '@umbraco-cms/backoffice/tree';
export type UmbMediaTypePickerModalData = UmbTreePickerModalData<UmbEntityTreeItemModel>;
export type UmbMediaTypePickerModalData = UmbTreePickerModalData<UmbUniqueTreeItemModel>;
export type UmbMediaTypePickerModalValue = UmbPickerModalValue;
export const UMB_MEDIA_TYPE_PICKER_MODAL = new UmbModalToken<UmbMediaTypePickerModalData, UmbMediaTypePickerModalValue>(

View File

@@ -1,9 +0,0 @@
import { UmbTreeItemContextBase } from '../tree-item-base/tree-item-base.context.js';
import type { UmbEntityTreeItemModel } from '../types.js';
import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api';
export class UmbEntityTreeItemContext extends UmbTreeItemContextBase<UmbEntityTreeItemModel> {
constructor(host: UmbControllerHostElement) {
super(host, (x: UmbEntityTreeItemModel) => x.id);
}
}

View File

@@ -1,48 +0,0 @@
import type { UmbEntityTreeItemModel } from '../types.js';
import { UmbEntityTreeItemContext } from './entity-tree-item.context.js';
import { css, html, nothing, customElement, property } from '@umbraco-cms/backoffice/external/lit';
import { UmbTextStyles } from '@umbraco-cms/backoffice/style';
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
import type { UmbBackofficeManifestKind, UmbTreeItemElement } from '@umbraco-cms/backoffice/extension-registry';
import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry';
// TODO: Move to separate file:
const manifest: UmbBackofficeManifestKind = {
type: 'kind',
alias: 'Umb.Kind.EntityTreeItem',
matchKind: 'entity',
matchType: 'treeItem',
manifest: {
type: 'treeItem',
elementName: 'umb-entity-tree-item',
},
};
umbExtensionsRegistry.register(manifest);
@customElement('umb-entity-tree-item')
export class UmbEntityTreeItemElement extends UmbLitElement implements UmbTreeItemElement {
private _item?: UmbEntityTreeItemModel;
@property({ type: Object, attribute: false })
public get item() {
return this._item;
}
public set item(value: UmbEntityTreeItemModel | undefined) {
this._item = value;
this.#context.setTreeItem(value);
}
#context = new UmbEntityTreeItemContext(this);
render() {
if (!this.item) return nothing;
return html`<umb-tree-item-base></umb-tree-item-base>`;
}
static styles = [UmbTextStyles, css``];
}
declare global {
interface HTMLElementTagNameMap {
'umb-entity-tree-item': UmbEntityTreeItemElement;
}
}

View File

@@ -1,2 +0,0 @@
export * from './entity-tree-item.context.js';
export * from './entity-tree-item.element.js';

View File

@@ -1,46 +0,0 @@
import type { UmbTreeStore } from './tree-store.interface.js';
import type { UmbEntityTreeItemModel } from './types.js';
import { UmbStoreBase } from '@umbraco-cms/backoffice/store';
import { UmbArrayState } from '@umbraco-cms/backoffice/observable-api';
import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api';
/**
* @export
* @class UmbEntityTreeStore
* @extends {UmbStoreBase}
* @description - Entity Tree Store
*/
export class UmbEntityTreeStore
extends UmbStoreBase<UmbEntityTreeItemModel>
implements UmbTreeStore<UmbEntityTreeItemModel>
{
constructor(host: UmbControllerHostElement, storeAlias: string) {
super(host, storeAlias, new UmbArrayState<UmbEntityTreeItemModel>([], (x) => x.id));
}
/**
* An observable to observe the root items
* @memberof UmbEntityTreeStore
*/
rootItems = this._data.asObservablePart((items) => items.filter((item) => item.parentId === null));
/**
* Returns an observable to observe the children of a given parent
* @param {(string | null)} parentId
* @return {*}
* @memberof UmbEntityTreeStore
*/
childrenOf(parentId: string | null) {
return this._data.asObservablePart((items) => items.filter((item) => item.parentId === parentId));
}
/**
* Returns an observable to observe the items with the given ids
* @param {Array<string>} ids
* @return {*}
* @memberof UmbEntityTreeStore
*/
items(ids: Array<string | null>) {
return this._data.asObservablePart((items) => items.filter((item) => ids.includes(item.id ?? '')));
}
}

View File

@@ -1,5 +1,4 @@
export * from './components/index.js';
export * from './entity-tree-item/index.js';
export * from './tree-item-default/index.js';
export * from './tree-item-base/index.js';
export * from './tree-menu-item-default/index.js';
@@ -8,7 +7,6 @@ export * from './tree.element.js';
export * from './types.js';
export * from './tree-repository.interface.js';
export * from './tree-store.interface.js';
export * from './entity-tree-store.js';
// Unique
export * from './unique-tree-store.js';

View File

@@ -1,10 +1,5 @@
import type { UmbTreeStore } from './tree-store.interface.js';
import type {
UmbEntityTreeItemModel,
UmbEntityTreeRootModel,
UmbUniqueTreeItemModel,
UmbUniqueTreeRootModel,
} from './types.js';
import type { UmbUniqueTreeItemModel, UmbUniqueTreeRootModel } from './types.js';
import type { UmbTreeRepository } from './tree-repository.interface.js';
import type { UmbTreeDataSource, UmbTreeDataSourceConstructor } from './data-source/tree-data-source.interface.js';
import { UmbRepositoryBase } from '@umbraco-cms/backoffice/repository';
@@ -24,9 +19,8 @@ import type { UmbContextToken } from '@umbraco-cms/backoffice/context-api';
* @template TreeRootType
*/
export abstract class UmbTreeRepositoryBase<
// TODO: remove UmbEntityTreeItemModel when we have unique in place
TreeItemType extends UmbUniqueTreeItemModel | UmbEntityTreeItemModel,
TreeRootType extends UmbUniqueTreeRootModel | UmbEntityTreeRootModel,
TreeItemType extends UmbUniqueTreeItemModel,
TreeRootType extends UmbUniqueTreeRootModel,
>
extends UmbRepositoryBase
implements UmbTreeRepository<TreeItemType, TreeRootType>, UmbApi

View File

@@ -11,20 +11,6 @@ export interface UmbUniqueTreeItemModel extends UmbTreeItemModelBase {
parentUnique: string | null;
}
// Root
export interface UmbUniqueTreeRootModel extends UmbTreeItemModelBase {
unique: null;
}
// ------------------------------------
// TODO: remove this when we have unique for everything
export interface UmbEntityTreeItemModel extends UmbTreeItemModelBase {
id: string;
parentId: string | null;
}
// TODO: remove this when we have unique for everything
export interface UmbEntityTreeRootModel extends UmbTreeItemModelBase {
id: null;
}

View File

@@ -42,6 +42,6 @@ export class UmbUniqueTreeStore
* @memberof UmbUniqueTreeStore
*/
items(uniques: Array<string | null>) {
return this._data.asObservablePart((items) => items.filter((item) => uniques.includes(item.unique ?? '')));
return this._data.asObservablePart((items) => items.filter((item) => uniques.includes(item.unique)));
}
}

View File

@@ -2,21 +2,17 @@ import { UmbId } from '@umbraco-cms/backoffice/id';
import type { UmbContextToken } from '@umbraco-cms/backoffice/context-api';
import { UmbContextConsumerController } from '@umbraco-cms/backoffice/context-api';
import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api';
import type {
UmbNotificationDefaultData,
UmbNotificationContext} from '@umbraco-cms/backoffice/notification';
import {
UMB_NOTIFICATION_CONTEXT,
} from '@umbraco-cms/backoffice/notification';
import type { UmbNotificationDefaultData, UmbNotificationContext } from '@umbraco-cms/backoffice/notification';
import { UMB_NOTIFICATION_CONTEXT } from '@umbraco-cms/backoffice/notification';
import { UmbObjectState, UmbObserverController } from '@umbraco-cms/backoffice/observable-api';
import type { UmbEntityDetailStore } from '@umbraco-cms/backoffice/store';
import type { UmbEntityTreeItemModel } from '@umbraco-cms/backoffice/tree';
import type { UmbUniqueTreeItemModel } from '@umbraco-cms/backoffice/tree';
// Extend entityType base type?, so we are sure to have parentId?
// TODO: switch to use EntityDetailItem ? if we can have such type?
export class UmbEntityWorkspaceManager<
StoreType extends UmbEntityDetailStore<EntityDetailsType>,
EntityDetailsType extends UmbEntityTreeItemModel = ReturnType<StoreType['getScaffold']>,
EntityDetailsType extends UmbUniqueTreeItemModel = ReturnType<StoreType['getScaffold']>,
> {
private _host;

View File

@@ -16,7 +16,7 @@ export class UmbDocumentRecycleBinTreeRepository
async requestTreeRoot() {
const data = {
id: null,
unique: null,
entityType: UMB_DOCUMENT_RECYCLE_BIN_ROOT_ENTITY_TYPE,
name: 'Recycle Bin',
icon: 'icon-trash',

View File

@@ -44,8 +44,8 @@ const getChildrenOf = (parentUnique: string | null) => {
const mapper = (item: DocumentRecycleBinItemResponseModel): UmbDocumentRecycleBinTreeItemModel => {
return {
id: item.id,
parentId: item.parent ? item.parent.id : null,
unique: item.id,
parentUnique: item.parent ? item.parent.id : null,
entityType: 'document-recycle-bin',
hasChildren: item.hasChildren,
isFolder: false,

View File

@@ -1,6 +1,6 @@
import { UmbContextToken } from '@umbraco-cms/backoffice/context-api';
import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api';
import { UmbEntityTreeStore } from '@umbraco-cms/backoffice/tree';
import { UmbUniqueTreeStore } from '@umbraco-cms/backoffice/tree';
/**
* @export
@@ -8,7 +8,7 @@ import { UmbEntityTreeStore } from '@umbraco-cms/backoffice/tree';
* @extends {UmbStoreBase}
* @description - Tree Data Store for Document Recycle Bin Tree Items
*/
export class UmbDocumentRecycleBinTreeStore extends UmbEntityTreeStore {
export class UmbDocumentRecycleBinTreeStore extends UmbUniqueTreeStore {
/**
* Creates an instance of UmbDocumentRecycleBinTreeStore.
* @param {UmbControllerHostElement} host

View File

@@ -38,7 +38,7 @@ const tree: ManifestTree = {
const treeItem: ManifestTreeItem = {
type: 'treeItem',
kind: 'entity',
kind: 'unique',
alias: 'Umb.TreeItem.DocumentRecycleBin',
name: 'DocumentRecycleBin Tree Item',
meta: {

View File

@@ -1,5 +1,5 @@
import type { UmbEntityTreeItemModel, UmbEntityTreeRootModel } from '@umbraco-cms/backoffice/tree';
import { UmbUniqueTreeItemModel, UmbUniqueTreeRootModel } from '@umbraco-cms/backoffice/tree';
export interface UmbDocumentRecycleBinTreeItemModel extends UmbEntityTreeItemModel {}
export interface UmbDocumentRecycleBinTreeItemModel extends UmbUniqueTreeItemModel {}
export interface UmbDocumentRecycleBinTreeRootModel extends UmbEntityTreeRootModel {}
export interface UmbDocumentRecycleBinTreeRootModel extends UmbUniqueTreeRootModel {}

View File

@@ -3,17 +3,17 @@ import { css, html, customElement, state, repeat } from '@umbraco-cms/backoffice
import type { UmbDefaultCollectionContext } from '@umbraco-cms/backoffice/collection';
import { UMB_DEFAULT_COLLECTION_CONTEXT } from '@umbraco-cms/backoffice/collection';
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
import type { UmbEntityTreeItemModel } from '@umbraco-cms/backoffice/tree';
import type { UmbUniqueTreeItemModel } from '@umbraco-cms/backoffice/tree';
@customElement('umb-media-grid-collection-view')
export class UmbMediaGridCollectionViewElement extends UmbLitElement {
@state()
private _mediaItems?: Array<UmbEntityTreeItemModel>;
private _mediaItems?: Array<UmbUniqueTreeItemModel>;
@state()
private _selection: Array<string | null> = [];
private _collectionContext?: UmbDefaultCollectionContext<UmbEntityTreeItemModel, any>;
private _collectionContext?: UmbDefaultCollectionContext<UmbUniqueTreeItemModel, any>;
constructor() {
super();
@@ -58,31 +58,31 @@ export class UmbMediaGridCollectionViewElement extends UmbLitElement {
});
}
private _handleOpenItem(mediaItem: UmbEntityTreeItemModel) {
private _handleOpenItem(mediaItem: UmbUniqueTreeItemModel) {
//TODO: Fix when we have dynamic routing
history.pushState(null, '', 'section/media/media/edit/' + mediaItem.id);
history.pushState(null, '', 'section/media/media/edit/' + mediaItem.unique);
}
private _handleSelect(mediaItem: UmbEntityTreeItemModel) {
if (mediaItem.id) {
this._collectionContext?.selection.select(mediaItem.id);
private _handleSelect(mediaItem: UmbUniqueTreeItemModel) {
if (mediaItem.unique) {
this._collectionContext?.selection.select(mediaItem.unique);
}
}
private _handleDeselect(mediaItem: UmbEntityTreeItemModel) {
if (mediaItem.id) {
this._collectionContext?.selection.deselect(mediaItem.id);
private _handleDeselect(mediaItem: UmbUniqueTreeItemModel) {
if (mediaItem.unique) {
this._collectionContext?.selection.deselect(mediaItem.unique);
}
}
private _isSelected(mediaItem: UmbEntityTreeItemModel) {
if (mediaItem.id) {
return this._selection.includes(mediaItem.id);
private _isSelected(mediaItem: UmbUniqueTreeItemModel) {
if (mediaItem.unique) {
return this._selection.includes(mediaItem.unique);
}
return false;
}
private _renderMediaItem(item: UmbEntityTreeItemModel) {
private _renderMediaItem(item: UmbUniqueTreeItemModel) {
const name = item.name || '';
//TODO: fix the file extension when media items have a file extension.
return html`<uui-card-media
@@ -109,7 +109,7 @@ export class UmbMediaGridCollectionViewElement extends UmbLitElement {
${this._mediaItems
? repeat(
this._mediaItems,
(file, index) => (file.id || '') + index,
(file, index) => (file.unique || '') + index,
(file) => this._renderMediaItem(file),
)
: ''}

View File

@@ -1,8 +1,8 @@
import { UmbUniqueTreeItemModel } from '@umbraco-cms/backoffice/tree';
import { UmbModalToken } from '../../../core/modal/token/modal-token.js';
import type { UmbPickerModalValue, UmbTreePickerModalData } from '@umbraco-cms/backoffice/modal';
import type { UmbEntityTreeItemModel } from '@umbraco-cms/backoffice/tree';
export type UmbMemberTypePickerModalData = UmbTreePickerModalData<UmbEntityTreeItemModel>;
export type UmbMemberTypePickerModalData = UmbTreePickerModalData<UmbUniqueTreeItemModel>;
export type UmbMemberTypePickerModalValue = UmbPickerModalValue;
export const UMB_MEMBER_TYPE_PICKER_MODAL = new UmbModalToken<

View File

@@ -38,7 +38,7 @@ const tree: ManifestTree = {
const treeItem: ManifestTreeItem = {
type: 'treeItem',
kind: 'entity',
kind: 'unique',
alias: 'Umb.TreeItem.RelationType',
name: 'RelationType Tree Item',
meta: {

View File

@@ -16,7 +16,7 @@ export class UmbRelationTypeTreeRepository
async requestTreeRoot() {
const data = {
id: null,
unique: null,
entityType: UMB_RELATION_TYPE_ROOT_ENTITY_TYPE,
name: 'Relation Types',
hasChildren: true,

View File

@@ -41,8 +41,8 @@ const getChildrenOf = (parentUnique: string | null) => {
const mapper = (item: NamedEntityTreeItemResponseModel): UmbRelationTypeTreeItemModel => {
return {
id: item.id,
parentId: item.parent ? item.parent.id : null,
unique: item.id,
parentUnique: item.parent ? item.parent.id : null,
name: item.name,
entityType: 'relation-type',
hasChildren: item.hasChildren,

View File

@@ -1,6 +1,6 @@
import { UmbContextToken } from '@umbraco-cms/backoffice/context-api';
import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api';
import { UmbEntityTreeStore } from '@umbraco-cms/backoffice/tree';
import { UmbUniqueTreeStore } from '@umbraco-cms/backoffice/tree';
/**
* @export
@@ -8,7 +8,7 @@ import { UmbEntityTreeStore } from '@umbraco-cms/backoffice/tree';
* @extends {UmbStoreBase}
* @description - Tree Data Store for Relation Type Items
*/
export class UmbRelationTypeTreeStore extends UmbEntityTreeStore {
export class UmbRelationTypeTreeStore extends UmbUniqueTreeStore {
/**
* Creates an instance of UmbRelationTypeTreeStore.
* @param {UmbControllerHostElement} host

View File

@@ -1,5 +1,4 @@
import type { UmbEntityTreeItemModel, UmbEntityTreeRootModel } from '@umbraco-cms/backoffice/tree';
import { UmbUniqueTreeItemModel, UmbUniqueTreeRootModel } from '@umbraco-cms/backoffice/tree';
export interface UmbRelationTypeTreeItemModel extends UmbEntityTreeItemModel {}
// TODO: TREE STORE TYPE PROBLEM:
export interface UmbRelationTypeTreeRootModel extends UmbEntityTreeRootModel {}
export interface UmbRelationTypeTreeItemModel extends UmbUniqueTreeItemModel {}
export interface UmbRelationTypeTreeRootModel extends UmbUniqueTreeRootModel {}

View File

@@ -98,7 +98,7 @@ export class UmbTemplatingInsertMenuElement extends UmbLitElement {
#openInsertDictionaryItemModal() {
this.#openModal = this._modalContext?.open(UMB_DICTIONARY_ITEM_PICKER_MODAL, {
data: {
pickableFilter: (item) => item.id !== null,
pickableFilter: (item) => item.unique !== null,
},
});
this.#openModal?.onSubmit().then((value) => {

View File

@@ -61,7 +61,7 @@ export default class UmbChooseInsertTypeModalElement extends UmbModalBaseElement
#openInsertDictionaryItemModal() {
this.#openModal = this._modalContext?.open(UMB_DICTIONARY_ITEM_PICKER_MODAL, {
data: {
pickableFilter: (item) => item.id !== null,
pickableFilter: (item) => item.unique !== null,
},
});
this.#openModal?.onSubmit().then((dictionaryItemPickerModalValue) => {