import Vue from 'vue'; import _ from 'underscore'; import { convertObjectPropsToCamelCase } from '~/lib/utils/common_utils'; import { findDiffFile, addLineReferences, removeMatchLine, addContextLines, prepareDiffData, } from './utils'; import * as types from './mutation_types'; export default { [types.SET_BASE_CONFIG](state, options) { const { endpoint, projectPath } = options; Object.assign(state, { endpoint, projectPath }); }, [types.SET_LOADING](state, isLoading) { Object.assign(state, { isLoading }); }, [types.SET_DIFF_DATA](state, data) { const diffData = convertObjectPropsToCamelCase(data, { deep: true }); prepareDiffData(diffData); Object.assign(state, { ...diffData, }); }, [types.RENDER_FILE](state, file) { Object.assign(file, { renderIt: true, }); }, [types.SET_MERGE_REQUEST_DIFFS](state, mergeRequestDiffs) { Object.assign(state, { mergeRequestDiffs: convertObjectPropsToCamelCase(mergeRequestDiffs, { deep: true }), }); }, [types.SET_DIFF_VIEW_TYPE](state, diffViewType) { Object.assign(state, { diffViewType }); }, [types.ADD_COMMENT_FORM_LINE](state, { lineCode }) { Vue.set(state.diffLineCommentForms, lineCode, true); }, [types.REMOVE_COMMENT_FORM_LINE](state, { lineCode }) { Vue.delete(state.diffLineCommentForms, lineCode); }, [types.ADD_CONTEXT_LINES](state, options) { const { lineNumbers, contextLines, fileHash } = options; const { bottom } = options.params; const diffFile = findDiffFile(state.diffFiles, fileHash); const { highlightedDiffLines, parallelDiffLines } = diffFile; removeMatchLine(diffFile, lineNumbers, bottom); const lines = addLineReferences(contextLines, lineNumbers, bottom); addContextLines({ inlineLines: highlightedDiffLines, parallelLines: parallelDiffLines, contextLines: lines, bottom, lineNumbers, }); }, [types.ADD_COLLAPSED_DIFFS](state, { file, data }) { const normalizedData = convertObjectPropsToCamelCase(data, { deep: true }); prepareDiffData(normalizedData); const [newFileData] = normalizedData.diffFiles.filter(f => f.fileHash === file.fileHash); Object.assign(file, { ...newFileData }); }, [types.EXPAND_ALL_FILES](state) { state.diffFiles = state.diffFiles.map(file => ({ ...file, collapsed: false, })); }, [types.SET_LINE_DISCUSSIONS](state, { line, discussions }) { Object.assign(line, { discussions, }); }, [types.REMOVE_LINE_DISCUSSIONS](state, line) { Object.assign(line, { discussions: [], }); }, };