diff options
Diffstat (limited to 'app/assets/javascripts/diffs/store')
-rw-r--r-- | app/assets/javascripts/diffs/store/mutations.js | 1 | ||||
-rw-r--r-- | app/assets/javascripts/diffs/store/utils.js | 64 |
2 files changed, 54 insertions, 11 deletions
diff --git a/app/assets/javascripts/diffs/store/mutations.js b/app/assets/javascripts/diffs/store/mutations.js index c26411af5d7..086a7872a5d 100644 --- a/app/assets/javascripts/diffs/store/mutations.js +++ b/app/assets/javascripts/diffs/store/mutations.js @@ -140,6 +140,7 @@ export default { addContextLines({ inlineLines: diffFile.highlighted_diff_lines, parallelLines: diffFile.parallel_diff_lines, + diffViewType: state.diffViewType, contextLines: lines, bottom, lineNumbers, diff --git a/app/assets/javascripts/diffs/store/utils.js b/app/assets/javascripts/diffs/store/utils.js index 80972d2aeb8..29133c814ea 100644 --- a/app/assets/javascripts/diffs/store/utils.js +++ b/app/assets/javascripts/diffs/store/utils.js @@ -13,6 +13,8 @@ import { LINES_TO_BE_RENDERED_DIRECTLY, MAX_LINES_TO_BE_RENDERED, TREE_TYPE, + INLINE_DIFF_VIEW_TYPE, + PARALLEL_DIFF_VIEW_TYPE, } from '../constants'; export function findDiffFile(files, match, matchKey = 'file_hash') { @@ -93,8 +95,7 @@ export function getNoteFormData(params) { export const findIndexInInlineLines = (lines, lineNumbers) => { const { oldLineNumber, newLineNumber } = lineNumbers; - return _.findIndex( - lines, + return lines.findIndex( line => line.old_line === oldLineNumber && line.new_line === newLineNumber, ); }; @@ -102,8 +103,7 @@ export const findIndexInInlineLines = (lines, lineNumbers) => { export const findIndexInParallelLines = (lines, lineNumbers) => { const { oldLineNumber, newLineNumber } = lineNumbers; - return _.findIndex( - lines, + return lines.findIndex( line => line.left && line.right && @@ -112,13 +112,32 @@ export const findIndexInParallelLines = (lines, lineNumbers) => { ); }; +const indexGettersByViewType = { + [INLINE_DIFF_VIEW_TYPE]: findIndexInInlineLines, + [PARALLEL_DIFF_VIEW_TYPE]: findIndexInParallelLines, +}; + +export const getPreviousLineIndex = (diffViewType, file, lineNumbers) => { + const findIndex = indexGettersByViewType[diffViewType]; + const lines = { + [INLINE_DIFF_VIEW_TYPE]: file.highlighted_diff_lines, + [PARALLEL_DIFF_VIEW_TYPE]: file.parallel_diff_lines, + }; + + return findIndex && findIndex(lines[diffViewType], lineNumbers); +}; + export function removeMatchLine(diffFile, lineNumbers, bottom) { const indexForInline = findIndexInInlineLines(diffFile.highlighted_diff_lines, lineNumbers); const indexForParallel = findIndexInParallelLines(diffFile.parallel_diff_lines, lineNumbers); const factor = bottom ? 1 : -1; - diffFile.highlighted_diff_lines.splice(indexForInline + factor, 1); - diffFile.parallel_diff_lines.splice(indexForParallel + factor, 1); + if (indexForInline > -1) { + diffFile.highlighted_diff_lines.splice(indexForInline + factor, 1); + } + if (indexForParallel > -1) { + diffFile.parallel_diff_lines.splice(indexForParallel + factor, 1); + } } export function addLineReferences(lines, lineNumbers, bottom, isExpandDown, nextLineNumbers) { @@ -160,8 +179,8 @@ export function addLineReferences(lines, lineNumbers, bottom, isExpandDown, next return linesWithNumbers; } -export function addContextLines(options) { - const { inlineLines, parallelLines, contextLines, lineNumbers, isExpandDown } = options; +function addParallelContextLines(options) { + const { parallelLines, contextLines, lineNumbers, isExpandDown } = options; const normalizedParallelLines = contextLines.map(line => ({ left: line, right: line, @@ -170,17 +189,40 @@ export function addContextLines(options) { const factor = isExpandDown ? 1 : 0; if (!isExpandDown && options.bottom) { - inlineLines.push(...contextLines); parallelLines.push(...normalizedParallelLines); } else { - const inlineIndex = findIndexInInlineLines(inlineLines, lineNumbers); const parallelIndex = findIndexInParallelLines(parallelLines, lineNumbers); - inlineLines.splice(inlineIndex + factor, 0, ...contextLines); parallelLines.splice(parallelIndex + factor, 0, ...normalizedParallelLines); } } +function addInlineContextLines(options) { + const { inlineLines, contextLines, lineNumbers, isExpandDown } = options; + const factor = isExpandDown ? 1 : 0; + + if (!isExpandDown && options.bottom) { + inlineLines.push(...contextLines); + } else { + const inlineIndex = findIndexInInlineLines(inlineLines, lineNumbers); + + inlineLines.splice(inlineIndex + factor, 0, ...contextLines); + } +} + +export function addContextLines(options) { + const { diffViewType } = options; + const contextLineHandlers = { + [INLINE_DIFF_VIEW_TYPE]: addInlineContextLines, + [PARALLEL_DIFF_VIEW_TYPE]: addParallelContextLines, + }; + const contextLineHandler = contextLineHandlers[diffViewType]; + + if (contextLineHandler) { + contextLineHandler(options); + } +} + /** * Trims the first char of the `richText` property when it's either a space or a diff symbol. * @param {Object} line |