From a0f5022de2cc1e8ac9d5eaeff9f48b67a15d4691 Mon Sep 17 00:00:00 2001 From: Randall Stillwell Date: Tue, 7 Apr 2026 13:50:44 -0500 Subject: [PATCH] Fix Monday.com push failures and improve error visibility - Fix toast showing success when all cards fail (now shows error/warning) - Fix column value formatting: booleans use checkbox format, JSON arrays join as comma-separated strings, objects serialize properly - Filter out empty/null/undefined string values before sending to API - Add verbose logging to Monday.com GraphQL client for debugging Made-with: Cursor --- src/app/settings/page.tsx | 7 ++++++- src/lib/integrations.ts | 2 ++ src/lib/monday.ts | 44 +++++++++++++++++++++++++++++++++++---- 3 files changed, 48 insertions(+), 5 deletions(-) diff --git a/src/app/settings/page.tsx b/src/app/settings/page.tsx index 4642705..a1bf3bb 100644 --- a/src/app/settings/page.tsx +++ b/src/app/settings/page.tsx @@ -408,8 +408,13 @@ export default function SettingsPage() { if (res.ok) { if (data.synced === 0 && data.failed === 0) { toast.success("All cards are already synced to Monday.com"); + } else if (data.failed > 0 && data.synced === 0) { + const errDetail = data.errors?.[0] ? `\n${data.errors[0]}` : ""; + toast.error(`All ${data.failed} card(s) failed to push to Monday.com${errDetail}`); + } else if (data.failed > 0) { + toast.warning(`Pushed ${data.synced} card(s), but ${data.failed} failed`); } else { - toast.success(`Pushed ${data.synced} card(s) to Monday.com${data.failed > 0 ? ` (${data.failed} failed)` : ""}`); + toast.success(`Pushed ${data.synced} card(s) to Monday.com`); } } else { toast.error(data.error || "Sync failed"); diff --git a/src/lib/integrations.ts b/src/lib/integrations.ts index d1a6cd9..65731e2 100644 --- a/src/lib/integrations.ts +++ b/src/lib/integrations.ts @@ -203,6 +203,8 @@ export async function pushCardToMonday( const columnValues = mapCardToColumnValues(cardData, columnMap); const itemName = (card.name as string) || "Unnamed Card"; + console.log(`[pushCardToMonday] Card "${itemName}" (${cardId}), columnValues:`, JSON.stringify(columnValues)); + if (card.mondayItemId) { await updateItem(token, boardId, card.mondayItemId, columnValues); return { action: "updated" as const, mondayItemId: card.mondayItemId }; diff --git a/src/lib/monday.ts b/src/lib/monday.ts index a9acaec..1499ebf 100644 --- a/src/lib/monday.ts +++ b/src/lib/monday.ts @@ -4,6 +4,9 @@ const MONDAY_FILE_API = "https://api.monday.com/v2/file"; type MondayColumn = { id: string; title: string; type: string }; async function gql(token: string, query: string, variables?: Record) { + const body = JSON.stringify({ query, variables }); + console.log("[monday gql] request:", body.slice(0, 500)); + const res = await fetch(MONDAY_API, { method: "POST", headers: { @@ -11,7 +14,7 @@ async function gql(token: string, query: string, variables?: Record ""); @@ -21,10 +24,12 @@ async function gql(token: string, query: string, variables?: Record, columnMap: Record @@ -142,10 +174,14 @@ export function mapCardToColumnValues( const values: Record = {}; for (const [cardField, colId] of Object.entries(columnMap)) { - if (!colId || !cardField) continue; + if (!colId || !cardField || cardField.startsWith("_")) continue; const val = card[cardField]; if (val === null || val === undefined) continue; - values[colId] = String(val); + + const formatted = formatValue(cardField, val); + if (formatted !== null) { + values[colId] = formatted; + } } return values;