From bc6c2eabbab23fcdfe05b5f82ad8185b095f02ce Mon Sep 17 00:00:00 2001 From: Armin Friedl Date: Sat, 23 May 2020 19:22:41 +0200 Subject: [PATCH] Artifacts table columns: Name, Upload Date, Size Fix the artifacts table columns. Serialize upload date instant as milliseconds from epoch. --- .../friedl/fling/model/dto/ArtifactDto.java | 7 +++++++ .../src/components/admin/FlingArtifacts.jsx | 20 ++++++++++++++++--- web/fling/src/style/fling.scss | 5 +++++ 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/service/fling/src/main/java/net/friedl/fling/model/dto/ArtifactDto.java b/service/fling/src/main/java/net/friedl/fling/model/dto/ArtifactDto.java index 2ba7246..ff45c61 100644 --- a/service/fling/src/main/java/net/friedl/fling/model/dto/ArtifactDto.java +++ b/service/fling/src/main/java/net/friedl/fling/model/dto/ArtifactDto.java @@ -2,6 +2,8 @@ package net.friedl.fling.model.dto; import java.time.Instant; +import com.fasterxml.jackson.annotation.JsonProperty; + import lombok.Data; @Data @@ -21,4 +23,9 @@ public class ArtifactDto { private Instant uploadTime; private FlingDto fling; + + @JsonProperty("uploadTime") + public Long getJsonUploadTime() { + return uploadTime.toEpochMilli(); + } } diff --git a/web/fling/src/components/admin/FlingArtifacts.jsx b/web/fling/src/components/admin/FlingArtifacts.jsx index 37cda7b..9b51391 100644 --- a/web/fling/src/components/admin/FlingArtifacts.jsx +++ b/web/fling/src/components/admin/FlingArtifacts.jsx @@ -15,6 +15,7 @@ function FlingArtifactControl(props) { .then(() => props.reloadArtifactsFn()); } + function handleDownload(ev) { artifactClient.downloadArtifact(props.artifact.id) .then(url => { @@ -39,12 +40,25 @@ function FlingArtifactControl(props) { function FlingArtifactRow(props) { let [hovered, setHovered] = useState(false); + function readableBytes(bytes) { + if(bytes <= 0) return "0 KB"; + + var i = Math.floor(Math.log(bytes) / Math.log(1024)), + sizes = ['Byte', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; + + return (bytes / Math.pow(1024, i)).toFixed(2) * 1 + ' ' + sizes[i]; + } + + function localizedUploadDate() { + let d = new Date(props.artifact.uploadTime); + return d.toLocaleDateString(); + } return( setHovered(true)} onMouseOut={() => setHovered(false)}> {props.artifact.name} - {props.artifact.version} - + {localizedUploadDate()} + {readableBytes(props.artifact.size)}