UNPKG

farmbot-web-frontend

Version:
55 lines (51 loc) 1.6 kB
import { Plant, CropLiveSearchResult } from "./interfaces"; import { Plant as newPlant } from "./plant"; import { generateReducer } from "../generate_reducer"; import { DesignerState } from "./interfaces"; import { cloneDeep } from "lodash"; import { HardwareState } from "../devices/interfaces"; let DEFAULT_STATE = { plants: [], x_size: 0, y_size: 0, cropSearchQuery: "", cropSearchResults: [] }; export let designer = generateReducer<DesignerState>(DEFAULT_STATE) .add<Plant[]>("FETCH_PLANTS_OK", function(s, a) { let state = cloneDeep(s); state.plants = a.payload; return state; }) .add<Plant>("SAVE_PLANT_OK", function(s, a) { let state = cloneDeep(s); // Exxxttrraaa runtime safety. let plant = newPlant(a.payload); state.plants.push(plant); return state; }) .add<Plant>("DESTROY_PLANT_OK", function(s, { payload }) { let state = cloneDeep(s); let a = state.plants; a.splice(a.indexOf(payload), 1); return state; }) .add<HardwareState>("BOT_CHANGE", function(s, { payload }) { let state = cloneDeep(s); let [x, y] = [payload.movement_axis_nr_steps_x, payload.movement_axis_nr_steps_y]; if (x && y) { state.x_size = x; state.y_size = y; } return state; }) .add<string>("SEARCH_QUERY_CHANGE", function(s, { payload }) { let state = cloneDeep(s); state.cropSearchQuery = payload; return state; }) .add<CropLiveSearchResult[]>("OF_SEARCH_RESULTS_OK", function(s, { payload }) { let state = cloneDeep(s); state.cropSearchResults = payload; return state; });