diff --git a/.env.default b/.env.default index 8a3dd596ac2265dcb1e6ed447e5e625b012e81de..c60cd93b610adf0f65eadbaacb1395c2c42ce1a9 100644 --- a/.env.default +++ b/.env.default @@ -3,3 +3,4 @@ ENVIRONMENT # Services REACT_APP_BLOCLINK_URL +REACT_APP_MAILCHIMP_URL diff --git a/.gitignore b/.gitignore index 8dba7da7b84725d366880869214190ede485efe6..3797cabdbe367899399cac0a0db1a3c530bba3c8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,6 @@ # Node Modules node_modules/* - +.env # Elastic Beanstalk Files # .elasticbeanstalk/* # !.elasticbeanstalk/*.cfg.yml diff --git a/package-lock.json b/package-lock.json index 445e8de199740e5dbbf79dda0a49ae22cc4ba38a..47bbb4f2de73057657aa8499d1396c09c3d1e0f4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4380,9 +4380,9 @@ } }, "dotenv": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.2.0.tgz", - "integrity": "sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w==" + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", + "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==" }, "dotenv-expand": { "version": "4.2.0", @@ -7854,6 +7854,29 @@ "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" }, + "jsonp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/jsonp/-/jsonp-0.2.1.tgz", + "integrity": "sha1-pltPoPEL2nGaBUQep7lMVfPhW64=", + "requires": { + "debug": "^2.1.3" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, "jsprim": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", @@ -10645,6 +10668,13 @@ "webpack-dev-server": "3.2.1", "webpack-manifest-plugin": "2.0.4", "workbox-webpack-plugin": "4.3.1" + }, + "dependencies": { + "dotenv": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.2.0.tgz", + "integrity": "sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w==" + } } }, "react-transition-group": { diff --git a/package.json b/package.json index 9c9306a2dcaa37e827252e6ee75c4d9c134b8d2b..316648ac12365e50345c3d1c384744b15a610161 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,8 @@ "dependencies": { "axios": "^0.19.0", "bootstrap": "^4.3.1", + "dotenv": "^8.2.0", + "jsonp": "^0.2.1", "qs": "^6.8.0", "react": "^16.9.0", "react-dom": "^16.9.0", diff --git a/src/App.js b/src/App.js index 1fb435ef6555a37daab21a24ec70578eafa96d39..85a2b2fd785810fe7b763d4ca052de28b7cbb430 100644 --- a/src/App.js +++ b/src/App.js @@ -20,9 +20,9 @@ import { questionTree, initialQuestions } from './constants'; import { connect } from 'react-redux'; import { verifyUser, verifyToken, submitAnswer, submitBuilding, completeQuestionnaire } from './actions'; import './App.css'; +import jsonp from "jsonp"; import ReactGA from 'react-ga'; - class App extends React.Component { constructor(props) { super(props); @@ -38,10 +38,10 @@ class App extends React.Component { userBuildingId: -1, buildingQualified: false, form: { - firstName: '', - lastName: '', - email: '', - phone: '', + FNAME: '', + LNAME: '', + EMAIL: '', + PHONE: '', returningEmail: '', address: '', }, @@ -376,13 +376,13 @@ class App extends React.Component { const validEmail = /^$|^[a-zA-Z0-9]+@[a-zA-Z0-9]+\.[A-Za-z]+$/; const validPhone = /^$|^\(?(\d{3})\)?[- ]?(\d{3})[- ]?(\d{4})$/; - if (this.state.form.firstName.toString().replace(/^\s+|\s+$/g, '') === '') { + if (this.state.form.FNAME.toString().replace(/^\s+|\s+$/g, '') === '') { emptyFields.push('First Name'); } - if (this.state.form.lastName.toString().replace(/^\s+|\s+$/g, '') === '') { + if (this.state.form.LNAME.toString().replace(/^\s+|\s+$/g, '') === '') { emptyFields.push('Last Name'); } - if (this.state.form.email.toString().replace(/^\s+|\s+$/g, '') === '') { + if (this.state.form.EMAIL.toString().replace(/^\s+|\s+$/g, '') === '') { emptyFields.push('Email address'); } if (emptyFields.length > 0) { @@ -390,11 +390,11 @@ class App extends React.Component { alert(errorMessage); return false; } - if (this.state.form.phone.toString().replace(/^\s+|\s+$/g, '') !== '' && - !(validPhone.test(this.state.form.phone))) { + if (this.state.form.PHONE.toString().replace(/^\s+|\s+$/g, '') !== '' && + !(validPhone.test(this.state.form.PHONE))) { invalidFields.push('Phone number'); } - if (!(validEmail.test(this.state.form.email))) { + if (!(validEmail.test(this.state.form.EMAIL))) { invalidFields.push('Email address'); } if (invalidFields.length > 0) { @@ -450,11 +450,14 @@ class App extends React.Component { let userData = {}; // New user if (userType == 1) { + if (this.state.form.EMAIL !== '') { + this.handleSubmit(); + } userData = { - firstName: this.state.form.firstName, - lastName: this.state.form.lastName, - phoneNumber: this.state.form.phone, - email: this.state.form.email, + firstName: this.state.form.FNAME, + lastName: this.state.form.LNAME, + phoneNumber: this.state.form.PHONE, + email: this.state.form.EMAIL, userType: 1, }; } @@ -475,6 +478,20 @@ class App extends React.Component { } } + handleSubmit() { + const action = process.env.REACT_APP_MAILCHIMP_URL; + const fields = ['FNAME', + 'LNAME', + 'EMAIL', + 'PHONE'] + const values = fields.map(field => { + return `${field}=${encodeURIComponent(this.state.form[field])}`; + }).join("&"); + const path = `${action}&${values}`; + const url = path.replace('/post?', '/post-json?'); + jsonp(url, { param: "c" }); + }; + verifyToken = (token) => { this.props.onVerifyToken({ token: token.toString() }); this.setState({ @@ -764,8 +781,8 @@ class App extends React.Component { this.handleInputChange(e)} className="input" @@ -775,8 +792,8 @@ class App extends React.Component { this.handleInputChange(e)} className="input" @@ -784,19 +801,22 @@ class App extends React.Component { this.handleInputChange(e)} className="input" /> this.handleInputChange(e)} className="input" /> + + +