Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions src/data/zha.ts
Original file line number Diff line number Diff line change
Expand Up @@ -164,3 +164,12 @@ export const fetchGroups = (hass: HomeAssistant): Promise<ZHAGroup[]> =>
hass.callWS({
type: "zha/groups",
});

export const removeGroups = (
hass: HomeAssistant,
groupIdsToRemove: number[]
): Promise<ZHAGroup[]> =>
hass.callWS({
type: "zha/group/remove",
group_ids: groupIdsToRemove,
});
61 changes: 60 additions & 1 deletion src/panels/config/zha/zha-groups-dashboard.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,22 @@ import {
css,
} from "lit-element";
import { HomeAssistant } from "../../../types";
import { ZHAGroup, fetchGroups } from "../../../data/zha";
import { ZHAGroup, fetchGroups, removeGroups } from "../../../data/zha";
import { sortZHAGroups } from "./functions";
import { SelectionChangedEvent } from "../../../components/data-table/ha-data-table";
import "@material/mwc-button";
import "@polymer/paper-spinner/paper-spinner";
import { haStyleDialog } from "../../../resources/styles";

@customElement("zha-groups-dashboard")
export class ZHAGroupsDashboard extends LitElement {
@property() public hass!: HomeAssistant;
@property() public narrow = false;
@property() public _groups!: ZHAGroup[];
@property() private _canRemove: boolean = false;
@property() private _processingRemove: boolean = false;

private _selectedGroupsToRemove: number[] = [];

public connectedCallback(): void {
super.connectedCallback();
Expand All @@ -37,9 +45,26 @@ export class ZHAGroupsDashboard extends LitElement {
.hass=${this.hass}
.narrow=${this.narrow}
.groups=${this._groups}
.selectable=${true}
@selection-changed=${this._handleRemoveSelectionChanged}
class="table"
></zha-groups-data-table>
</div>
<div class="paper-dialog-buttons">
<mwc-button
?disabled="${!this._canRemove}"
Comment thread
dmulcahey marked this conversation as resolved.
Outdated
@click="${this._removeGroup}"
class="button"
>
<paper-spinner
?active="${this._processingRemove}"
alt="Removing Groups"
Comment thread
dmulcahey marked this conversation as resolved.
Outdated
></paper-spinner>
${this.hass!.localize(
"ui.panel.config.zha.groups.remove_groups"
)}</mwc-button
>
</div>
</hass-subpage>
`;
}
Expand All @@ -48,8 +73,31 @@ export class ZHAGroupsDashboard extends LitElement {
this._groups = (await fetchGroups(this.hass!)).sort(sortZHAGroups);
}

private _handleRemoveSelectionChanged(ev: CustomEvent): void {
const changedSelection = ev.detail as SelectionChangedEvent;
const groupId = Number(changedSelection.id);
if (changedSelection.selected) {
this._selectedGroupsToRemove.push(groupId);
} else {
const index = this._selectedGroupsToRemove.indexOf(groupId);
if (index !== -1) {
this._selectedGroupsToRemove.splice(index, 1);
}
}
this._canRemove = this._selectedGroupsToRemove.length > 0;
}

private async _removeGroup(): Promise<void> {
this._processingRemove = true;
this._groups = await removeGroups(this.hass, this._selectedGroupsToRemove);
this._selectedGroupsToRemove = [];
this._canRemove = false;
this._processingRemove = false;
}

static get styles(): CSSResult[] {
return [
haStyleDialog,
Comment thread
dmulcahey marked this conversation as resolved.
Outdated
css`
.content {
padding: 4px;
Expand All @@ -65,6 +113,17 @@ export class ZHAGroupsDashboard extends LitElement {
height: 200px;
overflow: auto;
}
mwc-button paper-spinner {
width: 14px;
height: 14px;
margin-right: 20px;
}
paper-spinner {
display: none;
}
paper-spinner[active] {
display: block;
}
`,
];
}
Expand Down
2 changes: 2 additions & 0 deletions src/panels/config/zha/zha-groups-data-table.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ export class ZHAGroupsDataTable extends LitElement {
@property() public hass!: HomeAssistant;
@property() public narrow = false;
@property() public groups: ZHAGroup[] = [];
@property() public selectable = false;

private _columns = memoizeOne(
(narrow: boolean): DataTableColumnContainer =>
Expand Down Expand Up @@ -73,6 +74,7 @@ export class ZHAGroupsDataTable extends LitElement {
.columns=${this._columns(this.narrow)}
.data=${this.groups}
.id=${"group_id"}
.selectable=${this.selectable}
></ha-data-table>
`;
}
Expand Down
3 changes: 2 additions & 1 deletion src/translations/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -1445,7 +1445,8 @@
"group_id": "Group ID",
"members": "Members",
"header": "Zigbee Group Management",
"introduction": "Create and modify zigbee groups"
"introduction": "Create and modify zigbee groups",
"remove_groups": "Remove Groups"
}
},
"zwave": {
Expand Down