import React from 'react'; import { Controller, useForm } from 'react-hook-form'; import { FiCode, FiMenu } from 'react-icons/fi'; import JSONPretty from 'react-json-pretty'; import type { Theme } from 'react-select'; import ReactSelect from 'react-select'; import { FormFooter } from '@components/FormFooter'; import { Cover } from '@components/generic/Cover'; import { Label } from '@components/generic/form/Label'; import { PrimaryTemplate } from '@components/templates/PrimaryTemplate'; import { connection } from '@core/connection'; import { useAppSelector } from '@hooks/useAppSelector'; import { Card, Checkbox, IconButton, Input, Select, } from '@meshtastic/components'; import { Protobuf } from '@meshtastic/meshtasticjs'; export interface PositionProps { navOpen?: boolean; setNavOpen?: React.Dispatch>; } export const Position = ({ navOpen, setNavOpen, }: PositionProps): JSX.Element => { const preferences = useAppSelector( (state) => state.meshtastic.radio.preferences, ); const darkMode = useAppSelector((state) => state.app.darkMode); const [debug, setDebug] = React.useState(false); const [loading, setLoading] = React.useState(false); const { register, handleSubmit, formState, reset, control } = useForm({ defaultValues: { ...preferences, positionBroadcastSecs: preferences.positionBroadcastSecs === 0 ? preferences.isRouter ? 43200 : 900 : preferences.positionBroadcastSecs, }, }); // const watchPsk = useWatch({ // control, // name: 'positionFlags', // defaultValue: 0, // }); React.useEffect(() => { reset(preferences); }, [reset, preferences]); const onSubmit = handleSubmit((data) => { setLoading(true); void connection.setPreferences(data, async () => { reset({ ...data }); setLoading(false); await Promise.resolve(); }); }); const encode = (enums: Protobuf.PositionFlags[]): number => { return enums.reduce((acc, curr) => acc | curr, 0); }; const decode = (value: number): Protobuf.PositionFlags[] => { const enumValues = Object.keys(Protobuf.PositionFlags) .map(Number) .filter(Boolean); return enumValues.map((b) => value & b).filter(Boolean); }; return ( } onClick={(): void => { setNavOpen && setNavOpen(!navOpen); }} /> } rightButton={ } active={debug} onClick={(): void => { setDebug(!debug); }} /> } footer={ } > } />
{ const { value, onChange, ...rest } = field; const { error } = fieldState; const label = 'Position Flags'; return (
{label &&
); }} />
); };