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.
77 lines
1.8 KiB
77 lines
1.8 KiB
import { observable } from "mobx"; |
|
import { serialize } from "serializr"; |
|
|
|
import { Schedule } from "./schedule"; |
|
import * as schema from "./schema"; |
|
import { SprinklersDevice } from "./SprinklersDevice"; |
|
|
|
export class ProgramItem { |
|
// the section number |
|
readonly section!: number; |
|
// duration of the run, in seconds |
|
readonly duration!: number; |
|
|
|
constructor(data?: Partial<ProgramItem>) { |
|
if (data) { |
|
Object.assign(this, data); |
|
} |
|
} |
|
} |
|
|
|
export class Program { |
|
readonly device: SprinklersDevice; |
|
readonly id: number; |
|
|
|
@observable |
|
name: string = ""; |
|
@observable |
|
enabled: boolean = false; |
|
@observable |
|
schedule: Schedule = new Schedule(); |
|
@observable.shallow |
|
sequence: ProgramItem[] = []; |
|
@observable |
|
running: boolean = false; |
|
@observable |
|
nextRun: Date | null = null; |
|
|
|
constructor(device: SprinklersDevice, id: number, data?: Partial<Program>) { |
|
this.device = device; |
|
this.id = id; |
|
if (data) { |
|
Object.assign(this, data); |
|
} |
|
} |
|
|
|
run() { |
|
return this.device.runProgram({ programId: this.id }); |
|
} |
|
|
|
cancel() { |
|
return this.device.cancelProgram({ programId: this.id }); |
|
} |
|
|
|
update() { |
|
const data = serialize(schema.program, this); |
|
return this.device.updateProgram({ programId: this.id, data }); |
|
} |
|
|
|
clone(): Program { |
|
return new Program(this.device, this.id, { |
|
name: this.name, |
|
enabled: this.enabled, |
|
running: this.running, |
|
schedule: this.schedule.clone(), |
|
sequence: this.sequence.slice(), |
|
nextRun: this.nextRun, |
|
}); |
|
} |
|
|
|
toString(): string { |
|
return ( |
|
`Program{name="${this.name}", enabled=${this.enabled}, schedule=${ |
|
this.schedule |
|
}, ` + `sequence=${this.sequence}, running=${this.running}, nextRun=${this.nextRun}}` |
|
); |
|
} |
|
}
|
|
|