mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-12 00:15:44 +01:00
Add button to switch between side-by-side and combined diff view
This commit is contained in:
@@ -11,6 +11,7 @@ import {
|
|||||||
import injectSheets from "react-jss";
|
import injectSheets from "react-jss";
|
||||||
import classNames from "classnames";
|
import classNames from "classnames";
|
||||||
import { translate } from "react-i18next";
|
import { translate } from "react-i18next";
|
||||||
|
import {Button} from "../buttons";
|
||||||
|
|
||||||
const styles = {
|
const styles = {
|
||||||
panel: {
|
panel: {
|
||||||
@@ -39,14 +40,16 @@ type Props = DiffObjectProps & {
|
|||||||
};
|
};
|
||||||
|
|
||||||
type State = {
|
type State = {
|
||||||
collapsed: boolean
|
collapsed: boolean,
|
||||||
|
sideBySide: boolean
|
||||||
};
|
};
|
||||||
|
|
||||||
class DiffFile extends React.Component<Props, State> {
|
class DiffFile extends React.Component<Props, State> {
|
||||||
constructor(props: Props) {
|
constructor(props: Props) {
|
||||||
super(props);
|
super(props);
|
||||||
this.state = {
|
this.state = {
|
||||||
collapsed: false
|
collapsed: false,
|
||||||
|
sideBySide: false
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -56,6 +59,12 @@ class DiffFile extends React.Component<Props, State> {
|
|||||||
}));
|
}));
|
||||||
};
|
};
|
||||||
|
|
||||||
|
toggleSideBySide = () => {
|
||||||
|
this.setState(state => ({
|
||||||
|
sideBySide: !state.sideBySide
|
||||||
|
}));
|
||||||
|
};
|
||||||
|
|
||||||
setCollapse = (collapsed: boolean) => {
|
setCollapse = (collapsed: boolean) => {
|
||||||
this.setState({
|
this.setState({
|
||||||
collapsed
|
collapsed
|
||||||
@@ -149,10 +158,10 @@ class DiffFile extends React.Component<Props, State> {
|
|||||||
file,
|
file,
|
||||||
fileControlFactory,
|
fileControlFactory,
|
||||||
fileAnnotationFactory,
|
fileAnnotationFactory,
|
||||||
sideBySide,
|
classes,
|
||||||
classes
|
t
|
||||||
} = this.props;
|
} = this.props;
|
||||||
const { collapsed } = this.state;
|
const { collapsed, sideBySide } = this.state;
|
||||||
const viewType = sideBySide ? "split" : "unified";
|
const viewType = sideBySide ? "split" : "unified";
|
||||||
|
|
||||||
let body = null;
|
let body = null;
|
||||||
@@ -173,14 +182,10 @@ class DiffFile extends React.Component<Props, State> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const fileControls = fileControlFactory ? fileControlFactory(file, this.setCollapse) : null;
|
const fileControls = fileControlFactory ? fileControlFactory(file, this.setCollapse) : null;
|
||||||
return (
|
return <div className={classNames("panel", classes.panel)}>
|
||||||
<div className={classNames("panel", classes.panel)}>
|
|
||||||
<div className="panel-heading">
|
<div className="panel-heading">
|
||||||
<div className="level">
|
<div className="level">
|
||||||
<div
|
<div className={classNames("level-left", classes.titleHeader)} onClick={this.toggleCollapse}>
|
||||||
className={classNames("level-left", classes.titleHeader)}
|
|
||||||
onClick={this.toggleCollapse}
|
|
||||||
>
|
|
||||||
<i className={icon} />
|
<i className={icon} />
|
||||||
<span className={classes.title}>
|
<span className={classes.title}>
|
||||||
{this.renderFileTitle(file)}
|
{this.renderFileTitle(file)}
|
||||||
@@ -189,12 +194,21 @@ class DiffFile extends React.Component<Props, State> {
|
|||||||
{this.renderChangeTag(file)}
|
{this.renderChangeTag(file)}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div className="level-right">{fileControls}</div>
|
<div className="level-right">
|
||||||
|
<Button action={this.toggleSideBySide}>
|
||||||
|
<span className="icon is-small">
|
||||||
|
<i className={classNames("fas", sideBySide ? "fa-align-left" : "fa-columns")} />
|
||||||
|
</span>
|
||||||
|
<span className="is-hidden-mobile">
|
||||||
|
{t(sideBySide ? "diff.combined" : "diff.sideBySide")}
|
||||||
|
</span>
|
||||||
|
</Button>
|
||||||
|
{fileControls}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{body}
|
{body}
|
||||||
</div>
|
</div>;
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -173,5 +173,9 @@
|
|||||||
"submit": "Ja",
|
"submit": "Ja",
|
||||||
"cancel": "Nein"
|
"cancel": "Nein"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"diff": {
|
||||||
|
"sideBySide": "Zweispalitg",
|
||||||
|
"combined": "Kombiniert"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -181,6 +181,8 @@
|
|||||||
"modify": "modified",
|
"modify": "modified",
|
||||||
"rename": "renamed",
|
"rename": "renamed",
|
||||||
"copy": "copied"
|
"copy": "copied"
|
||||||
}
|
},
|
||||||
|
"sideBySide": "side-by-side",
|
||||||
|
"combined": "combined"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user