components/todo.vue (41 lines of code) (raw):
<script>
import { GlIcon } from '../helpers/gitlab_ui';
import packageJson from '../package.json';
const {
bugs: { url: issuesUrl },
} = packageJson;
export default {
components: {
GlIcon,
},
props: {
issue: {
type: String,
default: '',
required: false,
},
},
computed: {
newIssueUrl() {
const { $route } = this;
const title = this.$scopedSlots.default()[0].text;
return `${issuesUrl}/new?issue[title]=${title}%20for%20${$route.params.slug}&issue[description]=/label%20~%22component%3A${$route.params.slug}%22`;
},
},
};
</script>
<template>
<span
class="gl-mb-5 gl-flex gl-flex-wrap gl-gap-2 gl-rounded-base gl-bg-feedback-neutral gl-p-5 gl-text-base gl-leading-20 gl-text-feedback-neutral"
>
<div class="gl-flex gl-items-center gl-gap-3">
<gl-icon name="document" :size="16" class="gl-fill-feedback-neutral" />
<span class="gl-font-bold">TODO: </span>
</div>
<span class="gl-mr-auto">
<slot></slot>
</span>
<a v-if="issue" class="gl-link" :href="issue">View issue</a>
<a v-else class="gl-link" :href="newIssueUrl">Create an issue</a>
</span>
</template>