import * as React from "react"; import { Show } from "./show"; import { Edit } from "./edit"; import { WebcamPanelProps } from "./interfaces"; import { TaggedWebcamFeed, SpecialStatus } from "farmbot"; import { edit, save, destroy, init } from "../../api/crud"; import { error } from "../../toast/toast"; import { WebcamFeed } from "farmbot/dist/resources/api_resources"; import { t } from "../../i18next_wrapper"; const HTTP = "http://"; type S = { activeMenu: "edit" | "show" }; type P = { feeds: TaggedWebcamFeed[]; dispatch: Function; }; export const preToggleCleanup = (dispatch: Function) => (f: TaggedWebcamFeed) => { const { uuid } = f; const { name, url, id } = f.body; if (!name || !url || !id) { // Delete empty or unsaved records dispatch(destroy(uuid, true)); return; } if (f.specialStatus !== SpecialStatus.SAVED) { // Stash unsaved to preexisting records dispatch(save(uuid)); return; } }; export class WebcamPanel extends React.Component { state: S = { activeMenu: "show" }; init = () => this.props.dispatch(init("WebcamFeed", { url: HTTP, name: "" })) edit = (tr: TaggedWebcamFeed, update: Partial) => this.props.dispatch(edit(tr, update)) save = (tr: TaggedWebcamFeed) => tr.body.url != HTTP ? this.props.dispatch(save(tr.uuid)) : error(t("Please enter a URL.")) destroy = (tr: TaggedWebcamFeed) => this.props.dispatch(destroy(tr.uuid)) childProps = (activeMenu: "edit" | "show"): WebcamPanelProps => { return { onToggle: () => { const { feeds, dispatch } = this.props; feeds.map(preToggleCleanup(dispatch)); this.setState({ activeMenu }); }, feeds: this.props.feeds, init: this.init, edit: this.edit, save: this.save, destroy: this.destroy, }; } render() { if (this.state.activeMenu === "show") { return ; } else { return ; } } }