Farmbot-Web-App/frontend/farm_designer/panel_header.tsx

158 lines
4.3 KiB
TypeScript
Raw Permalink Normal View History

2018-04-20 20:17:50 -06:00
import * as React from "react";
import { getPathArray } from "../history";
import { Link } from "../link";
2019-04-02 13:59:37 -06:00
import { t } from "../i18next_wrapper";
import { DevSettings } from "../account/dev/dev_support";
2018-04-20 20:17:50 -06:00
2019-03-05 11:59:22 -07:00
export enum Panel {
Map = "Map",
Plants = "Plants",
FarmEvents = "FarmEvents",
SavedGardens = "SavedGardens",
2019-08-23 15:18:28 -06:00
Tools = "Tools",
2019-06-10 15:43:11 -06:00
Settings = "Settings",
2019-08-23 15:18:28 -06:00
Points = "Points",
Groups = "Groups",
2019-10-23 14:08:38 -06:00
Weeds = "Weeds",
Zones = "Zones",
2019-03-05 11:59:22 -07:00
}
type Tabs = keyof typeof Panel;
2019-10-25 09:33:33 -06:00
export enum PanelColor {
green = "green",
cyan = "cyan",
brown = "brown",
magenta = "magenta",
gray = "gray",
lightGray = "light-gray",
yellow = "yellow",
blue = "blue",
2019-11-20 12:48:14 -07:00
navy = "navy",
2019-10-25 09:33:33 -06:00
teal = "teal",
red = "red",
}
export const TAB_COLOR: { [key in Panel]: PanelColor } = {
[Panel.Map]: PanelColor.gray,
[Panel.Plants]: PanelColor.green,
[Panel.FarmEvents]: PanelColor.yellow,
2019-11-20 12:48:14 -07:00
[Panel.SavedGardens]: PanelColor.navy,
2019-10-25 09:33:33 -06:00
[Panel.Tools]: PanelColor.gray,
[Panel.Settings]: PanelColor.gray,
[Panel.Points]: PanelColor.teal,
[Panel.Groups]: PanelColor.blue,
[Panel.Weeds]: PanelColor.red,
[Panel.Zones]: PanelColor.brown,
2019-04-09 19:57:46 -06:00
};
const iconFile = (icon: string) => `/app-resources/img/icons/${icon}.svg`;
export const TAB_ICON: { [key in Panel]: string } = {
[Panel.Map]: iconFile("map"),
[Panel.Plants]: iconFile("plant"),
[Panel.FarmEvents]: iconFile("calendar"),
[Panel.SavedGardens]: iconFile("gardens"),
2019-08-23 15:18:28 -06:00
[Panel.Tools]: iconFile("tool"),
[Panel.Settings]: iconFile("settings"),
[Panel.Points]: iconFile("point"),
[Panel.Groups]: iconFile("groups"),
2019-10-23 14:08:38 -06:00
[Panel.Weeds]: iconFile("weeds"),
[Panel.Zones]: iconFile("zones"),
2019-03-05 11:59:22 -07:00
};
2018-04-20 20:17:50 -06:00
const getCurrentTab = (): Tabs => {
2019-03-05 11:59:22 -07:00
const pathArray = getPathArray();
if (pathArray.join("/") === "/app/designer") {
return Panel.Map;
2019-04-09 19:52:12 -06:00
} else if (pathArray.includes("events")) {
2019-03-05 11:59:22 -07:00
return Panel.FarmEvents;
2019-11-06 10:01:05 -07:00
} else if (pathArray.includes("gardens")) {
2019-03-05 11:59:22 -07:00
return Panel.SavedGardens;
2019-08-23 15:18:28 -06:00
} else if (pathArray.includes("tools")) {
return Panel.Tools;
2019-06-10 15:43:11 -06:00
} else if (pathArray.includes("settings")) {
return Panel.Settings;
2019-08-23 15:18:28 -06:00
} else if (pathArray.includes("points")) {
return Panel.Points;
2019-08-06 14:00:58 -06:00
} else if (pathArray.includes("groups")) {
return Panel.Groups;
2019-10-23 14:08:38 -06:00
} else if (pathArray.includes("weeds")) {
return Panel.Weeds;
} else if (pathArray.includes("zones")) {
return Panel.Zones;
2018-04-20 20:17:50 -06:00
} else {
2019-03-05 11:59:22 -07:00
return Panel.Plants;
2018-04-20 20:17:50 -06:00
}
};
2019-04-09 19:57:46 -06:00
const common = { width: 30, height: 30 };
interface NavTabProps {
panel: Panel;
linkTo: string;
title: string;
2019-06-10 15:43:11 -06:00
icon?: string;
2020-02-26 11:10:59 -07:00
desktopHide?: boolean;
2019-04-09 19:57:46 -06:00
}
const NavTab = (props: NavTabProps) =>
2019-10-10 11:32:58 -06:00
<Link to={props.linkTo} style={{ flex: 0.3 }}
2020-02-26 11:10:59 -07:00
className={[
getCurrentTab() === props.panel ? "active" : "",
props.desktopHide ? "desktop-hide" : "",
].join(" ")}>
2019-10-10 11:32:58 -06:00
<img {...common}
src={TAB_ICON[props.panel]} title={props.title} />
2019-04-09 19:57:46 -06:00
</Link>;
2018-04-20 22:50:48 -06:00
export function DesignerNavTabs(props: { hidden?: boolean }) {
2018-04-20 20:17:50 -06:00
const tab = getCurrentTab();
2018-04-20 22:50:48 -06:00
const hidden = props.hidden ? "hidden" : "";
2019-03-05 11:59:22 -07:00
return <div className={`panel-nav ${TAB_COLOR[tab]}-panel ${hidden}`}>
2018-04-20 20:17:50 -06:00
<div className="panel-tabs">
2019-04-09 19:57:46 -06:00
<NavTab panel={Panel.Map}
linkTo={"/app/designer"}
2020-02-26 11:10:59 -07:00
title={t("Map")} desktopHide={true} />
<NavTab
panel={Panel.Plants}
linkTo={"/app/designer/plants"}
title={t("Plants")} />
2019-10-10 11:32:58 -06:00
<NavTab
panel={Panel.Groups}
linkTo={"/app/designer/groups"}
2019-10-10 11:32:58 -06:00
title={t("Groups")} />
2019-11-27 13:11:45 -07:00
<NavTab
panel={Panel.SavedGardens}
linkTo={"/app/designer/gardens"}
title={t("Gardens")} />
<NavTab
panel={Panel.FarmEvents}
linkTo={"/app/designer/events"}
title={t("Events")} />
2019-10-23 14:08:38 -06:00
{DevSettings.futureFeaturesEnabled() &&
<NavTab
panel={Panel.Zones}
linkTo={"/app/designer/zones"}
title={t("Zones")} />}
2019-11-25 11:42:34 -07:00
<NavTab
panel={Panel.Points}
linkTo={"/app/designer/points"}
title={t("Points")} />
<NavTab
panel={Panel.Weeds}
linkTo={"/app/designer/weeds"}
title={t("Weeds")} />
2020-02-26 13:08:49 -07:00
<NavTab
panel={Panel.Tools}
linkTo={"/app/designer/tools"}
title={t("Tools")} />
<NavTab
panel={Panel.Settings}
icon={"fa fa-gear"}
linkTo={"/app/designer/settings"}
title={t("Settings")} />
2018-04-20 20:17:50 -06:00
</div>
</div>;
}