{"version":3,"file":"component---src-pages-contact-js-cd4732b3588bbee52cdd.js","mappings":"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","sources":["webpack://gatsby-london/./src/pages/contact.js"],"sourcesContent":["import React, { useState, useEffect } from \"react\";\r\nimport { graphql, StaticQuery } from \"gatsby\"\r\nimport { useGoogleReCaptcha } from 'react-google-recaptcha-v3'\r\n\r\nimport Layout from \"../components/layout\"\r\nimport SEO from \"../components/seo\"\r\n\r\nimport \"../utils/normalize.css\"\r\nimport \"../utils/css/screen.css\"\r\n\r\n\r\nconst ContactPage = ({ location, data }) => {\r\n const { executeRecaptcha } = useGoogleReCaptcha()\r\n console.log('executeRecaptcha', executeRecaptcha)\r\n\r\n const siteTitle = data.site.siteMetadata.title\r\n\r\n const [contactReason, setContactReason] = useState(\"\");\r\n const [showExtraFields, setShowExtraFields] = useState(false);\r\n\r\n useEffect(() => {\r\n const queryParams = new URLSearchParams(location.search);\r\n const reason = queryParams.get(\"reason\") || 'general-question';\r\n\r\n setContactReason(reason || '');\r\n setShowExtraFields(reason === \"purchase-inquiry\");\r\n }, [location.search]); // Ensure this depends on location.search\r\n\r\n const handleReasonChange = (e) => {\r\n const value = e.target.value;\r\n console.log(\"handleReasonChange\", value)\r\n setContactReason(value);\r\n setShowExtraFields(value === \"purchase-inquiry\");\r\n };\r\n\r\n const [mode, setMode] = useState(\"READY\"); // READY, BUSY, COMPLETE, ERROR\r\n\r\n const [submitAttempted, setSubmitAttempted] = useState(false);\r\n const [emptyFields, setEmptyFields] = useState({});\r\n\r\n const validateEmail = (email) => {\r\n // Simple regex for basic email validation\r\n const re = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\r\n return re.test(String(email).toLowerCase());\r\n };\r\n\r\n const handleSubmit = async (e) => {\r\n e.preventDefault();\r\n\r\n let newEmptyFields = {};\r\n let formIsValid = true;\r\n\r\n if (!validateEmail(e.target.email.value)) {\r\n newEmptyFields.email = true;\r\n formIsValid = false;\r\n }\r\n\r\n if (!e.target.name.value) {\r\n newEmptyFields.name = true;\r\n formIsValid = false;\r\n }\r\n\r\n if (showExtraFields && !e.target.budget.value) {\r\n newEmptyFields.budget = true;\r\n formIsValid = false;\r\n }\r\n\r\n setEmptyFields(newEmptyFields);\r\n setSubmitAttempted(true);\r\n\r\n if (!formIsValid) {\r\n return\r\n }\r\n \r\n setMode(\"BUSY\")\r\n\r\n try {\r\n console.log(\"handleSubmit\", e)\r\n\r\n if (!executeRecaptcha) {\r\n console.log(\"!executeRecaptcha\")\r\n throw \"Not Ready\"\r\n }\r\n\r\n const token = await executeRecaptcha('signup')\r\n console.log('token', token)\r\n\r\n let data = {\r\n reason: contactReason,\r\n email: e.target.email.value,\r\n name: e.target.name.value,\r\n token: token\r\n };\r\n \r\n // Only add properties if they exist and are not empty\r\n if (e.target.message && e.target.message.value) data.message = e.target.message.value;\r\n if (e.target.budget && e.target.budget.value) data.budget = e.target.budget.value;\r\n if (e.target.country && e.target.country.value) data.country = e.target.country.value;\r\n if (e.target.sculpture && e.target.sculpture.value) data.sculpture = e.target.sculpture.value;\r\n \r\n // Now, data is ready to be JSON-stringified and sent\r\n const jsonData = JSON.stringify(data);\r\n\r\n console.log('jsonData', jsonData)\r\n\r\n const submitResult = await fetch('https://p65jdfgz1l.execute-api.us-east-1.amazonaws.com/default/contact-form', {\r\n method: 'POST',\r\n headers: {\r\n 'Accept': 'application/json, text/plain, */*',\r\n 'Content-type': 'application/json'\r\n },\r\n body: jsonData \r\n })\r\n\r\n const finalResult = await submitResult.json()\r\n\r\n console.log('Server Response', finalResult);\r\n\r\n if (finalResult.result === \"OK\") {\r\n setMode(\"COMPLETE\")\r\n return\r\n } \r\n\r\n throw \"Unexpected Result\"\r\n \r\n } catch(e) {\r\n console.log(\"ERROR\", e)\r\n setMode(\"ERROR\") // Error Mode\r\n }\r\n };\r\n\r\n\r\n return (\r\n \r\n \r\n\r\n
\r\n
\r\n\r\n

{contactReason === 'purchase-inquiry' ? 'Purchase Inquiry' : 'Contact'}

\r\n \r\n {\r\n {\r\n \"READY\":
\r\n\r\n
\r\n {contactReason === 'purchase-inquiry' \r\n ?

Interested in acquiring a unique piece of art? Please fill out this form with your details and preferences. I'll get back to you soon to discuss further. Looking forward to connecting with you!

\r\n :

Have a question or just want to say hello? I'd love to hear from you. Email me directly at hi@herschelshapiro.com or fill out this form, and I'll get back to you as soon as possible.

}\r\n
\r\n\r\n
\r\n \r\n\r\n \r\n\r\n \r\n {showExtraFields && (\r\n <>\r\n \r\n \r\n \r\n\r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n
\r\n
,\r\n \"BUSY\":
\r\n
{/* Adds space below the spinner */}\r\n

Sending your message...

{/* Uses paragraph tag for regular font size */}\r\n
,\r\n \"COMPLETE\":
\r\n

Your message was submitted successfully, and I will get back to you as soon as possible. Thank you for reaching out!

\r\n
,\r\n \"ERROR\":
\r\n

Oops, there was an error.

\r\n
\r\n }[mode]\r\n }\r\n\r\n\r\n
\r\n
\r\n
\r\n )\r\n}\r\n\r\nconst indexQuery = graphql`\r\n query {\r\n site {\r\n siteMetadata {\r\n title\r\n }\r\n }\r\n benchAccounting: file(relativePath: { eq: \"herschel.jpg\" }) {\r\n childImageSharp {\r\n gatsbyImageData(layout: CONSTRAINED, width: 1360)\r\n }\r\n }\r\n }\r\n`\r\n\r\n\r\nexport default props => {\r\n return (\r\n (\r\n \r\n )}\r\n />\r\n )\r\n}\r\n"],"names":["ContactPage","location","data","executeRecaptcha","useGoogleReCaptcha","console","log","siteTitle","site","siteMetadata","title","useState","contactReason","setContactReason","showExtraFields","setShowExtraFields","useEffect","reason","URLSearchParams","search","get","mode","setMode","submitAttempted","setSubmitAttempted","emptyFields","setEmptyFields","handleSubmit","e","preventDefault","newEmptyFields","formIsValid","email","target","value","test","String","toLowerCase","name","budget","token","message","country","sculpture","jsonData","JSON","stringify","fetch","method","headers","body","submitResult","json","finalResult","result","keywords","className","href","onSubmit","noValidate","style","color","onChange","htmlFor","marginTop","type","id","required","placeholder","rows","display","flexDirection","alignItems","justifyContent","marginBottom","margin","props","StaticQuery","query","render"],"sourceRoot":""}