mirror of
https://github.com/home-assistant/frontend.git
synced 2025-07-25 18:26:35 +00:00
Save orig value + some cleanup
This commit is contained in:
parent
e895e91a11
commit
6a098ad0b5
@ -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
|
||||||
|
@ -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 = {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user