Skip to content

Instantly share code, notes, and snippets.

@davelowensohn
Last active October 21, 2016 01:02
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 davelowensohn/0ed470bd4fac63a936bf672365820a36 to your computer and use it in GitHub Desktop.
Save davelowensohn/0ed470bd4fac63a936bf672365820a36 to your computer and use it in GitHub Desktop.
ember-changeset rollback issue
import Ember from 'ember';
export default Ember.Component.extend({
});
import Ember from 'ember';
import UserValidations from '../validations/user';
const { inject, computed, $ } = Ember;
export default Ember.Controller.extend({
UserValidations,
selectedIndustry: 'Initial Industry',
newRegistrationObject: Ember.Object.create(),
actions: {
saveForm(changeset) {
let snapshot = changeset.snapshot();
return changeset
.validate()
.then(() => {
if (changeset.get('isValid')) {
changeset.save();
return;
}
}).catch(() => {
changeset.restore(snapshot);
});
},
setIndustry(industry){
this.set('selectedIndustry', industry);
},
validateProperty(changeset, property) {
return changeset.validate(property);
}
}
});
<div>yo!</div>
{{#with (changeset newRegistrationObject UserValidations) as |changeset|}}
{{validated-field
type="text"
changeset=changeset
property="first_name"
label="First Name"
validateProperty=(action "validateProperty" changeset "first_name")
}}
{{validated-field
type="text"
changeset=changeset
property="last_name"
label="Last Name"
validateProperty=(action "validateProperty" changeset "last_name")
}}
{{validated-field
type="text"
changeset=changeset
property="email"
label="Email"
validateProperty=(action "validateProperty" changeset "email")
}}
<hr>
{{validated-field
type="password"
changeset=changeset
property="password"
label="Password"
validateProperty=(action "validateProperty" changeset "password")
}}
{{validated-field
type="password"
changeset=changeset
property="password_confirmation"
label="Password Confirmation"
validateProperty=(action "validateProperty" changeset "password_confirmation")
}}
<hr>
{{validated-field
type="text"
changeset=changeset
property="company_name"
label="Company Name"
validateProperty=(action "validateProperty" changeset "company_name")
}}
{{validated-field
type="url"
changeset=changeset
property="company_website"
label="Company Website"
validateProperty=(action "validateProperty" changeset "company_website")
}}
{{validated-field
type="email"
changeset=changeset
property="company_email"
label="Company Email"
validateProperty=(action "validateProperty" changeset "company_email")
}}
{{validated-field
type="tel"
changeset=changeset
property="company_phone"
label="Company Phone"
validateProperty=(action "validateProperty" changeset "company_phone")
}}
<button {{action 'setIndustry' 'New Industry'}}>{{selectedIndustry}}</button>
<hr>
<button class="welcome next" {{action 'saveForm' changeset}}>Save</button>
{{/with}}
<label for={{concat type "-" property}}>{{label}}:</label><br>
<input
type={{type}}
class={{if (get changeset.error property) 'input-error'}}
id={{concat type "-" property}}
value={{get changeset property}}
oninput={{action (mut (get changeset property)) value="target.value"}}
onblur={{action validateProperty}}>
{{#if (get changeset.error property) class="liquid-vertical"}}
<small>
<ul class="input-error-list">
{{#each (get (get changeset.error property) "validation") as |message|}}
<li>{{message}}</li>
{{/each}}
</ul>
</small>
{{/if}}
import Ember from 'ember';
export default function destroyApp(application) {
Ember.run(application, 'destroy');
}
import Resolver from '../../resolver';
import config from '../../config/environment';
const resolver = Resolver.create();
resolver.namespace = {
modulePrefix: config.modulePrefix,
podModulePrefix: config.podModulePrefix
};
export default resolver;
import Ember from 'ember';
import Application from '../../app';
import config from '../../config/environment';
const { run } = Ember;
const assign = Ember.assign || Ember.merge;
export default function startApp(attrs) {
let application;
let attributes = assign({rootElement: "#test-root"}, config.APP);
attributes = assign(attributes, attrs); // use defaults, but you can override;
run(() => {
application = Application.create(attributes);
application.setupForTesting();
application.injectTestHelpers();
});
return application;
}
import resolver from './helpers/resolver';
import {
setResolver
} from 'ember-qunit';
setResolver(resolver);
{
"version": "0.10.4",
"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.9.0",
"ember-data": "2.9.0",
},
"addons": {
"ember-changeset-validations": "1.2.2"
}
}
import {
validatePresence,
validateLength,
validateFormat,
validateConfirmation
} from 'ember-changeset-validations/validators';
export default {
first_name: [
validatePresence(true),
validateLength({ min: 2 })
],
last_name: [
validatePresence(true),
validateLength({ min: 2 })
],
email: [
validatePresence(true),
validateFormat({ type: 'email' })
],
password: [
validatePresence(true),
validateLength({ min: 8 })
],
password_confirmation: [
validatePresence(true),
validateConfirmation({ on: 'password' })
],
company_name: [
validatePresence(true),
validateLength({ min: 2 })
],
company_website: [
validatePresence(true),
validateFormat({ type: 'url' })
],
company_email: [
validatePresence(true),
validateFormat({ type: 'email' })
],
company_phone: [
validatePresence(true),
validateFormat({ type: 'tel' })
],
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment