mirror of
https://github.com/EGroupware/egroupware.git
synced 2024-12-27 09:09:04 +01:00
Select account: sort options
This commit is contained in:
parent
efe5b51d26
commit
4dfbbc99da
@ -444,7 +444,7 @@ export const Et2WithSearchMixin = dedupeMixin(<T extends Constructor<LitElement>
|
|||||||
{
|
{
|
||||||
await this.updateComplete;
|
await this.updateComplete;
|
||||||
const moreCount = this._total_result_count - this.select?.querySelectorAll("sl-option.match").length;
|
const moreCount = this._total_result_count - this.select?.querySelectorAll("sl-option.match").length;
|
||||||
if(this._total_result_count == 0 || moreCount == 0 || !this.select)
|
if(this._total_result_count <= 0 || moreCount == 0 || !this.select)
|
||||||
{
|
{
|
||||||
return nothing;
|
return nothing;
|
||||||
}
|
}
|
||||||
|
@ -74,6 +74,14 @@ export const SelectAccountMixin = <T extends Constructor<LitElement>>(superclass
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* OVerridden to do nothing, we handle it differently in _find_options()
|
||||||
|
* @param {string} newValueElement
|
||||||
|
* @protected
|
||||||
|
*/
|
||||||
|
protected _missingOption(newValueElement : string)
|
||||||
|
{}
|
||||||
|
|
||||||
_find_options(val)
|
_find_options(val)
|
||||||
{
|
{
|
||||||
for(let id of val)
|
for(let id of val)
|
||||||
@ -100,6 +108,7 @@ export const SelectAccountMixin = <T extends Constructor<LitElement>>(superclass
|
|||||||
option.label = title || '';
|
option.label = title || '';
|
||||||
this.requestUpdate();
|
this.requestUpdate();
|
||||||
|
|
||||||
|
this.account_options.sort(this.optionSort);
|
||||||
// Directly update if it's already there
|
// Directly update if it's already there
|
||||||
const slOption = this.select?.querySelector('[value="' + id + '"]');
|
const slOption = this.select?.querySelector('[value="' + id + '"]');
|
||||||
if(slOption)
|
if(slOption)
|
||||||
@ -111,6 +120,7 @@ export const SelectAccountMixin = <T extends Constructor<LitElement>>(superclass
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
this.account_options.sort(this.optionSort);
|
||||||
}
|
}
|
||||||
|
|
||||||
get value()
|
get value()
|
||||||
@ -121,13 +131,41 @@ export const SelectAccountMixin = <T extends Constructor<LitElement>>(superclass
|
|||||||
get select_options()
|
get select_options()
|
||||||
{
|
{
|
||||||
return [...new Map([...this.account_options, ...(super.select_options || [])].map(item =>
|
return [...new Map([...this.account_options, ...(super.select_options || [])].map(item =>
|
||||||
[item.value, item])).values()];
|
[item.value, item])).values()].sort(this.optionSort);
|
||||||
}
|
}
|
||||||
|
|
||||||
set select_options(value : SelectOption[])
|
set select_options(value : SelectOption[])
|
||||||
{
|
{
|
||||||
super.select_options = value;
|
super.select_options = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sort options
|
||||||
|
* @param a
|
||||||
|
* @param b
|
||||||
|
* @returns {number}
|
||||||
|
* @protected
|
||||||
|
*/
|
||||||
|
protected optionSort(a : SelectOption, b : SelectOption)
|
||||||
|
{
|
||||||
|
// Sort accounts before groups, then by label
|
||||||
|
let int_a = 0;
|
||||||
|
let int_b = 0;
|
||||||
|
if(typeof a.value === "string")
|
||||||
|
{
|
||||||
|
int_a = parseInt(a.value) ?? 0;
|
||||||
|
}
|
||||||
|
if(typeof b.value === "string")
|
||||||
|
{
|
||||||
|
int_b = parseInt(b.value) ?? 0;
|
||||||
|
}
|
||||||
|
if(int_a < 0 && int_b < 0 || int_a > 0 && int_b > 0)
|
||||||
|
{
|
||||||
|
return ('' + a.label).localeCompare(b.label);
|
||||||
|
}
|
||||||
|
// Accounts before groups
|
||||||
|
return int_b - int_a;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return SelectAccount as unknown as Constructor<SelectAccountInterface> & T;
|
return SelectAccount as unknown as Constructor<SelectAccountInterface> & T;
|
||||||
|
Loading…
Reference in New Issue
Block a user