mirror of
https://github.com/home-assistant/frontend.git
synced 2025-07-28 19:56:42 +00:00
Add collapse & expand all groups (#20891)
* Add collapse & expand all groups * review suggestion
This commit is contained in:
parent
7a7a355765
commit
5a2977f4d4
@ -730,6 +730,28 @@ export class HaDataTable extends LitElement {
|
|||||||
fireEvent(this, "collapsed-changed", { value: this._collapsedGroups });
|
fireEvent(this, "collapsed-changed", { value: this._collapsedGroups });
|
||||||
};
|
};
|
||||||
|
|
||||||
|
public expandAllGroups() {
|
||||||
|
this._collapsedGroups = [];
|
||||||
|
fireEvent(this, "collapsed-changed", { value: this._collapsedGroups });
|
||||||
|
}
|
||||||
|
|
||||||
|
public collapseAllGroups() {
|
||||||
|
if (
|
||||||
|
!this.groupColumn ||
|
||||||
|
!this.data.some((item) => item[this.groupColumn!])
|
||||||
|
) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const grouped = groupBy(this.data, (item) => item[this.groupColumn!]);
|
||||||
|
if (grouped.undefined) {
|
||||||
|
// undefined is a reserved group name
|
||||||
|
grouped[UNDEFINED_GROUP_KEY] = grouped.undefined;
|
||||||
|
delete grouped.undefined;
|
||||||
|
}
|
||||||
|
this._collapsedGroups = Object.keys(grouped);
|
||||||
|
fireEvent(this, "collapsed-changed", { value: this._collapsedGroups });
|
||||||
|
}
|
||||||
|
|
||||||
static get styles(): CSSResultGroup {
|
static get styles(): CSSResultGroup {
|
||||||
return [
|
return [
|
||||||
haStyleScrollbar,
|
haStyleScrollbar,
|
||||||
|
@ -10,6 +10,8 @@ import {
|
|||||||
mdiFilterVariantRemove,
|
mdiFilterVariantRemove,
|
||||||
mdiFormatListChecks,
|
mdiFormatListChecks,
|
||||||
mdiMenuDown,
|
mdiMenuDown,
|
||||||
|
mdiUnfoldLessHorizontal,
|
||||||
|
mdiUnfoldMoreHorizontal,
|
||||||
} from "@mdi/js";
|
} from "@mdi/js";
|
||||||
import {
|
import {
|
||||||
CSSResultGroup,
|
CSSResultGroup,
|
||||||
@ -466,7 +468,6 @@ export class HaTabsSubpageDataTable extends LitElement {
|
|||||||
`
|
`
|
||||||
: nothing
|
: nothing
|
||||||
)}
|
)}
|
||||||
<md-divider role="separator" tabindex="-1"></md-divider>
|
|
||||||
<ha-menu-item
|
<ha-menu-item
|
||||||
.value=${undefined}
|
.value=${undefined}
|
||||||
@click=${this._handleGroupBy}
|
@click=${this._handleGroupBy}
|
||||||
@ -475,6 +476,27 @@ export class HaTabsSubpageDataTable extends LitElement {
|
|||||||
>
|
>
|
||||||
${localize("ui.components.subpage-data-table.dont_group_by")}
|
${localize("ui.components.subpage-data-table.dont_group_by")}
|
||||||
</ha-menu-item>
|
</ha-menu-item>
|
||||||
|
<md-divider role="separator" tabindex="-1"></md-divider>
|
||||||
|
<ha-menu-item
|
||||||
|
@click=${this._collapseAllGroups}
|
||||||
|
.disabled=${this._groupColumn === undefined}
|
||||||
|
>
|
||||||
|
<ha-svg-icon
|
||||||
|
slot="start"
|
||||||
|
.path=${mdiUnfoldLessHorizontal}
|
||||||
|
></ha-svg-icon>
|
||||||
|
${localize("ui.components.subpage-data-table.collapse_all_groups")}
|
||||||
|
</ha-menu-item>
|
||||||
|
<ha-menu-item
|
||||||
|
@click=${this._expandAllGroups}
|
||||||
|
.disabled=${this._groupColumn === undefined}
|
||||||
|
>
|
||||||
|
<ha-svg-icon
|
||||||
|
slot="start"
|
||||||
|
.path=${mdiUnfoldMoreHorizontal}
|
||||||
|
></ha-svg-icon>
|
||||||
|
${localize("ui.components.subpage-data-table.expand_all_groups")}
|
||||||
|
</ha-menu-item>
|
||||||
</ha-menu>
|
</ha-menu>
|
||||||
<ha-menu anchor="sort-by-anchor" id="sort-by-menu" positioning="fixed">
|
<ha-menu anchor="sort-by-anchor" id="sort-by-menu" positioning="fixed">
|
||||||
${Object.entries(this.columns).map(([id, column]) =>
|
${Object.entries(this.columns).map(([id, column]) =>
|
||||||
@ -586,6 +608,14 @@ export class HaTabsSubpageDataTable extends LitElement {
|
|||||||
fireEvent(this, "grouping-changed", { value: columnId });
|
fireEvent(this, "grouping-changed", { value: columnId });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private _collapseAllGroups() {
|
||||||
|
this._dataTable.collapseAllGroups();
|
||||||
|
}
|
||||||
|
|
||||||
|
private _expandAllGroups() {
|
||||||
|
this._dataTable.expandAllGroups();
|
||||||
|
}
|
||||||
|
|
||||||
private _enableSelectMode() {
|
private _enableSelectMode() {
|
||||||
this._selectMode = true;
|
this._selectMode = true;
|
||||||
}
|
}
|
||||||
|
@ -517,6 +517,8 @@
|
|||||||
"sort_by": "Sort by {sortColumn}",
|
"sort_by": "Sort by {sortColumn}",
|
||||||
"group_by": "Group by {groupColumn}",
|
"group_by": "Group by {groupColumn}",
|
||||||
"dont_group_by": "Don't group",
|
"dont_group_by": "Don't group",
|
||||||
|
"collapse_all_groups": "Collapse all",
|
||||||
|
"expand_all_groups": "Expand all",
|
||||||
"select": "Select",
|
"select": "Select",
|
||||||
"selected": "Selected {selected}",
|
"selected": "Selected {selected}",
|
||||||
"close_select_mode": "Close selection mode",
|
"close_select_mode": "Close selection mode",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user