145 lines
3.7 KiB
JavaScript
145 lines
3.7 KiB
JavaScript
import Vue from 'vue';
|
|
import flash from '../../flash';
|
|
import service from '../services';
|
|
import * as types from './mutation_types';
|
|
|
|
export const redirectToUrl = (_, url) => gl.utils.visitUrl(url);
|
|
|
|
export const setInitialData = ({ commit }, data) => commit(types.SET_INITIAL_DATA, data);
|
|
|
|
export const closeDiscardPopup = ({ commit }) => commit(types.TOGGLE_DISCARD_POPUP, false);
|
|
|
|
export const discardAllChanges = ({ commit, getters, dispatch }) => {
|
|
const changedFiles = getters.changedFiles;
|
|
|
|
changedFiles.forEach((file) => {
|
|
commit(types.DISCARD_FILE_CHANGES, file);
|
|
|
|
if (file.tempFile) {
|
|
dispatch('closeFile', { file, force: true });
|
|
}
|
|
});
|
|
};
|
|
|
|
export const closeAllFiles = ({ state, dispatch }) => {
|
|
state.openFiles.forEach(file => dispatch('closeFile', { file }));
|
|
};
|
|
|
|
export const toggleEditMode = ({ state, commit, getters, dispatch }, force = false) => {
|
|
const changedFiles = getters.changedFiles;
|
|
|
|
if (changedFiles.length && !force) {
|
|
commit(types.TOGGLE_DISCARD_POPUP, true);
|
|
} else {
|
|
commit(types.TOGGLE_EDIT_MODE);
|
|
commit(types.TOGGLE_DISCARD_POPUP, false);
|
|
dispatch('toggleBlobView');
|
|
|
|
if (!state.editMode) {
|
|
dispatch('discardAllChanges');
|
|
}
|
|
}
|
|
};
|
|
|
|
export const toggleBlobView = ({ commit, state }) => {
|
|
if (state.editMode) {
|
|
commit(types.SET_EDIT_MODE);
|
|
} else {
|
|
commit(types.SET_PREVIEW_MODE);
|
|
}
|
|
};
|
|
|
|
export const checkCommitStatus = ({ state }) => service.getBranchData(
|
|
state.project.id,
|
|
state.currentBranch,
|
|
)
|
|
.then((data) => {
|
|
const { id } = data.commit;
|
|
|
|
if (state.currentRef !== id) {
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
})
|
|
.catch(() => flash('Error checking branch data. Please try again.'));
|
|
|
|
export const commitChanges = ({ commit, state, dispatch, getters }, { payload, newMr }) =>
|
|
service.commit(state.project.id, payload)
|
|
.then((data) => {
|
|
const { branch } = payload;
|
|
if (!data.short_id) {
|
|
flash(data.message);
|
|
return;
|
|
}
|
|
|
|
const lastCommit = {
|
|
commit_path: `${state.project.url}/commit/${data.id}`,
|
|
commit: {
|
|
message: data.message,
|
|
authored_date: data.committed_date,
|
|
},
|
|
};
|
|
|
|
flash(`Your changes have been committed. Commit ${data.short_id} with ${data.stats.additions} additions, ${data.stats.deletions} deletions.`, 'notice');
|
|
|
|
if (newMr) {
|
|
dispatch('redirectToUrl', `${state.endpoints.newMergeRequestUrl}${branch}`);
|
|
} else {
|
|
commit(types.SET_COMMIT_REF, data.id);
|
|
|
|
getters.changedFiles.forEach((entry) => {
|
|
commit(types.SET_LAST_COMMIT_DATA, {
|
|
entry,
|
|
lastCommit,
|
|
});
|
|
});
|
|
|
|
dispatch('discardAllChanges');
|
|
dispatch('closeAllFiles');
|
|
dispatch('toggleEditMode');
|
|
|
|
window.scrollTo(0, 0);
|
|
}
|
|
})
|
|
.catch(() => flash('Error committing changes. Please try again.'));
|
|
|
|
export const createTempEntry = ({ state, dispatch }, { name, type, content = '', base64 = false }) => {
|
|
if (type === 'tree') {
|
|
dispatch('createTempTree', name);
|
|
} else if (type === 'blob') {
|
|
dispatch('createTempFile', {
|
|
tree: state,
|
|
name,
|
|
base64,
|
|
content,
|
|
});
|
|
}
|
|
};
|
|
|
|
export const popHistoryState = ({ state, dispatch, getters }) => {
|
|
const treeList = getters.treeList;
|
|
const tree = treeList.find(file => file.url === state.previousUrl);
|
|
|
|
if (!tree) return;
|
|
|
|
if (tree.type === 'tree') {
|
|
dispatch('toggleTreeOpen', { endpoint: tree.url, tree });
|
|
}
|
|
};
|
|
|
|
export const scrollToTab = () => {
|
|
Vue.nextTick(() => {
|
|
const tabs = document.getElementById('tabs');
|
|
|
|
if (tabs) {
|
|
const tabEl = tabs.querySelector('.active .repo-tab');
|
|
|
|
tabEl.focus();
|
|
}
|
|
});
|
|
};
|
|
|
|
export * from './actions/tree';
|
|
export * from './actions/file';
|
|
export * from './actions/branch';
|