summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/diffs/store/mutations.js
diff options
context:
space:
mode:
Diffstat (limited to 'app/assets/javascripts/diffs/store/mutations.js')
-rw-r--r--app/assets/javascripts/diffs/store/mutations.js85
1 files changed, 51 insertions, 34 deletions
diff --git a/app/assets/javascripts/diffs/store/mutations.js b/app/assets/javascripts/diffs/store/mutations.js
index 6a57a075579..5a8aebd2086 100644
--- a/app/assets/javascripts/diffs/store/mutations.js
+++ b/app/assets/javascripts/diffs/store/mutations.js
@@ -90,49 +90,66 @@ export default {
}));
},
- [types.SET_LINE_DISCUSSIONS_FOR_FILE](state, { diffFile, discussions, diffPositionByLineCode }) {
+ [types.SET_LINE_DISCUSSIONS_FOR_FILE](state, { discussion, diffPositionByLineCode }) {
const { latestDiff } = state;
- discussions.forEach(discussion => {
- const discussionLineCode = discussion.line_code;
- const lineCheck = ({ lineCode }) =>
- lineCode === discussionLineCode &&
- isDiscussionApplicableToLine({
- discussion,
- diffPosition: diffPositionByLineCode[lineCode],
- latestDiff,
- });
-
- if (diffFile.highlightedDiffLines) {
- const line = diffFile.highlightedDiffLines.find(lineCheck);
-
- if (line) {
- Object.assign(line, {
- discussions: line.discussions.concat(discussion),
+ const discussionLineCode = discussion.line_code;
+ const fileHash = discussion.diff_file.file_hash;
+ const lineCheck = ({ lineCode }) =>
+ lineCode === discussionLineCode &&
+ isDiscussionApplicableToLine({
+ discussion,
+ diffPosition: diffPositionByLineCode[lineCode],
+ latestDiff,
+ });
+
+ state.diffFiles = state.diffFiles.map(diffFile => {
+ if (diffFile.fileHash === fileHash) {
+ const file = { ...diffFile };
+
+ if (file.highlightedDiffLines) {
+ file.highlightedDiffLines = file.highlightedDiffLines.map(line => {
+ if (lineCheck(line)) {
+ return {
+ ...line,
+ discussions: line.discussions.concat(discussion),
+ };
+ }
+
+ return line;
});
}
- }
-
- if (diffFile.parallelDiffLines) {
- const { left, right } = diffFile.parallelDiffLines.find(
- parallelLine =>
- (parallelLine.left && lineCheck(parallelLine.left)) ||
- (parallelLine.right && lineCheck(parallelLine.right)),
- );
- const line = left && left.lineCode === discussionLineCode ? left : right;
- if (line) {
- Object.assign(line, {
- discussions: line.discussions.concat(discussion),
+ if (file.parallelDiffLines) {
+ file.parallelDiffLines = file.parallelDiffLines.map(line => {
+ const left = line.left && lineCheck(line.left);
+ const right = line.right && lineCheck(line.right);
+
+ if (left || right) {
+ return {
+ left: {
+ ...line.left,
+ discussions: left ? line.left.discussions.concat(discussion) : [],
+ },
+ right: {
+ ...line.right,
+ discussions: right ? line.right.discussions.concat(discussion) : [],
+ },
+ };
+ }
+
+ return line;
});
}
- }
- if (!diffFile.parallelDiffLines || !diffFile.highlightedDiffLines) {
- Object.assign(diffFile, {
- discussions: diffFile.discussions.concat(discussion),
- });
+ if (!file.parallelDiffLines || !file.highlightedDiffLines) {
+ file.discussions = file.discussions.concat(discussion);
+ }
+
+ return file;
}
+
+ return diffFile;
});
},