Farmbot-Web-App/frontend/farm_designer/map/legend/garden_map_legend.tsx

136 lines
4.4 KiB
TypeScript
Raw Normal View History

2017-06-29 12:54:02 -06:00
import * as React from "react";
import { t } from "i18next";
2018-10-25 18:02:54 -06:00
import { LayerToggle } from "../legend/layer_toggle";
import { GardenMapLegendProps } from "../interfaces";
import { history } from "../../../history";
import { atMaxZoom, atMinZoom } from "../zoom";
import { ImageFilterMenu } from "../layers/images/image_filter_menu";
import { BugsControls } from "../easter_eggs/bugs";
import { BotOriginQuadrant, State } from "../../interfaces";
2019-03-05 11:59:22 -07:00
import { MoveModeLink } from "../../move_to";
2018-10-25 18:02:54 -06:00
import { SavedGardensLink } from "../../saved_gardens/saved_gardens";
import { GetWebAppConfigValue } from "../../../config_storage/actions";
import { BooleanSetting } from "../../../session_keys";
2018-12-30 11:05:45 -07:00
import { DevSettings } from "../../../account/dev/dev_support";
2017-06-29 12:54:02 -06:00
2018-08-27 13:29:01 -06:00
const OriginSelector = ({ quadrant, update }: {
quadrant: BotOriginQuadrant,
update: (quadrant: number) => () => void
}) =>
<div className="farmbot-origin">
<label>
{t("Origin")}
</label>
<div className="quadrants">
{[2, 1, 3, 4].map(q =>
<div key={"quadrant_" + q}
className={"quadrant " + (quadrant === q && "selected")}
onClick={update(q)} />
)}
</div>
</div>;
2017-06-29 12:54:02 -06:00
2018-08-27 13:55:06 -06:00
export const ZoomControls = ({ zoom, getConfigValue }: {
zoom: (value: number) => () => void,
getConfigValue: GetWebAppConfigValue
}) => {
const plusBtnClass = atMaxZoom(getConfigValue) ? "disabled" : "";
const minusBtnClass = atMinZoom(getConfigValue) ? "disabled" : "";
2018-08-27 13:29:01 -06:00
return <div className="zoom-buttons">
<button
className={"fb-button gray zoom " + plusBtnClass}
2018-12-03 20:05:45 -07:00
title={t("zoom in")}
2018-08-27 13:29:01 -06:00
onClick={zoom(1)}>
<i className="fa fa-2x fa-plus" />
</button>
<button
className={"fb-button gray zoom zoom-out " + minusBtnClass}
2018-12-03 20:05:45 -07:00
title={t("zoom out")}
2018-08-27 13:29:01 -06:00
onClick={zoom(-1)}>
<i className="fa fa-2x fa-minus" />
</button>
</div>;
};
2017-06-29 12:54:02 -06:00
2018-09-20 13:59:13 -06:00
export const PointsSubMenu = ({ toggle, getConfigValue }: {
toggle: (property: keyof State) => () => void,
getConfigValue: GetWebAppConfigValue
}) =>
2018-09-06 11:39:55 -06:00
<div className="map-points-submenu">
2018-08-27 13:29:01 -06:00
<button className={"fb-button green"}
onClick={() => history.push("/app/designer/plants/create_point")}>
{t("Point Creator")}
</button>
2018-09-20 13:59:13 -06:00
<LayerToggle
value={!!getConfigValue(BooleanSetting.show_historic_points)}
label={t("Historic Points?")}
onClick={toggle(BooleanSetting.show_historic_points)} />
2018-08-27 13:29:01 -06:00
</div>;
const LayerToggles = (props: GardenMapLegendProps) => {
const { toggle, getConfigValue } = props;
return <div className="toggle-buttons">
<LayerToggle
value={props.showPlants}
label={t("Plants?")}
onClick={toggle("show_plants")} />
<LayerToggle
value={props.showPoints}
label={t("Points?")}
onClick={toggle("show_points")}
2018-09-06 11:39:55 -06:00
submenuTitle={t("extras")}
2018-12-30 11:05:45 -07:00
popover={DevSettings.futureFeaturesEnabled()
2018-09-20 13:59:13 -06:00
? <PointsSubMenu toggle={toggle} getConfigValue={getConfigValue} />
2018-08-27 13:29:01 -06:00
: undefined} />
<LayerToggle
value={props.showSpread}
label={t("Spread?")}
onClick={toggle("show_spread")} />
<LayerToggle
value={props.showFarmbot}
label={t("FarmBot?")}
onClick={toggle("show_farmbot")} />
<LayerToggle
value={props.showImages}
label={t("Photos?")}
onClick={toggle("show_images")}
2018-09-06 11:39:55 -06:00
submenuTitle={t("filter")}
2018-08-27 13:29:01 -06:00
popover={<ImageFilterMenu
tzOffset={props.tzOffset}
dispatch={props.dispatch}
getConfigValue={getConfigValue}
imageAgeInfo={props.imageAgeInfo} />} />
2018-12-30 11:05:45 -07:00
{DevSettings.futureFeaturesEnabled() &&
2018-10-15 17:32:23 -06:00
<LayerToggle
value={props.showSensorReadings}
label={t("Readings?")}
onClick={toggle("show_sensor_readings")} />}
2018-08-27 13:29:01 -06:00
</div>;
};
export function GardenMapLegend(props: GardenMapLegendProps) {
const menuClass = props.legendMenuOpen ? "active" : "";
return <div
className={"garden-map-legend " + menuClass}
style={{ zoom: 1 }}>
2017-06-29 12:54:02 -06:00
<div
className={"menu-pullout " + menuClass}
2018-08-27 13:29:01 -06:00
onClick={props.toggle("legend_menu_open")}>
<span>
{t("Menu")}
</span>
<i className="fa fa-2x fa-arrow-left" />
</div>
<div className="content">
2018-08-27 13:55:06 -06:00
<ZoomControls zoom={props.zoom} getConfigValue={props.getConfigValue} />
2018-08-27 13:29:01 -06:00
<LayerToggles {...props} />
<OriginSelector
quadrant={props.botOriginQuadrant}
update={props.updateBotOriginQuadrant} />
<MoveModeLink />
<SavedGardensLink />
<BugsControls />
2017-06-29 12:54:02 -06:00
</div>
</div>;
2017-06-29 12:54:02 -06:00
}