diff --git a/addon/components/uni-form.js b/addon/components/uni-form.js index 0d5f86b7..401c9246 100644 --- a/addon/components/uni-form.js +++ b/addon/components/uni-form.js @@ -2,21 +2,27 @@ import Component from '@ember/component'; import layout from '../templates/components/uni-form'; export default Component.extend({ - classNames: ['uni-form'], layout, + classNames: ['uni-form'], + classNameBindings: ['isValid:uni-form--valid:uni-form--invalid'], + isLoading: false, isValid: true, - onSubmit() {}, + autocomplete: 'on', - isFormDestroyed() { - return this.get('isDestroyed') || this.get('isDestroying'); - }, + onSubmit() {}, setIsLoading(value) { - if (!this.isFormDestroyed()) { - this.set('isLoading', value); + if (this._isComponentDestroyed()) { + return; } + + this.set('isLoading', value); + }, + + _isComponentDestroyed() { + return this.get('isDestroyed') || this.get('isDestroying'); }, actions: { @@ -25,7 +31,7 @@ export default Component.extend({ return; } - this.set('isLoading', true); + this.setIsLoading(true); let promise = this.get('onSubmit')(); if (promise && typeof promise.then === 'function') { diff --git a/addon/templates/components/uni-form.hbs b/addon/templates/components/uni-form.hbs index 161ed228..a7b04d36 100644 --- a/addon/templates/components/uni-form.hbs +++ b/addon/templates/components/uni-form.hbs @@ -1,6 +1,12 @@ -
+ {{yield}} - {{uni-button isPrimary=true isLoading=isLoading isDisabled=(not isValid) click=(action "submit") label=label}} + {{uni-button + isPrimary=true + isLoading=isLoading + isDisabled=(not isValid) + click=(action "submit") + label=label}} + {{input type="submit"}}
diff --git a/package-lock.json b/package-lock.json index 0d57f9a4..f1d82f43 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6024,66 +6024,6 @@ "ember-cli-version-checker": "^2.1.0" } }, - "ember-getowner-polyfill": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/ember-getowner-polyfill/-/ember-getowner-polyfill-1.2.5.tgz", - "integrity": "sha512-o8zK9AOfuW7CYS8CGKQG6miMj6I+sp/PeJmgfJyOoqT/24JYh4F0m8Fml4+Oljhc5BFihApnzGv++3FmL2CZwA==", - "dev": true, - "requires": { - "ember-cli-babel": "^5.1.6", - "ember-cli-version-checker": "^1.2.0", - "ember-factory-for-polyfill": "^1.1.0" - }, - "dependencies": { - "broccoli-babel-transpiler": { - "version": "5.7.4", - "resolved": "https://registry.npmjs.org/broccoli-babel-transpiler/-/broccoli-babel-transpiler-5.7.4.tgz", - "integrity": "sha512-gI14Pqc4qbmn5RW4SuAmybLiOoYW59D+HzQyhY6WdaGMAjikKBwJN0p17phyvafQ+kvG0mUiMd83lgHLeATnEA==", - "dev": true, - "requires": { - "babel-core": "^5.0.0", - "broccoli-funnel": "^1.0.0", - "broccoli-merge-trees": "^1.0.0", - "broccoli-persistent-filter": "^1.4.2", - "clone": "^0.2.0", - "hash-for-dep": "^1.0.2", - "heimdalljs-logger": "^0.1.7", - "json-stable-stringify": "^1.0.0", - "rsvp": "^3.5.0", - "workerpool": "^2.3.0" - }, - "dependencies": { - "clone": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", - "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", - "dev": true - } - } - }, - "ember-cli-babel": { - "version": "5.2.8", - "resolved": "https://registry.npmjs.org/ember-cli-babel/-/ember-cli-babel-5.2.8.tgz", - "integrity": "sha512-Mt9OOB5RaZwjde+LYef8EgwNVCAzsYDv4ktshblaXxr4m/Xm5/7/rxEu42RNrYkoy/qWpT9uhaD+JKK4riMf+w==", - "dev": true, - "requires": { - "broccoli-babel-transpiler": "^5.6.2", - "broccoli-funnel": "^1.0.0", - "clone": "^2.0.0", - "ember-cli-version-checker": "^1.0.2", - "resolve": "^1.1.2" - } - }, - "ember-cli-version-checker": { - "version": "1.3.1", - "integrity": "sha1-C8LRNMgwFC2mS/lieg7e0QthrnI=", - "dev": true, - "requires": { - "semver": "^5.3.0" - } - } - } - }, "ember-inline-svg": { "version": "0.1.11", "resolved": "https://registry.npmjs.org/ember-inline-svg/-/ember-inline-svg-0.1.11.tgz", @@ -7101,13 +7041,12 @@ } }, "ember-responsive": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/ember-responsive/-/ember-responsive-2.0.5.tgz", - "integrity": "sha512-Y7Auof3liAZCxhMHkmH3GJXdYwljguUEKAzRKMuoJCXpha0qtUC8IdGCES9Y0pOvMazogQFlacYHiH+3wN7crQ==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/ember-responsive/-/ember-responsive-2.0.8.tgz", + "integrity": "sha512-L5SBViR8cY0euQkG/rARMawYK7PXvGdwvmyhjcSA3wUTm49xmUa5z2km/qOekHSFtqVX4GqQCi+RoHPDzWxiGA==", "dev": true, "requires": { - "ember-cli-babel": "^6.4.1", - "ember-getowner-polyfill": "^1.1.1" + "ember-cli-babel": "^6.6.0" } }, "ember-rfc176-data": { @@ -7115,66 +7054,6 @@ "resolved": "https://registry.npmjs.org/ember-rfc176-data/-/ember-rfc176-data-0.2.7.tgz", "integrity": "sha512-pJE2w+sI22UDsYmudI4nCp3WcImpUzXwe9qHfpOcEu3yM/HD1nGpDRt6kZD0KUnDmqkLeik/nYyzEwN/NU6xxA==" }, - "ember-route-action-helper": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/ember-route-action-helper/-/ember-route-action-helper-2.0.3.tgz", - "integrity": "sha1-tfhf65D/mvNlZbsVLFuiWbu19ls=", - "dev": true, - "requires": { - "ember-cli-babel": "^5.1.7", - "ember-getowner-polyfill": "^1.1.1" - }, - "dependencies": { - "broccoli-babel-transpiler": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/broccoli-babel-transpiler/-/broccoli-babel-transpiler-5.7.2.tgz", - "integrity": "sha512-vFQ+aSR9J81fm3MXXQGgDxswYINHl2p5duLvRLVnpmgPDNdpdsa30gh3xnmhzR/GwWFBfUNle7aYxthlgvsN0w==", - "dev": true, - "requires": { - "babel-core": "^5.0.0", - "broccoli-funnel": "^1.0.0", - "broccoli-merge-trees": "^1.0.0", - "broccoli-persistent-filter": "^1.4.2", - "clone": "^0.2.0", - "hash-for-dep": "^1.0.2", - "heimdalljs-logger": "^0.1.7", - "json-stable-stringify": "^1.0.0", - "rsvp": "^3.5.0", - "workerpool": "^2.2.1" - }, - "dependencies": { - "clone": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", - "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", - "dev": true - } - } - }, - "ember-cli-babel": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ember-cli-babel/-/ember-cli-babel-5.2.4.tgz", - "integrity": "sha1-XOT0awjtb20h6Hhhn7aJcZ1ujhM=", - "dev": true, - "requires": { - "broccoli-babel-transpiler": "^5.6.2", - "broccoli-funnel": "^1.0.0", - "clone": "^2.0.0", - "ember-cli-version-checker": "^1.0.2", - "resolve": "^1.1.2" - } - }, - "ember-cli-version-checker": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/ember-cli-version-checker/-/ember-cli-version-checker-1.3.1.tgz", - "integrity": "sha512-mu1Apdd19ZuDsy9WAHheFhltaJx+0ardFNM8Hb/AeRO9RokOK/bdUq/Jc1oeg0/Hl18tnxg8STG9TyJ6HgE3+g==", - "dev": true, - "requires": { - "semver": "^5.3.0" - } - } - } - }, "ember-router-generator": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/ember-router-generator/-/ember-router-generator-1.2.3.tgz", @@ -12558,9 +12437,9 @@ } }, "broccoli-merge-trees": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/broccoli-merge-trees/-/broccoli-merge-trees-2.0.0.tgz", - "integrity": "sha1-EK6kbdXOvMi499WlTwqEpPC7kLk=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/broccoli-merge-trees/-/broccoli-merge-trees-2.0.1.tgz", + "integrity": "sha512-WjaexJ+I8BxP5V5RNn6um/qDRSmKoiBC/QkRi79FT9ClHfldxRyCDs9mcV7mmoaPlsshmmPaUz5jdtcKA6DClQ==", "dev": true, "requires": { "broccoli-plugin": "^1.3.0", diff --git a/package.json b/package.json index 40fea8a6..31a238b6 100644 --- a/package.json +++ b/package.json @@ -58,8 +58,7 @@ "ember-moment": "~7.7.0", "ember-native-dom-helpers": "0.5.4", "ember-resolver": "^4.1.0", - "ember-responsive": "^2.0.5", - "ember-route-action-helper": "2.0.3", + "ember-responsive": "~2.0.8", "ember-source": "~2.16.0", "ember-truth-helpers": "1.3.0", "ember-uuid": "^1.0.0", diff --git a/tests/integration/components/uni-datepicker-range-day-test.js b/tests/integration/components/uni-datepicker-range-day-test.js index bb72931b..d249f513 100644 --- a/tests/integration/components/uni-datepicker-range-day-test.js +++ b/tests/integration/components/uni-datepicker-range-day-test.js @@ -1,8 +1,7 @@ import { moduleForComponent, test } from 'ember-qunit'; import hbs from 'htmlbars-inline-precompile'; -import getOwner from 'ember-owner/get'; -import { findAll, find } from 'ember-native-dom-helpers'; import moment from 'moment'; +import { getOwner } from '@ember/application'; let calendarService, calendar; @@ -25,8 +24,12 @@ moduleForComponent('uni-datepicker-range-day', 'Integration | Component | uni da }); test('it renders', function(assert) { + assert.expect(2); + this.render(hbs`{{uni-datepicker-range-day calendar=calendar}}`); - assert.ok(find('.ember-power-calendar-row')); - assert.equal(findAll('.ember-power-calendar-day--current-month').length, 31, 'It rendered all days in center\'s month'); + assert.dom('.ember-power-calendar-row').exists(); + assert + .dom('.ember-power-calendar-day--current-month') + .exists({ count: 31 }, 'It rendered all days in center\'s month'); }); diff --git a/tests/integration/components/uni-form-test.js b/tests/integration/components/uni-form-test.js index 680241f2..5f9e3198 100644 --- a/tests/integration/components/uni-form-test.js +++ b/tests/integration/components/uni-form-test.js @@ -1,26 +1,30 @@ import RSVP from 'rsvp'; import { moduleForComponent, test } from 'ember-qunit'; import hbs from 'htmlbars-inline-precompile'; -import { find, click } from 'ember-native-dom-helpers'; +import { click } from 'ember-native-dom-helpers'; moduleForComponent('uni-form', 'Integration | Component | uni form', { integration: true }); -test('it renders the yielded content', function(assert) { - assert.expect(2); +test('it renders', function(assert) { + assert.expect(4); + + this.set('label', 'This is a button label'); this.render(hbs` - {{#uni-form}} + {{#uni-form label=label}} This is a form content {{/uni-form}} `); - assert.ok(find('.uni-form')); - assert.equal(find('.uni-form').textContent.trim(), 'This is a form content'); + assert.dom('.uni-form').exists(); + assert.dom('.uni-form').containsText('This is a form content'); + assert.dom('.uni-button--primary').exists(); + assert.dom('.uni-button--primary').hasText('This is a button label'); }); -test('it renders the button label', function(assert) { +test('it sets the autocomplete as "on" by default', function(assert) { assert.expect(2); this.set('label', 'This is a button label'); @@ -31,8 +35,24 @@ test('it renders the button label', function(assert) { {{/uni-form}} `); - assert.ok(find('.uni-button--primary')); - assert.equal(find('.uni-button--primary').textContent.trim(), 'This is a button label'); + assert.dom('form').exists(); + assert.dom('form').hasAttribute('autocomplete', 'on'); +}); + +test('it sets the autocomplete to custom value', function(assert) { + assert.expect(2); + + this.set('label', 'This is a button label'); + this.set('autocomplete', 'off'); + + this.render(hbs` + {{#uni-form label=label autocomplete=autocomplete}} + This is a form content + {{/uni-form}} + `); + + assert.dom('form').exists(); + assert.dom('form').hasAttribute('autocomplete', 'off'); }); test('it calls onSubmit and stops the loading after promise', async function(assert) { @@ -47,7 +67,7 @@ test('it calls onSubmit and stops the loading after promise', async function(ass this.render(hbs`{{uni-form isLoading=isLoading onSubmit=submit}}`); - click('.uni-button'); + await click('.uni-button'); assert.equal(this.get('isLoading'), false, 'it ends the loading'); }); @@ -60,7 +80,7 @@ test('it calls onSubmit and works without it returning a promise', async functio this.render(hbs`{{uni-form isLoading=isLoading onSubmit=submit}}`); - click('.uni-button'); + await click('.uni-button'); assert.equal(this.get('isLoading'), false, 'it ends the loading'); }); diff --git a/tests/test-helper.js b/tests/test-helper.js index f219659e..a142fb49 100644 --- a/tests/test-helper.js +++ b/tests/test-helper.js @@ -1,7 +1,5 @@ import resolver from './helpers/resolver'; -import { - setResolver -} from 'ember-qunit'; +import { setResolver } from '@ember/test-helpers'; import { start } from 'ember-cli-qunit'; setResolver(resolver);