Show number of lines that can be expanded

This commit is contained in:
René Pfeuffer
2020-05-28 09:38:56 +02:00
parent 99b7b92fbe
commit abca9e9746
3 changed files with 50 additions and 8 deletions

View File

@@ -309,4 +309,20 @@ describe("diff expander", () => {
it("should return correct hunk", () => { it("should return correct hunk", () => {
expect(diffExpander.getHunk(1).hunk).toBe(HUNK_1); expect(diffExpander.getHunk(1).hunk).toBe(HUNK_1);
}); });
it("should return max expand head range for first hunk", () => {
expect(diffExpander.getHunk(0).maxExpandHeadRange).toBe(0);
});
it("should return max expand head range for hunks in the middle", () => {
expect(diffExpander.getHunk(1).maxExpandHeadRange).toBe(5);
});
it("should return max expand bottom range for hunks in the middle", () => {
expect(diffExpander.getHunk(1).maxExpandBottomRange).toBe(1);
});
it("should return a really bix number for the expand bottom range of the last hunk", () => {
expect(diffExpander.getHunk(3).maxExpandBottomRange).toBeGreaterThan(99999);
});
}); });

View File

@@ -35,15 +35,37 @@ class DiffExpander {
return this.file.hunks.length; return this.file.hunks.length;
}; };
minLineNumber = (n: number) => {
return this.file.hunks[n].newStart;
};
maxLineNumber = (n: number) => {
return this.file.hunks[n].newStart + this.file.hunks[n].newLines;
};
computeMaxExpandHeadRange = (n: number) => {
if (n === 0) {
return this.minLineNumber(n) - 1;
}
return this.minLineNumber(n) - this.maxLineNumber(n - 1);
};
computeMaxExpandBottomRange = (n: number) => {
if (n === this.file.hunks.length - 1) {
return Number.MAX_SAFE_INTEGER;
}
return this.minLineNumber(n + 1) - this.maxLineNumber(n);
};
getHunk: (n: number) => ExpandableHunk = (n: number) => { getHunk: (n: number) => ExpandableHunk = (n: number) => {
return { return {
maxExpandHeadRange: 10, maxExpandHeadRange: this.computeMaxExpandHeadRange(n),
maxExpandBottomRange: 10, maxExpandBottomRange: this.computeMaxExpandBottomRange(n),
expandHead: () => { expandHead: () => {
console.log("expand head", n); return this;
}, },
expandBottom: () => { expandBottom: () => {
console.log("expand bottom", n); return this;
}, },
hunk: this.file.hunks[n] hunk: this.file.hunks[n]
}; };
@@ -54,8 +76,8 @@ export type ExpandableHunk = {
hunk: Hunk; hunk: Hunk;
maxExpandHeadRange: number; maxExpandHeadRange: number;
maxExpandBottomRange: number; maxExpandBottomRange: number;
expandHead: () => void; expandHead: () => DiffExpander;
expandBottom: () => void; expandBottom: () => DiffExpander;
}; };
export default DiffExpander; export default DiffExpander;

View File

@@ -147,7 +147,9 @@ class DiffFile extends React.Component<Props, State> {
if (expandableHunk.maxExpandHeadRange > 0) { if (expandableHunk.maxExpandHeadRange > 0) {
return ( return (
<Decoration> <Decoration>
<HunkDivider onClick={expandableHunk.expandHead}>{"Load first n lines"}</HunkDivider> <HunkDivider onClick={() => this.setState({ diffExpander: expandableHunk.expandHead() })}>
{`Load ${expandableHunk.maxExpandHeadRange} more lines`}
</HunkDivider>
</Decoration> </Decoration>
); );
} }
@@ -159,7 +161,9 @@ class DiffFile extends React.Component<Props, State> {
if (expandableHunk.maxExpandBottomRange > 0) { if (expandableHunk.maxExpandBottomRange > 0) {
return ( return (
<Decoration> <Decoration>
<HunkDivider onClick={expandableHunk.expandBottom}>{"Load last n lines"}</HunkDivider> <HunkDivider onClick={() => this.setState({ diffExpander: expandableHunk.expandBottom() })}>
{`Load ${expandableHunk.maxExpandBottomRange} more lines`}
</HunkDivider>
</Decoration> </Decoration>
); );
} }