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

94 lines
2.3 KiB
TypeScript

import { ResourceColor } from "../interfaces";
import { Week } from "./bulk_scheduler/interfaces";
import { AuthState } from "../auth/interfaces";
import { BotState, ShouldDisplay } from "../devices/interfaces";
import { TaggedRegimen, TaggedSequence } from "farmbot";
import { ResourceIndex, UUID, VariableNameSet } from "../resources/interfaces";
export interface CalendarRow {
day: string;
items: RegimenItemCalendarRow[];
}
export interface Props {
dispatch: Function;
sequences: TaggedSequence[];
variableData: VariableNameSet;
auth: AuthState | undefined;
bot: BotState;
current: TaggedRegimen | undefined;
regimens: TaggedRegimen[];
resources: ResourceIndex;
selectedSequence: TaggedSequence | undefined;
dailyOffsetMs: number;
weeks: Week[];
calendar: CalendarRow[];
regimenUsageStats: Record<UUID, boolean | undefined>;
shouldDisplay: ShouldDisplay;
schedulerOpen: boolean;
}
export interface RegimenItemCalendarRow {
regimen: TaggedRegimen;
item: RegimenItem;
name: string;
hhmm: string;
color: string;
/** Numeric field that can be used for sorting purposes. */
sortKey: number;
day: number;
dispatch: Function;
/** Variable label. */
variable: string | undefined;
}
/** Used by UI widgets that modify a regimen */
export interface RegimenProps {
regimen: TaggedRegimen;
dispatch: Function;
}
/** A list of "Sequence" scheduled after a starting point (epoch). */
export interface Regimen {
id?: number;
/** Friendly identifier for humans to easily identify regimens. */
name: string;
color: ResourceColor;
regimen_items: RegimenItem[];
}
export interface RegimenListItemProps {
length: number;
regimen: TaggedRegimen;
dispatch: Function;
inUse: boolean;
index: number;
}
/** Individual step that a regimen will execute at a point in time. */
export interface RegimenItem {
id?: number;
sequence_id: number;
regimen_id?: number;
/** Time (in milliseconds) to wait before executing the sequence */
time_offset: number;
}
export interface AddRegimenProps {
dispatch: Function;
className?: string;
children?: React.ReactNode;
length: number;
}
export interface RegimensListProps {
dispatch: Function;
regimens: TaggedRegimen[];
regimen: TaggedRegimen | undefined;
usageStats: Record<UUID, boolean | undefined>;
}
export interface RegimensListState {
searchTerm: string;
}