From d406efb7bb3d99f2f28addf41260b9669ae6ce79 Mon Sep 17 00:00:00 2001 From: Florian Scholdei Date: Mon, 30 Sep 2019 16:45:56 +0200 Subject: [PATCH 1/5] add collapse all diffs by once button, implement level component --- .../ui-components/src/layout/Level.js | 19 +++++ .../ui-components/src/layout/index.js | 1 + .../packages/ui-components/src/repos/Diff.js | 5 +- .../ui-components/src/repos/DiffFile.js | 12 +++- .../ui-components/src/repos/LoadingDiff.js | 3 +- .../src/repos/changesets/ChangesetDiff.js | 5 +- scm-ui/public/locales/de/repos.json | 3 +- scm-ui/public/locales/en/repos.json | 3 +- scm-ui/public/locales/es/repos.json | 3 +- .../components/changesets/ChangesetDetails.js | 71 +++++++++++++------ 10 files changed, 93 insertions(+), 32 deletions(-) create mode 100644 scm-ui-components/packages/ui-components/src/layout/Level.js 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..dd3e676c29 --- /dev/null +++ b/scm-ui-components/packages/ui-components/src/layout/Level.js @@ -0,0 +1,19 @@ +//@flow +import * as React from "react"; + +type Props = { + left?: React.Node, + right?: React.Node +}; + +export default class Level extends React.Component { + render() { + const { 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..dde75ad98f 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,12 +13,23 @@ 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: { @@ -30,16 +42,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,7 +62,7 @@ class ChangesetDetails extends React.Component { const date = ; return ( -
+ <>

{

- +

{this.renderTags()}
-

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

- + + } + /> +
- + ); } @@ -124,6 +143,12 @@ class ChangesetDetails extends React.Component { } return null; }; + + collapseDiffs = () => { + this.setState(state => ({ + collapsed: !state.collapsed + })); + }; } export default injectSheet(styles)(translate("repos")(ChangesetDetails)); From 4c8d28b9bff648ba12d7c97b7fe54f646ba27906 Mon Sep 17 00:00:00 2001 From: Florian Scholdei Date: Mon, 30 Sep 2019 16:47:06 +0200 Subject: [PATCH 2/5] correct trans file used --- scm-ui/src/repos/containers/ChangesetView.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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)) ); From c518236b57139c8e6254cc0d43c243d9056075ca Mon Sep 17 00:00:00 2001 From: Florian Scholdei Date: Mon, 30 Sep 2019 17:01:40 +0200 Subject: [PATCH 3/5] remove some large doubled margin --- scm-ui/src/repos/components/changesets/ChangesetDetails.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scm-ui/src/repos/components/changesets/ChangesetDetails.js b/scm-ui/src/repos/components/changesets/ChangesetDetails.js index dde75ad98f..7f3553613d 100644 --- a/scm-ui/src/repos/components/changesets/ChangesetDetails.js +++ b/scm-ui/src/repos/components/changesets/ChangesetDetails.js @@ -63,7 +63,7 @@ class ChangesetDetails extends React.Component { return ( <> -
+

Date: Tue, 1 Oct 2019 09:36:27 +0200 Subject: [PATCH 4/5] add margin bottom for collapse button, add className option for level component --- .../packages/ui-components/src/layout/Level.js | 6 ++++-- scm-ui/src/repos/components/changesets/ChangesetDetails.js | 4 ++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/scm-ui-components/packages/ui-components/src/layout/Level.js b/scm-ui-components/packages/ui-components/src/layout/Level.js index dd3e676c29..5359de7c66 100644 --- a/scm-ui-components/packages/ui-components/src/layout/Level.js +++ b/scm-ui-components/packages/ui-components/src/layout/Level.js @@ -1,16 +1,18 @@ //@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 { left, right } = this.props; + const { className, left, right } = this.props; return ( -
+
{left}
{right}
diff --git a/scm-ui/src/repos/components/changesets/ChangesetDetails.js b/scm-ui/src/repos/components/changesets/ChangesetDetails.js index 7f3553613d..bea47925f5 100644 --- a/scm-ui/src/repos/components/changesets/ChangesetDetails.js +++ b/scm-ui/src/repos/components/changesets/ChangesetDetails.js @@ -35,6 +35,9 @@ const styles = { spacing: { marginRight: "1em" }, + bottomMargin: { + marginBottom: "1rem !important" + }, tags: { "& .tag": { marginLeft: ".25rem" @@ -108,6 +111,7 @@ class ChangesetDetails extends React.Component {
Date: Wed, 2 Oct 2019 06:25:16 +0000 Subject: [PATCH 5/5] Close branch feature/collapse_diffs