summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/assets/javascripts/ide/components/merge_requests/info.vue97
-rw-r--r--app/assets/javascripts/ide/components/panes/right.vue25
-rw-r--r--app/assets/javascripts/ide/constants.js1
3 files changed, 122 insertions, 1 deletions
diff --git a/app/assets/javascripts/ide/components/merge_requests/info.vue b/app/assets/javascripts/ide/components/merge_requests/info.vue
new file mode 100644
index 00000000000..398d324f19f
--- /dev/null
+++ b/app/assets/javascripts/ide/components/merge_requests/info.vue
@@ -0,0 +1,97 @@
+<script>
+import { mapGetters } from 'vuex';
+import Icon from '../../../vue_shared/components/icon.vue';
+import timeago from '../../../vue_shared/mixins/timeago';
+import tooltip from '../../../vue_shared/directives/tooltip';
+
+const states = {
+ open: 'open',
+ closed: 'closed',
+};
+
+export default {
+ directives: {
+ tooltip,
+ },
+ components: {
+ Icon,
+ },
+ mixins: [timeago],
+ computed: {
+ ...mapGetters(['currentMergeRequest']),
+ isOpen() {
+ return this.currentMergeRequest.state === states.open;
+ },
+ isClosed() {
+ return this.currentMergeRequest.state === states.closed;
+ },
+ authorUsername() {
+ return `@${this.currentMergeRequest.author.username}`;
+ },
+ iconName() {
+ return this.isOpen ? 'issue-open-m' : 'close';
+ },
+ },
+};
+</script>
+
+<template>
+ <div class="ide-merge-request-info">
+ <div class="detail-page-header">
+ <div class="detail-page-header-body">
+ <div
+ :class="{
+ 'status-box-open': isOpen,
+ 'status-box-closed': isClosed
+ }"
+ class="issuable-status-box status-box d-flex h-100"
+ >
+ <icon
+ :name="iconName"
+ />
+ </div>
+ <div class="issuable-meta">
+ Opened
+ {{ timeFormated(currentMergeRequest.created_at) }}
+ by
+ <a
+ :href="currentMergeRequest.author.web_url"
+ class="author_link"
+ >
+ <img
+ :src="currentMergeRequest.author.avatar_url"
+ class="avatar avatar-inline s24"
+ />
+ <strong
+ v-tooltip
+ :title="authorUsername"
+ >
+ {{ currentMergeRequest.author.name }}
+ </strong>
+ </a>
+ </div>
+ </div>
+ </div>
+ <div class="detail-page-description">
+ <h2 class="title">
+ {{ currentMergeRequest.title }}
+ </h2>
+ <div
+ v-if="currentMergeRequest.description"
+ class="description"
+ >
+ <div class="wiki">
+ <p dir="auto">
+ {{ currentMergeRequest.description }}
+ </p>
+ </div>
+ </div>
+ </div>
+ </div>
+</template>
+
+<style scoped>
+.ide-merge-request-info {
+ overflow: auto;
+}
+</style>
diff --git a/app/assets/javascripts/ide/components/panes/right.vue b/app/assets/javascripts/ide/components/panes/right.vue
index 5cd2c9ce188..4da51e2bb26 100644
--- a/app/assets/javascripts/ide/components/panes/right.vue
+++ b/app/assets/javascripts/ide/components/panes/right.vue
@@ -5,6 +5,7 @@ import Icon from '../../../vue_shared/components/icon.vue';
import { rightSidebarViews } from '../../constants';
import PipelinesList from '../pipelines/list.vue';
import JobsDetail from '../jobs/detail.vue';
+import MergeRequestInfo from '../merge_requests/info.vue';
import ResizablePanel from '../resizable_panel.vue';
export default {
@@ -16,9 +17,10 @@ export default {
PipelinesList,
JobsDetail,
ResizablePanel,
+ MergeRequestInfo,
},
computed: {
- ...mapState(['rightPane']),
+ ...mapState(['rightPane', 'currentMergeRequestId']),
pipelinesActive() {
return (
this.rightPane === rightSidebarViews.pipelines ||
@@ -54,6 +56,27 @@ export default {
</resizable-panel>
<nav class="ide-activity-bar">
<ul class="list-unstyled">
+ <li
+ v-if="currentMergeRequestId"
+ >
+ <button
+ v-tooltip
+ :title="__('Merge Request')"
+ :class="{
+ active: rightPane === $options.rightSidebarViews.mergeRequestInfo
+ }"
+ data-container="body"
+ data-placement="left"
+ class="ide-sidebar-link is-right"
+ type="button"
+ @click="clickTab($event, $options.rightSidebarViews.mergeRequestInfo)"
+ >
+ <icon
+ :size="16"
+ name="book"
+ />
+ </button>
+ </li>
<li>
<button
v-tooltip
diff --git a/app/assets/javascripts/ide/constants.js b/app/assets/javascripts/ide/constants.js
index 12e0c3aeef0..45d36f6f42c 100644
--- a/app/assets/javascripts/ide/constants.js
+++ b/app/assets/javascripts/ide/constants.js
@@ -31,6 +31,7 @@ export const diffModes = {
export const rightSidebarViews = {
pipelines: 'pipelines-list',
jobsDetail: 'jobs-detail',
+ mergeRequestInfo: 'merge-request-info',
};
export const stageKeys = {