parent
6182b9aed0
commit
18b21025d9
|
@ -507,9 +507,13 @@ export default class AddSignals extends Component {
|
||||||
this.setState({ signals });
|
this.setState({ signals });
|
||||||
};
|
};
|
||||||
|
|
||||||
onSignalChange = (signal, oldSignal) => {
|
onSignalChange = (signal) => {
|
||||||
const { signals } = this.state;
|
const { signals } = this.state;
|
||||||
|
|
||||||
|
if (signal.name in signals && signals[signal.name].uid !== signal.uid) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
for (const signalName in signals) {
|
for (const signalName in signals) {
|
||||||
if (signals[signalName].uid === signal.uid) {
|
if (signals[signalName].uid === signal.uid) {
|
||||||
delete signals[signalName];
|
delete signals[signalName];
|
||||||
|
@ -518,6 +522,7 @@ export default class AddSignals extends Component {
|
||||||
signals[signal.name] = signal;
|
signals[signal.name] = signal;
|
||||||
|
|
||||||
this.setState({ signals }, this.propagateUpSignalChange);
|
this.setState({ signals }, this.propagateUpSignalChange);
|
||||||
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
onSignalRemove = (signal) => {
|
onSignalRemove = (signal) => {
|
||||||
|
|
|
@ -95,6 +95,15 @@
|
||||||
}
|
}
|
||||||
&-form {
|
&-form {
|
||||||
&-field {
|
&-field {
|
||||||
|
&-error {
|
||||||
|
input,
|
||||||
|
select {
|
||||||
|
border-color: rgb(220, 0, 0);
|
||||||
|
&:focus {
|
||||||
|
border-color: rgb(220, 0, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
min-height: $input-height;
|
min-height: $input-height;
|
||||||
padding: 1px 0;
|
padding: 1px 0;
|
||||||
@extend %clearfix;
|
@extend %clearfix;
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
import cx from 'classnames';
|
||||||
|
|
||||||
import FIELDS from './FIELDS';
|
import FIELDS from './FIELDS';
|
||||||
import NumberField from './NumberField';
|
import NumberField from './NumberField';
|
||||||
|
@ -16,13 +17,15 @@ export default ({
|
||||||
onSignalRemove,
|
onSignalRemove,
|
||||||
isExpanded,
|
isExpanded,
|
||||||
getSignalEdited,
|
getSignalEdited,
|
||||||
|
fieldError,
|
||||||
update
|
update
|
||||||
}) => (
|
}) => (
|
||||||
<div className="signals-legend-entry-form">
|
<div className="signals-legend-entry-form">
|
||||||
{FIELDS.map((field) => {
|
{FIELDS.map((field) => {
|
||||||
const Node = FieldMap[field.type];
|
const Node = FieldMap[field.type];
|
||||||
|
const errorClass = fieldError === field.field ? 'signals-legend-entry-form-field-error' : null;
|
||||||
return (
|
return (
|
||||||
<div className="signals-legend-entry-form-field" key={field.field}>
|
<div className={cx("signals-legend-entry-form-field", errorClass)} key={field.field}>
|
||||||
<Node
|
<Node
|
||||||
fieldSpec={field}
|
fieldSpec={field}
|
||||||
signal={signal}
|
signal={signal}
|
||||||
|
|
|
@ -29,6 +29,7 @@ export default class SignalLegendEntry extends Component {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
super(props);
|
super(props);
|
||||||
this.state = {
|
this.state = {
|
||||||
|
fieldError: null,
|
||||||
signalEdited: Object.assign(Object.create(props.signal), props.signal)
|
signalEdited: Object.assign(Object.create(props.signal), props.signal)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -36,6 +37,7 @@ export default class SignalLegendEntry extends Component {
|
||||||
componentDidUpdate(prevProps) {
|
componentDidUpdate(prevProps) {
|
||||||
if (!this.props.signal.equals(prevProps.signal)) {
|
if (!this.props.signal.equals(prevProps.signal)) {
|
||||||
this.setState({
|
this.setState({
|
||||||
|
fieldError: null,
|
||||||
signalEdited: Object.assign(
|
signalEdited: Object.assign(
|
||||||
Object.create(this.props.signal),
|
Object.create(this.props.signal),
|
||||||
this.props.signal
|
this.props.signal
|
||||||
|
@ -60,7 +62,9 @@ export default class SignalLegendEntry extends Component {
|
||||||
Object.entries(signalEdited).forEach(([field, value]) => {
|
Object.entries(signalEdited).forEach(([field, value]) => {
|
||||||
signalCopy[field] = value;
|
signalCopy[field] = value;
|
||||||
});
|
});
|
||||||
this.props.onSignalChange(signalCopy, signal);
|
|
||||||
|
const updated = this.props.onSignalChange(signalCopy);
|
||||||
|
this.setState({ fieldError: !updated ? fieldSpec.field : null });
|
||||||
};
|
};
|
||||||
|
|
||||||
toggleEditing = (e) => {
|
toggleEditing = (e) => {
|
||||||
|
@ -87,14 +91,15 @@ export default class SignalLegendEntry extends Component {
|
||||||
|
|
||||||
signalCopy[field] = value;
|
signalCopy[field] = value;
|
||||||
});
|
});
|
||||||
this.props.onSignalChange(signalCopy, signal);
|
this.props.onSignalChange(signalCopy);
|
||||||
} else {
|
} else {
|
||||||
signalEdited = signalCopy;
|
signalEdited = signalCopy;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Expand and enable signal editing
|
// Expand and enable signal editing
|
||||||
this.setState({
|
this.setState({
|
||||||
signalEdited
|
fieldError: null,
|
||||||
|
signalEdited,
|
||||||
});
|
});
|
||||||
this.props.toggleExpandSignal(signal);
|
this.props.toggleExpandSignal(signal);
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
|
@ -148,6 +153,7 @@ export default class SignalLegendEntry extends Component {
|
||||||
onSignalRemove={this.props.onSignalRemove}
|
onSignalRemove={this.props.onSignalRemove}
|
||||||
isExpanded={isExpanded}
|
isExpanded={isExpanded}
|
||||||
getSignalEdited={this.getSignalEdited}
|
getSignalEdited={this.getSignalEdited}
|
||||||
|
fieldError={this.state.fieldError}
|
||||||
update={this.updateField}
|
update={this.updateField}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
|
|
Loading…
Reference in New Issue