unirakun / k-ramel

State manager for your components apps, the safe and easy way
MIT License
21 stars 5 forks source link

driver / form / validator #221

Open fabienjuif opened 5 years ago

fabienjuif commented 5 years ago

get should returns

  // test inputs (required/pattern)
  const loginValues = form('login').get()

  //  test input "name" (required/pattern)
  const name = form('login').get('name')

  // test inputs (required/pattern + validator)
  const loginValues = form('login').get(values => values.name.length > 10)

  //  test input "name" (required/pattern + validator)
  const name = form('login').get('name', value => value.length > 10)

  // test inputs (validator only)
  const loginValues = form('login').get(values => values.name.length > 10, false)

  //  test input "name" (validator only)
  const name = form('login').get('name', value => value.length > 10, false)

to set metadata:

form('login').setMetadata({ name: { required: true, pattern: /[a-b]+/ } })
fabienjuif commented 5 years ago

or get.validate ? get alone will not do validation ?

const loginValues = form('login').get()
const loginValues = form('login').get.validate()
const name = form('login').get.validate('name') // feel odd
guillaumecrespel commented 5 years ago

I think we can pass the validator on second function props .

  const loginValues = form('login').get(([value, validator]) => {})
  const loginValues = form('login').get('name', (value, validator) => {})
fabienjuif commented 5 years ago

with middleware support

  // test inputs (required/pattern)
  const loginValues = form('login').get()

  //  test input "name" (required/pattern)
  const name = form('login').get('name')

  // test inputs (required/pattern + validator)
  // - doesn't call the internal validator
  const loginValues = form('login').get((values, next) => {
    if (values.name.length > 10) return true
    return { name: 'wrong_length' }
   })
  // - call the internal validator
  const loginValues = form('login').get((values, next) => {
    if (values.name.length > 10) return [{ name: 'wrong_length' }, ...next(values)]
    return true
  })

  //  test input "name" (required/pattern + validator)
  const name = form('login').get('name', value => {
    if (value.length > 10) return true
    return 'wrong_length'
   })