sprinklers3/app/components/ProgramTable.tsx

79 lines
2.9 KiB
TypeScript
Raw Normal View History

2017-08-29 23:21:36 -06:00
import { observer } from "mobx-react";
import * as React from "react";
2017-10-10 18:00:01 -06:00
import { Button, Table } from "semantic-ui-react";
2017-10-10 16:34:02 -06:00
import { Duration } from "@common/Duration";
import { Program, Schedule } from "@common/sprinklers";
@observer
2017-08-29 23:21:36 -06:00
export class ScheduleView extends React.Component<{ schedule: Schedule }> {
render() {
return (
<div>{JSON.stringify(this.props.schedule)}</div>
);
}
}
@observer
2017-08-29 23:21:36 -06:00
export default class ProgramTable extends React.Component<{ programs: Program[] }> {
2017-08-29 22:42:56 -06:00
private static renderRows(program: Program, i: number): JSX.Element[] | null {
if (!program) {
return null;
}
2017-08-29 23:21:36 -06:00
const { name, running, enabled, schedule, sequence } = program;
2017-10-10 16:34:02 -06:00
const sequenceItems = sequence.map((item, index) => {
const duration = Duration.fromSeconds(item.duration);
return (
<li key={index}>Section {item.section + 1 + ""} for {duration.toString()}</li>
);
});
2017-10-10 18:00:01 -06:00
const cancelOrRun = () => running ? program.cancel() : program.run();
2017-08-29 23:21:36 -06:00
return [(
<Table.Row key={i}>
<Table.Cell className="program--number">{"" + (i + 1)}</Table.Cell>
<Table.Cell className="program--name">{name}</Table.Cell>
2017-10-10 18:00:01 -06:00
<Table.Cell className="program--running">
{running ? "Running" : "Not running"}
<Button onClick={cancelOrRun}>
{running ? "Cancel" : "Run"}
</Button>
</Table.Cell>
<Table.Cell className="program--enabled">{enabled ? "Enabled" : "Not enabled"}</Table.Cell>
</Table.Row>
2017-08-29 23:21:36 -06:00
), (
<Table.Row key={i + .5}>
<Table.Cell className="program--sequence" colSpan="4">
<ul>
2017-08-29 23:21:36 -06:00
{sequenceItems}
</ul>
2017-08-29 23:21:36 -06:00
<ScheduleView schedule={schedule} />
</Table.Cell>
</Table.Row>
2017-08-29 23:21:36 -06:00
)];
}
render() {
2017-08-29 23:21:36 -06:00
const programRows = Array.prototype.concat.apply([],
this.props.programs.map(ProgramTable.renderRows));
return (
<Table celled>
<Table.Header>
<Table.Row>
<Table.HeaderCell colSpan="7">Programs</Table.HeaderCell>
</Table.Row>
<Table.Row>
<Table.HeaderCell className="program--number">#</Table.HeaderCell>
<Table.HeaderCell className="program--name">Name</Table.HeaderCell>
<Table.HeaderCell className="program--running">Running?</Table.HeaderCell>
<Table.HeaderCell className="program--enabled">Enabled?</Table.HeaderCell>
</Table.Row>
</Table.Header>
<Table.Body>
2017-08-29 23:21:36 -06:00
{programRows}
</Table.Body>
</Table>
);
}
}