Skip to content

Instantly share code, notes, and snippets.

@hypeJunction
Last active February 13, 2021 18:59
Show Gist options
  • Save hypeJunction/8b6c77d4957c5161dc5f74e60e995afb to your computer and use it in GitHub Desktop.
Save hypeJunction/8b6c77d4957c5161dc5f74e60e995afb to your computer and use it in GitHub Desktop.
function ComposerView () {
const saveDraft = useMachineTransition('save_draft')
const send = useMachineTransition('send')
const {
context: {
message
}
} = useMachineState()
const handleChange = useCallback((ev) => {
saveDraft.execute({
message: {
...message,
[ev.target.name]: ev.target.value
}
})
}, [saveDraft, message])
const handleSubmit = useCallback((ev) => {
ev.preventDefault();
send.execute({ message })
}, [send, message])
return (
<>
{send.error && <p>{send.error.message}</p>}
<form onSubmit={handleSubmit}>
<label>
<span>Recipient</span>
<input type="text" name="recipient" value={message.recipient} onChange={handleChange}/>
</label>
<label>
<span>Text</span>
<textarea name="text" value={message.text} onChange={handleChange}/>
</label>
<button type="submit" disabled={send.loading}>
{send.loading ? 'Sending...' : 'Save'}
</button>
</form>
</>
)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment