ember-validated-form 4.0.0 → 5.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -1
  2. package/.github/dependabot.yml +11 -0
  3. package/.github/workflows/deploy.yml +2 -2
  4. package/.github/workflows/test.yml +3 -3
  5. package/.husky/commit-msg +6 -0
  6. package/.husky/pre-commit +8 -0
  7. package/CHANGELOG.md +47 -0
  8. package/README.md +3 -3
  9. package/addon/-private/themed-component.js +31 -35
  10. package/addon/components/validated-button/-themes/bootstrap/button.js +7 -9
  11. package/addon/components/validated-button/-themes/uikit/button.js +7 -9
  12. package/addon/components/validated-button/button.hbs +9 -0
  13. package/addon/components/validated-button/button.js +3 -8
  14. package/addon/components/validated-button.hbs +17 -0
  15. package/addon/components/validated-button.js +53 -9
  16. package/addon/components/validated-form.hbs +28 -0
  17. package/addon/components/validated-form.js +36 -45
  18. package/addon/components/validated-input/-themes/bootstrap/error.js +3 -3
  19. package/addon/components/validated-input/-themes/bootstrap/hint.js +3 -3
  20. package/addon/components/validated-input/-themes/bootstrap/label.js +1 -1
  21. package/addon/components/validated-input/-themes/bootstrap/render.js +3 -3
  22. package/addon/components/validated-input/-themes/uikit/error.hbs +4 -0
  23. package/addon/components/validated-input/-themes/uikit/error.js +1 -4
  24. package/addon/components/validated-input/-themes/uikit/hint.js +3 -3
  25. package/addon/components/validated-input/-themes/uikit/label.js +3 -3
  26. package/addon/components/validated-input/-themes/uikit/render.hbs +110 -0
  27. package/addon/components/validated-input/-themes/uikit/render.js +3 -5
  28. package/addon/components/validated-input/error.hbs +1 -0
  29. package/addon/components/validated-input/error.js +6 -7
  30. package/addon/components/validated-input/hint.hbs +1 -0
  31. package/addon/components/validated-input/hint.js +3 -7
  32. package/addon/components/validated-input/label.hbs +3 -0
  33. package/addon/components/validated-input/label.js +3 -8
  34. package/addon/components/validated-input/render.hbs +108 -0
  35. package/addon/components/validated-input/render.js +10 -10
  36. package/addon/components/validated-input/types/-themes/bootstrap/checkbox-group.hbs +19 -0
  37. package/addon/components/validated-input/types/-themes/bootstrap/checkbox-group.js +3 -0
  38. package/addon/components/validated-input/types/-themes/bootstrap/checkbox.hbs +14 -0
  39. package/addon/components/validated-input/types/-themes/bootstrap/checkbox.js +1 -6
  40. package/addon/components/validated-input/types/-themes/bootstrap/input.js +11 -4
  41. package/addon/components/validated-input/types/-themes/bootstrap/radio-group.hbs +20 -0
  42. package/addon/components/validated-input/types/-themes/bootstrap/radio-group.js +1 -4
  43. package/addon/components/validated-input/types/-themes/bootstrap/select.js +11 -4
  44. package/addon/components/validated-input/types/-themes/bootstrap/textarea.js +11 -4
  45. package/addon/components/validated-input/types/-themes/uikit/checkbox-group.hbs +19 -0
  46. package/addon/components/validated-input/types/-themes/uikit/checkbox-group.js +3 -0
  47. package/addon/components/validated-input/types/-themes/uikit/checkbox.hbs +15 -0
  48. package/addon/components/validated-input/types/-themes/uikit/checkbox.js +1 -4
  49. package/addon/components/validated-input/types/-themes/uikit/input.js +11 -4
  50. package/addon/components/validated-input/types/-themes/uikit/radio-group.hbs +20 -0
  51. package/addon/components/validated-input/types/-themes/uikit/radio-group.js +1 -4
  52. package/addon/components/validated-input/types/-themes/uikit/select.js +11 -4
  53. package/addon/components/validated-input/types/-themes/uikit/textarea.js +11 -4
  54. package/addon/components/validated-input/types/checkbox-group.hbs +14 -0
  55. package/addon/components/validated-input/types/checkbox-group.js +21 -0
  56. package/addon/components/validated-input/types/checkbox.hbs +9 -0
  57. package/addon/components/validated-input/types/checkbox.js +10 -6
  58. package/addon/components/validated-input/types/input.hbs +6 -0
  59. package/addon/components/validated-input/types/input.js +9 -17
  60. package/addon/components/validated-input/types/radio-group.hbs +14 -0
  61. package/addon/components/validated-input/types/radio-group.js +10 -6
  62. package/addon/components/validated-input/types/select.hbs +49 -0
  63. package/addon/components/validated-input/types/select.js +83 -6
  64. package/addon/components/validated-input/types/textarea.hbs +7 -0
  65. package/addon/components/validated-input/types/textarea.js +9 -17
  66. package/addon/{templates/components → components}/validated-input.hbs +3 -5
  67. package/addon/components/validated-input.js +6 -13
  68. package/app/components/validated-form.js +1 -7
  69. package/app/components/validated-input/types/-themes/bootstrap/checkbox-group.js +1 -0
  70. package/app/components/validated-input/types/-themes/uikit/checkbox-group.js +1 -0
  71. package/app/components/validated-input/types/checkbox-group.js +1 -0
  72. package/config/environment.js +1 -1
  73. package/package.json +57 -41
  74. package/.dependabot/config.yml +0 -14
  75. package/.husky/precommit +0 -1
  76. package/.prettierignore +0 -1
  77. package/addon/templates/components/validated-button/button.hbs +0 -1
  78. package/addon/templates/components/validated-button.hbs +0 -7
  79. package/addon/templates/components/validated-form.hbs +0 -15
  80. package/addon/templates/components/validated-input/-themes/uikit/render.hbs +0 -94
  81. package/addon/templates/components/validated-input/error.hbs +0 -1
  82. package/addon/templates/components/validated-input/hint.hbs +0 -1
  83. package/addon/templates/components/validated-input/label.hbs +0 -1
  84. package/addon/templates/components/validated-input/render.hbs +0 -93
  85. package/addon/templates/components/validated-input/types/-themes/bootstrap/checkbox.hbs +0 -10
  86. package/addon/templates/components/validated-input/types/-themes/bootstrap/radio-group.hbs +0 -15
  87. package/addon/templates/components/validated-input/types/-themes/bootstrap/select.hbs +0 -16
  88. package/addon/templates/components/validated-input/types/-themes/uikit/checkbox.hbs +0 -11
  89. package/addon/templates/components/validated-input/types/-themes/uikit/radio-group.hbs +0 -17
  90. package/addon/templates/components/validated-input/types/-themes/uikit/select.hbs +0 -17
  91. package/addon/templates/components/validated-input/types/checkbox.hbs +0 -9
  92. package/addon/templates/components/validated-input/types/radio-group.hbs +0 -14
  93. package/addon/templates/components/validated-input/types/select.hbs +0 -16
