UNPKG

farmbot-web-frontend

Version:
118 lines (103 loc) 2.81 kB
import { Regimen, RegimenItem } from "./interfaces"; import { ReduxAction } from "../interfaces"; import { warning, success, error } from "../logger"; import * as Axios from "axios"; import { regimenSerializer } from "./serializers"; import { prettyPrintApiErrors } from "../util"; import { t } from "i18next"; const REGIMEN_URL = "/api/regimens/"; export function editRegimen(regimen: Regimen, update: Object): ReduxAction<{ regimen: Regimen, update: Object }> { return { type: "EDIT_REGIMEN", payload: { regimen, update } }; } export function saveRegimen(regimen: Regimen, baseUrl: string) { return function (dispatch: Function) { dispatch({ type: "SAVE_REGIMEN_START", payload: regimen }); const action = regimen.id ? Axios.put : Axios.post; return action<Regimen>(baseUrl + REGIMEN_URL + (regimen.id || ""), regimenSerializer(regimen)) .then(function (resp) { success(t("Regimen saved.")); dispatch(saveRegimenOk(resp.data)); }) .catch(error => saveRegimenErr(error)); }; } function saveRegimenOk(regimen: Regimen) { return { type: "SAVE_REGIMEN_OK", payload: regimen }; } function saveRegimenErr(err: any) { error(prettyPrintApiErrors(err), t("Unable to save regimen.")); } export function deleteRegimen(regimen: Regimen, baseUrl: string) { return function (dispatch: Function) { if (regimen && regimen.id) { let url = baseUrl + REGIMEN_URL + regimen.id; Axios.delete<Regimen>(url) .then(function (resp) { dispatch(deleteRegimenOk(regimen)); }) .catch(function (error) { deleteRegimenErr(error); }); } else { dispatch(deleteRegimenOk(regimen)); }; }; } function deleteRegimenOk(payload: Regimen) { success(t("Regimen deleted.")); return { type: "DELETE_REGIMEN_OK", payload }; } function deleteRegimenErr(payload: Error) { error(t("Unable to delete regimen.")); } export function newRegimen(): ReduxAction<{}> { return { type: "NEW_REGIMEN", payload: {} }; } export function selectRegimen(index: number): ReduxAction<number> { return { type: "SELECT_REGIMEN", payload: index }; } export function removeRegimenItem(item: RegimenItem): ReduxAction<RegimenItem> { return { type: "REMOVE_REGIMEN_ITEM", payload: item }; } export function fetchRegimens(apiUrl: string) { return function (dispatch: Function) { return Axios .get<Regimen[]>(apiUrl + REGIMEN_URL) .then(r => dispatch({ type: "FETCH_REGIMENS_OK", payload: r.data })) .catch(e => { warning(t("Could not download regimens.")); dispatch({ type: "FETCH_REGIMENS_ERR", payload: e }); }); }; };