gitlab-org--gitlab-foss/app/assets/javascripts/repo/components/repo_commit_section.vue

179 lines
4.4 KiB
Vue
Raw Normal View History

2017-07-25 09:18:45 -04:00
<script>
import { mapGetters, mapState, mapActions } from 'vuex';
2017-11-23 12:16:01 -05:00
import tooltip from '../../vue_shared/directives/tooltip';
import icon from '../../vue_shared/components/icon.vue';
2017-10-12 17:04:17 -04:00
import PopupDialog from '../../vue_shared/components/popup_dialog.vue';
2017-11-23 12:16:01 -05:00
import commitFilesList from './commit_sidebar/list.vue';
2017-07-25 09:18:45 -04:00
2017-08-15 14:16:42 -04:00
export default {
2017-10-12 17:04:17 -04:00
components: {
PopupDialog,
2017-11-23 12:16:01 -05:00
icon,
commitFilesList,
},
directives: {
tooltip,
2017-10-12 17:04:17 -04:00
},
data() {
return {
showNewBranchDialog: false,
submitCommitsLoading: false,
startNewMR: false,
commitMessage: '',
2017-11-23 12:16:01 -05:00
collapsed: true,
};
},
computed: {
...mapState([
'currentBranch',
]),
...mapGetters([
'changedFiles',
]),
commitButtonDisabled() {
2017-11-24 08:12:04 -05:00
return this.commitMessage === '' || this.submitCommitsLoading || !this.changedFiles.length;
2017-08-06 11:12:29 -04:00
},
2017-11-23 12:16:01 -05:00
commitMessageCount() {
return this.commitMessage.length;
2017-07-28 23:08:05 -04:00
},
},
2017-07-25 09:18:45 -04:00
methods: {
...mapActions([
'checkCommitStatus',
'commitChanges',
'getTreeData',
]),
makeCommit(newBranch = false) {
const createNewBranch = newBranch || this.startNewMR;
2017-10-12 17:04:17 -04:00
const payload = {
branch: createNewBranch ? `${this.currentBranch}-${new Date().getTime().toString()}` : this.currentBranch,
commit_message: this.commitMessage,
actions: this.changedFiles.map(f => ({
action: f.tempFile ? 'create' : 'update',
file_path: f.path,
content: f.content,
encoding: f.base64 ? 'base64' : 'text',
})),
start_branch: createNewBranch ? this.currentBranch : undefined,
2017-07-26 08:56:31 -04:00
};
this.showNewBranchDialog = false;
this.submitCommitsLoading = true;
this.commitChanges({ payload, newMr: this.startNewMR })
2017-10-12 17:04:17 -04:00
.then(() => {
this.submitCommitsLoading = false;
this.getTreeData();
2017-10-12 17:04:17 -04:00
})
.catch(() => {
this.submitCommitsLoading = false;
2017-10-12 17:04:17 -04:00
});
},
tryCommit() {
this.submitCommitsLoading = true;
this.checkCommitStatus()
.then((branchChanged) => {
if (branchChanged) {
this.showNewBranchDialog = true;
} else {
this.makeCommit();
}
})
.catch(() => {
this.submitCommitsLoading = false;
});
2017-07-26 08:56:31 -04:00
},
2017-11-23 12:16:01 -05:00
toggleCollapsed() {
this.collapsed = !this.collapsed;
},
2017-07-25 09:18:45 -04:00
},
2017-07-26 08:56:31 -04:00
};
2017-07-25 09:18:45 -04:00
</script>
<template>
2017-11-23 12:16:01 -05:00
<div
class="multi-file-commit-panel"
:class="{
'is-collapsed': collapsed,
}"
>
2017-10-12 17:04:17 -04:00
<popup-dialog
v-if="showNewBranchDialog"
:primary-button-label="__('Create new branch')"
kind="primary"
:title="__('Branch has changed')"
:text="__('This branch has changed since you started editing. Would you like to create a new branch?')"
@toggle="showNewBranchDialog = false"
@submit="makeCommit(true)"
2017-10-12 17:04:17 -04:00
/>
2017-11-23 12:16:01 -05:00
<button
v-if="collapsed"
type="button"
class="btn btn-transparent multi-file-commit-panel-collapse-btn is-collapsed prepend-top-10 append-bottom-10"
@click="toggleCollapsed"
>
<i
aria-hidden="true"
class="fa fa-angle-double-left"
>
</i>
</button>
<commit-files-list
title="Staged"
:file-list="changedFiles"
:collapsed="collapsed"
@toggleCollapsed="toggleCollapsed"
/>
2017-08-15 15:53:41 -04:00
<form
2017-11-23 12:16:01 -05:00
class="form-horizontal multi-file-commit-form"
@submit.prevent="tryCommit"
v-if="!collapsed"
>
<div class="multi-file-commit-fieldset">
<textarea
class="form-control multi-file-commit-message"
name="commit-message"
v-model="commitMessage"
placeholder="Commit message"
>
</textarea>
</div>
<div class="multi-file-commit-fieldset">
<label
v-tooltip
title="Create a new merge request with these changes"
data-container="body"
data-placement="top"
>
<input
type="checkbox"
v-model="startNewMR"
/>
Merge Request
</label>
<button
type="submit"
:disabled="commitButtonDisabled"
class="btn btn-default btn-sm append-right-10 prepend-left-10"
>
<i
v-if="submitCommitsLoading"
class="js-commit-loading-icon fa fa-spinner fa-spin"
aria-hidden="true"
aria-label="loading"
>
</i>
Commit
</button>
<div
class="multi-file-commit-message-count"
>
{{ commitMessageCount }}
2017-10-12 17:04:17 -04:00
</div>
2017-11-23 12:16:01 -05:00
</div>
2017-07-25 09:18:45 -04:00
</form>
</div>
</template>