89 lines
3.5 KiB
Vue
89 lines
3.5 KiB
Vue
<script setup lang="ts">
|
|
import { Head } from '@inertiajs/vue3';
|
|
import { computed, ref } from 'vue';
|
|
import FeedbackState from '@/components/FeedbackState.vue';
|
|
import MetadataEditorDialog from '@/components/projects/MetadataEditorDialog.vue';
|
|
import MetadataOptionList from '@/components/projects/MetadataOptionList.vue';
|
|
import TicketDisplaySettings from '@/components/projects/TicketDisplaySettings.vue';
|
|
import TicketFieldDefinitionSettings from '@/components/projects/TicketFieldDefinitionSettings.vue';
|
|
import TicketLinkTypeSettings from '@/components/projects/TicketLinkTypeSettings.vue';
|
|
import TemplateInheritancePanel from '@/components/projects/TemplateInheritancePanel.vue';
|
|
import { useLocalization } from '@/composables/useLocalization';
|
|
import AppLayout from '@/layouts/AppLayout.vue';
|
|
import SettingsLayout from '@/layouts/projects/SettingsLayout.vue';
|
|
import { index, show } from '@/routes/projects';
|
|
import { metadata } from '@/routes/projects/settings';
|
|
import type {
|
|
BreadcrumbItem,
|
|
ProjectTicketMetadataSettingsPageProps,
|
|
} from '@/types';
|
|
import type { MetadataEditorTarget } from '@/types/project-metadata';
|
|
|
|
const props = defineProps<ProjectTicketMetadataSettingsPageProps>();
|
|
const { t } = useLocalization();
|
|
const target = ref<MetadataEditorTarget | null>(null);
|
|
const breadcrumbs = computed<BreadcrumbItem[]>(() => [
|
|
{ title: t('navigation.projects'), href: index() },
|
|
{ title: props.project.name, href: show(props.project.id) },
|
|
{ title: t('metadata.title'), href: metadata(props.project.id) },
|
|
]);
|
|
</script>
|
|
|
|
<template>
|
|
<AppLayout :breadcrumbs="breadcrumbs">
|
|
<Head :title="t('metadata.pageTitle', { project: project.name })" />
|
|
<SettingsLayout :project-name="project.name" :project-key="project.key">
|
|
<header class="grid gap-3">
|
|
<h2 class="text-title">{{ t('metadata.title') }}</h2>
|
|
<p class="text-muted-foreground">
|
|
{{ t('metadata.description') }}
|
|
</p>
|
|
</header>
|
|
<FeedbackState
|
|
v-if="status"
|
|
:state="error ? 'error' : 'success'"
|
|
:title="error ? status : t('metadata.updated')"
|
|
/>
|
|
<TemplateInheritancePanel
|
|
:areas="[
|
|
'project_settings',
|
|
'ticket_types',
|
|
'ticket_priorities',
|
|
'ticket_fields',
|
|
'ticket_link_types',
|
|
]"
|
|
:project-id="project.id"
|
|
:template-state="templateState"
|
|
/>
|
|
<TicketDisplaySettings :project="project" />
|
|
<MetadataOptionList
|
|
kind="type"
|
|
:entries="ticketTypes"
|
|
@edit="target = $event"
|
|
/>
|
|
<MetadataOptionList
|
|
kind="priority"
|
|
:entries="ticketPriorities"
|
|
@edit="target = $event"
|
|
/>
|
|
<TicketFieldDefinitionSettings
|
|
:definitions="ticketFieldDefinitions"
|
|
:field-type-options="fieldTypeOptions"
|
|
:project-id="project.id"
|
|
/>
|
|
<TicketLinkTypeSettings
|
|
:link-types="ticketLinkTypes"
|
|
:project-id="project.id"
|
|
/>
|
|
|
|
<MetadataEditorDialog
|
|
:project-id="project.id"
|
|
:target="target"
|
|
:types="ticketTypes"
|
|
:priorities="ticketPriorities"
|
|
@close="target = null"
|
|
/>
|
|
</SettingsLayout>
|
|
</AppLayout>
|
|
</template>
|