From e4d5aeed64c4affcffec80b11b0916e309381bbf Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Tue, 7 May 2024 15:35:31 +0200 Subject: [PATCH] implement load and reload methods --- .../core/tree/default/default-tree.context.ts | 56 +++++++++++++------ 1 file changed, 38 insertions(+), 18 deletions(-) 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 9135a2e40c..d7379ff649 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 @@ -46,7 +46,7 @@ export class UmbDefaultTreeContext #paging = { skip: 0, - take: 50, + take: 3, }; #initResolver?: () => void; @@ -78,9 +78,12 @@ export class UmbDefaultTreeContext const unique = treeRoot.unique; if (event.detail.unique === unique) { event.stopPropagation(); - this.#loadRootItems(); + this.reloadTree(); } }); + + // always load the tree root because we need the root entity to reload the entire tree + this.#loadTreeRoot(); } // TODO: find a generic way to do this @@ -123,20 +126,20 @@ export class UmbDefaultTreeContext // that would trigger multiple loadTree calls. This is a temporary solution to avoid that. public loadTree = debounce(() => this.#debouncedLoadTree(), 50); - #debouncedLoadTree() { + public reloadTree = () => this.#debouncedLoadTree(true); + + #debouncedLoadTree(reload = false) { const startFrom = this.getStartFrom(); if (startFrom?.unique) { - this.#loadTreeFrom(startFrom); + this.#loadTreeFrom(startFrom, reload); return; } const hideTreeRoot = this.getHideTreeRoot(); if (hideTreeRoot) { - this.#loadRootItems(); + this.#loadRootItems(reload); return; } - - this.#loadTreeRoot(); } async #loadTreeRoot() { @@ -152,31 +155,49 @@ export class UmbDefaultTreeContext } } - async #loadRootItems() { + async #loadRootItems(reload = false) { await this.#init; + const skip = reload ? 0 : this.#paging.skip; + const take = reload ? this.pagination.getCurrentPageNumber() * this.#paging.take : this.#paging.take; + const { data } = await this.#repository!.requestRootTreeItems({ - skip: this.#paging.skip, - take: this.#paging.take, + skip, + take, }); if (data) { - this.#rootItems.setValue(data.items); + if (reload) { + this.#rootItems.setValue(data.items); + } else { + const currentItems = this.#rootItems.getValue(); + this.#rootItems.setValue([...currentItems, ...data.items]); + } + this.pagination.setTotalItems(data.total); } } - async #loadTreeFrom(startFrom: UmbTreeStartFrom) { + async #loadTreeFrom(startFrom: UmbTreeStartFrom, reload = false) { await this.#init; + const skip = reload ? 0 : this.#paging.skip; + const take = reload ? this.pagination.getCurrentPageNumber() * this.#paging.take : this.#paging.take; + const { data } = await this.#repository!.requestTreeItemsOf({ parentUnique: startFrom.unique, - skip: this.#paging.skip, - take: this.#paging.take, + skip, + take, }); if (data) { - this.#rootItems.setValue(data.items); + if (reload) { + this.#rootItems.setValue(data.items); + } else { + const currentItems = this.#rootItems.getValue(); + this.#rootItems.setValue([...currentItems, ...data.items]); + } + this.pagination.setTotalItems(data.total); } } @@ -226,8 +247,7 @@ export class UmbDefaultTreeContext #resetTree() { this.#treeRoot.setValue(undefined); this.#rootItems.setValue([]); - this.pagination.setTotalItems(0); - this.pagination.setCurrentPageNumber(1); + this.pagination.clear(); } #consumeContexts() { @@ -273,7 +293,7 @@ export class UmbDefaultTreeContext // @ts-ignore if (event.getUnique() !== treeRoot.unique) return; if (event.getEntityType() !== treeRoot.entityType) return; - this.#loadRootItems(); + this.reloadTree(); }; destroy(): void {