You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
40 lines
1.5 KiB
40 lines
1.5 KiB
import * as React from "react"; |
|
import {Input} from "semantic-ui-react"; |
|
import {Duration} from "../sprinklers"; |
|
|
|
export default class DurationInput extends React.Component<{ |
|
duration: Duration, |
|
onDurationChange?: (newDuration: Duration) => void; |
|
}, {}> { |
|
render() { |
|
const duration = this.props.duration; |
|
// const editing = this.props.onDurationChange != null; |
|
return <div className="field durationInput"> |
|
<label>Duration</label> |
|
<div className="fields"> |
|
<Input type="number" className="field durationInput--minutes" |
|
value={duration.minutes} onChange={this.onMinutesChange} |
|
label="M" labelPosition="right"/> |
|
<Input type="number" className="field durationInput--seconds" |
|
value={duration.seconds} onChange={this.onSecondsChange} max="60" |
|
label="S" labelPosition="right"/> |
|
</div> |
|
</div>; |
|
} |
|
|
|
private onMinutesChange = (e, {value}) => { |
|
if (value.length === 0 || isNaN(value)) { |
|
return; |
|
} |
|
const newMinutes = parseInt(value, 10); |
|
this.props.onDurationChange(this.props.duration.withMinutes(newMinutes)); |
|
} |
|
|
|
private onSecondsChange = (e, {value}) => { |
|
if (value.length === 0 || isNaN(value)) { |
|
return; |
|
} |
|
const newSeconds = parseInt(value, 10); |
|
this.props.onDurationChange(this.props.duration.withSeconds(newSeconds)); |
|
} |
|
}
|
|
|