Add groups to dropdown list; prevent runtime error in move_abs
parent
7b046af751
commit
82b7f4cf16
|
@ -21,6 +21,7 @@ import {
|
|||
TaggedFarmwareEnv,
|
||||
TaggedFarmwareInstallation,
|
||||
TaggedAlert,
|
||||
TaggedPointGroup,
|
||||
} from "farmbot";
|
||||
import {
|
||||
isTaggedResource,
|
||||
|
@ -73,6 +74,8 @@ export const selectAllPeripherals =
|
|||
(i: ResourceIndex) => findAll<TaggedPeripheral>(i, "Peripheral");
|
||||
export const selectAllPoints =
|
||||
(i: ResourceIndex) => findAll<TaggedPoint>(i, "Point");
|
||||
export const selectAllPointGroups =
|
||||
(i: ResourceIndex) => findAll<TaggedPointGroup>(i, "PointGroup");
|
||||
export const selectAllActivePoints = (input: ResourceIndex) =>
|
||||
selectAllPoints(input).filter(x => !x.body.discarded_at);
|
||||
|
||||
|
|
|
@ -3,10 +3,11 @@ import {
|
|||
selectAllToolSlotPointers,
|
||||
selectAllActivePoints,
|
||||
maybeFindToolById,
|
||||
selectAllPointGroups,
|
||||
} from "../../resources/selectors";
|
||||
import { betterCompact } from "../../util";
|
||||
import {
|
||||
TaggedTool, TaggedPoint, TaggedToolSlotPointer, Xyz, Vector3
|
||||
TaggedTool, TaggedPoint, TaggedToolSlotPointer, Xyz, Vector3, TaggedPointGroup
|
||||
} from "farmbot";
|
||||
import { DropDownItem } from "../../ui";
|
||||
import { capitalize, isNumber } from "lodash";
|
||||
|
@ -27,7 +28,11 @@ export function activeToolDDIs(resources: ResourceIndex): DropDownItem[] {
|
|||
}
|
||||
|
||||
type PointerTypeName = Point["pointer_type"];
|
||||
type DropdownHeadingId = PointerTypeName | typeof TOOL | "Other";
|
||||
type DropdownHeadingId =
|
||||
| PointerTypeName
|
||||
| typeof TOOL
|
||||
| "PointGroup"
|
||||
| "Other";
|
||||
|
||||
/** Location selection menu section names. */
|
||||
export const NAME_MAP: Record<DropdownHeadingId, string> = {
|
||||
|
@ -35,6 +40,7 @@ export const NAME_MAP: Record<DropdownHeadingId, string> = {
|
|||
"Plant": "Plants",
|
||||
"ToolSlot": "Tool Slots",
|
||||
"Tool": "Tools and Seed Containers",
|
||||
"PointGroup": "Groups",
|
||||
"Other": "Other",
|
||||
};
|
||||
|
||||
|
@ -45,7 +51,7 @@ const heading = (name: DropdownHeadingId): DropDownItem[] => ([{
|
|||
headingId: name
|
||||
}]);
|
||||
|
||||
const ddiFrom = (points: TaggedPoint[], pointerType: PointerTypeName) => points
|
||||
const points2ddi = (points: TaggedPoint[], pointerType: PointerTypeName) => points
|
||||
.filter(x => x.body.pointer_type === pointerType)
|
||||
.map(formatPoint)
|
||||
.filter(x => parseInt("" + x.value) > 0);
|
||||
|
@ -54,27 +60,42 @@ const maybeGroup = (display: boolean) =>
|
|||
(groupDDI: DropDownItem): DropDownItem[] =>
|
||||
display ? [groupDDI] : [];
|
||||
|
||||
const groups2Ddi = (groups: TaggedPointGroup[]): DropDownItem[] => {
|
||||
return groups
|
||||
.filter(x => x.body.id)
|
||||
.map(x => {
|
||||
return { label: x.body.name, value: x.uuid, headingId: "PointGroup" };
|
||||
});
|
||||
};
|
||||
|
||||
/** Location selection menu items. */
|
||||
export function locationFormList(resources: ResourceIndex,
|
||||
additionalItems: DropDownItem[], displayGroups?: boolean): DropDownItem[] {
|
||||
const points = selectAllActivePoints(resources)
|
||||
.filter(x => x.body.pointer_type !== "ToolSlot");
|
||||
const plantDDI = ddiFrom(points, "Plant");
|
||||
const genericPointerDDI = ddiFrom(points, "GenericPointer");
|
||||
const plantDDI = points2ddi(points, "Plant");
|
||||
const genericPointerDDI = points2ddi(points, "GenericPointer");
|
||||
const toolDDI = activeToolDDIs(resources);
|
||||
const group = maybeGroup(!!displayGroups);
|
||||
return [COORDINATE_DDI()]
|
||||
const clump = maybeGroup(!!displayGroups);
|
||||
const output = [COORDINATE_DDI()]
|
||||
.concat(additionalItems)
|
||||
.concat(heading("Tool"))
|
||||
.concat(group(everyPointDDI("Tool")))
|
||||
.concat(group(everyPointDDI("ToolSlot")))
|
||||
.concat(clump(everyPointDDI("Tool")))
|
||||
.concat(clump(everyPointDDI("ToolSlot")))
|
||||
.concat(toolDDI)
|
||||
.concat(heading("Plant"))
|
||||
.concat(group(everyPointDDI("Plant")))
|
||||
.concat(clump(everyPointDDI("Plant")))
|
||||
.concat(plantDDI)
|
||||
.concat(heading("GenericPointer"))
|
||||
.concat(group(everyPointDDI("GenericPointer")))
|
||||
.concat(clump(everyPointDDI("GenericPointer")))
|
||||
.concat(genericPointerDDI);
|
||||
if (displayGroups) {
|
||||
return output
|
||||
.concat(heading("PointGroup"))
|
||||
.concat(groups2Ddi(selectAllPointGroups(resources)));
|
||||
} else {
|
||||
return output;
|
||||
}
|
||||
}
|
||||
|
||||
/** Create drop down item with label; i.e., "Point/Plant (1, 2, 3)" */
|
||||
|
|
|
@ -93,7 +93,9 @@ export class TileMoveAbsolute extends React.Component<StepParams, MoveAbsState>
|
|||
}}
|
||||
sequenceUuid={this.props.currentSequence.uuid}
|
||||
resources={this.props.resources}
|
||||
onChange={this.updateLocation}
|
||||
onChange={(x) => x &&
|
||||
x.kind == "parameter_application" &&
|
||||
this.updateLocation(x)}
|
||||
shouldDisplay={this.props.shouldDisplay || (() => false)}
|
||||
hideHeader={true}
|
||||
locationDropdownKey={JSON.stringify(this.props.currentSequence)}
|
||||
|
|
Loading…
Reference in New Issue