Save orig value + some cleanup

This commit is contained in:
Bram Kragten 2019-10-09 13:34:34 +02:00
parent e895e91a11
commit 6a098ad0b5
2 changed files with 46 additions and 41 deletions

View File

@ -187,7 +187,10 @@ class HaForm extends EventsMixin(PolymerElement) {
// schema object. // schema object.
computeSuffix: { computeSuffix: {
type: Function, type: Function,
value: () => () => "abc", value: () => (schema) =>
schema &&
schema.description &&
schema.description.unit_of_measurement,
}, },
// A function that computes an error message to be displayed for a // A function that computes an error message to be displayed for a

View File

@ -4,9 +4,14 @@ import "../../../../components/device/ha-device-picker";
import "../../../../components/device/ha-device-trigger-picker"; import "../../../../components/device/ha-device-trigger-picker";
import "../../../../components/ha-form"; import "../../../../components/ha-form";
import { fetchDeviceTriggerCapabilities } from "../../../../data/device_automation"; import {
fetchDeviceTriggerCapabilities,
deviceAutomationsEqual,
} from "../../../../data/device_automation";
export default class DeviceTrigger extends Component<any, any> { export default class DeviceTrigger extends Component<any, any> {
private _origTrigger;
constructor() { constructor() {
super(); super();
this.devicePicked = this.devicePicked.bind(this); this.devicePicked = this.devicePicked.bind(this);
@ -19,30 +24,28 @@ export default class DeviceTrigger extends Component<any, any> {
this.setState({ ...this.state, device_id: ev.target.value }); this.setState({ ...this.state, device_id: ev.target.value });
} }
public async deviceTriggerPicked(ev) { public deviceTriggerPicked(ev) {
const deviceTrigger = ev.target.value; let trigger = ev.target.value;
const capabilities = deviceTrigger.domain if (
? await fetchDeviceTriggerCapabilities(this.props.hass, deviceTrigger) this._origTrigger &&
: null; deviceAutomationsEqual(this._origTrigger, trigger)
this.setState({ ...this.state, capabilities }); ) {
this.props.onChange(this.props.index, deviceTrigger); trigger = this._origTrigger;
}
this.props.onChange(this.props.index, trigger);
} }
/* eslint-disable camelcase */ /* eslint-disable camelcase */
public render({ trigger, hass }, { device_id }) { public render({ trigger, hass }, { device_id, capabilities }) {
if (device_id === undefined) { if (device_id === undefined) {
device_id = trigger.device_id; device_id = trigger.device_id;
} }
let extraFieldsData = {}; const extraFieldsData =
if (this.state.capabilities && this.state.capabilities.extra_fields) { capabilities && capabilities.extra_fields
this.state.capabilities.extra_fields.forEach( ? capabilities.extra_fields.map((item) => {
(item) => return { [item.name]: this.props.trigger[item.name] };
(extraFieldsData = {
...extraFieldsData,
[item.name]: this.props.trigger[item.name],
}) })
); : undefined;
}
return ( return (
<div> <div>
@ -59,15 +62,12 @@ export default class DeviceTrigger extends Component<any, any> {
hass={hass} hass={hass}
label="Trigger" label="Trigger"
/> />
{this.state.capabilities && this.state.capabilities.extra_fields && ( {extraFieldsData && (
<ha-form <ha-form
data={extraFieldsData} data={Object.assign({}, ...extraFieldsData)}
onData-changed={this._extraFieldsChanged} onData-changed={this._extraFieldsChanged}
schema={this.state.capabilities.extra_fields} schema={this.state.capabilities.extra_fields}
// error={step.errors} // TODO
computeLabel={this._extraFieldsComputeLabelCallback(hass.localize)} computeLabel={this._extraFieldsComputeLabelCallback(hass.localize)}
computeSuffix={this._extraFieldsComputeSuffixCallback()}
// computeError={this._extraFieldsComputeErrorCallback} // TODO
/> />
)} )}
</div> </div>
@ -75,14 +75,27 @@ export default class DeviceTrigger extends Component<any, any> {
} }
public componentDidMount() { public componentDidMount() {
const hass = this.props.hass; if (!this.state.capabilities) {
this._getCapabilities();
}
if (this.props.trigger) {
this._origTrigger = this.props.trigger;
}
}
public componentDidUpdate(prevProps) {
if (prevProps.trigger !== this.props.trigger) {
this._getCapabilities();
}
}
private async _getCapabilities() {
const trigger = this.props.trigger; const trigger = this.props.trigger;
if (!this.state.capabilities && trigger.domain) { const capabilities = trigger.domain
fetchDeviceTriggerCapabilities(hass, trigger).then((capabilities) => { ? await fetchDeviceTriggerCapabilities(this.props.hass, trigger)
this.setState({ ...this.state, capabilities }); : null;
}); this.setState({ ...this.state, capabilities });
}
} }
private _extraFieldsChanged(ev) { private _extraFieldsChanged(ev) {
@ -107,17 +120,6 @@ export default class DeviceTrigger extends Component<any, any> {
}` }`
) || schema.name; ) || schema.name;
} }
private _extraFieldsComputeSuffixCallback() {
// Returns a callback for ha-form to calculate suffixes per schema object
return (schema) => {
let description = "";
if (schema.description) {
description = schema.description.unit_of_measurement || "";
}
return description;
};
}
} }
(DeviceTrigger as any).defaultConfig = { (DeviceTrigger as any).defaultConfig = {