|
|
|
import { observer } from "mobx-react";
|
|
|
|
import * as React from "react";
|
|
|
|
import { Form } from "semantic-ui-react";
|
|
|
|
|
|
|
|
import {
|
|
|
|
DateOfYear,
|
|
|
|
Schedule,
|
|
|
|
TimeOfDay,
|
|
|
|
Weekday
|
|
|
|
} from "@common/sprinklersRpc";
|
|
|
|
import ScheduleDate from "./ScheduleDate";
|
|
|
|
import ScheduleTimes from "./ScheduleTimes";
|
|
|
|
import WeekdaysView from "./WeekdaysView";
|
|
|
|
|
|
|
|
import "@client/styles/ScheduleView";
|
|
|
|
import { action } from "mobx";
|
|
|
|
|
|
|
|
export interface ScheduleViewProps {
|
|
|
|
label?: string | React.ReactNode | undefined;
|
|
|
|
schedule: Schedule;
|
|
|
|
editing?: boolean;
|
|
|
|
}
|
|
|
|
|
|
|
|
@observer
|
|
|
|
export default class ScheduleView extends React.Component<ScheduleViewProps> {
|
|
|
|
render() {
|
|
|
|
const { schedule, label } = this.props;
|
|
|
|
const editing = this.props.editing || false;
|
|
|
|
|
|
|
|
let labelNode: React.ReactNode;
|
|
|
|
if (typeof label === "string") {
|
|
|
|
labelNode = <label>{label}</label>;
|
|
|
|
} else if (label != null) {
|
|
|
|
labelNode = label;
|
|
|
|
}
|
|
|
|
|
|
|
|
return (
|
|
|
|
<Form.Field className="scheduleView">
|
|
|
|
{labelNode}
|
|
|
|
<ScheduleTimes
|
|
|
|
times={schedule.times}
|
|
|
|
editing={editing}
|
|
|
|
onChange={this.updateTimes}
|
|
|
|
/>
|
|
|
|
<WeekdaysView
|
|
|
|
weekdays={schedule.weekdays}
|
|
|
|
editing={editing}
|
|
|
|
onChange={this.updateWeekdays}
|
|
|
|
/>
|
|
|
|
<ScheduleDate
|
|
|
|
label="From"
|
|
|
|
date={schedule.from}
|
|
|
|
editing={editing}
|
|
|
|
onChange={this.updateFromDate}
|
|
|
|
/>
|
|
|
|
<ScheduleDate
|
|
|
|
label="To"
|
|
|
|
date={schedule.to}
|
|
|
|
editing={editing}
|
|
|
|
onChange={this.updateToDate}
|
|
|
|
/>
|
|
|
|
</Form.Field>
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
@action.bound
|
|
|
|
private updateTimes(newTimes: TimeOfDay[]) {
|
|
|
|
this.props.schedule.times = newTimes;
|
|
|
|
}
|
|
|
|
|
|
|
|
@action.bound
|
|
|
|
private updateWeekdays(newWeekdays: Weekday[]) {
|
|
|
|
this.props.schedule.weekdays = newWeekdays;
|
|
|
|
}
|
|
|
|
|
|
|
|
@action.bound
|
|
|
|
private updateFromDate(newFromDate: DateOfYear | null) {
|
|
|
|
this.props.schedule.from = newFromDate;
|
|
|
|
}
|
|
|
|
|
|
|
|
@action.bound
|
|
|
|
private updateToDate(newToDate: DateOfYear | null) {
|
|
|
|
this.props.schedule.to = newToDate;
|
|
|
|
}
|
|
|
|
}
|