diff --git a/resources/js/components/tickets/detail/TicketDetailContent.vue b/resources/js/components/tickets/detail/TicketDetailContent.vue
index 17681e7..b488033 100644
--- a/resources/js/components/tickets/detail/TicketDetailContent.vue
+++ b/resources/js/components/tickets/detail/TicketDetailContent.vue
@@ -3,7 +3,7 @@ import { useLocalization } from '@/composables/useLocalization';
import { Card, CardContent, CardHeader } from '@/components/ui/card';
import { useForm, useRemember } from '@inertiajs/vue3';
-import { computed, ref, toRef, unref } from 'vue';
+import { computed, ref, toRef, unref, useTemplateRef, nextTick } from 'vue';
import ProjectTicketController from '@/actions/App/Http/Controllers/ProjectTicketController';
import InputError from '@/components/InputError.vue';
import AcceptanceCriteriaChecklist from '@/components/tickets/AcceptanceCriteriaChecklist.vue';
@@ -20,6 +20,18 @@ import {
import type { TicketDetailContentProps } from '@/types/ticket-detail';
const props = defineProps
+ {{ t('ticketDetail.noParent') }}
+
+ {{ t('ticketRelationships.parentHelp') }}
+
+ {{ t('ticketRelationships.childrenHelp') }}
+
+ {{ t('ticketDetail.noChildren') }}
+
+ {{ t('ticketDetail.linkedTicketsDescription') }}
+
{{ t('ticketDetail.noLinks') }}
-
-import { useLocalization } from '@/composables/useLocalization';
-import {
- Card,
- CardContent,
- CardDescription,
- CardHeader,
- CardTitle,
-} from '@/components/ui/card';
-
-import { Form, Link } from '@inertiajs/vue3';
-import { computed } from 'vue';
-import ProjectTicketLinkController from '@/actions/App/Http/Controllers/ProjectTicketLinkController';
-import InputError from '@/components/InputError.vue';
+import { Link, useForm } from '@inertiajs/vue3';
+import { ArrowRight, GitFork, Link2, Plus } from 'lucide-vue-next';
+import { computed, nextTick, useTemplateRef } from 'vue';
+import { store } from '@/actions/App/Http/Controllers/ProjectTicketLinkController';
+import FormFeedback from '@/components/FormFeedback.vue';
import TicketTreeList from '@/components/TicketTreeList.vue';
+import TicketFormField from '@/components/tickets/TicketFormField.vue';
+import TicketRelationshipLink from '@/components/tickets/detail/TicketRelationshipLink.vue';
import { Badge } from '@/components/ui/badge';
import { Button } from '@/components/ui/button';
-import { Label } from '@/components/ui/label';
+import { Card, CardContent, CardHeader } from '@/components/ui/card';
+import { useFormProtection } from '@/composables/useFormProtection';
+import { useLocalization } from '@/composables/useLocalization';
import { show as showTicket } from '@/routes/projects/tickets';
import type { TicketDetailRelationshipsProps } from '@/types/ticket-detail';
+
const props = defineProps
{{ t('ticketDetail.relationships') }}
-
+ {{
+ t('ticketRelationships.hierarchy')
+ }}
+
+
- {{ t('ticketDetail.noChildren') }}
+
+ {{ t('ticketDetail.parent') }}
+
+
+ {{ currentParentTicket.ticket_key }}
+ {{ currentParentTicket.title }}
+
+
+ {{ t('ticketDetail.children') }}
+
+
+ {{
+ t('ticketDetail.linkedTickets')
+ }}
+
+
+
-
+ {{ t('ticketRelationships.directionHelp') }} +
+ + ++ {{ + t( + ticketLinkTypes.length === 0 + ? 'ticketRelationships.noTypes' + : 'ticketRelationships.noTargets', + ) + }} +
diff --git a/resources/js/components/tickets/detail/TicketRelationshipLink.vue b/resources/js/components/tickets/detail/TicketRelationshipLink.vue new file mode 100644 index 0000000..195226d --- /dev/null +++ b/resources/js/components/tickets/detail/TicketRelationshipLink.vue @@ -0,0 +1,116 @@ + + + +