Show last commit of branch in ui

This commit is contained in:
René Pfeuffer
2020-11-23 15:40:30 +01:00
parent 4d4f89dc7e
commit 541933a03a
7 changed files with 58 additions and 9 deletions

View File

@@ -28,6 +28,7 @@ export type Branch = {
name: string;
revision: string;
defaultBranch?: boolean;
lastCommitDate?: string;
_links: Links;
};

View File

@@ -64,7 +64,8 @@
"createButton": "Branch erstellen"
},
"table": {
"branches": "Branches"
"branches": "Branches",
"lastCommit": "Letzter Commit"
},
"create": {
"title": "Branch erstellen",

View File

@@ -64,7 +64,8 @@
"createButton": "Create Branch"
},
"table": {
"branches": "Branches"
"branches": "Branches",
"lastCommit": "Last commit"
},
"create": {
"title": "Create Branch",

View File

@@ -26,21 +26,45 @@ import { Branch, Repository } from "@scm-manager/ui-types";
import { WithTranslation, withTranslation } from "react-i18next";
import BranchButtonGroup from "./BranchButtonGroup";
import DefaultBranchTag from "./DefaultBranchTag";
import { DateFromNow } from "@scm-manager/ui-components";
import styled from "styled-components";
type Props = WithTranslation & {
repository: Repository;
branch: Branch;
};
const FlexRow = styled.div`
display: flex;
align-items: center;
flex-wrap: wrap;
`;
const Created = styled.div`
margin-left: 0.5rem;
font-size: 0.8rem;
`;
const Label = styled.strong`
margin-right: 0.3rem;
`;
const Date = styled(DateFromNow)`
font-size: 0.8rem;
`;
class BranchDetail extends React.Component<Props> {
render() {
const { repository, branch, t } = this.props;
return (
<div className="media">
<div className="media-content subtitle">
<strong>{t("branch.name")}</strong> {branch.name} <DefaultBranchTag defaultBranch={branch.defaultBranch} />
</div>
<FlexRow className="media-content subtitle">
<Label>{t("branch.name")}</Label> {branch.name} <DefaultBranchTag defaultBranch={branch.defaultBranch} />
<Created className="is-ellipsis-overflow">
{t("tags.overview.created")} <Date date={branch.lastCommitDate} className="has-text-grey" />
</Created>
</FlexRow>
<div className="media-right">
<BranchButtonGroup repository={repository} branch={branch} />
</div>

View File

@@ -25,8 +25,9 @@ import React, { FC } from "react";
import { Link as ReactLink } from "react-router-dom";
import { Branch, Link } from "@scm-manager/ui-types";
import DefaultBranchTag from "./DefaultBranchTag";
import { Icon } from "@scm-manager/ui-components";
import { DateFromNow, Icon } from "@scm-manager/ui-components";
import { useTranslation } from "react-i18next";
import styled from "styled-components";
type Props = {
baseUrl: string;
@@ -34,6 +35,11 @@ type Props = {
onDelete: (branch: Branch) => void;
};
const Created = styled.span`
margin-left: 1rem;
font-size: 0.8rem;
`;
const BranchRow: FC<Props> = ({ baseUrl, branch, onDelete }) => {
const to = `${baseUrl}/${encodeURIComponent(branch.name)}/info`;
const [t] = useTranslation("repos");
@@ -56,6 +62,9 @@ const BranchRow: FC<Props> = ({ baseUrl, branch, onDelete }) => {
{branch.name}
<DefaultBranchTag defaultBranch={branch.defaultBranch} />
</ReactLink>
<Created className="has-text-grey is-ellipsis-overflow">
{t("branches.table.lastCommit")} <DateFromNow date={branch.lastCommitDate} />
</Created>
</td>
<td className="is-darker">{deleteButton}</td>
</tr>

View File

@@ -24,6 +24,7 @@
package sonia.scm.api.v2.resources;
import com.fasterxml.jackson.annotation.JsonInclude;
import de.otto.edison.hal.Embedded;
import de.otto.edison.hal.HalRepresentation;
import de.otto.edison.hal.Links;
@@ -31,11 +32,14 @@ import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.hibernate.validator.constraints.Length;
import sonia.scm.repository.Branch;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.Pattern;
import static sonia.scm.repository.Branch.VALID_BRANCH_NAMES;
import java.time.Instant;
import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL;
@Getter
@Setter
@@ -45,10 +49,12 @@ public class BranchDto extends HalRepresentation {
@NotEmpty
@Length(min = 1, max = 100)
@Pattern(regexp = VALID_BRANCH_NAMES)
@Pattern(regexp = Branch.VALID_BRANCH_NAMES)
private String name;
private String revision;
private boolean defaultBranch;
@JsonInclude(NON_NULL)
private Instant lastCommitDate;
BranchDto(Links links, Embedded embedded) {
super(links, embedded);

View File

@@ -38,11 +38,14 @@ import sonia.scm.web.EdisonHalAppender;
import javax.inject.Inject;
import java.time.Instant;
import java.util.Optional;
import static de.otto.edison.hal.Link.linkBuilder;
import static de.otto.edison.hal.Links.linkingTo;
@Mapper
public abstract class BranchToBranchDtoMapper extends HalAppenderMapper {
public abstract class BranchToBranchDtoMapper extends HalAppenderMapper implements InstantAttributeMapper {
@Inject
private ResourceLinks resourceLinks;
@@ -68,4 +71,8 @@ public abstract class BranchToBranchDtoMapper extends HalAppenderMapper {
return new BranchDto(linksBuilder.build(), embeddedBuilder.build());
}
Instant mapOptionalTime(Optional<Long> date) {
return date.map(this::mapTime).orElse(null);
}
}