Skip to content

Commit 20326ba

Browse files
feat: require emails in contact forms; autofill emails based on user auth
1 parent e4e121e commit 20326ba

File tree

2 files changed

+32
-10
lines changed

2 files changed

+32
-10
lines changed

src/components/ContactUsSlideover/ContactUsSlideover.tsx

+15-3
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@ import * as React from 'react';
22
import { ModuleInfo } from '../../models/module';
33
import { SECTION_LABELS } from '../../../content/ordering';
44
import SlideoverForm from './SlideoverForm';
5-
import { useState } from 'react';
5+
import { useContext, useEffect, useState } from 'react';
66
import useStickyState from '../../hooks/useStickyState';
7+
import UserDataContext from '../../context/UserDataContext/UserDataContext';
78

89
// Warning: this file is insanely messy. This should be rewritten soon :)
910

@@ -67,8 +68,8 @@ export default function ContactUsSlideover({
6768
onClose: any;
6869
activeModule?: ModuleInfo;
6970
}) {
70-
const [name, setName] = useStickyState('', 'contact_form_name');
71-
const [email, setEmail] = useStickyState('', 'contact_form_email');
71+
const [name, setName] = useState('');
72+
const [email, setEmail] = useState('');
7273
const [location, setLocation] = useState('');
7374
const [topic, setTopic] = useStickyState('', 'contact_form_topic');
7475
const topics = [
@@ -94,6 +95,17 @@ export default function ContactUsSlideover({
9495
else setLocation('');
9596
}, [activeModule]);
9697

98+
const { firebaseUser } = useContext(UserDataContext);
99+
useEffect(() => {
100+
if (!firebaseUser) return;
101+
if (email === '') {
102+
setEmail(firebaseUser.email);
103+
}
104+
if (name === '') {
105+
setName(firebaseUser.displayName);
106+
}
107+
}, [firebaseUser]);
108+
97109
React.useEffect(() => {
98110
if (isOpen) {
99111
setShowSuccess(false);

src/components/MarkdownLayout/ModuleFeedback.tsx

+17-7
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@ import * as React from 'react';
22
import { SolutionInfo } from '../../models/solution';
33
import { ModuleInfo } from '../../models/module';
44
import useStickyState from '../../hooks/useStickyState';
5-
import { useState } from 'react';
5+
import { useContext, useEffect, useState } from 'react';
66
import { validateEmail } from '../ContactUsSlideover/ContactUsSlideover';
7+
import UserDataContext from '../../context/UserDataContext/UserDataContext';
78

89
export default function ModuleFeedback({
910
markdownData,
@@ -16,22 +17,31 @@ export default function ModuleFeedback({
1617
'',
1718
'module_contact_form_message'
1819
);
19-
const [email, setEmail] = useStickyState('', 'contact_form_email');
20+
const [email, setEmail] = useState('');
2021
const [showSuccess, setShowSuccess] = useState(false);
2122

22-
const emailErrorMsg =
23-
showErrors && email !== '' && !validateEmail(email)
23+
const { firebaseUser } = useContext(UserDataContext);
24+
useEffect(() => {
25+
if (email === '' && firebaseUser?.email) setEmail(firebaseUser.email);
26+
}, [firebaseUser?.email]);
27+
28+
const emailErrorMsg = showErrors
29+
? email === ''
30+
? 'This field is required.'
31+
: !validateEmail(email)
2432
? 'Please enter a valid email address.'
25-
: null;
33+
: null
34+
: null;
2635

2736
const handleSubmit = async e => {
2837
e.preventDefault();
2938

3039
setShowErrors(true);
3140
if (message === '') return;
41+
if (email === '' || !validateEmail(email)) return;
3242

3343
let data = new FormData();
34-
data.append('email', email || 'Not Given');
44+
data.append('email', email);
3545
data.append('location', markdownData.title);
3646
data.append('url', window.location.href);
3747
data.append('topic', 'Module Feedback Form');
@@ -109,7 +119,7 @@ export default function ModuleFeedback({
109119
value={email}
110120
formNoValidate={true}
111121
onChange={e => setEmail(e.target.value)}
112-
placeholder="Email Address (Optional)"
122+
placeholder="Email Address"
113123
/>
114124
{emailErrorMsg && (
115125
<div className="absolute inset-y-0 right-0 pr-3 flex items-center pointer-events-none">

0 commit comments

Comments
 (0)