debian-mirror-gitlab/app/assets/javascripts/merge_requests/components/compare_app.vue
2023-04-23 21:23:45 +05:30

134 lines
3.3 KiB
Vue

<script>
import { GlLoadingIcon, GlIcon } from '@gitlab/ui';
import SafeHtml from '~/vue_shared/directives/safe_html';
import axios from '~/lib/utils/axios_utils';
import CompareDropdown from '~/merge_requests/components/compare_dropdown.vue';
export default {
components: {
GlIcon,
GlLoadingIcon,
CompareDropdown,
},
directives: {
SafeHtml,
},
inject: {
projectsPath: {
default: '',
},
branchCommitPath: {
default: '',
},
currentProject: {
default: () => ({}),
},
currentBranch: {
default: () => ({}),
},
inputs: {
default: () => ({}),
},
i18n: {
default: () => ({}),
},
toggleClass: {
default: () => ({}),
},
branchQaSelector: {
default: '',
},
},
data() {
return {
selectedProject: this.currentProject,
selectedBranch: this.currentBranch,
loading: false,
commitHtml: null,
};
},
computed: {
staticProjectData() {
if (this.projectsPath) return undefined;
return [this.currentProject];
},
showCommitBox() {
return this.commitHtml || this.loading || !this.selectedBranch.value;
},
},
mounted() {
this.fetchCommit();
},
methods: {
selectProject(p) {
this.selectedProject = p;
},
selectBranch(branch) {
this.selectedBranch = branch;
this.fetchCommit();
},
async fetchCommit() {
if (!this.selectedBranch.value) return;
this.loading = true;
const { data } = await axios.get(this.branchCommitPath, {
params: { target_project_id: this.selectedProject.value, ref: this.selectedBranch.value },
});
this.loading = false;
this.commitHtml = data;
},
},
};
</script>
<template>
<div>
<div class="clearfix">
<div class="merge-request-select gl-pl-0">
<compare-dropdown
:static-data="staticProjectData"
:endpoint="projectsPath"
:default="currentProject"
:dropdown-header="i18n.projectHeaderText"
:input-id="inputs.project.id"
:input-name="inputs.project.name"
:toggle-class="toggleClass.project"
is-project
@selected="selectProject"
/>
</div>
<div class="merge-request-select merge-request-branch-select gl-pr-0">
<compare-dropdown
:endpoint="selectedProject.refsUrl"
:dropdown-header="i18n.branchHeaderText"
:input-id="inputs.branch.id"
:input-name="inputs.branch.name"
:default="currentBranch"
:toggle-class="toggleClass.branch"
:qa-selector="branchQaSelector"
@selected="selectBranch"
/>
</div>
</div>
<div
v-if="showCommitBox"
class="gl-bg-gray-50 gl-rounded-base gl-my-4"
data-testid="commit-box"
>
<gl-loading-icon v-if="loading" class="gl-py-3" />
<template v-else>
<div
v-if="!selectedBranch.value"
class="compare-commit-empty gl-display-flex gl-align-items-center gl-p-5"
>
<gl-icon name="branch" class="gl-mr-3" />
{{ __('Select a branch to compare') }}
</div>
<ul v-safe-html="commitHtml" class="list-unstyled mr_source_commit"></ul>
</template>
</div>
</div>
</template>