From 8c70d094b8590f5653073e7522201b3ff33fc49a Mon Sep 17 00:00:00 2001 From: Twyco Date: Sat, 18 Jul 2026 19:50:50 +0200 Subject: [PATCH] Redesign ticket details with inline editing --- .../Controllers/ProjectTicketController.php | 4 + .../projects/AcceptanceCriteriaEditor.vue | 490 +++ .../components/projects/InlineSaveStatus.vue | 30 + .../components/projects/InlineTextEditor.vue | 205 ++ resources/js/lib/acceptance-criteria.ts | 224 +- resources/js/pages/projects/Ticket.vue | 2736 ++++++++++------- resources/js/pages/projects/TicketCreate.vue | 88 +- .../js/types/acceptance-criteria-editor.ts | 28 + resources/js/types/index.ts | 2 + resources/js/types/ticket-inline-edit.ts | 76 + .../Projects/ProjectTicketControllerTest.php | 73 + 11 files changed, 2712 insertions(+), 1244 deletions(-) create mode 100644 resources/js/components/projects/AcceptanceCriteriaEditor.vue create mode 100644 resources/js/components/projects/InlineSaveStatus.vue create mode 100644 resources/js/components/projects/InlineTextEditor.vue create mode 100644 resources/js/types/acceptance-criteria-editor.ts create mode 100644 resources/js/types/ticket-inline-edit.ts diff --git a/app/Http/Controllers/ProjectTicketController.php b/app/Http/Controllers/ProjectTicketController.php index 4e54698..2d7ca63 100644 --- a/app/Http/Controllers/ProjectTicketController.php +++ b/app/Http/Controllers/ProjectTicketController.php @@ -6,6 +6,7 @@ use App\Actions\Permissions\PermissionService; use App\Actions\Projects\BuildProjectTicketDetailPayload; use App\Actions\Projects\BuildProjectTicketOptionsPayload; use App\Actions\Tickets\CreateProjectTicket; +use App\Actions\Tickets\Support\AcceptanceCriteriaChecklistMapper; use App\Actions\Tickets\UpdateProjectTicket; use App\Enums\Permission; use App\Http\Requests\StoreProjectTicketRequest; @@ -115,6 +116,9 @@ class ProjectTicketController extends Controller if ($request->expectsJson()) { return response()->json([ + 'acceptance_criteria' => AcceptanceCriteriaChecklistMapper::fromModelsWithIds( + $ticket->acceptanceCriteria()->get(), + ), 'message' => $statusMessage, 'updated' => $wasUpdated, ]); diff --git a/resources/js/components/projects/AcceptanceCriteriaEditor.vue b/resources/js/components/projects/AcceptanceCriteriaEditor.vue new file mode 100644 index 0000000..073022a --- /dev/null +++ b/resources/js/components/projects/AcceptanceCriteriaEditor.vue @@ -0,0 +1,490 @@ + + + diff --git a/resources/js/components/projects/InlineSaveStatus.vue b/resources/js/components/projects/InlineSaveStatus.vue new file mode 100644 index 0000000..ada224a --- /dev/null +++ b/resources/js/components/projects/InlineSaveStatus.vue @@ -0,0 +1,30 @@ + + + diff --git a/resources/js/components/projects/InlineTextEditor.vue b/resources/js/components/projects/InlineTextEditor.vue new file mode 100644 index 0000000..40f8337 --- /dev/null +++ b/resources/js/components/projects/InlineTextEditor.vue @@ -0,0 +1,205 @@ + + +