import React from 'react'; import { Alert, Checkbox, Chip, CircularProgress, Stack, Typography, useMediaQuery } from '@mui/material'; import MainCard from '../../../components/MainCard'; import { ContainerOutlined, DesktopOutlined, InfoCircleOutlined, NodeExpandOutlined, PlayCircleOutlined, PlusCircleOutlined, SafetyCertificateOutlined, SettingOutlined } from '@ant-design/icons'; import { getFaviconURL, getContainersRoutes } from '../../../utils/routes'; import HostChip from '../../../components/hostChip'; import ExposeModal from '../exposeModal'; import * as API from '../../../api'; import RestartModal from '../../config/users/restart'; import GetActions from '../actionBar'; const info = { backgroundColor: 'rgba(0, 0, 0, 0.1)', padding: '10px', borderRadius: '5px', } const ContainerOverview = ({ containerInfo, config, refresh, updatesAvailable, selfName }) => { const isMobile = useMediaQuery((theme) => theme.breakpoints.down('sm')); const [openModal, setOpenModal] = React.useState(false); const [openRestartModal, setOpenRestartModal] = React.useState(false); const [isUpdating, setIsUpdating] = React.useState(false); const { Name, Config, NetworkSettings, State } = containerInfo; const Image = Config.Image; const IPAddress = NetworkSettings.Networks?.[Object.keys(NetworkSettings.Networks)[0]]?.IPAddress; const Health = State.Health; const healthStatus = Health ? Health.Status : 'Healthy'; const healthIconColor = healthStatus === 'Healthy' ? 'green' : 'red'; const routes = getContainersRoutes(config, Name.replace('/', '')); let refreshAll = refresh && (() => refresh().then(() => { setIsUpdating(false); })); const updateRoutes = (newRoute) => { API.config.addRoute(newRoute).then(() => { refreshAll(); }); } const addNewRoute = async () => { const apps = (await API.docker.list()).data; const app = apps.find((a) => a.Names[0] === Name); setOpenModal(app); } return (
{ updateRoutes(_newRoute); setOpenModal(false); setOpenRestartModal(true); } } /> {Name}
}>
{isUpdating ? ( ) : null}
{({ "created": , "restarting": , "running": , "removing": , "paused": , "exited": , "dead": , })[State.Status]}
{ refreshAll() }} setIsUpdatingId={() => { setIsUpdating(true); }} updateAvailable={updatesAvailable && updatesAvailable[Name]} /> {containerInfo.State.Status !== 'running' && ( This container is not running. Editing any settings will cause the container to start again. )} Image
{Image}
ID
{containerInfo.Id}
IP Address
{IPAddress}
Health
{healthStatus}
Settings {State.Status !== 'running' ? '(Start container to edit)' : ''} { setIsUpdating(true); API.docker.secure(Name.replace('/', ''), e.target.checked).then(() => { setTimeout(() => { refreshAll(); }, 3000); }) }} /> Force Secure Network { setIsUpdating(true); API.docker.autoUpdate(Name.replace('/', ''), e.target.checked).then(() => { setTimeout(() => { refreshAll(); }, 3000); }) }} /> Auto Update Container URLs
{routes.map((route) => { return })}
} onClick={() => { addNewRoute(); }} onDelete={() => { addNewRoute(); }} />
); }; export default ContainerOverview;