import React from "react"; import { useLocation, Link } from "react-router-dom"; import { ListItemButton, Button, Box, Card, CardContent, Typography, CardActions, Grid, List, ListItemText, Snackbar, Alert, Tooltip, Collapse, FormGroup, FormControlLabel, Checkbox } from "@mui/material"; import AccessTimeIcon from '@mui/icons-material/AccessTime'; import ExpandMoreIcon from '@mui/icons-material/ExpandMore'; import ExpandLessIcon from '@mui/icons-material/ExpandLess'; import useRepositories from "../../hooks/useRepositories"; import Tag from "../../interfaces/Tag"; import Repository from "../../interfaces/Repositoriy"; import { getHostNameFromURL, printSize, printTimePassed, PrintOSIcon, toUpperFirst, printMonth } from "../../utils"; import RepoNotFound from "./RepoNotFound" import Loading from "../Loading"; import { digestDisplay } from "../../interfaces/Utils"; const RepositoryInfo: React.FC = () => { const location = useLocation(); const path = location.pathname; const { isFetched, repositories } = useRepositories(); const [hideTags, setHideTags] = React.useState(true); const [snackbarOpen, setSnackbarOpen] = React.useState(false); const [showDetails, setShowDetails] = React.useState(false); const repository = repositories.find((element) => (element.name === path.slice(12,path.length))); const generatePushCommand = (hostName: string, tagName: string) => { return "docker push " + hostName + "/" + (repository?.name ? repository?.name : "") + ":" + tagName; } const generatePullCommand = (hostName: string, tagName: string) => { return "docker pull " + hostName + "/" + (repository?.name ? repository?.name : "") + ":" + tagName; } const handlePushClick = () => { const hostName = getHostNameFromURL(process.env.REGISTRY_URL ? process.env.REGISTRY_URL : ""); navigator.clipboard.writeText(generatePushCommand(hostName,"tagname")); setSnackbarOpen(true); }; const handlePullClick = (tagName: string) => { const hostName = getHostNameFromURL(process.env.REGISTRY_URL ? process.env.REGISTRY_URL : ""); navigator.clipboard.writeText(generatePullCommand(hostName,tagName)); setSnackbarOpen(true); }; const handleClose = () => { setSnackbarOpen(false); }; const toggleHide = () => { setHideTags(!hideTags); } const toggleCollapse = () => { setShowDetails((prev) => !prev); }; return (isFetched ? ( repository ? (
{/* Word of the Day */} {repository.name} {"Last updated: " + repository.tags.filter((tag: Tag) => (tag.label === "latest")).map((tag: Tag) => (tag.created ? printTimePassed(tag.created) : "")).join(" ")} Docker commands To push a new tag to this repository, {generatePushCommand(getHostNameFromURL(process.env.REGISTRY_URL ? process.env.REGISTRY_URL : ""),"tagname")} {/* */} Tags {"This repository contains " + repository.tags.length + " tag" + (repository.tags.length > 1 ? "s" : "") + "."} {repository.tags.sort((a,b) => { let result = (b.created ? b.created.getTime() : 0) - (a.created ? a.created.getTime() : 0); if (result === 0) { if (b.label === "latest") { return 1; } else if (a.label === "latest") { return -1; } else { return 0; } } else { return result; } }).slice(0,((hideTags && repository.tags.length > 4) ? 3 : repository.tags.length)).map((tag) => (
{"Operating System: " + toUpperFirst(tag.os)}

{"Architecture: " + tag.architecture}
} placement="bottom" arrow > } />
))} {repository.tags.length > 4 ? ( ) : ( <> )}
{repository.tags.map((tag) => (
} name={tag.label} style={{display:'flex', justifyContent:'flex-end'}} label="" />
TAG {tag.label} Last updated: {(tag.created ? printTimePassed(tag.created) : "")} To pull this image, (handlePullClick(tag.label))} component="span" sx={{ display: 'block', bgcolor: '#445d6e', color: 'white', borderColor: '#445d6e' }}>{generatePullCommand(getHostNameFromURL(process.env.REGISTRY_URL ? process.env.REGISTRY_URL : ""),tag.label)}
))}
Copied!
) : ( ) ) : ( )); } export default RepositoryInfo;