From 9537f415964def737d38b840e604bd70bb7723f6 Mon Sep 17 00:00:00 2001 From: Sacha Weatherstone Date: Sun, 8 Aug 2021 00:13:21 +1000 Subject: [PATCH] WIP --- src/components/chat/Message.tsx | 7 ++- src/components/generic/Drawer.tsx | 37 ++++++++++++++ src/components/menu/MobileNav.tsx | 85 +++++++++++++------------------ src/components/nodes/Node.tsx | 23 +++++++++ src/pages/Nodes.tsx | 8 ++- src/pages/Settings.tsx | 2 + 6 files changed, 110 insertions(+), 52 deletions(-) create mode 100644 src/components/generic/Drawer.tsx create mode 100644 src/components/nodes/Node.tsx 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 ( - dispatch(closeMobileNav())} - className="flex fixed inset-0 z-10 overflow-y-auto" + onClose={() => { + dispatch(closeMobileNav()); + }} > - - -
- -
- } - text={'Messages'} - link={routes.messages().link} - clickAction={() => { - dispatch(closeMobileNav()); - }} - /> - } - text={'Nodes'} - link={routes.nodes().link} - clickAction={() => { - dispatch(closeMobileNav()); - }} - /> - } - text={'Settings'} - link={routes.settings().link} - clickAction={() => { - dispatch(closeMobileNav()); - }} - /> - } - text={'About'} - link={routes.about().link} - clickAction={() => { - dispatch(closeMobileNav()); - }} - /> -
+ /> + } + text={'Nodes'} + link={routes.nodes().link} + clickAction={() => { + dispatch(closeMobileNav()); + }} + /> + } + text={'Settings'} + link={routes.settings().link} + clickAction={() => { + dispatch(closeMobileNav()); + }} + /> + } + text={'About'} + link={routes.about().link} + clickAction={() => { + dispatch(closeMobileNav()); + }} + />
-
+ ); }; 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} />