|
|
|
@ -1,13 +1,9 @@ |
|
|
|
import type React from "react"; |
|
|
|
import { useEffect } from "react"; |
|
|
|
|
|
|
|
import { Controller, useForm, useWatch } from "react-hook-form"; |
|
|
|
import { toast } from "react-hot-toast"; |
|
|
|
|
|
|
|
import { BitwiseSelect } from "@app/components/form/BitwiseSelect.js"; |
|
|
|
import { FormSection } from "@app/components/form/FormSection.js"; |
|
|
|
import { Input } from "@app/components/form/Input.js"; |
|
|
|
import { Toggle } from "@app/components/form/Toggle.js"; |
|
|
|
import { BitwiseSelect } from "@components/form/BitwiseSelect.js"; |
|
|
|
import { FormSection } from "@components/form/FormSection.js"; |
|
|
|
import { Input } from "@components/form/Input.js"; |
|
|
|
import { Toggle } from "@components/form/Toggle.js"; |
|
|
|
import { PositionValidation } from "@app/validation/config/position.js"; |
|
|
|
import { Form } from "@components/form/Form"; |
|
|
|
import { useDevice } from "@core/providers/useDevice.js"; |
|
|
|
@ -19,22 +15,17 @@ export const Position = (): JSX.Element => { |
|
|
|
|
|
|
|
const myNode = nodes.find((n) => n.data.num === hardware.myNodeNum); |
|
|
|
|
|
|
|
const { |
|
|
|
register, |
|
|
|
handleSubmit, |
|
|
|
formState: { errors, isDirty }, |
|
|
|
reset, |
|
|
|
control |
|
|
|
} = useForm<PositionValidation>({ |
|
|
|
mode: "onChange", |
|
|
|
defaultValues: { |
|
|
|
fixedAlt: myNode?.data.position?.altitude, |
|
|
|
fixedLat: (myNode?.data.position?.latitudeI ?? 0) / 1e7, |
|
|
|
fixedLng: (myNode?.data.position?.longitudeI ?? 0) / 1e7, |
|
|
|
...config.position |
|
|
|
}, |
|
|
|
resolver: classValidatorResolver(PositionValidation) |
|
|
|
}); |
|
|
|
const { register, handleSubmit, reset, control } = |
|
|
|
useForm<PositionValidation>({ |
|
|
|
mode: "onChange", |
|
|
|
defaultValues: { |
|
|
|
fixedAlt: myNode?.data.position?.altitude, |
|
|
|
fixedLat: (myNode?.data.position?.latitudeI ?? 0) / 1e7, |
|
|
|
fixedLng: (myNode?.data.position?.longitudeI ?? 0) / 1e7, |
|
|
|
...config.position |
|
|
|
}, |
|
|
|
resolver: classValidatorResolver(PositionValidation) |
|
|
|
}); |
|
|
|
|
|
|
|
const fixedPositionEnabled = useWatch({ |
|
|
|
control, |
|
|
|
@ -153,7 +144,6 @@ export const Position = (): JSX.Element => { |
|
|
|
<BitwiseSelect |
|
|
|
label="Position Flags" |
|
|
|
description="Configuration options for POSITION messages" |
|
|
|
error={error?.message} |
|
|
|
selected={value} |
|
|
|
decodeEnun={Protobuf.Config_PositionConfig_PositionFlags} |
|
|
|
onChange={onChange} |
|
|
|
@ -180,7 +170,6 @@ export const Position = (): JSX.Element => { |
|
|
|
suffix="m" |
|
|
|
label="Altitude" |
|
|
|
type="number" |
|
|
|
error={errors.fixedAlt?.message} |
|
|
|
disabled={!fixedPositionEnabled} |
|
|
|
{...register("fixedAlt", { valueAsNumber: true })} |
|
|
|
/> |
|
|
|
@ -188,7 +177,6 @@ export const Position = (): JSX.Element => { |
|
|
|
suffix="°" |
|
|
|
label="Latitude" |
|
|
|
type="number" |
|
|
|
error={errors.fixedLat?.message} |
|
|
|
disabled={!fixedPositionEnabled} |
|
|
|
{...register("fixedLat", { valueAsNumber: true })} |
|
|
|
/> |
|
|
|
@ -196,7 +184,6 @@ export const Position = (): JSX.Element => { |
|
|
|
suffix="°" |
|
|
|
label="Longitude" |
|
|
|
type="number" |
|
|
|
error={errors.fixedLng?.message} |
|
|
|
disabled={!fixedPositionEnabled} |
|
|
|
{...register("fixedLng", { valueAsNumber: true })} |
|
|
|
/> |
|
|
|
@ -209,7 +196,6 @@ export const Position = (): JSX.Element => { |
|
|
|
label="Broadcast Interval" |
|
|
|
description="How often your position is sent out over the mesh" |
|
|
|
type="number" |
|
|
|
error={errors.positionBroadcastSecs?.message} |
|
|
|
{...register("positionBroadcastSecs", { valueAsNumber: true })} |
|
|
|
/> |
|
|
|
<Input |
|
|
|
@ -217,7 +203,6 @@ export const Position = (): JSX.Element => { |
|
|
|
label="GPS Update Interval" |
|
|
|
description="How often a GPS fix should be acquired" |
|
|
|
type="number" |
|
|
|
error={errors.gpsUpdateInterval?.message} |
|
|
|
{...register("gpsUpdateInterval", { valueAsNumber: true })} |
|
|
|
/> |
|
|
|
<Input |
|
|
|
@ -225,7 +210,6 @@ export const Position = (): JSX.Element => { |
|
|
|
label="Fix Attempt Duration" |
|
|
|
description="How long the device will try to get a fix for" |
|
|
|
type="number" |
|
|
|
error={errors.gpsAttemptTime?.message} |
|
|
|
{...register("gpsAttemptTime", { valueAsNumber: true })} |
|
|
|
/> |
|
|
|
</FormSection> |
|
|
|
@ -233,14 +217,12 @@ export const Position = (): JSX.Element => { |
|
|
|
label="RX Pin" |
|
|
|
description="GPS Module RX pin override" |
|
|
|
type="number" |
|
|
|
error={errors.rxGpio?.message} |
|
|
|
{...register("rxGpio", { valueAsNumber: true })} |
|
|
|
/> |
|
|
|
<Input |
|
|
|
label="TX Pin" |
|
|
|
description="GPS Module TX pin override" |
|
|
|
type="number" |
|
|
|
error={errors.txGpio?.message} |
|
|
|
{...register("txGpio", { valueAsNumber: true })} |
|
|
|
/> |
|
|
|
</Form> |
|
|
|
|