diff --git a/src/slackAppHome.js b/src/slackAppHome.js index 75c8e0a..e6f47e9 100644 --- a/src/slackAppHome.js +++ b/src/slackAppHome.js @@ -146,6 +146,10 @@ export const handler = async (event) => { const userId = body.event.user; + return publishHomeView(userId, []); +}; + +async function publishHomeView(userId, expanded) { const { Item: metadata } = await ddb.send( new GetCommand({ TableName: TABLE_NAME, Key: { pk: "metadata" } }) ); @@ -159,7 +163,6 @@ export const handler = async (event) => { return { statusCode: 200, body: JSON.stringify({ error: "No payment data" }) }; } - const expanded = []; const view = buildHomeView(payments, metadata, boaTransactions, expanded); const slackToken = await getSlackToken(); @@ -180,7 +183,7 @@ export const handler = async (event) => { } return { statusCode: 200, body: JSON.stringify({ ok: true }) }; -}; +} // --- Block action handler (button clicks) --- @@ -195,32 +198,13 @@ async function handleBlockAction(body) { if (actionId.startsWith("toggle_section_")) { const section = actionId.replace("toggle_section_", ""); const meta = JSON.parse(body.view?.private_metadata || "{}"); - const expanded = meta.expanded || []; + const expanded = Array.isArray(meta.expanded) ? [...meta.expanded] : []; const idx = expanded.indexOf(section); if (idx >= 0) expanded.splice(idx, 1); else expanded.push(section); const userId = body.user?.id; - const { Item: metadata } = await ddb.send( - new GetCommand({ TableName: TABLE_NAME, Key: { pk: "metadata" } }) - ); - const [payments, boaTransactions] = await Promise.all([ - scanPayments(), - scanBoATransactions(), - ]); - const view = buildHomeView(payments, metadata, boaTransactions, expanded); - const slackToken = await getSlackToken(); - const res = await fetch("https://slack.com/api/views.publish", { - method: "POST", - headers: { - Authorization: `Bearer ${slackToken}`, - "Content-Type": "application/json; charset=utf-8", - }, - body: JSON.stringify({ user_id: userId, view }), - }); - const data = await res.json(); - if (!data.ok) console.error("Slack views.publish error:", JSON.stringify(data)); - return { statusCode: 200, body: JSON.stringify({ ok: true }) }; + return publishHomeView(userId, expanded); } const payments = await scanPayments();