Skip to content

Instantly share code, notes, and snippets.

@timwis
Created July 16, 2016 21:00
Show Gist options
  • Save timwis/d300e895b69b8f72e8650d5707dd9ed5 to your computer and use it in GitHub Desktop.
Save timwis/d300e895b69b8f72e8650d5707dd9ed5 to your computer and use it in GitHub Desktop.
choo form component example
const getFormData = require('get-form-data')
const html = require('choo/html')
module.exports = function formComponent (opts) {
return `
<form>
<input name="woof" type="text" placeholder="type here"
value=${opts.values.woof} oninput=${onInput}>
<input type="submit" onsubmit=${onSubmit}>
</form>
`
function onInput (e) {
const data = e.value
opts.onInput && opts.onInput(data) // allows onInput callback to be optional
}
function onSubmit (e) {
const data = getFormData(e.target)
opts.onSubmit && opts.onSubmit(data)
e.preventDefault() // not called if above lines throw error, degrading to default form functionality
}
}
const html = require('choo/html')
const Form = require('../components/form')
module.exports = function mainView (state, prev, send) {
const form = Form({
values: state.myFormModel,
onInput: (data) => send('myFormModel:validate', data),
onSubmit: (data) => send('myFormModel:submit', data)
})
return html`
<main>
${form}
</main>
`
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment