UNPKG

authentic-ui

Version:

Authentic UI is a set of client side views that use authentic-client to provide an easy signup and authentication flow.

63 lines (53 loc) 1.47 kB
var yo = require('@dguttman/yo-yo') var find = require('lodash.find') var xtend = require('xtend') var Field = require('./field') module.exports = function renderForm (state, cb) { var defaults = { fields: [], error: '', disabled: false, submitText: 'Submit', styles: require('./styles-empty') } state = xtend(defaults, state) var el = render(state) return el function render (state) { var styles = state.styles return yo`<form onsubmit=${onsubmit}> ${state.fields.map(function (field, i) { return Field(xtend(field, { disabled: state.disabled, styles: styles }), onchange) })} ${!state.error ? '' : yo`<div class=${styles.error}>${state.error}</div> `} <div> <button class='${styles.submit} ${state.disabled ? styles.disabled : ''}' type='submit' disabled=${state.disabled} > ${state.submitText} </button> </div> </form>` } function onchange (evt) { var fields = state.fields var field = find(fields, function (f) { return f.name === evt.name }) field.value = evt.value state = xtend(state, { fields: fields }) yo.update(el, render(state)) } function onsubmit (evt) { evt.preventDefault() var data = state.fields.reduce(function (acc, field) { acc[field.name] = field.value return acc }, {}) cb(data, state.fields) } }