95 lines
2.9 KiB
JavaScript
95 lines
2.9 KiB
JavaScript
import { normalizeHeaders } from '~/lib/utils/common_utils';
|
|
import flash from '~/flash';
|
|
import service from '../../services';
|
|
import * as types from '../mutation_types';
|
|
import { findEntry } from '../utils';
|
|
import FilesDecoratorWorker from '../workers/files_decorator_worker';
|
|
|
|
export const toggleTreeOpen = ({ commit, dispatch }, path) => {
|
|
commit(types.TOGGLE_TREE_OPEN, path);
|
|
};
|
|
|
|
export const handleTreeEntryAction = ({ commit, dispatch }, row) => {
|
|
if (row.type === 'tree') {
|
|
dispatch('toggleTreeOpen', row.path);
|
|
} else if (row.type === 'blob' && (row.opened || row.changed)) {
|
|
if (row.changed && !row.opened) {
|
|
commit(types.TOGGLE_FILE_OPEN, row.path);
|
|
}
|
|
|
|
dispatch('setFileActive', row.path);
|
|
} else {
|
|
dispatch('getFileData', { path: row.path });
|
|
}
|
|
};
|
|
|
|
export const getLastCommitData = ({ state, commit, dispatch, getters }, tree = state) => {
|
|
if (!tree || tree.lastCommitPath === null || !tree.lastCommitPath) return;
|
|
|
|
service
|
|
.getTreeLastCommit(tree.lastCommitPath)
|
|
.then(res => {
|
|
const lastCommitPath = normalizeHeaders(res.headers)['MORE-LOGS-URL'] || null;
|
|
|
|
commit(types.SET_LAST_COMMIT_URL, { tree, url: lastCommitPath });
|
|
|
|
return res.json();
|
|
})
|
|
.then(data => {
|
|
data.forEach(lastCommit => {
|
|
const entry = findEntry(tree.tree, lastCommit.type, lastCommit.file_name);
|
|
|
|
if (entry) {
|
|
commit(types.SET_LAST_COMMIT_DATA, { entry, lastCommit });
|
|
}
|
|
});
|
|
|
|
dispatch('getLastCommitData', tree);
|
|
})
|
|
.catch(() => flash('Error fetching log data.', 'alert', document, null, false, true));
|
|
};
|
|
|
|
export const getFiles = ({ state, commit, dispatch }, { projectId, branchId } = {}) =>
|
|
new Promise((resolve, reject) => {
|
|
if (!state.trees[`${projectId}/${branchId}`]) {
|
|
const selectedProject = state.projects[projectId];
|
|
commit(types.CREATE_TREE, { treePath: `${projectId}/${branchId}` });
|
|
|
|
service
|
|
.getFiles(selectedProject.web_url, branchId)
|
|
.then(res => res.json())
|
|
.then(data => {
|
|
const worker = new FilesDecoratorWorker();
|
|
worker.addEventListener('message', e => {
|
|
const { entries, treeList } = e.data;
|
|
const selectedTree = state.trees[`${projectId}/${branchId}`];
|
|
|
|
commit(types.SET_ENTRIES, entries);
|
|
commit(types.SET_DIRECTORY_DATA, {
|
|
treePath: `${projectId}/${branchId}`,
|
|
data: treeList,
|
|
});
|
|
commit(types.TOGGLE_LOADING, {
|
|
entry: selectedTree,
|
|
forceValue: false,
|
|
});
|
|
|
|
worker.terminate();
|
|
|
|
resolve();
|
|
});
|
|
|
|
worker.postMessage({
|
|
data,
|
|
projectId,
|
|
branchId,
|
|
});
|
|
})
|
|
.catch(e => {
|
|
flash('Error loading tree data. Please try again.', 'alert', document, null, false, true);
|
|
reject(e);
|
|
});
|
|
} else {
|
|
resolve();
|
|
}
|
|
});
|