60 lines
1.6 KiB
TypeScript
60 lines
1.6 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
|