diff --git a/src/components/chat/Message.tsx b/src/components/chat/Message.tsx
index 7b8c0fa9..3a418220 100644
--- a/src/components/chat/Message.tsx
+++ b/src/components/chat/Message.tsx
@@ -24,7 +24,7 @@ export const Message = ({
@@ -42,7 +42,10 @@ export const Message = ({
{senderName}
- {rxTime.getHours()}:{rxTime.getMinutes()}
+ {rxTime.toLocaleTimeString(undefined, {
+ hour: '2-digit',
+ minute: '2-digit',
+ })}
);
diff --git a/src/components/generic/Drawer.tsx b/src/components/generic/Drawer.tsx
new file mode 100644
index 00000000..bf43fda8
--- /dev/null
+++ b/src/components/generic/Drawer.tsx
@@ -0,0 +1,37 @@
+import React from 'react';
+
+export interface DrawerProps {
+ open: boolean;
+ onClose: () => void;
+ children: React.ReactNode;
+}
+
+export const Drawer = ({
+ open,
+ onClose,
+ children,
+}: DrawerProps): JSX.Element => {
+ return (
+ <>
+ {open && (
+
+ )}
+
+
+ >
+ );
+};
diff --git a/src/components/menu/MobileNav.tsx b/src/components/menu/MobileNav.tsx
index 2869d63f..57706ddb 100644
--- a/src/components/menu/MobileNav.tsx
+++ b/src/components/menu/MobileNav.tsx
@@ -1,18 +1,16 @@
import React from 'react';
-import { Dialog } from '@headlessui/react';
import {
AnnotationIcon,
CogIcon,
InformationCircleIcon,
ViewGridIcon,
- XCircleIcon,
} from '@heroicons/react/outline';
import { useAppDispatch, useAppSelector } from '../../hooks/redux';
import { routes } from '../../router';
import { closeMobileNav } from '../../slices/appSlice';
-import { Button } from '../generic/Button';
+import { Drawer } from '../generic/Drawer';
import { MenuButton } from './MenuButton';
export const MobileNav = (): JSX.Element => {
@@ -21,57 +19,46 @@ export const MobileNav = (): JSX.Element => {
const mobileNavOpen = useAppSelector((state) => state.app.mobileNavOpen);
return (
-
+
);
};
diff --git a/src/components/nodes/Node.tsx b/src/components/nodes/Node.tsx
new file mode 100644
index 00000000..f5ff0d7e
--- /dev/null
+++ b/src/components/nodes/Node.tsx
@@ -0,0 +1,23 @@
+import React from 'react';
+
+import Avatar from 'boring-avatars';
+
+import type { Protobuf } from '@meshtastic/meshtasticjs';
+
+export interface NodeProps {
+ node: Protobuf.NodeInfo;
+}
+
+export const Node = ({ node }: NodeProps): JSX.Element => {
+ return (
+
+
+
{node.user?.longName}
+
+ );
+};
diff --git a/src/pages/Nodes.tsx b/src/pages/Nodes.tsx
index 16f9d9cb..0c88f381 100644
--- a/src/pages/Nodes.tsx
+++ b/src/pages/Nodes.tsx
@@ -1,11 +1,17 @@
import React from 'react';
+import { Node } from '../components/nodes/Node';
import { PrimaryTemplate } from '../components/templates/PrimaryTemplate';
+import { useAppSelector } from '../hooks/redux';
export const Nodes = (): JSX.Element => {
+ const nodes = useAppSelector((state) => state.meshtastic.nodes);
+
return (
- Nodes
+ {nodes.map((node) => (
+
+ ))}
);
};
diff --git a/src/pages/Settings.tsx b/src/pages/Settings.tsx
index bcce4fa6..9c7a4891 100644
--- a/src/pages/Settings.tsx
+++ b/src/pages/Settings.tsx
@@ -34,12 +34,14 @@ export const Settings = (): JSX.Element => {
{}}
type="text"
valid={true}
/>
{}}
type="text"
valid={true}
/>