Browse Source

Add channel debug info

pull/21/head
Sacha Weatherstone 4 years ago
parent
commit
c3bf0f2f36
  1. 87
      src/components/Channel.tsx

87
src/components/Channel.tsx

@ -3,8 +3,15 @@ import React from 'react';
import { fromByteArray, toByteArray } from 'base64-js';
import { useForm, useWatch } from 'react-hook-form';
import { FaQrcode } from 'react-icons/fa';
import { FiChevronDown, FiChevronUp, FiSave } from 'react-icons/fi';
import {
FiChevronDown,
FiChevronUp,
FiCode,
FiRotateCcw,
FiSave,
} from 'react-icons/fi';
import { MdRefresh, MdVisibility, MdVisibilityOff } from 'react-icons/md';
import JSONPretty from 'react-json-pretty';
import QRCode from 'react-qr-code';
import { Loading } from '@components/generic/Loading';
@ -29,21 +36,23 @@ export const Channel = ({ channel }: ChannelProps): JSX.Element => {
const [showQr, setShowQr] = React.useState(false);
const [keySize, setKeySize] = React.useState<128 | 256>(256);
const [pskHidden, setPskHidden] = React.useState(true);
const [showDebug, setShowDebug] = React.useState(false);
const { register, handleSubmit, setValue, control, formState } = useForm<
Omit<Protobuf.ChannelSettings, 'psk'> & { psk: string; enabled: boolean }
>({
defaultValues: {
enabled: [
Protobuf.Channel_Role.SECONDARY,
Protobuf.Channel_Role.PRIMARY,
].find((role) => role === channel.role)
? true
: false,
name: channel.settings?.name,
psk: fromByteArray(channel.settings?.psk ?? new Uint8Array(0)),
},
});
const { register, handleSubmit, setValue, control, formState, reset } =
useForm<
Omit<Protobuf.ChannelSettings, 'psk'> & { psk: string; enabled: boolean }
>({
defaultValues: {
enabled: [
Protobuf.Channel_Role.SECONDARY,
Protobuf.Channel_Role.PRIMARY,
].find((role) => role === channel.role)
? true
: false,
name: channel.settings?.name,
psk: fromByteArray(channel.settings?.psk ?? new Uint8Array(0)),
},
});
const watchPsk = useWatch({
control,
@ -75,6 +84,18 @@ export const Channel = ({ channel }: ChannelProps): JSX.Element => {
return (
<>
<Modal
open={showDebug}
onClose={(): void => {
setShowDebug(false);
}}
>
<Card>
<div className="p-10 overflow-y-auto text-left max-h-96">
<JSONPretty data={channel} />
</div>
</Card>
</Modal>
<Modal
open={showQr}
onClose={(): void => {
@ -120,15 +141,33 @@ export const Channel = ({ channel }: ChannelProps): JSX.Element => {
</div>
<div className="flex gap-2">
{open && (
<IconButton
onClick={async (e): Promise<void> => {
e.stopPropagation();
await onSubmit();
}}
disabled={loading || !formState.isDirty}
icon={<FiSave />}
/>
<>
<IconButton
onClick={(e): void => {
e.stopPropagation();
reset();
}}
disabled={loading || !formState.isDirty}
icon={<FiRotateCcw />}
/>
<IconButton
onClick={async (e): Promise<void> => {
e.stopPropagation();
await onSubmit();
}}
disabled={loading || !formState.isDirty}
icon={<FiSave />}
/>
</>
)}
<IconButton
onClick={(e): void => {
e.stopPropagation();
setShowDebug(true);
}}
icon={<FiCode className="w-5 h-5" />}
/>
<IconButton
onClick={(e): void => {
e.stopPropagation();
@ -175,7 +214,7 @@ export const Channel = ({ channel }: ChannelProps): JSX.Element => {
<>
<IconButton
onClick={(): void => {
setPskHidden(!setPskHidden);
setPskHidden(!pskHidden);
}}
icon={
pskHidden ? <MdVisibility /> : <MdVisibilityOff />

Loading…
Cancel
Save