import React from 'react'; import { useForm } from 'react-hook-form'; import { FiCode, FiMenu } from 'react-icons/fi'; import JSONPretty from 'react-json-pretty'; import { Channel } from '@components/Channel'; import { FormFooter } from '@components/FormFooter'; import { Cover } from '@components/generic/Cover'; import { Loading } from '@components/generic/Loading'; 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 ChannelsProps { navOpen?: boolean; setNavOpen?: React.Dispatch>; } export const Channels = ({ navOpen, setNavOpen, }: ChannelsProps): JSX.Element => { const channels = useAppSelector((state) => state.meshtastic.radio.channels); const adminChannel = channels.find( (channel) => channel.channel.role === Protobuf.Channel_Role.PRIMARY, ) ?? channels[0]; const [usePreset, setUsePreset] = React.useState(true); const [debug, setDebug] = React.useState(false); const [loading, setLoading] = React.useState(false); const { register, handleSubmit, reset, formState } = useForm< DeepOmit >({ defaultValues: { ...adminChannel.channel, }, }); const onSubmit = handleSubmit(async (data) => { setLoading(true); const channelData = Protobuf.Channel.create({ ...data, settings: { ...data.settings, psk: adminChannel.channel.settings?.psk, }, }); await connection.setChannel(channelData, (): Promise => { reset({ ...data }); setLoading(false); return Promise.resolve(); }); }); return ( } onClick={(): void => { setNavOpen && setNavOpen(!navOpen); }} /> } rightButton={ } active={debug} onClick={(): void => { setDebug(!debug); }} /> } footer={ } >
{adminChannel && ( {loading && }
{/* TODO: get gap working */} setUsePreset(e.target.checked)} />
{usePreset ? ( )}
)} } />
{channels.map((channel) => ( ))}
); };