Add email integration to be able to broadcast emails to all users.

Resolves #388
This commit is contained in:
Kurt Hutten
2021-06-29 06:37:04 +10:00
parent 7ef8d8d1ff
commit 0da15443cb
13 changed files with 173 additions and 5 deletions

View File

@@ -62,6 +62,7 @@ const Routes = () => {
<Route path="/admin/subject-access-requests/{id}/edit" page={EditSubjectAccessRequestPage} name="editSubjectAccessRequest" />
<Route path="/admin/subject-access-requests/{id}" page={SubjectAccessRequestPage} name="subjectAccessRequest" />
<Route path="/admin/subject-access-requests" page={SubjectAccessRequestsPage} name="subjectAccessRequests" />
<Route path="/admin/email" page={AdminEmailPage} name="adminEmail" />
</Private>
</Router>
)

View File

@@ -0,0 +1,41 @@
import {useState} from 'react'
import { useMutation } from '@redwoodjs/web'
import { toast, Toaster } from '@redwoodjs/web/toast'
const SEND_EMAIL_MUTATION = gql`
mutation sendEmailMutation($email: Email!) {
sendAllUsersEmail(input: $email) {
accepted
}
}
`
const AdminEmailPage = () => {
const [subject, setSubject] = useState('')
const [body, setBody] = useState('')
const [sendEmailMutation] = useMutation(SEND_EMAIL_MUTATION, {
onCompleted: ({sendAllUsersEmail}) => {
toast.success(`Emails sent, ${sendAllUsersEmail?.accepted.join(', ')}`)
setSubject('')
setBody('')
},
})
const sendEmail = () => sendEmailMutation({ variables: { email: { subject, body } } })
return (
<div className="flex justify-center">
<div className="max-w-7xl pt-8">
<h2 className="" style={{width: '46rem'}}>Email all users</h2>
<label htmlFor="subject">Subject</label>
<input name="subject" className="rounded border border-gray-400 px-2 w-full" value={subject} onChange={({target}) => setSubject(target.value)}/>
<label htmlFor="body">Body</label>
<textarea className="w-full rounded border border-gray-400 p-2" name="text" value={body} onChange={({target}) => setBody(target.value)}></textarea>
<button className="rounded px-2 p-1 mt-4 bg-ch-purple-400 text-indigo-200" onClick={sendEmail}>Send</button>
</div>
<Toaster timeout={1500} />
</div>
)
}
export default AdminEmailPage