mirror of
https://github.com/home-assistant/frontend.git
synced 2025-12-20 02:38:53 +00:00
Fix label filter losing selections when searching (#28312)
This commit is contained in:
@@ -167,30 +167,33 @@ export class HaFilterLabels extends SubscribeMixin(LitElement) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private async _labelSelected(ev: CustomEvent<SelectedDetail<Set<number>>>) {
|
private async _labelSelected(ev: CustomEvent<SelectedDetail<Set<number>>>) {
|
||||||
if (!ev.detail.index.size) {
|
|
||||||
fireEvent(this, "data-table-filter-changed", {
|
|
||||||
value: [],
|
|
||||||
items: undefined,
|
|
||||||
});
|
|
||||||
this.value = [];
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const value: string[] = [];
|
|
||||||
const filteredLabels = this._filteredLabels(
|
const filteredLabels = this._filteredLabels(
|
||||||
this._labels,
|
this._labels,
|
||||||
this._filter,
|
this._filter,
|
||||||
this.value
|
this.value
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const filteredLabelIds = new Set(filteredLabels.map((l) => l.label_id));
|
||||||
|
|
||||||
|
// Keep previously selected labels that are not in the current filtered view
|
||||||
|
const preservedLabels = (this.value || []).filter(
|
||||||
|
(id) => !filteredLabelIds.has(id)
|
||||||
|
);
|
||||||
|
|
||||||
|
// Build the new selection from the filtered labels based on selected indices
|
||||||
|
const newlySelectedLabels: string[] = [];
|
||||||
for (const index of ev.detail.index) {
|
for (const index of ev.detail.index) {
|
||||||
const labelId = filteredLabels[index].label_id;
|
const labelId = filteredLabels[index]?.label_id;
|
||||||
value.push(labelId);
|
if (labelId) {
|
||||||
|
newlySelectedLabels.push(labelId);
|
||||||
}
|
}
|
||||||
this.value = value;
|
}
|
||||||
|
|
||||||
|
const value = [...preservedLabels, ...newlySelectedLabels];
|
||||||
|
this.value = value.length ? value : [];
|
||||||
|
|
||||||
fireEvent(this, "data-table-filter-changed", {
|
fireEvent(this, "data-table-filter-changed", {
|
||||||
value,
|
value: value.length ? value : undefined,
|
||||||
items: undefined,
|
items: undefined,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user