import { ActionIcon, Badge, Checkbox, createStyles, Drawer, Group, List, Menu, ScrollArea, Table, Text, } from '@mantine/core'; import { IconBrandDocker } from '@tabler/icons'; import axios from 'axios'; import { useEffect, useState } from 'react'; import Docker from 'dockerode'; import DockerMenu from './DockerMenu'; import ContainerState from './ContainerState'; import ContainerActionBar from './ContainerActionBar'; const useStyles = createStyles((theme) => ({ rowSelected: { backgroundColor: theme.colorScheme === 'dark' ? theme.fn.rgba(theme.colors[theme.primaryColor][7], 0.2) : theme.colors[theme.primaryColor][0], }, })); export default function DockerDrawer(props: any) { const [opened, setOpened] = useState(false); const [containers, setContainers] = useState([]); const { classes, cx } = useStyles(); const [selection, setSelection] = useState([]); function reload() { axios.get('/api/docker/containers').then((res) => { setContainers(res.data); }); } const toggleRow = (container: Docker.ContainerInfo) => setSelection((current) => current.includes(container) ? current.filter((c) => c !== container) : [...current, container] ); const toggleAll = () => setSelection((current) => current.length === containers.length ? [] : containers.map((c) => c) ); useEffect(() => { reload(); }, []); const rows = containers.map((element) => { const selected = selection.includes(element); return ( toggleRow(element)} transitionDuration={0} /> {element.Names[0].replace('/', '')} {element.Image} {element.Ports.sort((a, b) => a.PrivatePort - b.PrivatePort) .slice(-3) .map((port) => ( {port.PrivatePort}:{port.PublicPort} ))} {element.Ports.length > 3 && ( {element.Ports.length - 3} more )} ); }); return ( <> setOpened(false)} padding="xl" size="full"> {rows}
your docker containers
0 && selection.length !== containers.length} transitionDuration={0} /> Name Image Ports State
setOpened(true)} > ); }