42 lines
1.5 KiB
TypeScript
42 lines
1.5 KiB
TypeScript
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
|