diff --git a/scm-ui/ui-components/src/__resources__/Diff.hunks.ts b/scm-ui/ui-components/src/__resources__/Diff.hunks.ts new file mode 100644 index 0000000000..86acfbff0a --- /dev/null +++ b/scm-ui/ui-components/src/__resources__/Diff.hunks.ts @@ -0,0 +1,36 @@ +export default `diff --git a/src/main/java/com/cloudogu/scm/review/pullrequest/service/DefaultPullRequestService.java b/src/main/java/com/cloudogu/scm/review/pullrequest/service/DefaultPullRequestService.java +index 17c35f6..cdf70f1 100644 +--- a/src/main/java/com/cloudogu/scm/review/pullrequest/service/DefaultPullRequestService.java ++++ b/src/main/java/com/cloudogu/scm/review/pullrequest/service/DefaultPullRequestService.java +@@ -25,6 +25,8 @@ import java.util.Optional; + import java.util.Set; + import java.util.stream.Collectors; + ++import static com.cloudogu.scm.review.pullrequest.service.PullRequestApprovalEvent.ApprovalCause.APPROVAL_REMOVED; ++import static com.cloudogu.scm.review.pullrequest.service.PullRequestApprovalEvent.ApprovalCause.APPROVED; + import static com.cloudogu.scm.review.pullrequest.service.PullRequestStatus.MERGED; + import static com.cloudogu.scm.review.pullrequest.service.PullRequestStatus.OPEN; + import static com.cloudogu.scm.review.pullrequest.service.PullRequestStatus.REJECTED; +@@ -200,6 +202,7 @@ public class DefaultPullRequestService implements PullRequestService { + PullRequest pullRequest = getPullRequestFromStore(repository, pullRequestId); + pullRequest.addApprover(user.getId()); + getStore(repository).update(pullRequest); ++ eventBus.post(new PullRequestApprovalEvent(repository, pullRequest, APPROVED)); + } + + @Override +@@ -211,8 +214,12 @@ public class DefaultPullRequestService implements PullRequestService { + approver.stream() + .filter(recipient -> user.getId().equals(recipient)) + .findFirst() +- .ifPresent(pullRequest::removeApprover); +- getStore(repository).update(pullRequest); ++ .ifPresent( ++ approval -> { ++ pullRequest.removeApprover(approval); ++ getStore(repository).update(pullRequest); ++ eventBus.post(new PullRequestApprovalEvent(repository, pullRequest, APPROVAL_REMOVED)); ++ }); + } + + @Override`; diff --git a/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap b/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap index 2c065b4394..8034701cbd 100644 --- a/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap +++ b/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap @@ -716,6 +716,18 @@ Array [ /> + + + + + + + @@ -1282,6 +1294,18 @@ Array [ /> + + + + + + + @@ -1459,6 +1483,20 @@ Array [ + + + +
+ + + @@ -2111,6 +2149,18 @@ Array [ /> + + + + + + + @@ -2550,6 +2600,18 @@ Array [ /> + + + + + + + @@ -2989,6 +3051,18 @@ Array [ /> + + + + + + + @@ -3483,6 +3557,20 @@ Array [ + + + +
+ + + @@ -3683,6 +3771,20 @@ Array [ + + + +
+ + + @@ -4016,6 +4118,18 @@ Array [ /> + + + + + + + @@ -4586,6 +4700,18 @@ Array [ /> + + + + + + + @@ -4763,6 +4889,20 @@ Array [ + + + +
+ + + @@ -5419,6 +5559,18 @@ Array [ /> + + + + + + + @@ -5862,6 +6014,18 @@ Array [ /> + + + + + + + @@ -6305,6 +6469,18 @@ Array [ /> + + + + + + + @@ -6799,6 +6975,20 @@ Array [ + + + +
+ + + @@ -6999,6 +7189,20 @@ Array [ + + + +
+ + + @@ -7340,6 +7544,18 @@ Array [ /> + + + + + + + @@ -7918,6 +8134,18 @@ Array [ /> + + + + + + + @@ -8095,6 +8323,20 @@ Array [ + + + +
+ + + @@ -8759,6 +9001,18 @@ Array [ /> + + + + + + + @@ -9210,6 +9464,18 @@ Array [ /> + + + + + + + @@ -9661,6 +9927,18 @@ Array [ /> + + + + + + + @@ -10155,6 +10433,20 @@ Array [ + + + +
+ + + @@ -10355,6 +10647,20 @@ Array [ + + + +
+ + + @@ -10607,6 +10913,842 @@ Array [ ] `; +exports[`Storyshots Diff Hunks 1`] = ` +
+
+
+
+ + + src/main/java/com/cloudogu/scm/review/pullrequest/service/DefaultPullRequestService.java + + + modify + +
+
+
+
+ +
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ 25 + + 25 + + import java.util.Set; +
+ 26 + + 26 + + import java.util.stream.Collectors; +
+ 27 + + 27 + + +
+ + 28 + + import static com.cloudogu.scm.review.pullrequest.service.PullRequestApprovalEvent.ApprovalCause.APPROVAL_REMOVED; +
+ + 29 + + import static com.cloudogu.scm.review.pullrequest.service.PullRequestApprovalEvent.ApprovalCause.APPROVED; +
+ 28 + + 30 + + import static com.cloudogu.scm.review.pullrequest.service.PullRequestStatus.MERGED; +
+ 29 + + 31 + + import static com.cloudogu.scm.review.pullrequest.service.PullRequestStatus.OPEN; +
+ 30 + + 32 + + import static com.cloudogu.scm.review.pullrequest.service.PullRequestStatus.REJECTED; +
+
+
+ 200 + + 202 + + PullRequest pullRequest = getPullRequestFromStore(repository, pullRequestId); +
+ 201 + + 203 + + pullRequest.addApprover(user.getId()); +
+ 202 + + 204 + + getStore(repository).update(pullRequest); +
+ + 205 + + eventBus.post(new PullRequestApprovalEvent(repository, pullRequest, APPROVED)); +
+ 203 + + 206 + + } +
+ 204 + + 207 + + +
+ 205 + + 208 + + @Override +
+
+
+ 211 + + 214 + + approver.stream() +
+ 212 + + 215 + + .filter(recipient -> user.getId().equals(recipient)) +
+ 213 + + 216 + + .findFirst() +
+ 214 + + + .ifPresent(pullRequest::removeApprover); +
+ 215 + + + getStore(repository).update(pullRequest); +
+ + 217 + + .ifPresent( +
+ + 218 + + approval -> { +
+ + 219 + + pullRequest.removeApprover(approval); +
+ + 220 + + getStore(repository).update(pullRequest); +
+ + 221 + + eventBus.post(new PullRequestApprovalEvent(repository, pullRequest, APPROVAL_REMOVED)); +
+ + 222 + + }); +
+ 216 + + 223 + + } +
+ 217 + + 224 + + +
+ 218 + + 225 + + @Override +
+
+
+`; + exports[`Storyshots Diff Line Annotation 1`] = ` Array [
+ + + + + + + @@ -11262,6 +12416,18 @@ Array [ /> + + + + + + + @@ -11451,6 +12617,20 @@ Array [ + + + +
+ + + @@ -12103,6 +13283,18 @@ Array [ /> + + + + + + + @@ -12542,6 +13734,18 @@ Array [ /> + + + + + + + @@ -12981,6 +14185,18 @@ Array [ /> + + + + + + + @@ -13475,6 +14691,20 @@ Array [ + + + +
+ + + @@ -13675,6 +14905,20 @@ Array [ + + + +
+ + + @@ -14004,6 +15248,18 @@ Array [ /> + + + + + + + @@ -14610,6 +15866,18 @@ Array [ /> + + + + + + + @@ -14801,6 +16069,20 @@ Array [ + + + +
+ + + @@ -15501,6 +16783,18 @@ Array [ /> + + + + + + + @@ -15970,6 +17264,18 @@ Array [ /> + + + + + + + @@ -16439,6 +17745,18 @@ Array [ /> + + + + + + + @@ -16973,6 +18291,20 @@ Array [ + + + +
+ + + @@ -17189,6 +18521,20 @@ Array [ + + + +
+ + + @@ -17539,6 +18885,18 @@ Array [ /> + + + + + + + @@ -18198,6 +19556,18 @@ Array [ /> + + + + + + + @@ -18418,6 +19788,20 @@ Array [ + + + +
+ + + @@ -19117,6 +20501,18 @@ Array [ /> + + + + + + + @@ -19608,6 +21004,18 @@ Array [ /> + + + + + + + @@ -20099,6 +21507,18 @@ Array [ /> + + + + + + + @@ -20703,6 +22123,20 @@ Array [ + + + +
+ + + @@ -20931,6 +22365,20 @@ Array [ + + + +
+ + + diff --git a/scm-ui/ui-components/src/repos/Diff.stories.tsx b/scm-ui/ui-components/src/repos/Diff.stories.tsx index 96f9a8e1b4..09ef48c0b5 100644 --- a/scm-ui/ui-components/src/repos/Diff.stories.tsx +++ b/scm-ui/ui-components/src/repos/Diff.stories.tsx @@ -4,6 +4,7 @@ import Diff from "./Diff"; // @ts-ignore import parser from "gitdiff-parser"; import simpleDiff from "../__resources__/Diff.simple"; +import hunksDiff from "../__resources__/Diff.hunks"; import Button from "../buttons/Button"; import { DiffEventContext } from "./DiffTypes"; import Toast from "../toast/Toast"; @@ -47,4 +48,8 @@ storiesOf("Diff", module) ); }; return ; + }) + .add("Hunks", () => { + const hunkDiffFiles = parser.parse(hunksDiff); + return ; }); diff --git a/scm-ui/ui-components/src/repos/DiffFile.tsx b/scm-ui/ui-components/src/repos/DiffFile.tsx index 8f584fcfe2..fe35cc111f 100644 --- a/scm-ui/ui-components/src/repos/DiffFile.tsx +++ b/scm-ui/ui-components/src/repos/DiffFile.tsx @@ -3,7 +3,7 @@ import { withTranslation, WithTranslation } from "react-i18next"; import classNames from "classnames"; import styled from "styled-components"; // @ts-ignore -import { Diff as DiffComponent, getChangeKey, Hunk } from "react-diff-view"; +import { Diff as DiffComponent, getChangeKey, Hunk, Decoration } from "react-diff-view"; import { Button, ButtonGroup } from "../buttons"; import Tag from "../Tag"; import Icon from "../Icon"; @@ -132,7 +132,8 @@ class DiffFile extends React.Component { if (i > 0) { return ; } - return null; + // hunk header must be defined + return ; }; collectHunkAnnotations = (hunk: HunkType) => { @@ -172,15 +173,15 @@ class DiffFile extends React.Component { }; renderHunk = (hunk: HunkType, i: number) => { - return ( + return [ + {this.createHunkHeader(hunk, i)}, - ); + ]; }; renderFileTitle = (file: File) => { @@ -235,7 +236,7 @@ class DiffFile extends React.Component {
{fileAnnotations} - {(hunks: HunkType[]) => hunks.map(this.renderHunk)} + {(hunks: HunkType[]) => hunks.map(this.renderHunk).reduce((a, b) => a.concat(b))}
);