diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/tree/default/default-tree.context.ts b/src/Umbraco.Web.UI.Client/src/packages/core/tree/default/default-tree.context.ts index eed285fc3f..a5cfa22b91 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/tree/default/default-tree.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/tree/default/default-tree.context.ts @@ -21,13 +21,13 @@ import { UmbChangeEvent } from '@umbraco-cms/backoffice/event'; export class UmbDefaultTreeContext< TreeItemType extends UmbTreeItemModel, TreeRootType extends UmbTreeRootModel, - RootItemsRequestArgsType extends UmbTreeRootItemsRequestArgs = UmbTreeRootItemsRequestArgs, + RequestArgsType extends UmbTreeRootItemsRequestArgs = UmbTreeRootItemsRequestArgs, > - extends UmbContextBase> + extends UmbContextBase> implements UmbTreeContext { - #rootItemsRequestArgs = new UmbObjectState({}); - public readonly rootItemsRequestArgs = this.#rootItemsRequestArgs.asObservable(); + #additionalRequestArgs = new UmbObjectState | object>({}); + public readonly additionalRequestArgs = this.#additionalRequestArgs.asObservable(); #treeRoot = new UmbObjectState(undefined); treeRoot = this.#treeRoot.asObservable(); @@ -175,22 +175,22 @@ export class UmbDefaultTreeContext< // If we have a start node get children of that instead of the root const startNode = this.getStartNode(); - const args = this.#rootItemsRequestArgs.getValue(); + const additionalArgs = this.#additionalRequestArgs.getValue(); const { data } = startNode?.unique ? await this.#repository!.requestTreeItemsOf({ + ...additionalArgs, parent: { unique: startNode.unique, entityType: startNode.entityType, }, skip, take, - ...args, }) : await this.#repository!.requestTreeRootItems({ + ...additionalArgs, skip, take, - ...args, }); if (data) { @@ -238,12 +238,19 @@ export class UmbDefaultTreeContext< this.loadTree(); } - public loadWithAdditionalArgs(args: Partial) { - this.#rootItemsRequestArgs.setValue({ ...this.#rootItemsRequestArgs.getValue(), ...args }); + /** + * Updates the requestArgs config and reloads the tree. + */ + public updateAdditionalRequestArgs(args: Partial) { + this.#additionalRequestArgs.setValue({ ...this.#additionalRequestArgs.getValue(), ...args }); this.#resetTree(); this.loadTree(); } + public getAdditionalRequestArgs() { + return this.#additionalRequestArgs.getValue(); + } + /** * Gets the startNode config * @return {UmbTreeStartNode} diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree-item/tree-item-base/tree-item-context-base.ts b/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree-item/tree-item-base/tree-item-context-base.ts index f7c2fafbef..7d60f17c99 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree-item/tree-item-base/tree-item-context-base.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree-item/tree-item-base/tree-item-context-base.ts @@ -172,6 +172,7 @@ export abstract class UmbTreeItemContextBase< const skip = loadMore ? this.#paging.skip : 0; const take = loadMore ? this.#paging.take : this.pagination.getCurrentPageNumber() * this.#paging.take; + const additionalArgs = this.treeContext?.getAdditionalRequestArgs(); const { data } = await repository.requestTreeItemsOf({ parent: { @@ -180,6 +181,7 @@ export abstract class UmbTreeItemContextBase< }, skip, take, + ...additionalArgs, }); if (data) { diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/tree/document-tree.context.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/tree/document-tree.context.ts index df9827dde7..63c08e1a0c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/tree/document-tree.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/tree/document-tree.context.ts @@ -17,7 +17,7 @@ export class UmbDocumentTreeContext extends UmbDefaultTreeContext< this.consumeContext(UMB_CONTENT_PROPERTY_CONTEXT, (context) => { this.observe(context.dataType, (value) => { - this.loadWithAdditionalArgs({ dataType: value }); + this.updateAdditionalRequestArgs({ dataType: value }); }); }); }