From dcc466439e06652e3709beb32211b0f5727cbe89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20M=C3=B6rling?= Date: Fri, 15 May 2026 19:58:46 +0200 Subject: [PATCH] feat: add tracking input, save button, and PostNord link to admin dashboard MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - api/admin.ts: updateTracking(orderId, trackingId) calls PATCH /api/admin/orders/{id} with JSON { trackingId } - AdminPage.vue expanded row: add "Spårnings-ID" section below Brevtext with text input, save button, and PostNord link - trackingInputValues reactive map tracks per-order input state - toggleExpand initialises trackingInputValues[orderId] from order.trackingId on first expand - handleTrackingSave: PATCH API call with optimistic local update, reverts on error, shows red inline error - PostNord link (): https://www.postnord.se/ verktyg/spara/?id={trackingId}, only visible when trackingId is non-null - trackingError ref for inline error state - CSS: tracking section styling, input focus ring, blue save button --- frontend/src/api/admin.ts | 10 +++ frontend/src/pages/AdminPage.vue | 149 ++++++++++++++++++++++++++++++- 2 files changed, 156 insertions(+), 3 deletions(-) diff --git a/frontend/src/api/admin.ts b/frontend/src/api/admin.ts index 75f1105..09cd9eb 100644 --- a/frontend/src/api/admin.ts +++ b/frontend/src/api/admin.ts @@ -24,3 +24,13 @@ export function updateOrderStatus( body: JSON.stringify({ status }), }) } + +export function updateTracking( + orderId: string, + trackingId: string | null, +): Promise { + return request(`/admin/orders/${orderId}`, { + method: 'PATCH', + body: JSON.stringify({ trackingId }), + }) +} diff --git a/frontend/src/pages/AdminPage.vue b/frontend/src/pages/AdminPage.vue index f47fe00..43e62ac 100644 --- a/frontend/src/pages/AdminPage.vue +++ b/frontend/src/pages/AdminPage.vue @@ -1,12 +1,19 @@