Farmbot-Web-App/frontend/farm_designer/tools/add_tool.tsx

125 lines
3.6 KiB
TypeScript
Raw Normal View History

2019-08-23 15:18:28 -06:00
import React from "react";
import { connect } from "react-redux";
import {
DesignerPanel, DesignerPanelContent, DesignerPanelHeader
2019-12-10 13:09:52 -07:00
} from "../designer_panel";
2019-08-23 15:18:28 -06:00
import { Everything } from "../../interfaces";
import { t } from "../../i18next_wrapper";
2020-02-18 12:21:09 -07:00
import { SaveBtn } from "../../ui";
import { SpecialStatus, FirmwareHardware } from "farmbot";
2019-08-23 15:18:28 -06:00
import { initSave } from "../../api/crud";
2019-10-25 09:33:33 -06:00
import { Panel } from "../panel_header";
2019-12-30 09:08:48 -07:00
import { history } from "../../history";
2020-02-18 12:21:09 -07:00
import { selectAllTools } from "../../resources/selectors";
import { betterCompact } from "../../util";
import {
isExpressBoard, getFwHardwareValue
} from "../../devices/components/firmware_hardware_support";
import { getFbosConfig } from "../../resources/getters";
2019-08-23 15:18:28 -06:00
export interface AddToolProps {
dispatch: Function;
2020-02-18 12:21:09 -07:00
existingToolNames: string[];
firmwareHardware: FirmwareHardware | undefined;
2019-08-23 15:18:28 -06:00
}
export interface AddToolState {
toolName: string;
}
export const mapStateToProps = (props: Everything): AddToolProps => ({
dispatch: props.dispatch,
2020-02-18 12:21:09 -07:00
existingToolNames: betterCompact(selectAllTools(props.resources.index)
.map(tool => tool.body.name)),
firmwareHardware: getFwHardwareValue(getFbosConfig(props.resources.index)),
2019-08-23 15:18:28 -06:00
});
2019-09-19 13:09:00 -06:00
export class RawAddTool extends React.Component<AddToolProps, AddToolState> {
2020-02-18 12:21:09 -07:00
state: AddToolState = { toolName: "" };
2019-12-30 09:08:48 -07:00
newTool = (name: string) => {
this.props.dispatch(initSave("Tool", { name }));
};
save = () => {
this.newTool(this.state.toolName);
history.push("/app/designer/tools");
}
2020-02-18 12:21:09 -07:00
stockToolNames = () => {
switch (this.props.firmwareHardware) {
case "arduino":
case "farmduino":
case "farmduino_k14":
default:
2020-02-15 11:29:31 -07:00
return [
t("Seeder"),
t("Watering Nozzle"),
t("Weeder"),
t("Soil Sensor"),
t("Seed Bin"),
t("Seed Tray"),
];
2020-02-18 12:21:09 -07:00
case "farmduino_k15":
2020-02-15 11:29:31 -07:00
return [
t("Seeder"),
t("Watering Nozzle"),
t("Weeder"),
t("Soil Sensor"),
t("Seed Bin"),
t("Seed Tray"),
t("Seed Trough 1"),
t("Seed Trough 2"),
];
2020-02-18 12:21:09 -07:00
case "express_k10":
2020-02-15 11:29:31 -07:00
return [
t("Seed Trough 1"),
t("Seed Trough 2"),
];
}
2019-12-30 09:08:48 -07:00
}
AddStockTools = () =>
<div className="add-stock-tools">
2020-02-18 12:21:09 -07:00
<label>{t("Add stock names")}</label>
<ul>
{this.stockToolNames().map(n => <li key={n}>{n}</li>)}
</ul>
2019-12-30 09:08:48 -07:00
<button
className="fb-button green"
onClick={() => {
2020-02-18 12:21:09 -07:00
this.stockToolNames()
.filter(n => !this.props.existingToolNames.includes(n))
.map(n => this.newTool(n));
history.push("/app/designer/tools");
2019-12-30 09:08:48 -07:00
}}>
<i className="fa fa-plus" />
2020-02-18 12:21:09 -07:00
{t("Stock names")}
2019-12-30 09:08:48 -07:00
</button>
</div>
2019-08-23 15:18:28 -06:00
render() {
2019-12-30 09:08:48 -07:00
const panelName = "add-tool";
return <DesignerPanel panelName={panelName} panel={Panel.Tools}>
2019-08-23 15:18:28 -06:00
<DesignerPanelHeader
2019-12-30 09:08:48 -07:00
panelName={panelName}
2020-02-18 12:21:09 -07:00
title={isExpressBoard(this.props.firmwareHardware)
? t("Add new")
: t("Add new tool")}
2019-08-23 15:18:28 -06:00
backTo={"/app/designer/tools"}
2019-10-25 09:33:33 -06:00
panel={Panel.Tools} />
2019-12-30 09:08:48 -07:00
<DesignerPanelContent panelName={panelName}>
<div className="add-new-tool">
2020-02-18 12:21:09 -07:00
<label>{t("Name")}</label>
2019-12-30 09:08:48 -07:00
<input onChange={e =>
this.setState({ toolName: e.currentTarget.value })} />
<SaveBtn onClick={this.save} status={SpecialStatus.DIRTY} />
</div>
<this.AddStockTools />
2019-08-23 15:18:28 -06:00
</DesignerPanelContent>
</DesignerPanel>;
}
}
2019-09-19 13:09:00 -06:00
export const AddTool = connect(mapStateToProps)(RawAddTool);