Add option to use a function for default collapse state

This commit is contained in:
Rene Pfeuffer
2020-02-07 14:27:21 +01:00
parent c84bba8ead
commit 22943eac9a
7 changed files with 1968 additions and 15 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,3 @@
export type DefaultCollapsedFunction = (oldPath: string, newPath: string) => boolean;
export type DefaultCollapsed = boolean | DefaultCollapsedFunction;

View File

@@ -70,4 +70,7 @@ storiesOf("Diff", module)
return file;
});
return <Diff diff={filesWithLanguage} />;
});
})
.add("CollapsingWithFunction", () => (
<Diff diff={diffFiles} defaultCollapse={(oldPath, newPath) => oldPath.endsWith(".java")} />
));

View File

@@ -3,11 +3,12 @@ import DiffFile from "./DiffFile";
import { DiffObjectProps, File } from "./DiffTypes";
import Notification from "../Notification";
import { WithTranslation, withTranslation } from "react-i18next";
import { DefaultCollapsed } from "./DefaultCollapsed";
type Props = WithTranslation &
DiffObjectProps & {
diff: File[];
defaultCollapse?: boolean;
defaultCollapse?: DefaultCollapsed;
};
class Diff extends React.Component<Props> {

View File

@@ -3,19 +3,20 @@ import { withTranslation, WithTranslation } from "react-i18next";
import classNames from "classnames";
import styled from "styled-components";
// @ts-ignore
import { getChangeKey, Hunk, Decoration } from "react-diff-view";
import { Decoration, getChangeKey, Hunk } from "react-diff-view";
import { Button, ButtonGroup } from "../buttons";
import Tag from "../Tag";
import Icon from "../Icon";
import { ChangeEvent, Change, File, Hunk as HunkType, DiffObjectProps } from "./DiffTypes";
import { Change, ChangeEvent, DiffObjectProps, File, Hunk as HunkType } from "./DiffTypes";
import TokenizedDiffView from "./TokenizedDiffView";
import { DefaultCollapsed } from "./DefaultCollapsed";
const EMPTY_ANNOTATION_FACTORY = {};
type Props = DiffObjectProps &
WithTranslation & {
file: File;
defaultCollapse?: boolean;
defaultCollapse?: DefaultCollapsed;
};
type Collapsible = {
@@ -67,20 +68,21 @@ class DiffFile extends React.Component<Props, State> {
constructor(props: Props) {
super(props);
this.state = {
collapsed: !!this.props.defaultCollapse,
collapsed: this.defaultCollapse(),
sideBySide: props.sideBySide
};
}
// collapse diff by clicking collapseDiffs button
componentDidUpdate(prevProps: Props) {
const { defaultCollapse } = this.props;
if (prevProps.defaultCollapse !== defaultCollapse) {
this.setState({
collapsed: defaultCollapse
});
}
defaultCollapse: () => boolean = () => {
const { defaultCollapse, file } = this.props;
if (typeof defaultCollapse === "boolean") {
return defaultCollapse;
} else if (typeof defaultCollapse === "function") {
return defaultCollapse(file.oldPath, file.newPath);
} else {
return false;
}
};
toggleCollapse = () => {
const { file } = this.props;

View File

@@ -10,11 +10,12 @@ import { DiffObjectProps, File } from "./DiffTypes";
import { NotFoundError } from "../errors";
import { Notification } from "../index";
import { withTranslation, WithTranslation } from "react-i18next";
import { DefaultCollapsed } from "./DefaultCollapsed";
type Props = WithTranslation &
DiffObjectProps & {
url: string;
defaultCollapse?: boolean;
defaultCollapse?: DefaultCollapsed;
};
type State = {

View File

@@ -20,6 +20,7 @@ export * from "./changesets";
export { default as Diff } from "./Diff";
export { default as DiffFile } from "./DiffFile";
export { default as LoadingDiff } from "./LoadingDiff";
export { DefaultCollapsed, DefaultCollapsedFunction } from "./DefaultCollapsed";
export {
File,