require unique

This commit is contained in:
Mads Rasmussen
2024-05-13 14:35:14 +02:00
parent 32534a18ea
commit 7dd3a4ff4e
5 changed files with 13 additions and 20 deletions

View File

@@ -1,4 +1,4 @@
import type { UmbTreeItemModelBase } from '../types.js';
import type { UmbUniqueTreeItemModel, UmbUniqueTreeRootModel } from '../types.js';
import type {
UmbTreeChildrenOfRequestArgs,
UmbTreeAncestorsOfRequestArgs,
@@ -18,8 +18,8 @@ import type { UmbApi } from '@umbraco-cms/backoffice/extension-api';
* @template TreeRootType
*/
export interface UmbTreeRepository<
TreeItemType extends UmbTreeItemModelBase = UmbTreeItemModelBase,
TreeRootType extends UmbTreeItemModelBase = UmbTreeItemModelBase,
TreeItemType extends UmbUniqueTreeItemModel = UmbUniqueTreeItemModel,
TreeRootType extends UmbUniqueTreeRootModel = UmbUniqueTreeRootModel,
> extends UmbApi {
/**
* Requests the root of the tree.

View File

@@ -1,5 +1,5 @@
import { UmbRequestReloadTreeItemChildrenEvent } from '../reload-tree-item-children/index.js';
import type { UmbTreeItemModelBase } from '../types.js';
import type { UmbUniqueTreeItemModel } from '../types.js';
import type { UmbTreeRepository } from '../data/tree-repository.interface.js';
import type { UmbTreeContext } from '../tree-context.interface.js';
import { type UmbActionEventContext, UMB_ACTION_EVENT_CONTEXT } from '@umbraco-cms/backoffice/action';
@@ -17,7 +17,7 @@ import { UmbArrayState, UmbObjectState } from '@umbraco-cms/backoffice/observabl
import { UmbContextToken } from '@umbraco-cms/backoffice/context-api';
import { UmbChangeEvent } from '@umbraco-cms/backoffice/event';
export class UmbDefaultTreeContext<TreeItemType extends UmbTreeItemModelBase>
export class UmbDefaultTreeContext<TreeItemType extends UmbUniqueTreeItemModel>
extends UmbContextBase<UmbDefaultTreeContext<TreeItemType>>
implements UmbTreeContext
{

View File

@@ -1,4 +1,4 @@
import type { UmbTreeItemModelBase, UmbTreeSelectionConfiguration } from '../types.js';
import type { UmbTreeItemModelBase, UmbTreeSelectionConfiguration, UmbUniqueTreeItemModel } from '../types.js';
import type { UmbDefaultTreeContext } from './default-tree.context.js';
import { UMB_DEFAULT_TREE_CONTEXT } from './default-tree.context.js';
import type { PropertyValueMap } from '@umbraco-cms/backoffice/external/lit';
@@ -40,7 +40,7 @@ export class UmbDefaultTreeElement extends UmbLitElement {
@state()
private _totalPages = 1;
#treeContext?: UmbDefaultTreeContext<UmbTreeItemModelBase>;
#treeContext?: UmbDefaultTreeContext<UmbUniqueTreeItemModel>;
#init: Promise<unknown>;
constructor() {

View File

@@ -1,6 +1,6 @@
import type { UmbTreeItemContext } from '../tree-item-context.interface.js';
import { UMB_DEFAULT_TREE_CONTEXT, type UmbDefaultTreeContext } from '../../default/default-tree.context.js';
import type { UmbTreeItemModelBase } from '../../types.js';
import type { UmbUniqueTreeItemModel } from '../../types.js';
import { UmbRequestReloadTreeItemChildrenEvent } from '../../reload-tree-item-children/index.js';
import { map } from '@umbraco-cms/backoffice/external/rxjs';
import { UMB_SECTION_CONTEXT, UMB_SECTION_SIDEBAR_CONTEXT } from '@umbraco-cms/backoffice/section';
@@ -17,11 +17,7 @@ import type { UmbEntityActionEvent } from '@umbraco-cms/backoffice/entity-action
import { UmbPaginationManager, debounce } from '@umbraco-cms/backoffice/utils';
import { UmbChangeEvent } from '@umbraco-cms/backoffice/event';
export type UmbTreeItemUniqueFunction<TreeItemType extends UmbTreeItemModelBase> = (
x: TreeItemType,
) => string | null | undefined;
export abstract class UmbTreeItemContextBase<TreeItemType extends UmbTreeItemModelBase>
export abstract class UmbTreeItemContextBase<TreeItemType extends UmbUniqueTreeItemModel>
extends UmbContextBase<UmbTreeItemContext<TreeItemType>>
implements UmbTreeItemContext<TreeItemType>
{
@@ -67,7 +63,6 @@ export abstract class UmbTreeItemContextBase<TreeItemType extends UmbTreeItemMod
#sectionContext?: UmbSectionContext;
#sectionSidebarContext?: UmbSectionSidebarContext;
#actionEventContext?: UmbActionEventContext;
#getUniqueFunction: UmbTreeItemUniqueFunction<TreeItemType>;
// TODO: get this from the tree context
#paging = {
@@ -75,10 +70,9 @@ export abstract class UmbTreeItemContextBase<TreeItemType extends UmbTreeItemMod
take: 50,
};
constructor(host: UmbControllerHost, getUniqueFunction: UmbTreeItemUniqueFunction<TreeItemType>) {
constructor(host: UmbControllerHost) {
super(host, UMB_TREE_ITEM_CONTEXT);
this.pagination.setPageSize(this.#paging.take);
this.#getUniqueFunction = getUniqueFunction;
this.#consumeContexts();
// listen for page changes on the pagination manager
@@ -134,10 +128,9 @@ export abstract class UmbTreeItemContextBase<TreeItemType extends UmbTreeItemMod
return;
}
const unique = this.#getUniqueFunction(treeItem);
// Only check for undefined. The tree root has null as unique
if (unique === undefined) throw new Error('Could not create tree item context, unique key is missing');
this.unique = unique;
if (treeItem.unique === undefined) throw new Error('Could not create tree item context, unique is missing');
this.unique = treeItem.unique;
if (!treeItem.entityType) throw new Error('Could not create tree item context, tree item type is missing');
this.entityType = treeItem.entityType;

View File

@@ -6,7 +6,7 @@ export class UmbDefaultTreeItemContext<
TreeItemModelType extends UmbUniqueTreeItemModel,
> extends UmbTreeItemContextBase<TreeItemModelType> {
constructor(host: UmbControllerHost) {
super(host, (x: UmbUniqueTreeItemModel) => x.unique);
super(host);
}
}