diff --git a/scm-ui-components/packages/ui-components/src/layout/Level.js b/scm-ui-components/packages/ui-components/src/layout/Level.js new file mode 100644 index 0000000000..5359de7c66 --- /dev/null +++ b/scm-ui-components/packages/ui-components/src/layout/Level.js @@ -0,0 +1,21 @@ +//@flow +import * as React from "react"; +import classNames from "classnames"; + +type Props = { + className?: string, + left?: React.Node, + right?: React.Node +}; + +export default class Level extends React.Component { + render() { + const { className, left, right } = this.props; + return ( +
+
{left}
+
{right}
+
+ ); + } +} diff --git a/scm-ui-components/packages/ui-components/src/layout/index.js b/scm-ui-components/packages/ui-components/src/layout/index.js index 7708c45c99..ac7279a06a 100644 --- a/scm-ui-components/packages/ui-components/src/layout/index.js +++ b/scm-ui-components/packages/ui-components/src/layout/index.js @@ -2,6 +2,7 @@ export { default as Footer } from "./Footer.js"; export { default as Header } from "./Header.js"; +export { default as Level } from "./Level.js"; export { default as Page } from "./Page.js"; export { default as PageActions } from "./PageActions.js"; export { default as Subtitle } from "./Subtitle.js"; diff --git a/scm-ui-components/packages/ui-components/src/repos/Diff.js b/scm-ui-components/packages/ui-components/src/repos/Diff.js index 7a5bcbf4a2..99a0e1d917 100644 --- a/scm-ui-components/packages/ui-components/src/repos/Diff.js +++ b/scm-ui-components/packages/ui-components/src/repos/Diff.js @@ -4,7 +4,8 @@ import DiffFile from "./DiffFile"; import type {DiffObjectProps, File} from "./DiffTypes"; type Props = DiffObjectProps & { - diff: File[] + diff: File[], + defaultCollapse?: boolean }; class Diff extends React.Component { @@ -17,7 +18,7 @@ class Diff extends React.Component { return ( <> {diff.map((file, index) => ( - + ))} ); diff --git a/scm-ui-components/packages/ui-components/src/repos/DiffFile.js b/scm-ui-components/packages/ui-components/src/repos/DiffFile.js index 8dcdf0a640..f268940709 100644 --- a/scm-ui-components/packages/ui-components/src/repos/DiffFile.js +++ b/scm-ui-components/packages/ui-components/src/repos/DiffFile.js @@ -95,9 +95,19 @@ class DiffFile extends React.Component { }; } + // collapse diff by clicking collapseDiffs button + componentDidUpdate(prevProps) { + const { defaultCollapse } = this.props; + if (prevProps.defaultCollapse !== defaultCollapse) { + this.setState({ + collapsed: defaultCollapse + }); + } + } + toggleCollapse = () => { const { file } = this.props; - if(file && !file.isBinaray) { + if (file && !file.isBinaray) { this.setState(state => ({ collapsed: !state.collapsed })); diff --git a/scm-ui-components/packages/ui-components/src/repos/LoadingDiff.js b/scm-ui-components/packages/ui-components/src/repos/LoadingDiff.js index 876b757f44..16f2d8e5f1 100644 --- a/scm-ui-components/packages/ui-components/src/repos/LoadingDiff.js +++ b/scm-ui-components/packages/ui-components/src/repos/LoadingDiff.js @@ -9,7 +9,8 @@ import Diff from "./Diff"; import type {DiffObjectProps, File} from "./DiffTypes"; type Props = DiffObjectProps & { - url: string + url: string, + defaultCollapse?: boolean }; type State = { diff --git a/scm-ui-components/packages/ui-components/src/repos/changesets/ChangesetDiff.js b/scm-ui-components/packages/ui-components/src/repos/changesets/ChangesetDiff.js index d5d3c4e665..5bc6b249dd 100644 --- a/scm-ui-components/packages/ui-components/src/repos/changesets/ChangesetDiff.js +++ b/scm-ui-components/packages/ui-components/src/repos/changesets/ChangesetDiff.js @@ -7,6 +7,7 @@ import {translate} from "react-i18next"; type Props = { changeset: Changeset, + defaultCollapse?: boolean, // context props t: string => string @@ -23,12 +24,12 @@ class ChangesetDiff extends React.Component { } render() { - const { changeset, t } = this.props; + const { changeset, defaultCollapse, t } = this.props; if (!this.isDiffSupported(changeset)) { return {t("changeset.diffNotSupported")}; } else { const url = this.createUrl(changeset); - return ; + return ; } } diff --git a/scm-ui/public/locales/de/repos.json b/scm-ui/public/locales/de/repos.json index 20cb7b4418..cec34319ab 100644 --- a/scm-ui/public/locales/de/repos.json +++ b/scm-ui/public/locales/de/repos.json @@ -73,7 +73,8 @@ "errorTitle": "Fehler", "errorSubtitle": "Changesets konnten nicht abgerufen werden", "noChangesets": "Keine Changesets in diesem Branch gefunden.", - "branchSelectorLabel": "Branches" + "branchSelectorLabel": "Branches", + "collapseDiffs": "Auf-/Zuklappen" }, "changeset": { "description": "Beschreibung", diff --git a/scm-ui/public/locales/en/repos.json b/scm-ui/public/locales/en/repos.json index 29c0473ad9..76d21aa679 100644 --- a/scm-ui/public/locales/en/repos.json +++ b/scm-ui/public/locales/en/repos.json @@ -73,7 +73,8 @@ "errorTitle": "Error", "errorSubtitle": "Could not fetch changesets", "noChangesets": "No changesets found for this branch.", - "branchSelectorLabel": "Branches" + "branchSelectorLabel": "Branches", + "collapseDiffs": "Collapse" }, "changeset": { "description": "Description", diff --git a/scm-ui/public/locales/es/repos.json b/scm-ui/public/locales/es/repos.json index 08c9235593..efcbdd8c2e 100644 --- a/scm-ui/public/locales/es/repos.json +++ b/scm-ui/public/locales/es/repos.json @@ -73,7 +73,8 @@ "errorTitle": "Error", "errorSubtitle": "No se han podido recuperar los changesets", "noChangesets": "No se han encontrado changesets para esta rama branch.", - "branchSelectorLabel": "Ramas" + "branchSelectorLabel": "Ramas", + "collapseDiffs": "Colapso" }, "changeset": { "description": "Descripción", diff --git a/scm-ui/src/repos/components/changesets/ChangesetDetails.js b/scm-ui/src/repos/components/changesets/ChangesetDetails.js index 33d63a30d4..bea47925f5 100644 --- a/scm-ui/src/repos/components/changesets/ChangesetDetails.js +++ b/scm-ui/src/repos/components/changesets/ChangesetDetails.js @@ -1,9 +1,10 @@ //@flow import React from "react"; -import type { Changeset, Repository } from "@scm-manager/ui-types"; import { Interpolate, translate } from "react-i18next"; import injectSheet from "react-jss"; - +import classNames from "classnames"; +import type { Changeset, Repository, Tag } from "@scm-manager/ui-types"; +import { ExtensionPoint } from "@scm-manager/ui-extensions"; import { DateFromNow, ChangesetId, @@ -12,17 +13,31 @@ import { ChangesetDiff, AvatarWrapper, AvatarImage, - changesets + changesets, + Level, + Button } from "@scm-manager/ui-components"; -import classNames from "classnames"; -import type { Tag } from "@scm-manager/ui-types"; -import { ExtensionPoint } from "@scm-manager/ui-extensions"; +type Props = { + changeset: Changeset, + repository: Repository, + + // context props + t: string => string, + classes: any +}; + +type State = { + collapsed: boolean +}; const styles = { spacing: { marginRight: "1em" }, + bottomMargin: { + marginBottom: "1rem !important" + }, tags: { "& .tag": { marginLeft: ".25rem" @@ -30,16 +45,17 @@ const styles = { } }; -type Props = { - changeset: Changeset, - repository: Repository, - t: string => string, - classes: any -}; +class ChangesetDetails extends React.Component { + constructor(props: Props) { + super(props); + this.state = { + collapsed: false + }; + } -class ChangesetDetails extends React.Component { render() { - const { changeset, repository, classes } = this.props; + const { changeset, repository, classes, t } = this.props; + const { collapsed } = this.state; const description = changesets.parseDescription(changeset.description); @@ -49,8 +65,8 @@ class ChangesetDetails extends React.Component { const date = ; return ( -
-
+ <> +

{

- +

{this.renderTags()}
-

{description.message.split("\n").map((item, key) => { return ( @@ -99,9 +110,21 @@ class ChangesetDetails extends React.Component {

- + + } + /> +
-
+ ); } @@ -124,6 +147,12 @@ class ChangesetDetails extends React.Component { } return null; }; + + collapseDiffs = () => { + this.setState(state => ({ + collapsed: !state.collapsed + })); + }; } export default injectSheet(styles)(translate("repos")(ChangesetDetails)); diff --git a/scm-ui/src/repos/containers/ChangesetView.js b/scm-ui/src/repos/containers/ChangesetView.js index dc53b5d798..5a5af764c8 100644 --- a/scm-ui/src/repos/containers/ChangesetView.js +++ b/scm-ui/src/repos/containers/ChangesetView.js @@ -71,5 +71,5 @@ export default withRouter( connect( mapStateToProps, mapDispatchToProps - )(translate("changesets")(ChangesetView)) + )(translate("repos")(ChangesetView)) );