From b4495c59c0772f3d05331d9441220fff34b379ad Mon Sep 17 00:00:00 2001 From: CodeServer Date: Tue, 12 Apr 2022 03:54:09 +0100 Subject: [PATCH] added os icons --- package-lock.json | 15 ++ package.json | 1 + public/favicon.ico | Bin 0 -> 5104 bytes src/components/Loading.tsx | 9 + src/components/navbar/NavBar.tsx | 8 +- .../repositoryInfo/RepoNotFound.tsx | 13 ++ .../repositoryInfo/RepositoryInfo.tsx | 168 +++++++++++++----- src/context/RepositoriesProvider.tsx | 7 +- src/style/modules/_repositoryInfo.sass | 9 +- src/style/style.css | 14 ++ src/style/style.css.map | 2 +- src/utils.tsx | 14 +- 12 files changed, 209 insertions(+), 51 deletions(-) create mode 100644 public/favicon.ico create mode 100644 src/components/Loading.tsx create mode 100644 src/components/repositoryInfo/RepoNotFound.tsx diff --git a/package-lock.json b/package-lock.json index 01f27ca..0a1c91c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,6 +15,7 @@ "axios": "^0.26.1", "react": "^17.0.2", "react-dom": "^17.0.2", + "react-icons": "^4.3.1", "react-router-dom": "^6.2.1" }, "devDependencies": { @@ -10224,6 +10225,14 @@ "react": "17.0.2" } }, + "node_modules/react-icons": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.3.1.tgz", + "integrity": "sha512-cB10MXLTs3gVuXimblAdI71jrJx8njrJZmNMEMC+sQu5B/BIOmlsAjskdqpn81y8UBVEGuHODd7/ci5DvoSzTQ==", + "peerDependencies": { + "react": "*" + } + }, "node_modules/react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", @@ -20040,6 +20049,12 @@ "scheduler": "^0.20.2" } }, + "react-icons": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.3.1.tgz", + "integrity": "sha512-cB10MXLTs3gVuXimblAdI71jrJx8njrJZmNMEMC+sQu5B/BIOmlsAjskdqpn81y8UBVEGuHODd7/ci5DvoSzTQ==", + "requires": {} + }, "react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", diff --git a/package.json b/package.json index 959b825..dcfdf73 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "axios": "^0.26.1", "react": "^17.0.2", "react-dom": "^17.0.2", + "react-icons": "^4.3.1", "react-router-dom": "^6.2.1" }, "scripts": { diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..06923089fa672ae2cada2a384b2eb15c75bc130e GIT binary patch literal 5104 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 Sx7#+F<|M?!@l;-{c?$sK2+k(} literal 0 HcmV?d00001 diff --git a/src/components/Loading.tsx b/src/components/Loading.tsx new file mode 100644 index 0000000..93eec1e --- /dev/null +++ b/src/components/Loading.tsx @@ -0,0 +1,9 @@ +import React from "react"; + +const Loading: React.FC = () => { + return( +

Loading!

+ ); +}; + +export default Loading; \ No newline at end of file diff --git a/src/components/navbar/NavBar.tsx b/src/components/navbar/NavBar.tsx index ba076c1..da93276 100644 --- a/src/components/navbar/NavBar.tsx +++ b/src/components/navbar/NavBar.tsx @@ -13,7 +13,7 @@ import { getHostNameFromURL } from "../../utils"; const NavBar: React.FC = () => { const { auth } = useAuth(); - const { setRepositories } = useRepositories(); + const { setIsFetched, setRepositories } = useRepositories(); const [anchorElUser, setAnchorElUser] = React.useState<(EventTarget & HTMLButtonElement) | null>(null); const [snackbarOpen, setSnackbarOpen] = React.useState(false); @@ -110,6 +110,11 @@ const NavBar: React.FC = () => { tags.push(tag); }); repository.tags = tags; + }).catch((err) => { + const index = newRepositories.indexOf(repository); + if (index > -1) { + newRepositories.splice(index, 1); + } }); promises.push(promise); }); @@ -140,6 +145,7 @@ const NavBar: React.FC = () => { await getTags(newRepositories, auth) setRepositories(newRepositories); + setIsFetched(true); // setRepositories(newRepositories); }; diff --git a/src/components/repositoryInfo/RepoNotFound.tsx b/src/components/repositoryInfo/RepoNotFound.tsx new file mode 100644 index 0000000..8170629 --- /dev/null +++ b/src/components/repositoryInfo/RepoNotFound.tsx @@ -0,0 +1,13 @@ +import React from "react"; + +interface Props { + repositoryName: string; +} + +const NotFound: React.FC = (props: Props) => { + return( +

Repository "{props.repositoryName}" Not Found!

+ ); +}; + +export default NotFound; \ No newline at end of file diff --git a/src/components/repositoryInfo/RepositoryInfo.tsx b/src/components/repositoryInfo/RepositoryInfo.tsx index cc238f8..5c013a4 100644 --- a/src/components/repositoryInfo/RepositoryInfo.tsx +++ b/src/components/repositoryInfo/RepositoryInfo.tsx @@ -1,17 +1,19 @@ import React from "react"; -import { useLocation } from "react-router-dom"; -import { ListItemButton, Button, Box, Card, CardContent, Typography, CardActions, Grid, ListItemText, Snackbar, Alert } from "@mui/material"; +import { useLocation, Link } from "react-router-dom"; +import { ListItemButton, Button, Box, Card, CardContent, Typography, CardActions, Grid, List, ListItemText, Snackbar, Alert } from "@mui/material"; import AccessTimeIcon from '@mui/icons-material/AccessTime'; import useRepositories from "../../hooks/useRepositories"; import Tag from "../../interfaces/Tag"; import Repository from "../../interfaces/Repositoriy"; -import { getHostNameFromURL, printSize, printTimePassed } from "../../utils"; -import NotFound from "../NotFound"; +import { getHostNameFromURL, printSize, printTimePassed, PrintOSIcon } from "../../utils"; +import RepoNotFound from "./RepoNotFound" +import Loading from "../Loading"; const RepositoryInfo: React.FC = () => { const location = useLocation(); const path = location.pathname; - const { repositories } = useRepositories(); + const { isFetched, repositories } = useRepositories(); + const [hideTags, setHideTags] = React.useState(true); const [snackbarOpen, setSnackbarOpen] = React.useState(false); const repository = repositories.find((element) => (element.name === path.slice(12,path.length))); @@ -28,54 +30,128 @@ const RepositoryInfo: React.FC = () => { const handleClose = () => { setSnackbarOpen(false); }; + + const toggleHide = () => { + setHideTags(!hideTags); + } - return (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 : ""))} - - {/* - - */} + 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 : ""))} + + + + + {/* + + */} + + + + + 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) => ( + + + + + + } /> + + + + + + + + + ))} + {repository.tags.length > 4 ? ( + + + + + + ) : ( + <> + )} + + + + + + Copied! - - - - - Tags - - - {"This repository contains " + repository.tags.length + " tag" + (repository.tags.length > 1 ? "s" : "") + "."} - - - - - - -
+
+ ) : ( + + ) ) : ( - + )); } diff --git a/src/context/RepositoriesProvider.tsx b/src/context/RepositoriesProvider.tsx index 48743c2..9b1ea2a 100644 --- a/src/context/RepositoriesProvider.tsx +++ b/src/context/RepositoriesProvider.tsx @@ -3,19 +3,24 @@ import Repository from "../interfaces/Repositoriy"; interface MyRepositoriesState { + isFetched: boolean; + setIsFetched: React.Dispatch> repositories: Repository[]; setRepositories: React.Dispatch> } const RepositoriesContext = createContext({ + isFetched: false, + setIsFetched: () => {}, repositories: [], setRepositories: () => {} }); export const RepositoriesProvider = ({ children }: { children: React.ReactNode }) => { + const [isFetched, setIsFetched] = useState(false); const [repositories, setRepositories] = useState([]); - return {children}; + return {children}; }; export default RepositoriesContext; \ No newline at end of file diff --git a/src/style/modules/_repositoryInfo.sass b/src/style/modules/_repositoryInfo.sass index adabc36..dff86a5 100644 --- a/src/style/modules/_repositoryInfo.sass +++ b/src/style/modules/_repositoryInfo.sass @@ -1,4 +1,6 @@ .repositoryInfo + max-width: 70% + margin: auto .repositoryDetail margin: 5% padding: 15px @@ -16,4 +18,9 @@ margin: 5% padding: 15px .lines - margin-bottom: 10px \ No newline at end of file + margin-bottom: 10px + .moreBtn + color: #1976d2 + cursor: pointer + .moreBtn:focus + color: purple \ No newline at end of file diff --git a/src/style/style.css b/src/style/style.css index 3f3d513..45e938b 100644 --- a/src/style/style.css +++ b/src/style/style.css @@ -24,6 +24,11 @@ a { margin: auto; } +.repositoryInfo { + max-width: 70%; + margin: auto; +} + .repositoryInfo .repositoryDetail { margin: 5%; padding: 15px; @@ -54,6 +59,15 @@ a { margin-bottom: 10px; } +.repositoryInfo .tagsDetail .moreBtn { + color: #1976d2; + cursor: pointer; +} + +.repositoryInfo .tagsDetail .moreBtn:focus { + color: purple; +} + .login .grid-container { -webkit-box-align: center; -ms-flex-align: center; diff --git a/src/style/style.css.map b/src/style/style.css.map index ccc7fd3..d859a12 100644 --- a/src/style/style.css.map +++ b/src/style/style.css.map @@ -1,6 +1,6 @@ { "version": 3, - "mappings": "AG8CA,AAAA,WAAW,CAAC;EACR,KAAK,EAAE,IAAI;CAAG;;AAElB,AAAA,CAAC,CAAC;EACE,eAAe,EAAE,IAAI;CAAG;;AElD5B,AAAA,OAAO,CAAC;EACJ,MAAM,EAAE,CAAC;CAKU;;AANvB,AAEI,OAFG,CAEH,SAAS,CAAC;EACN,KAAK,EAAE,KAAK;CAAG;;AAHvB,AAII,OAJG,CAIH,WAAW,CAAC;EACR,UAAU,EAAE,MAAM;EAClB,KAAK,EAAE,GAAG;CAAG;;AGNrB,AACI,YADQ,CACR,eAAe,CAAC;EACZ,SAAS,EAAE,GAAG;EACd,MAAM,EAAE,IAAI;CAAG;;ACHvB,AACI,eADW,CACX,iBAAiB,CAAC;EACd,MAAM,EAAE,EAAE;EACV,OAAO,EAAE,IAAI;CAUW;;AAbhC,AAIQ,eAJO,CACX,iBAAiB,CAGb,MAAM,CAAC;EACH,aAAa,EAAE,IAAI;CAAG;;AALlC,AAMQ,eANO,CACX,iBAAiB,CAKb,WAAW,CAAC;EACR,cAAc,EAAE,MAAM;EACtB,YAAY,EAAE,IAAI;CAAG;;AARjC,AASQ,eATO,CACX,iBAAiB,CAQb,eAAe,CAAC;EACZ,WAAW,EAAE,IAAI;EACjB,aAAa,EAAE,GAAG;EAClB,OAAO,EAAE,MAAM;EACf,UAAU,EAAE,GAAG;CAAG;;AAb9B,AAcI,eAdW,CAcX,WAAW,CAAC;EACR,MAAM,EAAE,EAAE;EACV,OAAO,EAAE,IAAI;CAEe;;AAlBpC,AAiBQ,eAjBO,CAcX,WAAW,CAGP,MAAM,CAAC;EACH,aAAa,EAAE,IAAI;CAAG;;AClBlC,AACI,MADE,CACF,eAAe,CAAC;EACZ,WAAW,EAAE,MAAM;EACnB,MAAM,EAAE,IAAI;EACZ,UAAU,EAAE,GAAG;EACf,SAAS,EAAE,cAAc;CAeS;;AApB1C,AAMQ,MANF,CACF,eAAe,GAKT,CAAC,CAAC;EACA,KAAK,EAAE,GAAG;EACV,MAAM,EAAE,MAAM;CAAG;;AAR7B,AASQ,MATF,CACF,eAAe,CAQX,YAAY,CAAC;EACT,OAAO,EAAE,YAAY;EACrB,UAAU,EAAE,MAAM;EAClB,MAAM,EAAE,IAAI;EACZ,SAAS,EAAE,IAAI;CAAG;;AAb9B,AAcQ,MAdF,CACF,eAAe,CAaX,UAAU,CAAC;EACP,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,GAAG;CACpB;;AAjBF,AAkBQ,MAlBF,CACF,eAAe,CAiBX,eAAe,CAAC;EACZ,MAAM,EAAE,IAAI;EACZ,gBAAgB,EAAE,OAAO;CAAG;;ACpBxC,AAAA,QAAQ,CAAC;EACL,SAAS,EAAE,GAAG;EACd,MAAM,EAAE,IAAI;EACZ,UAAU,EAAE,GAAG;CAEU;;AAL7B,AAII,QAJI,CAIJ,eAAe,CAAC;EACZ,UAAU,EAAE,IAAI;CAAG", + "mappings": "AG8CA,AAAA,WAAW,CAAC;EACR,KAAK,EAAE,IAAI;CAAG;;AAElB,AAAA,CAAC,CAAC;EACE,eAAe,EAAE,IAAI;CAAG;;AElD5B,AAAA,OAAO,CAAC;EACJ,MAAM,EAAE,CAAC;CAKU;;AANvB,AAEI,OAFG,CAEH,SAAS,CAAC;EACN,KAAK,EAAE,KAAK;CAAG;;AAHvB,AAII,OAJG,CAIH,WAAW,CAAC;EACR,UAAU,EAAE,MAAM;EAClB,KAAK,EAAE,GAAG;CAAG;;AGNrB,AACI,YADQ,CACR,eAAe,CAAC;EACZ,SAAS,EAAE,GAAG;EACd,MAAM,EAAE,IAAI;CAAG;;ACHvB,AAAA,eAAe,CAAC;EACZ,SAAS,EAAE,GAAG;EACd,MAAM,EAAE,IAAI;CAuBgB;;AAzBhC,AAGI,eAHW,CAGX,iBAAiB,CAAC;EACd,MAAM,EAAE,EAAE;EACV,OAAO,EAAE,IAAI;CAUW;;AAfhC,AAMQ,eANO,CAGX,iBAAiB,CAGb,MAAM,CAAC;EACH,aAAa,EAAE,IAAI;CAAG;;AAPlC,AAQQ,eARO,CAGX,iBAAiB,CAKb,WAAW,CAAC;EACR,cAAc,EAAE,MAAM;EACtB,YAAY,EAAE,IAAI;CAAG;;AAVjC,AAWQ,eAXO,CAGX,iBAAiB,CAQb,eAAe,CAAC;EACZ,WAAW,EAAE,IAAI;EACjB,aAAa,EAAE,GAAG;EAClB,OAAO,EAAE,MAAM;EACf,UAAU,EAAE,GAAG;CAAG;;AAf9B,AAgBI,eAhBW,CAgBX,WAAW,CAAC;EACR,MAAM,EAAE,EAAE;EACV,OAAO,EAAE,IAAI;CAOS;;AAzB9B,AAmBQ,eAnBO,CAgBX,WAAW,CAGP,MAAM,CAAC;EACH,aAAa,EAAE,IAAI;CAAG;;AApBlC,AAqBQ,eArBO,CAgBX,WAAW,CAKP,QAAQ,CAAC;EACL,KAAK,EAAE,OAAO;EACd,MAAM,EAAE,OAAO;CAAG;;AAvB9B,AAwBQ,eAxBO,CAgBX,WAAW,CAQP,QAAQ,AAAA,MAAM,CAAC;EACX,KAAK,EAAE,MAAM;CAAG;;ACzB5B,AACI,MADE,CACF,eAAe,CAAC;EACZ,WAAW,EAAE,MAAM;EACnB,MAAM,EAAE,IAAI;EACZ,UAAU,EAAE,GAAG;EACf,SAAS,EAAE,cAAc;CAeS;;AApB1C,AAMQ,MANF,CACF,eAAe,GAKT,CAAC,CAAC;EACA,KAAK,EAAE,GAAG;EACV,MAAM,EAAE,MAAM;CAAG;;AAR7B,AASQ,MATF,CACF,eAAe,CAQX,YAAY,CAAC;EACT,OAAO,EAAE,YAAY;EACrB,UAAU,EAAE,MAAM;EAClB,MAAM,EAAE,IAAI;EACZ,SAAS,EAAE,IAAI;CAAG;;AAb9B,AAcQ,MAdF,CACF,eAAe,CAaX,UAAU,CAAC;EACP,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,GAAG;CACpB;;AAjBF,AAkBQ,MAlBF,CACF,eAAe,CAiBX,eAAe,CAAC;EACZ,MAAM,EAAE,IAAI;EACZ,gBAAgB,EAAE,OAAO;CAAG;;ACpBxC,AAAA,QAAQ,CAAC;EACL,SAAS,EAAE,GAAG;EACd,MAAM,EAAE,IAAI;EACZ,UAAU,EAAE,GAAG;CAEU;;AAL7B,AAII,QAJI,CAIJ,eAAe,CAAC;EACZ,UAAU,EAAE,IAAI;CAAG", "sources": [ "style.sass", "_variables.sass", diff --git a/src/utils.tsx b/src/utils.tsx index 7a3e452..777425a 100644 --- a/src/utils.tsx +++ b/src/utils.tsx @@ -1,4 +1,6 @@ import axios from "./api/axios" +import { FcLinux } from "react-icons/fc"; +import { FaWindows } from "react-icons/fa"; const checkValidURL = async (url: string) => { try { @@ -54,4 +56,14 @@ const printSize = (sizeInByte: number): string => { } }; -export { checkValidURL, printTwoDecimalPlaces, printTimePassed, printSize, getHostNameFromURL }; \ No newline at end of file +const PrintOSIcon: React.FC<{ os: string }> = ({ os }) => { + if (os === "linux") { + return + } else if (os === "windows") { + return + } else { + return
os
; + } +} + +export { checkValidURL, printTwoDecimalPlaces, printTimePassed, printSize, getHostNameFromURL, PrintOSIcon }; \ No newline at end of file