fix(ui): fix NaNd ago - return full QueueItem from POST /api/queue + defensive relTime
All checks were successful
Build & Push Docker Image / test-and-build (push) Successful in 1m3s

- POST /api/queue now returns the full QueueItem (with createdAt, phases, etc.)
  instead of a stripped {id,url,status,enqueuedAt} subset
- TimelineRow.relTime() now handles undefined/NaN gracefully, falls back to 'just now'
- TimelineRow timestamp uses item.createdAt ?? item.enqueuedAt as fallback

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
Giancarmine Salucci
2026-05-12 23:00:52 +02:00
parent 8d979a9305
commit 1f3bfe2119
2 changed files with 6 additions and 14 deletions

View File

@@ -58,12 +58,7 @@ export const POST: RequestHandler = async ({ request }) => {
return json({
duplicate: true,
message: 'This recipe is already in the queue',
item: {
id: existingItem.id,
url: existingItem.url,
status: existingItem.status,
enqueuedAt: existingItem.enqueuedAt
}
item: existingItem
}, { status: 200 }); // 200 OK, not an error
}
@@ -73,12 +68,7 @@ export const POST: RequestHandler = async ({ request }) => {
// Return success response
return json({
duplicate: false,
item: {
id: queueItem.id,
url: queueItem.url,
status: queueItem.status,
enqueuedAt: queueItem.enqueuedAt
}
item: queueItem
});
} catch (error) {
return handleApiError(error);

View File

@@ -22,8 +22,10 @@
return m ? '@' + m[1] : '@instagram';
}
function relTime(iso: string): string {
function relTime(iso: string | undefined): string {
if (!iso) return 'just now';
const diff = (Date.now() - new Date(iso).getTime()) / 1000;
if (isNaN(diff) || diff < 0) return 'just now';
if (diff < 60) return 'just now';
if (diff < 3600) return Math.floor(diff / 60) + 'm ago';
if (diff < 86400) return Math.floor(diff / 3600) + 'h ago';
@@ -62,7 +64,7 @@
<div class="meta">
<span class="uname">{username(item.url)}</span>
<span class="sep">·</span>
<span>{relTime(item.createdAt)}</span>
<span>{relTime(item.createdAt ?? item.enqueuedAt)}</span>
</div>
{#if isError && item.error}
<div class="error-line">{item.error.message?.slice(0, 60)}</div>