172 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Vue
		
	
	
	
			
		
		
	
	
			172 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Vue
		
	
	
	
| <script>
 | |
| import { mapGetters, mapState, mapActions } from 'vuex';
 | |
| import tooltip from '../../vue_shared/directives/tooltip';
 | |
| import icon from '../../vue_shared/components/icon.vue';
 | |
| import modal from '../../vue_shared/components/modal.vue';
 | |
| import commitFilesList from './commit_sidebar/list.vue';
 | |
| 
 | |
| export default {
 | |
|   components: {
 | |
|     modal,
 | |
|     icon,
 | |
|     commitFilesList,
 | |
|   },
 | |
|   directives: {
 | |
|     tooltip,
 | |
|   },
 | |
|   data() {
 | |
|     return {
 | |
|       showNewBranchModal: false,
 | |
|       submitCommitsLoading: false,
 | |
|       startNewMR: false,
 | |
|       commitMessage: '',
 | |
|     };
 | |
|   },
 | |
|   computed: {
 | |
|     ...mapState([
 | |
|       'currentProjectId',
 | |
|       'currentBranchId',
 | |
|       'rightPanelCollapsed',
 | |
|     ]),
 | |
|     ...mapGetters([
 | |
|       'changedFiles',
 | |
|     ]),
 | |
|     commitButtonDisabled() {
 | |
|       return this.commitMessage === '' || this.submitCommitsLoading || !this.changedFiles.length;
 | |
|     },
 | |
|     commitMessageCount() {
 | |
|       return this.commitMessage.length;
 | |
|     },
 | |
|   },
 | |
|   methods: {
 | |
|     ...mapActions([
 | |
|       'checkCommitStatus',
 | |
|       'commitChanges',
 | |
|       'getTreeData',
 | |
|       'setPanelCollapsedStatus',
 | |
|     ]),
 | |
|     makeCommit(newBranch = false) {
 | |
|       const createNewBranch = newBranch || this.startNewMR;
 | |
| 
 | |
|       const payload = {
 | |
|         branch: createNewBranch ? `${this.currentBranchId}-${new Date().getTime().toString()}` : this.currentBranchId,
 | |
|         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.currentBranchId : undefined,
 | |
|       };
 | |
| 
 | |
|       this.showNewBranchModal = false;
 | |
|       this.submitCommitsLoading = true;
 | |
| 
 | |
|       this.commitChanges({ payload, newMr: this.startNewMR })
 | |
|         .then(() => {
 | |
|           this.submitCommitsLoading = false;
 | |
|           this.$store.dispatch('getTreeData', {
 | |
|             projectId: this.currentProjectId,
 | |
|             branch: this.currentBranchId,
 | |
|             endpoint: `/tree/${this.currentBranchId}`,
 | |
|             force: true,
 | |
|           });
 | |
|         })
 | |
|         .catch(() => {
 | |
|           this.submitCommitsLoading = false;
 | |
|         });
 | |
|     },
 | |
|     tryCommit() {
 | |
|       this.submitCommitsLoading = true;
 | |
| 
 | |
|       this.checkCommitStatus()
 | |
|         .then((branchChanged) => {
 | |
|           if (branchChanged) {
 | |
|             this.showNewBranchModal = true;
 | |
|           } else {
 | |
|             this.makeCommit();
 | |
|           }
 | |
|         })
 | |
|         .catch(() => {
 | |
|           this.submitCommitsLoading = false;
 | |
|         });
 | |
|     },
 | |
|     toggleCollapsed() {
 | |
|       this.setPanelCollapsedStatus({
 | |
|         side: 'right',
 | |
|         collapsed: !this.rightPanelCollapsed,
 | |
|       });
 | |
|     },
 | |
|   },
 | |
| };
 | |
| </script>
 | |
| 
 | |
| <template>
 | |
| <div class="multi-file-commit-panel-section">
 | |
|   <modal
 | |
|     v-if="showNewBranchModal"
 | |
|     :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?')"
 | |
|     @cancel="showNewBranchModal = false"
 | |
|     @submit="makeCommit(true)"
 | |
|   />
 | |
|   <commit-files-list
 | |
|     title="Staged"
 | |
|     :file-list="changedFiles"
 | |
|     :collapsed="rightPanelCollapsed"
 | |
|     @toggleCollapsed="toggleCollapsed"
 | |
|   />
 | |
|   <form
 | |
|     class="form-horizontal multi-file-commit-form"
 | |
|     @submit.prevent="tryCommit"
 | |
|     v-if="!rightPanelCollapsed"
 | |
|   >
 | |
|     <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 }}
 | |
|       </div>
 | |
|     </div>
 | |
|   </form>
 | |
| </div>
 | |
| </template>
 |