import * as React from "react"; import { t } from "../../../i18next_wrapper"; import { Resource, Identifier, Nothing } from "farmbot"; import { PlantPointer, ToolSlotPointer, WeedPointer, GenericPointer, DeviceAccountSettings, Point, } from "farmbot/dist/resources/api_resources"; import { CustomFieldWarningProps } from "./interfaces"; export const CustomFieldWarning = (props: CustomFieldWarningProps) => props.field && !validFields(props.resource).includes(props.field) && !props.field.includes("meta.") ?

{t("Invalid field for resource.")}

{!(props.resource.kind == "resource" && props.resource.args.resource_type == "Device") &&

props.update({ field: "meta." + props.field, value: undefined })}> {t("Did you mean meta.{{field}}?", { field: props.field })}

}
:
; const validFields = (resource: Resource | Identifier | Nothing): string[] => { if (resource.kind == "identifier" || resource.kind == "nothing") { return POINT_FIELDS; } switch (resource.args.resource_type) { case "Device": return DEVICE_FIELDS; case "Weed": return WEED_FIELDS; case "GenericPointer": return GENERIC_POINTER_FIELDS; default: return PLANT_FIELDS; } }; type BaseFields = (keyof Point)[]; type PlantFields = (keyof PlantPointer)[]; type ToolSlotFields = (keyof ToolSlotPointer)[]; type GenericPointerFields = (keyof GenericPointer)[]; type WeedFields = (keyof WeedPointer)[]; type PointFields = ( keyof PlantPointer | keyof ToolSlotPointer | keyof GenericPointer | keyof WeedPointer )[]; const BASE_FIELDS: BaseFields = ["name", "pointer_type", "x", "y", "z", "meta"]; const PLANT_FIELDS: PlantFields = (BASE_FIELDS as PlantFields) .concat(["openfarm_slug", "plant_stage", "planted_at", "radius"]); const TOOL_SLOT_FIELDS: ToolSlotFields = (BASE_FIELDS as ToolSlotFields) .concat(["tool_id", "pullout_direction", "gantry_mounted"]); const GENERIC_POINTER_FIELDS: GenericPointerFields = (BASE_FIELDS as GenericPointerFields).concat(["radius"]); const WEED_FIELDS: WeedFields = (BASE_FIELDS as PlantFields) .concat(["plant_stage", "radius"]) as WeedFields; const POINT_FIELDS: PointFields = (BASE_FIELDS as PointFields) .concat(PLANT_FIELDS) .concat(TOOL_SLOT_FIELDS) .concat(GENERIC_POINTER_FIELDS) .concat(WEED_FIELDS); const DEVICE_FIELDS: (keyof DeviceAccountSettings)[] = ["name", "mounted_tool_id", "ota_hour", "timezone"];