Create more-for timer with action buttons (#3621)

* Create more-for timer with action buttons

Closes https://github.com/home-assistant/home-assistant-polymer/issues/3594

* center actions

* Address review comments

* address review comments
This commit is contained in:
Ian Richardson 2019-09-06 22:13:05 -05:00 committed by GitHub
parent 2ff4d0fa4b
commit cbd01f2d68
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 125 additions and 0 deletions

View File

@ -45,6 +45,7 @@ export const DOMAINS_WITH_MORE_INFO = [
"media_player",
"script",
"sun",
"timer",
"updater",
"vacuum",
"water_heater",

11
src/data/timer.ts Normal file
View File

@ -0,0 +1,11 @@
import {
HassEntityBase,
HassEntityAttributeBase,
} from "home-assistant-js-websocket";
export type TimerEntity = HassEntityBase & {
attributes: HassEntityAttributeBase & {
duration: string;
remaining: string;
};
};

View File

@ -21,6 +21,7 @@ import "./more-info-lock";
import "./more-info-media_player";
import "./more-info-script";
import "./more-info-sun";
import "./more-info-timer";
import "./more-info-updater";
import "./more-info-vacuum";
import "./more-info-water_heater";

View File

@ -0,0 +1,104 @@
import {
LitElement,
html,
TemplateResult,
CSSResult,
css,
property,
PropertyValues,
customElement,
} from "lit-element";
import "@material/mwc-button";
import { HomeAssistant } from "../../../types";
import { TimerEntity } from "../../../data/timer";
@customElement("more-info-timer")
class MoreInfoTimer extends LitElement {
@property() public hass!: HomeAssistant;
@property() public stateObj?: TimerEntity;
protected render(): TemplateResult | void {
if (!this.hass || !this.stateObj) {
return html``;
}
return html`
<ha-attributes
.stateObj=${this.stateObj}
.extraFilters=${"remaining"}
></ha-attributes>
<div class="actions">
${this.stateObj.state === "idle" || this.stateObj.state === "paused"
? html`
<mwc-button
.action="${"start"}"
@click="${this._handleActionClick}"
>
${this.hass!.localize("ui.card.timer.actions.start")}
</mwc-button>
`
: ""}
${this.stateObj.state === "active"
? html`
<mwc-button
.action="${"pause"}"
@click="${this._handleActionClick}"
>
${this.hass!.localize("ui.card.timer.actions.pause")}
</mwc-button>
`
: ""}
${this.stateObj.state === "active" || this.stateObj.state === "paused"
? html`
<mwc-button
.action="${"cancel"}"
@click="${this._handleActionClick}"
>
${this.hass!.localize("ui.card.timer.actions.cancel")}
</mwc-button>
<mwc-button
.action="${"finish"}"
@click="${this._handleActionClick}"
>
${this.hass!.localize("ui.card.timer.actions.finish")}
</mwc-button>
`
: ""}
</div>
`;
}
protected updated(changedProps: PropertyValues) {
super.updated(changedProps);
if (!changedProps.has("stateObj") || !this.stateObj) {
return;
}
}
private _handleActionClick(e: MouseEvent): void {
const action = (e.currentTarget as any).action;
this.hass.callService("timer", action, {
entity_id: this.stateObj!.entity_id,
});
}
static get styles(): CSSResult {
return css`
.actions {
margin: 0 8px;
padding-top: 20px;
display: flex;
flex-wrap: wrap;
justify-content: center;
}
`;
}
}
declare global {
interface HTMLElementTagNameMap {
"more-info-timer": MoreInfoTimer;
}
}

View File

@ -446,6 +446,14 @@
"script": {
"execute": "Execute"
},
"timer": {
"actions": {
"start": "start",
"pause": "pause",
"cancel": "cancel",
"finish": "finish"
}
},
"vacuum": {
"actions": {
"resume_cleaning": "Resume cleaning",