mirror of
https://github.com/EGroupware/egroupware.git
synced 2024-11-21 15:33:23 +01:00
Fix lazy load in Et2TreeDropdown emptied the tree
This commit is contained in:
parent
49be819828
commit
2e469a00de
@ -195,7 +195,7 @@ export class Et2Tree extends Et2WidgetWithSelectMixin(LitElement) implements Fin
|
||||
{
|
||||
this.lazyLoading = this.handleLazyLoading({item: this._selectOptions}).then((results) =>
|
||||
{
|
||||
this._selectOptions = results?.item ?? [];
|
||||
this._selectOptions = results?.children ?? results?.item ?? [];
|
||||
this._initCurrent()
|
||||
this.requestUpdate("_selectOptions");
|
||||
this.updateComplete.then((value) => {
|
||||
@ -976,14 +976,14 @@ export class Et2Tree extends Et2WidgetWithSelectMixin(LitElement) implements Fin
|
||||
|
||||
// lazy iff "child" is set and "item" is empty or item does not exist in the first place
|
||||
const lazy = (selectOption.item?.length === 0 && selectOption.child) || (selectOption.child && !selectOption.item)
|
||||
const value = selectOption.value ?? selectOption.id;
|
||||
if(expandState && this.autoloading && lazy)
|
||||
{
|
||||
this.updateComplete.then(() =>
|
||||
{
|
||||
this.getDomNode(selectOption.id)?.dispatchEvent(new CustomEvent("sl-lazy-load"));
|
||||
this.getDomNode(value)?.dispatchEvent(new CustomEvent("sl-lazy-load"));
|
||||
})
|
||||
}
|
||||
const value = selectOption.value ?? selectOption.id;
|
||||
const selected = typeof this.value == "string" && this.value == value || Array.isArray(this.value) && this.value.includes(value);
|
||||
const draggable = this.widget_object?.actionLinks?.filter(al => al.actionObj.type == "drag").length > 0
|
||||
|
||||
@ -1022,12 +1022,13 @@ export class Et2Tree extends Et2WidgetWithSelectMixin(LitElement) implements Fin
|
||||
this.lazyLoading = this.handleLazyLoading(selectOption).then((result) => {
|
||||
// TODO: We already have the right option in context. Look into this.getNode(), find out why it's there. It doesn't do a deep search.
|
||||
const parentNode = selectOption ?? this.getNode(selectOption.id) ?? this.optionSearch(selectOption.id, this._selectOptions, 'id', 'item');
|
||||
parentNode.item = [...result.item]
|
||||
if (parentNode.item.length == 0)
|
||||
if(!parentNode || !parentNode.item || parentNode.item.length == 0)
|
||||
{
|
||||
parentNode.child = false;
|
||||
this.getDomNode(parentNode.id).loading = false
|
||||
parentNode.open = false;
|
||||
this.requestUpdate("lazy", "true");
|
||||
}
|
||||
this.getDomNode(parentNode.id).loading = false
|
||||
this.requestUpdate("_selectOptions")
|
||||
})
|
||||
|
||||
@ -1114,7 +1115,7 @@ export class Et2Tree extends Et2WidgetWithSelectMixin(LitElement) implements Fin
|
||||
{
|
||||
let requestLink = egw().link(egw().ajaxUrl(egw().decodePath(this.autoloading)),
|
||||
{
|
||||
id: _item.id
|
||||
id: _item.value ?? _item.id
|
||||
})
|
||||
|
||||
let result: Promise<TreeItemData> = egw().request(requestLink, [])
|
||||
@ -1122,10 +1123,10 @@ export class Et2Tree extends Et2WidgetWithSelectMixin(LitElement) implements Fin
|
||||
|
||||
return result
|
||||
.then((results) => {
|
||||
_item = results;
|
||||
Object.assign(_item, results);
|
||||
|
||||
// Add actions
|
||||
const itemAO = this.widget_object.getObjectById(_item.id);
|
||||
const itemAO = this.widget_object.getObjectById(_item.value ?? _item.id);
|
||||
let parentAO = null;
|
||||
if(itemAO && itemAO.parent)
|
||||
{
|
||||
|
@ -272,6 +272,12 @@ export class Et2TreeDropdown extends SearchMixin<Constructor<any> & Et2InputWidg
|
||||
this.displayLabel = option.label;
|
||||
}
|
||||
}
|
||||
|
||||
if(this._tree)
|
||||
{
|
||||
this._tree._selectOptions = <TreeItemData[]>new_options;
|
||||
this._tree.requestUpdate("_selectOptions");
|
||||
}
|
||||
}
|
||||
|
||||
/** Sets focus on the control. */
|
||||
@ -1006,7 +1012,6 @@ export class Et2TreeDropdown extends SearchMixin<Constructor<any> & Et2InputWidg
|
||||
?readonly=${this.readonly}
|
||||
?disabled=${this.disabled}
|
||||
value=${this.multiple ? nothing : this.value}
|
||||
._selectOptions=${options}
|
||||
.actions=${this.actions}
|
||||
.styleTemplate=${() => this.styleTemplate()}
|
||||
.autoloading="${this.autoloading}"
|
||||
|
Loading…
Reference in New Issue
Block a user