<!DOCTYPE html>
<html>

  <head>
    <script data-require="react@*" data-semver="0.14.0" src="https://cdnjs.cloudflare.com/ajax/libs/react/0.14.0/react.js"></script>
    <script data-require="react@*" data-semver="0.14.0" src="https://cdnjs.cloudflare.com/ajax/libs/react/0.14.0/react-dom.js"></script>
    <script src="https://unpkg.com/react-craftform@1.1.7/dest/cf_form.umd.js"></script>
    <link rel="stylesheet" href="style.css" />
  </head>

  <body>
    <div id="example"></div>
    <script src="script.js"></script>
  </body>

</html>


const haveToBeSomething = (word) => {
    return (val) => {
        if(val === word){
            return false;
        }else{
            return {
                havetoBeSomething:{
                  expectedValue:word,
                  value:val
                }
            }
        }
    }

};

const haveToBeCat = haveToBeSomething("cat");


const errorSpec = (name) => {
    return react_craftform.errorMessage({
        minLength:(def)=>{
            return (<p>Please fill {name} control with {def.minRequired} length</p>);
        },
        required:()=>{
            return (<p>Please fill input</p>);
        },
        havetoBeSomething:(def) => {
            return (<p>Please fill {def.expectedValue}! Now you provide {def.value}</p>)
        }
    });
};

const MyForm = (props) => {
  const onSubmit = (evt) => {
    evt.preventDefault();
    if(react_craftform.hasError(props.form.errors)){
        window.alert("There's an error");
    }else{
        props.onSubmit(props.form.values);
    }
  }
  return (
     <form onSubmit={onSubmit}>
          <section className="name_section">
              <label>Name</label>
              <input type="text" className="name" onChange={props.form.handleChange("name")} value={props.form.values['name']}/>
          </section>
          <p>Name Value: {props.form.values['name']} </p>
          {
            errorSpec('name')(props.form.errors['name'])
          }
          <section className="code_section">
              <label>Last Name</label>
              <input type="text" className="code" onChange={props.form.handleChange("lastname")} value={props.form.values['lastname']} />
              
          </section>
          <p>LastName Value: {props.form.values['lastname']} </p>
          {
            errorSpec('lastname')(props.form.errors['lastname'])
          }
          <button type="submit">Submit</button>
      </form>
  );
}

const MyFormCraft = react_craftform.withForm(MyForm,{
  name:["",["required",haveToBeCat]],
  lastname:["",[react_craftform.validator.minLength(5)]]
});

const MyFormCraftContainer = () => {
  return (<MyFormCraft onSubmit={(value)=>{window.alert('My name is '+ value.name + ' and my lastname is '+ value.lastname)}}></MyFormCraft>);
}

ReactDOM.render(
  <MyFormCraftContainer></MyFormCraftContainer>,
  document.getElementById('example')
);
/* Styles go here */