From d60228719087e5d63ff465f596d2a4fb8c2bb478 Mon Sep 17 00:00:00 2001 From: Matchu Date: Fri, 9 Oct 2020 08:55:03 -0700 Subject: [PATCH] feedback form now sends actual emails! --- api/sendFeedback.js | 30 +++++++++++++++++++++++++++++- package.json | 1 + src/app/HomePage.js | 7 ++----- yarn.lock | 29 +++++++++++++++++++++++++++++ 4 files changed, 61 insertions(+), 6 deletions(-) diff --git a/api/sendFeedback.js b/api/sendFeedback.js index 6ebeaf6..6b295fc 100644 --- a/api/sendFeedback.js +++ b/api/sendFeedback.js @@ -6,9 +6,37 @@ const beeline = require("honeycomb-beeline")({ : "Dress to Impress (2020, dev)", serviceName: "impress-2020-gql-server", }); +import sendgridMail from "@sendgrid/mail"; + +sendgridMail.setApiKey(process.env.SENDGRID_API_KEY); async function handle(req, res) { - res.status(500).send("TODO! This is a fake error case."); + const { content, email } = req.body; + if (!content) { + return res.status(400).send("Content must not be empty"); + } + + let contentSummary = content.trim(); + if (contentSummary.length > 60) { + contentSummary = contentSummary.slice(0, 40) + "…"; + } + + console.info(`Sending from ${email || ""}:\n${content}`); + + try { + await sendgridMail.send({ + to: "matchu@openneo.net", + from: "impress-2020-feedback@openneo.net", + subject: `DTI feedback: ${contentSummary}`, + replyTo: email, + text: content, + }); + } catch (e) { + console.error(e); + return res.status(500).send("Error sending message, see logs"); + } + + return res.status(200).send(); } export default async (req, res) => { diff --git a/package.json b/package.json index fa2e1a8..deafa0d 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "@chakra-ui/icons": "^1.0.0-rc.3", "@chakra-ui/theme": "^1.0.0-rc.3", "@loadable/component": "^5.12.0", + "@sendgrid/mail": "^7.2.6", "@testing-library/jest-dom": "^4.2.4", "@testing-library/react": "^9.3.2", "@testing-library/user-event": "^7.1.2", diff --git a/src/app/HomePage.js b/src/app/HomePage.js index c9dcd45..c6bcbc9 100644 --- a/src/app/HomePage.js +++ b/src/app/HomePage.js @@ -398,13 +398,10 @@ function FeedbackForm({ isDisabled, onClose, emailFieldRef }) { (e) => { e.preventDefault(); - const formData = new FormData(); - formData.set("content", content); - formData.set("email", email); - fetch("/api/sendFeedback", { method: "POST", - body: formData, + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ content, email }), }) .then((res) => { if (!res.ok) { diff --git a/yarn.lock b/yarn.lock index e3a7e53..3de47d2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3400,6 +3400,30 @@ resolved "https://registry.yarnpkg.com/@react-types/shared/-/shared-3.2.0.tgz#531c320e6b8f01f614336c14cee50ecf9fca4a4d" integrity sha512-0oVULza+qc8+j7I9OB74FVjbrH6JzUAYDAkTYXbsaPt/w4quAlgd4ADy9yxIVYyN1GCXp/z0AUuocaYDHA8O6Q== +"@sendgrid/client@^7.2.6": + version "7.2.6" + resolved "https://registry.yarnpkg.com/@sendgrid/client/-/client-7.2.6.tgz#28374927b5d9b3b351b9426f4a218d23d590c958" + integrity sha512-AOB3IVlB76SMYdaLEtWGm6/GwrOv0xlAOkyCqk5+XifJRqL2pl8a9lfxFZ9BEnWrdqPJPJ1/omopj0P7d5ZPmw== + dependencies: + "@sendgrid/helpers" "^7.2.6" + axios "^0.19.2" + +"@sendgrid/helpers@^7.2.6": + version "7.2.6" + resolved "https://registry.yarnpkg.com/@sendgrid/helpers/-/helpers-7.2.6.tgz#5d15b8914940147c0635c9a3d2a93fed8c73dc71" + integrity sha512-J2xniPBOVo4ASzx+xc735OovHGj/v9oNrDo1Bb5fwTg/kmUxWxeoKZRkB+KLdciwmTtVrZjYLdQB3pMFIe9lAw== + dependencies: + chalk "^2.0.1" + deepmerge "^4.2.2" + +"@sendgrid/mail@^7.2.6": + version "7.2.6" + resolved "https://registry.yarnpkg.com/@sendgrid/mail/-/mail-7.2.6.tgz#8f6a398ad75fb1ed7a35a9bb18cbdac111637ef6" + integrity sha512-eP9MuqEZIgt4bHaoufWqKGUY4Bo7FUgST3WGNYIDXIe1rP2dV6/JR7Ac2Dl9iW22gy15nc58fLGIGa41XbwtuA== + dependencies: + "@sendgrid/client" "^7.2.6" + "@sendgrid/helpers" "^7.2.6" + "@sheerun/mutationobserver-shim@^0.3.2": version "0.3.3" resolved "https://registry.yarnpkg.com/@sheerun/mutationobserver-shim/-/mutationobserver-shim-0.3.3.tgz#5405ee8e444ed212db44e79351f0c70a582aae25" @@ -8030,6 +8054,11 @@ deepmerge@^3.2.0: resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-3.3.0.tgz#d3c47fd6f3a93d517b14426b0628a17b0125f5f7" integrity sha512-GRQOafGHwMHpjPx9iCvTgpu9NojZ49q794EEL94JVEw6VaeA8XTUyBKvAkOOjBX9oJNiV6G3P+T+tihFjo2TqA== +deepmerge@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" + integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + default-gateway@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b"