@@ -1,7 +1,6 @@
1
1
  ---
2
2
  name: Bug report
3
3
  about: Template for bug reports
4
-
5
4
  ---
6
5
 
7
6
  --
@@ -0,0 +1,11 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: npm
4
+ directory: "/"
5
+ schedule:
6
+ interval: "weekly"
7
+ day: "friday"
8
+ time: "12:00"
9
+ timezone: "Europe/Zurich"
10
+ open-pull-requests-limit: 10
11
+ versioning-strategy: increase
@@ -3,7 +3,7 @@ name: Deploy
3
3
  on:
4
4
  push:
5
5
  branches:
6
- - master
6
+ - main
7
7
  release:
8
8
  types: [published]
9
9
 
@@ -25,4 +25,4 @@ jobs:
25
25
  env:
26
26
  CI: true
27
27
  DEPLOY_KEY: ${{ secrets.DEPLOY_KEY }}
28
- ADDON_DOCS_VERSION_PATH: ${GITHUB_REF#refs/heads/}
28
+ ADDON_DOCS_UPDATE_LATEST: true
@@ -3,10 +3,10 @@ name: Test
3
3
  on:
4
4
  push:
5
5
  branches:
6
- - master
6
+ - main
7
7
  pull_request:
8
8
  branches:
9
- - master
9
+ - main
10
10
 
11
11
  jobs:
12
12
  lint:
@@ -67,8 +67,8 @@ jobs:
67
67
  strategy:
68
68
  matrix:
69
69
  scenario:
70
- - ember-lts-3.20
71
70
  - ember-lts-3.24
71
+ - ember-lts-3.28
72
72
  - ember-release
73
73
 
74
74
  steps:
package/.husky/commit-msg CHANGED
@@ -1 +1,7 @@
1
+ #!/bin/sh
2
+ . "$(dirname "$0")/_/husky.sh"
3
+
4
+ # skip in CI
5
+ [ -n "$CI" ] && exit 0
6
+
1
7
  yarn commitlint --edit $1
@@ -0,0 +1,8 @@
1
+ #!/bin/sh
2
+ . "$(dirname "$0")/_/husky.sh"
3
+
4
+ # skip in CI
5
+ [ -n "$CI" ] && exit 0
6
+
7
+ # lint only staged files
8
+ yarn lint-staged
package/CHANGELOG.md CHANGED
@@ -1,3 +1,50 @@
1
+ # [5.0.0](https://github.com/adfinis-sygroup/ember-validated-form/compare/v4.1.0...v5.0.0) (2021-10-08)
2
+
3
+
4
+ ### chore
5
+
6
+ * **deps:** update ember and other dependencies ([41e099c](https://github.com/adfinis-sygroup/ember-validated-form/commit/41e099c4da82135c562493e5b2a4f9420dca73c6))
7
+ * **ember:** remove support for ember 3.20 ([0cfebfc](https://github.com/adfinis-sygroup/ember-validated-form/commit/0cfebfcc5792a1df52093a972878af1617ec8100))
8
+
9
+
10
+ ### Features
11
+
12
+ * refactor all components to glimmer and use native classes ([cee7373](https://github.com/adfinis-sygroup/ember-validated-form/commit/cee7373a3c0783a02fe00b5e510c41ba604403c2))
13
+
14
+
15
+ ### BREAKING CHANGES
16
+
17
+ * **ember:** Remove support for ember LTS 3.20 since that version
18
+ has a bug with autotracking.
19
+ * **deps:** Require `ember-auto-import` v2+
20
+ * While the public API won't change, there is a huge
21
+ chance that this will break implementations if someone's extending the
22
+ components of this addon. Components that do need to be refactored to
23
+ glimmer.
24
+
25
+ # [4.1.0](https://github.com/adfinis-sygroup/ember-validated-form/compare/v4.0.1...v4.1.0) (2021-09-30)
26
+
27
+
28
+ ### Bug Fixes
29
+
30
+ * **deps:** [security] bump handlebars from 4.7.6 to 4.7.7 ([#588](https://github.com/adfinis-sygroup/ember-validated-form/issues/588)) ([d167207](https://github.com/adfinis-sygroup/ember-validated-form/commit/d167207ee059bd9b968a08fb61f18f43dadab0ab))
31
+ * **deps:** [security] bump striptags from 3.1.1 to 3.2.0 ([#637](https://github.com/adfinis-sygroup/ember-validated-form/issues/637)) ([3632f52](https://github.com/adfinis-sygroup/ember-validated-form/commit/3632f52e7fa1fc6f0e17dd3365a74a80ceb92833))
32
+ * **deps:** [security] bump trim-newlines from 3.0.0 to 3.0.1 ([#634](https://github.com/adfinis-sygroup/ember-validated-form/issues/634)) ([10e3974](https://github.com/adfinis-sygroup/ember-validated-form/commit/10e397452b30a3af11a299c5bcdafd703d9b0c18))
33
+ * **deps:** [security] bump ws from 6.2.1 to 6.2.2 ([#624](https://github.com/adfinis-sygroup/ember-validated-form/issues/624)) ([910ec64](https://github.com/adfinis-sygroup/ember-validated-form/commit/910ec64b2f84562fd77a8be14094fd2f326d60b6))
34
+ * call on-update hook correctly ([#641](https://github.com/adfinis-sygroup/ember-validated-form/issues/641)) ([b8688b6](https://github.com/adfinis-sygroup/ember-validated-form/commit/b8688b6d9dedbd9096d34c3b236bf59efb045556))
35
+
36
+
37
+ ### Features
38
+
39
+ * checkbox groups ([#640](https://github.com/adfinis-sygroup/ember-validated-form/issues/640)) ([9099ce8](https://github.com/adfinis-sygroup/ember-validated-form/commit/9099ce81bbedc53c961653dca59c555d96ee9128))
40
+
41
+ ## [4.0.1](https://github.com/adfinis-sygroup/ember-validated-form/compare/v4.0.0...v4.0.1) (2021-05-21)
42
+
43
+
44
+ ### Bug Fixes
45
+
46
+ * **validated-input:** use changeset.set if available to preserve state tracking on nested objects ([#609](https://github.com/adfinis-sygroup/ember-validated-form/issues/609)) ([d3b92ee](https://github.com/adfinis-sygroup/ember-validated-form/commit/d3b92ee5dfb7e0a6f4fbdb1899d9be34b67d1722))
47
+
1
48
  # [4.0.0](https://github.com/adfinis-sygroup/ember-validated-form/compare/v3.0.3...v4.0.0) (2021-05-19)
2
49
 
3
50
 
package/README.md CHANGED
@@ -2,12 +2,12 @@
2
2
 
3
3
  [![npm version](https://badge.fury.io/js/ember-validated-form.svg)](https://badge.fury.io/js/ember-validated-form)
4
4
  [![Ember Observer Score](https://emberobserver.com/badges/ember-validated-form.svg)](https://emberobserver.com/addons/ember-validated-form)
5
- [![Build Status](https://travis-ci.org/adfinis-sygroup/ember-validated-form.svg?branch=master)](https://travis-ci.org/adfinis-sygroup/ember-validated-form)
6
- [![Code style](https://img.shields.io/badge/code_style-prettier-red.svg)](https://github.com/prettier/prettier)
5
+ [![Test](https://github.com/adfinis-sygroup/ember-validated-form/workflows/Test/badge.svg)](https://github.com/adfinis-sygroup/ember-validated-form/actions?query=workflow%3ATest)
6
+ [![Code Style: Prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg)](https://github.com/prettier/prettier)
7
7
 
8
8
  Easily create forms with client side validations.
9
9
 
10
- ![gif](https://raw.githubusercontent.com/adfinis-sygroup/ember-validated-form/master/demo.gif)
10
+ ![gif](https://raw.githubusercontent.com/adfinis-sygroup/ember-validated-form/main/demo.gif)
11
11
 
12
12
  Want to try it yourself? [View the docs here.](https://adfinis-sygroup.github.io/ember-validated-form/)
13
13
 
@@ -1,42 +1,38 @@
1
1
  import { getOwner } from "@ember/application";
2
- import { computed, get, set } from "@ember/object";
3
2
 
4
- export default (component) => {
5
- return computed({
6
- get() {
7
- const parts = component.split("/");
8
- const componentNameParts = parts.slice(1, parts.length).join("/");
3
+ export default function (component) {
4
+ return function (_, propertyName) {
5
+ return {
6
+ get() {
7
+ const parts = component.split("/");
8
+ const componentName = parts.slice(1, parts.length).join("/");
9
9
 
10
- if (get(this, `overrideComponents.${componentNameParts}`)) {
11
- return get(this, `overrideComponents.${componentNameParts}`);
12
- }
10
+ if (this.args[propertyName]) {
11
+ return this.args[propertyName];
12
+ }
13
13
 
14
- const config =
15
- getOwner(this).resolveRegistration("config:environment")[
16
- "ember-validated-form"
17
- ] !== undefined
18
- ? getOwner(this).resolveRegistration("config:environment")[
19
- "ember-validated-form"
20
- ]
21
- : {};
14
+ const config =
15
+ getOwner(this).resolveRegistration("config:environment")[
16
+ "ember-validated-form"
17
+ ] !== undefined
18
+ ? getOwner(this).resolveRegistration("config:environment")[
19
+ "ember-validated-form"
20
+ ]
21
+ : {};
22
22
 
23
- const theme = config.theme;
24
- const defaultComponent = get(config, `defaults.${componentNameParts}`);
23
+ const theme = config.theme;
24
+ const defaultComponent = config.defaults?.[componentName];
25
25
 
26
- const name = parts.pop();
27
- const basePath = parts.join("/");
26
+ const name = parts.pop();
27
+ const basePath = parts.join("/");
28
28
 
29
- return (
30
- defaultComponent ||
31
- (theme ? `${basePath}/-themes/${theme}/${name}` : `${basePath}/${name}`)
32
- );
33
- },
34
- set(key, value) {
35
- if (!get(this, `overrideComponents`)) {
36
- set(this, `overrideComponents`, {});
37
- }
38
- set(this, `overrideComponents.${key}`, value);
39
- return value;
40
- },
41
- });
42
- };
29
+ return (
30
+ defaultComponent ||
31
+ (theme
32
+ ? `${basePath}/-themes/${theme}/${name}`
33
+ : `${basePath}/${name}`)
34
+ );
35
+ },
36
+ };
37
+ };
38
+ }
@@ -1,12 +1,10 @@
1
- import { computed } from "@ember/object";
2
-
3
1
  import Component from "../../button";
4
2
 
5
- export default Component.extend({
6
- classNames: ["btn"],
7
- classNameBindings: ["style"],
3
+ export default class BootstrapButton extends Component {
4
+ get class() {
5
+ const style = this.args.type === "submit" ? "btn-primary" : "btn-default";
6
+ const loading = this.args.loading ? "loading" : "";
8
7
 
9
- style: computed("type", function () {
10
- return this.type === "submit" ? "btn-primary" : "btn-default";
11
- }),
12
- });
8
+ return `btn ${style} ${loading}`;
9
+ }
10
+ }
@@ -1,12 +1,10 @@
1
- import { computed } from "@ember/object";
2
-
3
1
  import Component from "../../button";
4
2
 
5
- export default Component.extend({
6
- classNames: ["uk-button"],
7
- classNameBindings: ["style"],
3
+ export default class UikitButton extends Component {
4
+ get class() {
5
+ const style =
6
+ this.args.type === "submit" ? "uk-button-primary" : "uk-button-default";
8
7
 
9
- style: computed("type", function () {
10
- return this.type === "submit" ? "uk-button-primary" : "uk-button-default";
11
- }),
12
- });
8
+ return `uk-button ${style}`;
9
+ }
10
+ }
@@ -0,0 +1,9 @@
1
+ <button
2
+ class={{this.class}}
3
+ type={{@type}}
4
+ disabled={{@disabled}}
5
+ {{on "click" @onClick}}
6
+ ...attributes
7
+ >
8
+ {{#if (has-block)}}{{~yield~}}{{else}}{{~@label~}}{{/if}}
9
+ </button>
@@ -1,9 +1,4 @@
1
- import Component from "@ember/component";
1
+ import Component from "@glimmer/component";
2
2
 
3
- import layout from "../../templates/components/validated-button/button";
4
-
5
- export default Component.extend({
6
- layout,
7
- tagName: "button",
8
- attributeBindings: ["disabled", "type", "action:onclick"],
9
- });
3
+ // eslint-disable-next-line ember/no-empty-glimmer-component-classes
4
+ export default class ButtonComponent extends Component {}
@@ -0,0 +1,17 @@
1
+ {{#let
2
+ (component
3
+ this.buttonComponent
4
+ onClick=this.click
5
+ loading=this.loading
6
+ disabled=(or @disabled this.loading)
7
+ label=@label
8
+ type=@type
9
+ )
10
+ as |Button|
11
+ }}
12
+ {{#if (has-block)}}
13
+ <Button ...attributes>{{yield}}</Button>
14
+ {{else}}
15
+ <Button ...attributes />
16
+ {{/if}}
17
+ {{/let}}
@@ -1,11 +1,55 @@
1
- import Component from "@ember/component";
1
+ import { action } from "@ember/object";
2
+ import Component from "@glimmer/component";
3
+ import { tracked } from "@glimmer/tracking";
4
+ import { resolve } from "rsvp";
2
5
 
3
6
  import themedComponent from "../-private/themed-component";
4
- import layout from "../templates/components/validated-button";
5
-
6
- export default Component.extend({
7
- layout,
8
- type: "button",
9
- tagName: "",
10
- buttonComponent: themedComponent("validated-button/button"),
11
- });
7
+
8
+ const ON_CLICK = "on-click";
9
+ const ON_INVALID_CLICK = "on-invalid-click";
10
+ export default class ValidatedButtonComponent extends Component {
11
+ @themedComponent("validated-button/button") buttonComponent;
12
+
13
+ @tracked _loading;
14
+
15
+ get loading() {
16
+ return this.args.loading || this._loading;
17
+ }
18
+
19
+ @action
20
+ async click(event) {
21
+ // handle only clicks for custom buttons
22
+ // everything else is handled by the validated form itself
23
+ if (this.args.type !== "button") {
24
+ return this.args.action(event);
25
+ }
26
+
27
+ event.preventDefault();
28
+ const model = this.args.model;
29
+
30
+ if (!model || !model.validate) {
31
+ this.runCallback(ON_CLICK);
32
+ return;
33
+ }
34
+
35
+ await model.validate();
36
+
37
+ if (model.get("isInvalid")) {
38
+ this.runCallback(ON_INVALID_CLICK);
39
+ } else {
40
+ this.runCallback(ON_CLICK);
41
+ }
42
+ }
43
+
44
+ runCallback(callbackProp) {
45
+ const callback = this.args[callbackProp];
46
+ if (typeof callback !== "function") {
47
+ return;
48
+ }
49
+
50
+ this._loading = true;
51
+ resolve(callback(this.args.model)).finally(() => {
52
+ this._loading = false;
53
+ });
54
+ }
55
+ }
@@ -0,0 +1,28 @@
1
+ <form autocomplete={{@autocomplete}} class={{if this.submitted "submitted"}}>
2
+ {{yield
3
+ (hash
4
+ model=@model
5
+ loading=this.loading
6
+ input=(component
7
+ "validated-input"
8
+ model=@model
9
+ submitted=this.submitted
10
+ validateBeforeSubmit=@validateBeforeSubmit
11
+ )
12
+ submit=(component
13
+ "validated-button"
14
+ type="submit"
15
+ loading=this.loading
16
+ label="Save"
17
+ action=this.submit
18
+ )
19
+ button=(component
20
+ "validated-button"
21
+ type="button"
22
+ loading=this.loading
23
+ label="Action"
24
+ model=@model
25
+ )
26
+ )
27
+ }}
28
+ </form>
@@ -1,70 +1,61 @@
1
- import Component from "@ember/component";
1
+ import { action } from "@ember/object";
2
+ import { scheduleOnce } from "@ember/runloop";
3
+ import Component from "@glimmer/component";
4
+ import { tracked } from "@glimmer/tracking";
2
5
  import { resolve } from "rsvp";
3
6
 
4
- import layout from "../templates/components/validated-form";
5
-
6
7
  const PROP_ON_SUBMIT = "on-submit";
7
8
  const PROP_ON_INVALID_SUBMIT = "on-invalid-submit";
8
9
 
9
- export default Component.extend({
10
- tagName: "form",
11
-
12
- classNameBindings: ["submitted"],
13
- attributeBindings: ["autocomplete"],
14
-
15
- loading: false,
10
+ export default class ValidatedFormComponent extends Component {
11
+ @tracked loading = false;
12
+ @tracked submitted = false;
13
+ @tracked validateBeforeSubmit = true;
16
14
 
17
- submitted: false,
15
+ constructor(...args) {
16
+ super(...args);
18
17
 
19
- layout,
18
+ if (this.args.model && this.args.model.validate) {
19
+ scheduleOnce("actions", this, "validateModel", this.args.model);
20
+ }
21
+ }
20
22
 
21
- validateBeforeSubmit: true,
23
+ validateModel(model) {
24
+ model.validate();
25
+ }
22
26
 
23
- init(...args) {
24
- this._super(...args);
25
- if (this.model && this.model.validate) {
26
- this.model.validate();
27
- }
28
- },
27
+ @action
28
+ async submit(event) {
29
+ event.preventDefault();
29
30
 
30
- submit() {
31
- this.set("submitted", true);
32
- const model = this.model;
31
+ this.submitted = true;
32
+ const model = this.args.model;
33
33
 
34
34
  if (!model || !model.validate) {
35
35
  this.runCallback(PROP_ON_SUBMIT);
36
36
  return false;
37
37
  }
38
38
 
39
- model.validate().then(() => {
40
- if (!this.element) {
41
- // We were removed from the DOM while validating
42
- return;
43
- }
39
+ await model.validate();
40
+
41
+ if (model.get("isInvalid")) {
42
+ this.runCallback(PROP_ON_INVALID_SUBMIT);
43
+ } else {
44
+ this.runCallback(PROP_ON_SUBMIT);
45
+ }
44
46
 
45
- if (model.get("isInvalid")) {
46
- this.runCallback(PROP_ON_INVALID_SUBMIT);
47
- } else {
48
- this.runCallback(PROP_ON_SUBMIT);
49
- }
50
- });
51
47
  return false;
52
- },
48
+ }
53
49
 
54
50
  runCallback(callbackProp) {
55
- const callback = this.get(callbackProp);
51
+ const callback = this.args[callbackProp];
56
52
  if (typeof callback !== "function") {
57
53
  return;
58
54
  }
59
- const model = this.model;
60
55
 
61
- this.set("loading", true);
62
- resolve(callback(model)).finally(() => {
63
- if (!this.element) {
64
- // We were removed from the DOM while running on-submit()
65
- return;
66
- }
67
- this.set("loading", false);
56
+ this.loading = true;
57
+ resolve(callback(this.args.model)).finally(() => {
58
+ this.loading = false;
68
59
  });
69
- },
70
- });
60
+ }
61
+ }
@@ -1,5 +1,5 @@
1
1
  import Component from "../../error";
2
2
 
3
- export default Component.extend({
4
- classNames: ["invalid-feedback"],
5
- });
3
+ export default class BootstrapErrorComponent extends Component {
4
+ class = "invalid-feedback";
5
+ }
@@ -1,5 +1,5 @@
1
1
  import Component from "../../hint";
2
2
 
3
- export default Component.extend({
4
- classNames: ["form-text", "text-muted"],
5
- });
3
+ export default class BootstrapHintComponent extends Component {
4
+ class = "form-text text-muted";
5
+ }
@@ -1,3 +1,3 @@
1
1
  import Component from "../../label";
2
2
 
3
- export default Component.extend({});
3
+ export default class BootstrapLabelComponent extends Component {}
@@ -1,5 +1,5 @@
1
1
  import Component from "../../render";
2
2
 
3
- export default Component.extend({
4
- classNames: ["form-group"],
5
- });
3
+ export default class BootstrapRenderComponent extends Component {
4
+ class = "form-group";
5
+ }
@@ -0,0 +1,4 @@
1
+ <small
2
+ class="uk-text-danger"
3
+ ...attributes
4
+ >{{yield}}{{this.errorString}}</small>
@@ -1,6 +1,3 @@
1
1
  import Component from "../../error";
2
2
 
3
- export default Component.extend({
4
- tagName: "small",
5
- classNames: ["uk-text-danger"],
6
- });
3
+ export default class UikitErrorComponent extends Component {}
@@ -1,5 +1,5 @@
1
1
  import Component from "../../hint";
2
2
 
3
- export default Component.extend({
4
- classNames: ["uk-text-muted"],
5
- });
3
+ export default class UikitHintComponent extends Component {
4
+ class = "uk-text-muted";
5
+ }
@@ -1,5 +1,5 @@
1
1
  import Component from "../../label";
2
2
 
3
- export default Component.extend({
4
- classNames: ["uk-form-label"],
5
- });
3
+ export default class UikitLabelComponent extends Component {
4
+ class = "uk-form-label";
5
+ }