6 changed files with 110 additions and 52 deletions
@ -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 && ( |
|||
<div |
|||
className="z-10 fixed inset-0 transition-opacity" |
|||
onClick={onClose} |
|||
> |
|||
<div |
|||
className="absolute inset-0 bg-black opacity-50" |
|||
tabIndex={0} |
|||
></div> |
|||
</div> |
|||
)} |
|||
|
|||
<aside |
|||
className={`transform top-0 left-0 w-64 bg-white dark:bg-secondaryDark fixed h-full overflow-auto ease-in-out transition-all duration-300 z-30 ${ |
|||
open ? 'translate-x-0' : '-translate-x-full' |
|||
}`}
|
|||
> |
|||
{children} |
|||
</aside> |
|||
</> |
|||
); |
|||
}; |
|||
@ -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 ( |
|||
<div className="flex space-x-4 items-center w-full rounded-md dark:bg-primaryDark shadow-md border dark:border-gray-600 p-2 mt-6 dark:text-white hover:bg-gray-200 dark:hover:bg-gray-900"> |
|||
<Avatar |
|||
size={30} |
|||
name={node.user?.longName ?? 'UNK'} |
|||
variant="beam" |
|||
colors={['#213435', '#46685B', '#648A64', '#A6B985', '#E1E3AC']} |
|||
/> |
|||
<div>{node.user?.longName}</div> |
|||
</div> |
|||
); |
|||
}; |
|||
@ -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 ( |
|||
<PrimaryTemplate title="Administration" tagline="Node"> |
|||
<p>Nodes</p> |
|||
{nodes.map((node) => ( |
|||
<Node key={node.num} node={node} /> |
|||
))} |
|||
</PrimaryTemplate> |
|||
); |
|||
}; |
|||
|
|||
Loading…
Reference in new issue