Farmbot-Web-App/frontend/farm_designer/interfaces.ts

305 lines
8.4 KiB
TypeScript
Raw Normal View History

2017-06-29 12:54:02 -06:00
import { OpenFarm } from "./openfarm";
import { DropDownItem } from "../ui/index";
import { CowardlyDictionary } from "../util";
import {
TaggedFarmEvent,
TaggedSequence,
TaggedRegimen,
TaggedGenericPointer,
2018-02-11 19:51:49 -07:00
TaggedImage,
2018-10-15 17:32:23 -06:00
TaggedSensorReading,
TaggedSensor,
2020-02-07 16:05:16 -07:00
TaggedPoint,
TaggedPointGroup,
TaggedWeedPointer,
PointType,
2018-08-01 07:09:30 -06:00
} from "farmbot";
import { SlotWithTool, ResourceIndex, UUID } from "../resources/interfaces";
2019-04-09 23:17:03 -06:00
import {
2020-02-28 09:35:32 -07:00
BotPosition, StepsPerMmXY, BotLocationData, ShouldDisplay,
2019-04-09 23:17:03 -06:00
} from "../devices/interfaces";
import { isNumber } from "lodash";
2018-08-01 07:03:35 -06:00
import { McuParams, TaggedCrop } from "farmbot";
2018-09-13 16:00:14 -06:00
import { AxisNumberProperty, BotSize, TaggedPlant } from "./map/interfaces";
2018-10-25 18:02:54 -06:00
import { SelectionBoxData } from "./map/background";
2018-02-15 03:51:38 -07:00
import { GetWebAppConfigValue } from "../config_storage/actions";
2018-10-15 17:32:23 -06:00
import {
2020-02-28 09:35:32 -07:00
ExecutableType, PlantPointer, PointGroupSortType,
2018-10-15 17:32:23 -06:00
} from "farmbot/dist/resources/api_resources";
2018-10-22 09:35:44 -06:00
import { BooleanConfigKey } from "farmbot/dist/resources/configs/web_app";
2019-04-09 23:17:03 -06:00
import { TimeSettings } from "../interfaces";
2017-06-29 12:54:02 -06:00
2018-04-11 20:05:08 -06:00
/* BotOriginQuadrant diagram
2 --- 1
| |
3 --- 4
*/
2018-03-19 07:16:42 -06:00
export enum BotOriginQuadrant { ONE = 1, TWO = 2, THREE = 3, FOUR = 4 }
2017-06-29 12:54:02 -06:00
type Mystery = BotOriginQuadrant | number | string | boolean | undefined;
export function isBotOriginQuadrant(mystery: Mystery):
2017-06-29 12:54:02 -06:00
mystery is BotOriginQuadrant {
return isNumber(mystery) && [1, 2, 3, 4].includes(mystery);
2017-06-29 12:54:02 -06:00
}
type TypeCheckerHint = Partial<Record<BooleanConfigKey, boolean>>;
export interface State extends TypeCheckerHint {
legend_menu_open: boolean;
show_plants: boolean;
show_points: boolean;
show_weeds: boolean;
show_spread: boolean;
show_farmbot: boolean;
2018-02-11 19:52:21 -07:00
show_images: boolean;
2020-02-07 16:05:16 -07:00
show_zones: boolean;
2018-10-15 17:32:23 -06:00
show_sensor_readings: boolean;
bot_origin_quadrant: BotOriginQuadrant;
zoom_level: number;
2017-06-29 12:54:02 -06:00
}
export interface Props {
dispatch: Function;
2018-09-13 16:00:14 -06:00
selectedPlant: TaggedPlant | undefined;
2017-06-29 12:54:02 -06:00
designer: DesignerState;
2018-09-13 16:00:14 -06:00
hoveredPlant: TaggedPlant | undefined;
2020-02-07 16:05:16 -07:00
genericPoints: TaggedGenericPointer[];
weeds: TaggedWeedPointer[];
2020-02-07 16:05:16 -07:00
allPoints: TaggedPoint[];
2018-09-13 16:00:14 -06:00
plants: TaggedPlant[];
2017-06-29 12:54:02 -06:00
toolSlots: SlotWithTool[];
crops: TaggedCrop[];
2017-10-20 00:26:41 -06:00
botLocationData: BotLocationData;
botMcuParams: McuParams;
stepsPerMmXY: StepsPerMmXY;
2017-11-01 02:07:02 -06:00
peripherals: { label: string, value: boolean }[];
eStopStatus: boolean;
2018-02-11 19:52:44 -07:00
latestImages: TaggedImage[];
2018-02-11 19:51:49 -07:00
cameraCalibrationData: CameraCalibrationData;
2019-04-09 23:17:03 -06:00
timeSettings: TimeSettings;
2018-02-15 03:51:38 -07:00
getConfigValue: GetWebAppConfigValue;
2018-10-15 17:32:23 -06:00
sensorReadings: TaggedSensorReading[];
sensors: TaggedSensor[];
2020-02-07 16:05:16 -07:00
groups: TaggedPointGroup[];
shouldDisplay: ShouldDisplay;
2020-02-20 19:38:50 -07:00
mountedToolName: string | undefined;
2017-06-29 12:54:02 -06:00
}
export interface MovePlantProps {
deltaX: number;
deltaY: number;
2018-09-13 16:00:14 -06:00
plant: TaggedPlant;
2017-09-08 06:01:26 -06:00
gridSize: AxisNumberProperty;
2017-06-29 12:54:02 -06:00
}
/**
* OFCrop bundled with corresponding profile image from OpenFarm API.
*/
export interface CropLiveSearchResult {
crop: OpenFarm.OFCrop;
image: string;
}
export interface Crop {
id?: undefined;
svg_icon?: string | undefined;
spread?: number | undefined;
slug: string;
}
export interface DesignerState {
selectedPoints: UUID[] | undefined;
selectionPointType: PointType[] | undefined;
2017-06-29 12:54:02 -06:00
hoveredPlant: HoveredPlantPayl;
2019-11-07 12:17:50 -07:00
hoveredPoint: string | undefined;
2018-01-29 23:17:54 -07:00
hoveredPlantListItem: string | undefined;
2019-12-30 09:08:48 -07:00
hoveredToolSlot: string | undefined;
2017-06-29 12:54:02 -06:00
cropSearchQuery: string;
cropSearchResults: CropLiveSearchResult[];
2018-11-28 15:29:46 -07:00
cropSearchInProgress: boolean;
chosenLocation: BotPosition;
drawnPoint: DrawnPointPayl | undefined;
drawnWeed: DrawnWeedPayl | undefined;
2018-09-13 16:00:14 -06:00
openedSavedGarden: string | undefined;
2019-10-30 12:25:29 -06:00
tryGroupSortType: PointGroupSortType | "nn" | undefined;
2020-03-13 15:21:44 -06:00
editGroupAreaInMap: boolean;
2017-06-29 12:54:02 -06:00
}
export type TaggedExecutable = TaggedSequence | TaggedRegimen;
export type ExecutableQuery = (kind: ExecutableType, id: number) => TaggedExecutable;
export interface AddEditFarmEventProps {
deviceTimezone: string | undefined;
executableOptions: DropDownItem[];
2017-06-29 12:54:02 -06:00
repeatOptions: DropDownItem[];
farmEvents: TaggedFarmEvent[];
regimensById: CowardlyDictionary<TaggedRegimen>;
sequencesById: CowardlyDictionary<TaggedSequence>;
farmEventsById: CowardlyDictionary<TaggedFarmEvent>;
getFarmEvent(): TaggedFarmEvent | undefined;
2019-04-09 19:57:46 -06:00
findFarmEventByUuid(uuid: string | undefined): TaggedFarmEvent | undefined;
2017-06-29 12:54:02 -06:00
handleTime(e: React.SyntheticEvent<HTMLInputElement>, currentISO: string): string;
dispatch: Function;
findExecutable: ExecutableQuery;
2019-04-09 23:17:03 -06:00
timeSettings: TimeSettings;
2018-04-05 14:05:54 -06:00
autoSyncEnabled: boolean;
2018-12-20 20:18:10 -07:00
resources: ResourceIndex;
shouldDisplay: ShouldDisplay;
2017-06-29 12:54:02 -06:00
}
/**
* One CalendarDay has many CalendarOccurrences. For instance, a FarmEvent
* that executes every 8 hours will create 3 CalendarOccurrences in a single
* CalendarDay.
*/
export interface CalendarOccurrence {
2017-08-09 22:04:06 -06:00
mmddyy: string;
2017-06-29 12:54:02 -06:00
sortKey: number;
timeStr: string;
2017-08-02 12:14:02 -06:00
heading: string;
subheading?: string | undefined;
2017-06-29 12:54:02 -06:00
executableId: number;
id: number;
}
/** A group of FarmEvents for a particular day on the calendar. */
export interface CalendarDay {
/** Unix timestamp. Used as a unique key in JSX and for sorting. */
sortKey: number;
2017-08-09 22:04:06 -06:00
year: number;
2017-06-29 12:54:02 -06:00
month: string;
day: number;
/** Every event that will execute on that day. */
items: CalendarOccurrence[];
}
export interface FarmEventProps {
timezoneIsSet: boolean;
2017-06-29 12:54:02 -06:00
/** Sorted list of the first (100?) events due on the calendar. */
calendarRows: CalendarDay[];
}
2018-11-09 13:39:50 -07:00
export interface FarmEventState {
searchTerm: string;
}
2017-06-29 12:54:02 -06:00
export interface GardenMapProps {
showPlants: boolean | undefined;
showPoints: boolean | undefined;
showWeeds: boolean | undefined;
2017-06-29 12:54:02 -06:00
showSpread: boolean | undefined;
showFarmbot: boolean | undefined;
2018-02-11 19:52:21 -07:00
showImages: boolean | undefined;
2020-02-07 16:05:16 -07:00
showZones: boolean | undefined;
2018-10-15 17:32:23 -06:00
showSensorReadings: boolean | undefined;
2017-06-29 12:54:02 -06:00
dispatch: Function;
designer: DesignerState;
2020-02-07 16:05:16 -07:00
genericPoints: TaggedGenericPointer[];
weeds: TaggedWeedPointer[];
2020-02-07 16:05:16 -07:00
allPoints: TaggedPoint[];
2018-09-13 16:00:14 -06:00
plants: TaggedPlant[];
2017-06-29 12:54:02 -06:00
toolSlots: SlotWithTool[];
2018-09-13 16:00:14 -06:00
selectedPlant: TaggedPlant | undefined;
hoveredPlant: TaggedPlant | undefined;
2017-06-29 12:54:02 -06:00
crops: TaggedCrop[];
2017-10-20 00:26:41 -06:00
botLocationData: BotLocationData;
2017-09-08 06:01:26 -06:00
botSize: BotSize;
stopAtHome: Record<"x" | "y", boolean>;
2017-08-24 22:37:24 -06:00
zoomLvl: number;
2017-08-30 20:11:01 -06:00
botOriginQuadrant: BotOriginQuadrant;
2017-09-08 06:01:26 -06:00
gridSize: AxisNumberProperty;
gridOffset: AxisNumberProperty;
2017-11-01 02:07:02 -06:00
peripherals: { label: string, value: boolean }[];
eStopStatus: boolean;
2018-02-11 19:52:44 -07:00
latestImages: TaggedImage[];
2018-02-11 19:51:49 -07:00
cameraCalibrationData: CameraCalibrationData;
2018-02-15 03:51:38 -07:00
getConfigValue: GetWebAppConfigValue;
2018-10-15 17:32:23 -06:00
sensorReadings: TaggedSensorReading[];
sensors: TaggedSensor[];
2019-04-09 23:17:03 -06:00
timeSettings: TimeSettings;
2020-02-07 16:05:16 -07:00
groups: TaggedPointGroup[];
shouldDisplay: ShouldDisplay;
2020-02-20 19:38:50 -07:00
mountedToolName: string | undefined;
2017-06-29 12:54:02 -06:00
}
export interface GardenMapState {
isDragging: boolean | undefined;
botOriginQuadrant: BotOriginQuadrant;
2018-10-25 18:02:54 -06:00
qPageX: number | undefined;
qPageY: number | undefined;
2017-08-25 19:02:07 -06:00
activeDragXY: BotPosition | undefined;
2017-09-11 22:42:19 -06:00
activeDragSpread: number | undefined;
selectionBox: SelectionBoxData | undefined;
2017-06-29 12:54:02 -06:00
}
export type PlantOptions = Partial<PlantPointer>;
export interface EditPlantInfoProps {
push(url: string): void;
dispatch: Function;
2018-09-13 16:00:14 -06:00
findPlant(stringyID: string | undefined): TaggedPlant | undefined;
openedSavedGarden: string | undefined;
2019-04-09 23:17:03 -06:00
timeSettings: TimeSettings;
2019-06-14 17:00:42 -06:00
getConfigValue: GetWebAppConfigValue;
2017-06-29 12:54:02 -06:00
}
export interface DraggableEvent {
currentTarget: HTMLImageElement;
dataTransfer: {
setDragImage: Function;
};
}
export interface HoveredPlantPayl {
plantUUID: string | undefined;
icon: string;
}
export type OpenfarmSearch = (query: string) => (dispatch: Function) => void;
2017-06-29 12:54:02 -06:00
export interface CropCatalogProps {
cropSearchQuery: string;
dispatch: Function;
cropSearchResults: CropLiveSearchResult[];
openfarmSearch: OpenfarmSearch;
2018-11-28 15:29:46 -07:00
cropSearchInProgress: boolean;
2017-06-29 12:54:02 -06:00
}
export interface CropInfoProps {
dispatch: Function;
2018-12-03 20:05:45 -07:00
cropSearchQuery: string | undefined;
2017-06-29 12:54:02 -06:00
cropSearchResults: CropLiveSearchResult[];
cropSearchInProgress: boolean;
2018-09-13 16:00:14 -06:00
openedSavedGarden: string | undefined;
openfarmSearch: OpenfarmSearch;
botPosition: BotPosition;
2017-06-29 12:54:02 -06:00
}
2018-02-11 19:51:49 -07:00
export interface CameraCalibrationData {
scale: string | undefined;
rotation: string | undefined;
offset: {
x: string | undefined;
y: string | undefined;
},
origin: string | undefined;
2018-02-13 00:20:38 -07:00
calibrationZ: string | undefined;
2018-02-11 19:51:49 -07:00
}
2018-02-20 17:13:14 -07:00
export interface DrawnPointPayl {
name?: string;
cx: number;
cy: number;
r: number;
color?: string;
}
export interface DrawnWeedPayl {
2019-08-23 15:18:28 -06:00
name?: string;
2018-02-20 17:13:14 -07:00
cx: number;
cy: number;
r: number;
color?: string;
}