mirror of
https://github.com/EGroupware/egroupware.git
synced 2024-11-22 16:03:47 +01:00
Fix some issues when search results have option groups
- Options sometimes disappeared when selected - Count was off if one of the results was already selected
This commit is contained in:
parent
999a3298c0
commit
c2623dcb55
@ -855,13 +855,22 @@ export const Et2WithSearchMixin = dedupeMixin(<T extends Constructor<LitElement>
|
|||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const remote_option_index = this._remote_options.findIndex(o => o.value == value);
|
const filter = (options) =>
|
||||||
if(remote_option_index >= 0)
|
|
||||||
{
|
{
|
||||||
console.log("Keeping " + value, this._remote_options[remote_option_index]);
|
for(let i = options.length - 1; i >= 0; i--)
|
||||||
this._selected_remote.push(node.option);
|
{
|
||||||
this._remote_options.splice(remote_option_index, 1);
|
if(Array.isArray(options[i].value))
|
||||||
|
{
|
||||||
|
filter(options[i].value);
|
||||||
|
}
|
||||||
|
else if(options[i].value == value)
|
||||||
|
{
|
||||||
|
this._selected_remote.push(options[i]);
|
||||||
|
options.splice(i, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
filter(this._remote_options)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
@ -1123,7 +1132,7 @@ export const Et2WithSearchMixin = dedupeMixin(<T extends Constructor<LitElement>
|
|||||||
{
|
{
|
||||||
if(Array.isArray(option.value))
|
if(Array.isArray(option.value))
|
||||||
{
|
{
|
||||||
option.map(clear_flag)
|
option.value.map(clear_flag)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -1207,7 +1216,7 @@ export const Et2WithSearchMixin = dedupeMixin(<T extends Constructor<LitElement>
|
|||||||
filtered.splice(Et2WidgetWithSearch.RESULT_LIMIT);
|
filtered.splice(Et2WidgetWithSearch.RESULT_LIMIT);
|
||||||
}
|
}
|
||||||
// Add the matches
|
// Add the matches
|
||||||
this.processRemoteResults(filtered);
|
this._total_result_count -= this.processRemoteResults(filtered);
|
||||||
return filtered;
|
return filtered;
|
||||||
})
|
})
|
||||||
.catch((_err) =>
|
.catch((_err) =>
|
||||||
@ -1257,22 +1266,30 @@ export const Et2WithSearchMixin = dedupeMixin(<T extends Constructor<LitElement>
|
|||||||
this._total_result_count += results.length;
|
this._total_result_count += results.length;
|
||||||
}
|
}
|
||||||
let entries = cleanSelectOptions(results);
|
let entries = cleanSelectOptions(results);
|
||||||
this.processRemoteResults(entries);
|
let entryCount = entries.length;
|
||||||
|
this._total_result_count -= this.processRemoteResults(entries);
|
||||||
|
|
||||||
return entries;
|
return entries;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add in remote results
|
* Add in remote results
|
||||||
|
*
|
||||||
|
* Any results that already exist will be removed to avoid duplicates
|
||||||
|
*
|
||||||
* @param results
|
* @param results
|
||||||
|
* @return Duplicate count
|
||||||
* @protected
|
* @protected
|
||||||
*/
|
*/
|
||||||
protected processRemoteResults(entries)
|
protected processRemoteResults(entries)
|
||||||
{
|
{
|
||||||
if(!entries?.length)
|
if(!entries?.length)
|
||||||
{
|
{
|
||||||
return Promise.resolve();
|
return 0;
|
||||||
}
|
}
|
||||||
|
let duplicateCount = 0;
|
||||||
|
|
||||||
const process = (entries) =>
|
const process = (entries) =>
|
||||||
{
|
{
|
||||||
// Add a "remote" class so we can tell these apart from any local results
|
// Add a "remote" class so we can tell these apart from any local results
|
||||||
@ -1294,6 +1311,7 @@ export const Et2WithSearchMixin = dedupeMixin(<T extends Constructor<LitElement>
|
|||||||
// Avoid duplicates with existing options
|
// Avoid duplicates with existing options
|
||||||
if(this.select_options.some(o => o.value == entry.value))
|
if(this.select_options.some(o => o.value == entry.value))
|
||||||
{
|
{
|
||||||
|
duplicateCount++
|
||||||
entries.splice(i, 1);
|
entries.splice(i, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1302,6 +1320,8 @@ export const Et2WithSearchMixin = dedupeMixin(<T extends Constructor<LitElement>
|
|||||||
|
|
||||||
this._remote_options = entries;
|
this._remote_options = entries;
|
||||||
this.requestUpdate("select_options");
|
this.requestUpdate("select_options");
|
||||||
|
|
||||||
|
return duplicateCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user