Files
KanbanGit/resources/js/pages/projects/settings/Metadata.vue
T
Eric fb4faa6070
CI/CD / preconditions (pull_request) Successful in 1m0s
CI/CD / test_and_check_app (pull_request) Canceled after 0s
CI/CD / Publish immutable image (pull_request) Canceled after 0s
feat(KAN-43): rebuild custom fields and link types
2026-09-15 17:50:10 +02:00

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>