Skip to content

Instantly share code, notes, and snippets.

@blimmer
Created August 9, 2017 01:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save blimmer/8825859866e32bf1c6a0335c2a2fd3fa to your computer and use it in GitHub Desktop.
Save blimmer/8825859866e32bf1c6a0335c2a2fd3fa to your computer and use it in GitHub Desktop.
wip multipage validations
import Ember from 'ember';
import { validator, buildValidations } from 'ember-cp-validations';
import { userInfoValidations } from '../models/order';
const Validations = buildValidations(userInfoValidations);
export default Ember.Component.extend(Validations, {
});
import Ember from 'ember';
export default Ember.Controller.extend({
appName: 'Ember Twiddle'
});
import Model from "ember-data/model";
import attr from "ember-data/attr";
import { validator, buildValidations } from 'ember-cp-validations';
export const userInfoValidations = {
name: validator('presence', true),
email: [
validator('presence', true),
validator('format', { type: 'email' })
]
};
export const shippingValidations = {
address1: validator('presence', true),
state: validator('presence', true),
zipCode: validator('presence', true)
};
const Validations = buildValidations(Ember.assign({}, userInfoValidations, shippingValidations));
export default Model.extend(Validations, {
name: attr('string'),
email: attr('string'),
address1: attr('string'),
address2: attr('string'),
state: attr('string'),
zipCode: attr('string')
});
import Ember from 'ember';
import config from './config/environment';
const Router = Ember.Router.extend({
location: 'none',
rootURL: config.rootURL
});
Router.map(function() {
this.route('user-info');
this.route('shipping-info');
});
export default Router;
import Ember from 'ember';
export default Ember.Route.extend({
model() {
return this.store.createRecord('order');
}
});
<h1>Example Multi-Page Validation Form</h1>
<br>
<br>
{{outlet}}
<br>
<br>
<p>Is overall model valid? <b>{{model.validations.isValid}}</b></p>
<label>Name</label>
{{input value=order.name}}
<h3>name is valid? {{this.validations.attrs.name.isValid}}</h3>
<label>Email</label>
{{input value=order.email}}
<p>user-info component is valid? <b>{{this.validations.isValid}}</b></p>
{{#link-to 'shipping-info' disabled=true}}Next{{/link-to}}
<p>
This shows an example of how to handle validations spread throughout two different parts of a form.
</p>
{{#link-to 'user-info'}}Get Started{{/link-to}}
{{user-info order=model}}
{
"version": "0.12.1",
"EmberENV": {
"FEATURES": {}
},
"options": {
"use_pods": false,
"enable-testing": false
},
"dependencies": {
"jquery": "https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.3/jquery.js",
"ember": "2.12.0",
"ember-template-compiler": "2.12.0",
"ember-testing": "2.12.0"
},
"addons": {
"ember-data": "2.12.1",
"ember-cp-validations": "3.4.0"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment