Farmbot-Web-App/frontend/regimens/reducer.ts

84 lines
2.1 KiB
TypeScript
Raw Normal View History

import _ from "lodash";
import { Dictionary, TaggedResource } from "farmbot";
2017-07-21 15:36:57 -06:00
import { Week, DAYS } from "./bulk_scheduler/interfaces";
2017-06-29 12:54:02 -06:00
import { generateReducer } from "../redux/generate_reducer";
import { Actions } from "../constants";
export interface RegimenState {
dailyOffsetMs: number;
weeks: Week[];
selectedSequenceUUID?: string | undefined;
currentRegimen?: string | undefined;
}
function newWeek() {
return {
days: {
day1: false,
day2: false,
day3: false,
day4: false,
day5: false,
day6: false,
day7: false
}
};
}
function newState(): RegimenState {
return {
dailyOffsetMs: 300000,
weeks: _.times(10, newWeek),
selectedSequenceUUID: undefined,
currentRegimen: undefined
};
}
export let initialState: RegimenState = newState();
export let regimensReducer = generateReducer<RegimenState>(initialState)
.add<TaggedResource>(Actions.DESTROY_RESOURCE_OK, (s, { payload }) => {
switch (payload.uuid) {
case s.selectedSequenceUUID:
case s.currentRegimen:
s.selectedSequenceUUID = undefined;
break;
}
return s;
})
.add<void>(Actions.PUSH_WEEK, (s) => {
2017-06-29 12:54:02 -06:00
s.weeks.push(newWeek());
return s;
})
.add<void>(Actions.POP_WEEK, (s) => {
2017-06-29 12:54:02 -06:00
s.weeks.pop();
return s;
})
.add<void>(Actions.DESELECT_ALL_DAYS, (s) => {
2017-07-21 15:36:57 -06:00
s.weeks.map((week) => DAYS.map((key) => week.days[key] = false));
2017-07-21 13:06:16 -06:00
return s;
})
.add<void>(Actions.SELECT_ALL_DAYS, (s) => {
2017-07-21 15:36:57 -06:00
s.weeks.map((week) => DAYS.map((key) => week.days[key] = true));
2017-07-21 13:06:16 -06:00
return s;
})
2017-06-29 12:54:02 -06:00
.add<{ week: number, day: number }>(Actions.TOGGLE_DAY, (s, { payload }) => {
2017-08-28 05:49:13 -06:00
const week = s.weeks[payload.week];
const day = `day${payload.day}`;
const days = (week.days as Dictionary<boolean>);
2017-06-29 12:54:02 -06:00
days[day] = !days[day];
return s;
})
2018-05-01 22:14:41 -06:00
.add<string>(Actions.SELECT_REGIMEN, (s, { payload }) => {
s.currentRegimen = payload;
2017-06-29 12:54:02 -06:00
return s;
})
.add<string>(Actions.SET_SEQUENCE, (s, { payload }) => {
s.selectedSequenceUUID = payload;
return s;
})
.add<number>(Actions.SET_TIME_OFFSET, (s, { payload }) => {
s.dailyOffsetMs = payload;
return s;
});