From 6996b2405e0250b1fe89d3d8a5dabb89eedf406f Mon Sep 17 00:00:00 2001 From: gunshiz Date: Fri, 3 Jul 2026 22:04:19 +0700 Subject: [PATCH] feat: add support for {update} template variable to track and display submission changes --- app/actions/submissions.ts | 19 ++++++++++++++++++- app/admin/form/[id]/extra/client.tsx | 6 +++--- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/app/actions/submissions.ts b/app/actions/submissions.ts index 0a5100c..38846ee 100644 --- a/app/actions/submissions.ts +++ b/app/actions/submissions.ts @@ -30,6 +30,7 @@ export async function submitForm( let submissionId = ""; const isUpdate = !!existingSubmission; + let oldAnswersDict: Record = {}; if (existingSubmission) { submissionId = existingSubmission.id; @@ -39,7 +40,7 @@ export async function submitForm( where: (a, { eq }) => eq(a.submissionId, submissionId), }); - const oldAnswersDict = oldAnswersList.reduce((acc, curr) => { + oldAnswersDict = oldAnswersList.reduce((acc, curr) => { acc[curr.questionId] = curr.value; return acc; }, {} as Record); @@ -112,6 +113,19 @@ export async function submitForm( return acc; }, {} as Record); + let updatesText = ""; + if (isUpdate) { + const changed: string[] = []; + for (const ans of answersList) { + const oldVal = oldAnswersDict[ans.questionId]; + if (oldVal !== ans.value) { + const qTitle = questionsList.find(q => q.id === ans.questionId)?.label || `Question`; + changed.push(`**${qTitle}**: \`${oldVal || "Empty"}\` ➡️ \`${ans.value || "Empty"}\``); + } + } + updatesText = changed.length > 0 ? changed.join("\n") : "No changes made."; + } + let message = templateToUse; // Replace {1}, {2}, etc. with value, and new variables message = message.replace(/\{([^}]+)\}/g, (match: string, p1: string) => { @@ -122,6 +136,9 @@ export async function submitForm( if (key === "id") { return discordId || "Unknown ID"; } + if (key === "update") { + return updatesText; + } return answersDict[p1] || "Not Provided"; }); diff --git a/app/admin/form/[id]/extra/client.tsx b/app/admin/form/[id]/extra/client.tsx index 823a6fb..3d3bb76 100644 --- a/app/admin/form/[id]/extra/client.tsx +++ b/app/admin/form/[id]/extra/client.tsx @@ -192,7 +192,7 @@ export default function FormExtraClient({ form }: FormExtraClientProps) { />
- +