diff options
Diffstat (limited to 'app/assets/javascripts/diffs/store/mutations.js')
-rw-r--r-- | app/assets/javascripts/diffs/store/mutations.js | 85 |
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; }); }, |