import * as React from "react"; import { connect } from "react-redux"; import { Everything } from "../../interfaces"; import { DesignerNavTabs, Panel } from "../panel_header"; import { EmptyStateWrapper, EmptyStateGraphic } from "../../ui/empty_state_wrapper"; import { Content } from "../../constants"; import { DesignerPanel, DesignerPanelContent, DesignerPanelTop } from "../designer_panel"; import { t } from "../../i18next_wrapper"; import { TaggedPointGroup, TaggedPoint } from "farmbot"; import { selectAllPointGroups, selectAllActivePoints } from "../../resources/selectors"; import { GroupInventoryItem } from "../point_groups/group_inventory_item"; import { history } from "../../history"; import { initSaveGetId } from "../../api/crud"; export interface ZonesProps { dispatch: Function; zones: TaggedPointGroup[]; allPoints: TaggedPoint[]; } interface ZonesState { searchTerm: string; } export const mapStateToProps = (props: Everything): ZonesProps => ({ dispatch: props.dispatch, zones: selectAllPointGroups(props.resources.index), allPoints: selectAllActivePoints(props.resources.index), }); export class RawZones extends React.Component { state: ZonesState = { searchTerm: "" }; update = ({ currentTarget }: React.SyntheticEvent) => { this.setState({ searchTerm: currentTarget.value }); } navigate = (id: number) => history.push(`/app/designer/zones/${id}`); render() { return this.props.dispatch(initSaveGetId("PointGroup", { name: t("Untitled Zone"), point_ids: [] })) .then((id: number) => this.navigate(id)).catch(() => { })} title={t("Add zone")}> 0} graphic={EmptyStateGraphic.zones} title={t("No zones yet.")} text={Content.NO_ZONES} colorScheme={"zones"}> {this.props.zones .filter(p => p.body.name.toLowerCase() .includes(this.state.searchTerm.toLowerCase())) .map(group => this.navigate(group.body.id || 0)} />)} ; } } export const Zones = connect(mapStateToProps)(RawZones);