forked from microsoft/vscode-pull-request-github
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdiff.tsx
More file actions
39 lines (31 loc) · 1.4 KB
/
Copy pathdiff.tsx
File metadata and controls
39 lines (31 loc) · 1.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as React from 'react';
import { DiffChangeType, DiffHunk, DiffLine } from '../../src/common/diffHunk';
function Diff({ hunks }: { hunks: DiffHunk[] }) {
return (
<div className="diff">
{hunks.map((hunk, index) => (
<Hunk key={index} hunk={hunk} />
))}
</div>
);
}
export default Diff;
const Hunk = ({ hunk, maxLines = 8 }: { hunk: DiffHunk; maxLines?: number }) => (
<>
{hunk.diffLines.slice(-maxLines).map(line => (
<div key={keyForDiffLine(line)} className={`diffLine ${getDiffChangeClass(line.type)}`}>
<LineNumber num={line.oldLineNumber} />
<LineNumber num={line.newLineNumber} />
<div className="diffTypeSign">{line.raw.substr(0, 1)}</div>
<div className="lineContent">{line.raw.substr(1)}</div>
</div>
))}
</>
);
const keyForDiffLine = (diffLine: DiffLine) => `${diffLine.oldLineNumber}->${diffLine.newLineNumber}`;
const LineNumber = ({ num }: { num: number }) => <div className="lineNumber">{num > 0 ? num : ' '}</div>;
const getDiffChangeClass = (type: DiffChangeType) => DiffChangeType[type].toLowerCase();