diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-04-21 02:50:22 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-04-21 02:50:22 +0300 |
commit | 9dc93a4519d9d5d7be48ff274127136236a3adb3 (patch) | |
tree | 70467ae3692a0e35e5ea56bcb803eb512a10bedb /app/assets/javascripts/diffs/store | |
parent | 4b0f34b6d759d6299322b3a54453e930c6121ff0 (diff) |
Add latest changes from gitlab-org/gitlab@13-11-stable-eev13.11.0-rc43
Diffstat (limited to 'app/assets/javascripts/diffs/store')
-rw-r--r-- | app/assets/javascripts/diffs/store/actions.js | 93 | ||||
-rw-r--r-- | app/assets/javascripts/diffs/store/getters.js | 12 | ||||
-rw-r--r-- | app/assets/javascripts/diffs/store/modules/diff_state.js | 6 | ||||
-rw-r--r-- | app/assets/javascripts/diffs/store/modules/index.js | 6 | ||||
-rw-r--r-- | app/assets/javascripts/diffs/store/mutations.js | 9 | ||||
-rw-r--r-- | app/assets/javascripts/diffs/store/utils.js | 17 |
6 files changed, 78 insertions, 65 deletions
diff --git a/app/assets/javascripts/diffs/store/actions.js b/app/assets/javascripts/diffs/store/actions.js index 8796016def9..428faf693b0 100644 --- a/app/assets/javascripts/diffs/store/actions.js +++ b/app/assets/javascripts/diffs/store/actions.js @@ -49,7 +49,6 @@ import { convertExpandLines, idleCallback, allDiscussionWrappersExpanded, - prepareDiffData, prepareLineForRenamedFile, } from './utils'; @@ -59,6 +58,7 @@ export const setBaseConfig = ({ commit }, options) => { endpointMetadata, endpointBatch, endpointCoverage, + endpointUpdateUser, projectPath, dismissEndpoint, showSuggestPopover, @@ -71,6 +71,7 @@ export const setBaseConfig = ({ commit }, options) => { endpointMetadata, endpointBatch, endpointCoverage, + endpointUpdateUser, projectPath, dismissEndpoint, showSuggestPopover, @@ -163,7 +164,15 @@ export const fetchDiffFilesBatch = ({ commit, state, dispatch }) => { return pagination.next_page; }) - .then((nextPage) => nextPage && getBatch(nextPage)) + .then((nextPage) => { + dispatch('startRenderDiffsQueue'); + + if (nextPage) { + return getBatch(nextPage); + } + + return null; + }) .catch(() => commit(types.SET_RETRIEVING_BATCHES, false)); return getBatch() @@ -197,13 +206,7 @@ export const fetchDiffFilesMeta = ({ commit, state }) => { commit(types.SET_MERGE_REQUEST_DIFFS, data.merge_request_diffs || []); commit(types.SET_DIFF_METADATA, strippedData); - worker.postMessage( - prepareDiffData({ - diff: data, - priorFiles: state.diffFiles, - meta: true, - }), - ); + worker.postMessage(data.diff_files); return data; }) @@ -304,33 +307,41 @@ export const renderFileForDiscussionId = ({ commit, rootState, state }, discussi }; export const startRenderDiffsQueue = ({ state, commit }) => { - const checkItem = () => - new Promise((resolve) => { - const nextFile = state.diffFiles.find( - (file) => - !file.renderIt && - file.viewer && - (!isCollapsed(file) || file.viewer.name !== diffViewerModes.text), - ); - - if (nextFile) { - requestAnimationFrame(() => { - commit(types.RENDER_FILE, nextFile); + const diffFilesToRender = state.diffFiles.filter( + (file) => + !file.renderIt && + file.viewer && + (!isCollapsed(file) || file.viewer.name !== diffViewerModes.text), + ); + let currentDiffFileIndex = 0; + + const checkItem = () => { + const nextFile = diffFilesToRender[currentDiffFileIndex]; + + if (nextFile) { + let retryCount = 0; + currentDiffFileIndex += 1; + commit(types.RENDER_FILE, nextFile); + + const requestIdle = () => + requestIdleCallback((idleDeadline) => { + // Wait for at least 5ms before trying to render + // or for 5 tries and then force render the file + if (idleDeadline.timeRemaining() >= 5 || retryCount > 4) { + checkItem(); + } else { + requestIdle(); + retryCount += 1; + } }); - requestIdleCallback( - () => { - checkItem() - .then(resolve) - .catch(() => {}); - }, - { timeout: 1000 }, - ); - } else { - resolve(); - } - }); - return checkItem(); + requestIdle(); + } + }; + + if (diffFilesToRender.length) { + checkItem(); + } }; export const setRenderIt = ({ commit }, file) => commit(types.RENDER_FILE, file); @@ -738,10 +749,22 @@ export const navigateToDiffFileIndex = ({ commit, state }, index) => { commit(types.VIEW_DIFF_FILE, fileHash); }; -export const setFileByFile = ({ commit }, { fileByFile }) => { +export const setFileByFile = ({ state, commit }, { fileByFile }) => { const fileViewMode = fileByFile ? DIFF_VIEW_FILE_BY_FILE : DIFF_VIEW_ALL_FILES; commit(types.SET_FILE_BY_FILE, fileByFile); Cookies.set(DIFF_FILE_BY_FILE_COOKIE_NAME, fileViewMode); + + return axios + .put(state.endpointUpdateUser, { + view_diffs_file_by_file: fileByFile, + }) + .then(() => { + // https://gitlab.com/gitlab-org/gitlab/-/issues/326961 + // We can't even do a simple console warning here because + // the pipeline will fail. However, the issue above will + // eventually handle errors appropriately. + // console.warn('Saving the file-by-fil user preference failed.'); + }); }; export function reviewFile({ commit, state }, { file, reviewed = true }) { diff --git a/app/assets/javascripts/diffs/store/getters.js b/app/assets/javascripts/diffs/store/getters.js index 1fc2a684e95..dec3f87b03e 100644 --- a/app/assets/javascripts/diffs/store/getters.js +++ b/app/assets/javascripts/diffs/store/getters.js @@ -156,16 +156,16 @@ export const diffLines = (state) => (file, unifiedDiffComponents) => { ); }; -export function suggestionCommitMessage(state) { +export function suggestionCommitMessage(state, _, rootState) { return (values = {}) => computeSuggestionCommitMessage({ message: state.defaultSuggestionCommitMessage, values: { - branch_name: state.branchName, - project_path: state.projectPath, - project_name: state.projectName, - username: state.username, - user_full_name: state.userFullName, + branch_name: rootState.page.mrMetadata.branch_name, + project_path: rootState.page.mrMetadata.project_path, + project_name: rootState.page.mrMetadata.project_name, + username: rootState.page.mrMetadata.username, + user_full_name: rootState.page.mrMetadata.user_full_name, ...values, }, }); diff --git a/app/assets/javascripts/diffs/store/modules/diff_state.js b/app/assets/javascripts/diffs/store/modules/diff_state.js index f93435363ec..1674d3d3b5a 100644 --- a/app/assets/javascripts/diffs/store/modules/diff_state.js +++ b/app/assets/javascripts/diffs/store/modules/diff_state.js @@ -9,7 +9,8 @@ import { import { fileByFile } from '../../utils/preferences'; import { getDefaultWhitespace } from '../utils'; -const viewTypeFromQueryString = getParameterValues('view')[0]; +const getViewTypeFromQueryString = () => getParameterValues('view')[0]; + const viewTypeFromCookie = Cookies.get(DIFF_VIEW_COOKIE_NAME); const defaultViewType = INLINE_DIFF_VIEW_TYPE; const whiteSpaceFromQueryString = getParameterValues('w')[0]; @@ -23,6 +24,7 @@ export default () => ({ addedLines: null, removedLines: null, endpoint: '', + endpointUpdateUser: '', basePath: '', commit: null, startVersion: null, // Null unless a target diff is selected for comparison that is not the "base" diff @@ -30,7 +32,7 @@ export default () => ({ coverageFiles: {}, mergeRequestDiffs: [], mergeRequestDiff: null, - diffViewType: viewTypeFromQueryString || viewTypeFromCookie || defaultViewType, + diffViewType: getViewTypeFromQueryString() || viewTypeFromCookie || defaultViewType, tree: [], treeEntries: {}, showTreeList: true, diff --git a/app/assets/javascripts/diffs/store/modules/index.js b/app/assets/javascripts/diffs/store/modules/index.js index 6860e24db6b..03d11e60745 100644 --- a/app/assets/javascripts/diffs/store/modules/index.js +++ b/app/assets/javascripts/diffs/store/modules/index.js @@ -1,7 +1,7 @@ -import * as actions from '../actions'; +import * as actions from 'ee_else_ce/diffs/store/actions'; +import createState from 'ee_else_ce/diffs/store/modules/diff_state'; +import mutations from 'ee_else_ce/diffs/store/mutations'; import * as getters from '../getters'; -import mutations from '../mutations'; -import createState from './diff_state'; export default () => ({ namespaced: true, diff --git a/app/assets/javascripts/diffs/store/mutations.js b/app/assets/javascripts/diffs/store/mutations.js index d06793c05af..9ff9a02d444 100644 --- a/app/assets/javascripts/diffs/store/mutations.js +++ b/app/assets/javascripts/diffs/store/mutations.js @@ -33,6 +33,7 @@ export default { endpointMetadata, endpointBatch, endpointCoverage, + endpointUpdateUser, projectPath, dismissEndpoint, showSuggestPopover, @@ -45,6 +46,7 @@ export default { endpointMetadata, endpointBatch, endpointCoverage, + endpointUpdateUser, projectPath, dismissEndpoint, showSuggestPopover, @@ -77,15 +79,10 @@ export default { }, [types.SET_DIFF_DATA_BATCH](state, data) { - const files = prepareDiffData({ + state.diffFiles = prepareDiffData({ diff: data, priorFiles: state.diffFiles, }); - - Object.assign(state, { - ...convertObjectPropsToCamelCase(data), - }); - updateDiffFilesInState(state, files); }, [types.SET_COVERAGE_DATA](state, coverageFiles) { diff --git a/app/assets/javascripts/diffs/store/utils.js b/app/assets/javascripts/diffs/store/utils.js index b37a75eb2a3..7fa51b9ddea 100644 --- a/app/assets/javascripts/diffs/store/utils.js +++ b/app/assets/javascripts/diffs/store/utils.js @@ -381,22 +381,13 @@ function prepareDiffFileLines(file) { inlineLines.forEach((line) => prepareLine(line, file)); // WARNING: In-Place Mutations! - Object.assign(file, { - inlineLinesCount: inlineLines.length, - }); - return file; } -function getVisibleDiffLines(file) { - return file.inlineLinesCount; -} - -function finalizeDiffFile(file) { - const lines = getVisibleDiffLines(file); - +function finalizeDiffFile(file, index) { Object.assign(file, { - renderIt: lines < LINES_TO_BE_RENDERED_DIRECTLY, + renderIt: + index < 3 ? file[INLINE_DIFF_LINES_KEY].length < LINES_TO_BE_RENDERED_DIRECTLY : false, isShowingFullFile: false, isLoadingFullFile: false, discussions: [], @@ -424,7 +415,7 @@ export function prepareDiffData({ diff, priorFiles = [], meta = false }) { .map((file, index, allFiles) => prepareRawDiffFile({ file, allFiles, meta })) .map(ensureBasicDiffFileLines) .map(prepareDiffFileLines) - .map(finalizeDiffFile); + .map((file, index) => finalizeDiffFile(file, priorFiles.length + index)); return deduplicateFilesList([...priorFiles, ...cleanedFiles]); } |