FarmBot/Farmbot-Web-App

View on GitHub
frontend/sequences/step_tiles/tile_computed_move/speed.tsx

Summary

Maintainability
C
1 day
Test Coverage
import React from "react";
import { Xyz, SpeedOverwrite, Move } from "farmbot";
import { SpeedInputRowProps } from "./interfaces";
import { Row, Col } from "../../../ui";
import { t } from "../../../i18next_wrapper";
import { MoveStepInput } from "./input";
import { isUndefined } from "lodash";

export const speedOverwrite = (
  axis: Xyz,
  node: SpeedOverwrite["args"]["speed_setting"] | undefined,
): SpeedOverwrite[] =>
  isUndefined(node) || (node.kind == "numeric" && node.args.number == 100)
    ? []
    : [{ kind: "speed_overwrite", args: { axis, speed_setting: node } }];

export const getSpeedState = (step: Move, axis: Xyz) => {
  const speedOverwriteItem = step.body?.find(x =>
    x.kind == "speed_overwrite" && x.args.axis == axis);
  if (speedOverwriteItem?.kind == "speed_overwrite") {
    switch (speedOverwriteItem.args.speed_setting.kind) {
      case "numeric":
        return speedOverwriteItem.args.speed_setting.args.number;
      case "lua":
        return speedOverwriteItem.args.speed_setting.args.lua;
    }
  }
};

export const getSpeedNode = (
  speedValue: string | number | undefined,
  disabled: boolean,
): SpeedOverwrite["args"]["speed_setting"] | undefined => {
  if (isUndefined(speedValue) || disabled) { return; }
  switch (typeof speedValue) {
    case "string":
      return { kind: "lua", args: { lua: speedValue } };
    case "number":
      return { kind: "numeric", args: { number: speedValue } };
  }
};

export const SpeedInputRow = (props: SpeedInputRowProps) =>
  <Row>
    <Col xs={3}>
      <label>
        {t("Speed (%)")}
      </label>
    </Col>
    {["x", "y", "z"].map((axis: Xyz) =>
      <Col xs={3} key={axis}>
        <MoveStepInput field={"speed"} axis={axis}
          value={props.speed[axis]}
          onCommit={props.onCommit} min={1} max={100}
          disabled={props.disabledAxes[axis]} defaultValue={100}
          setValue={props.setAxisState("speed", axis, 100)} />
      </Col>)}
  </Row>;