Skip to content

Commit 77719d7

Browse files
committed
First implementation
1 parent b353ef1 commit 77719d7

File tree

4 files changed

+32
-8
lines changed

4 files changed

+32
-8
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ dist/
55

66
# dependencies
77
node_modules/
8+
.yalc
89

910
# misc
1011
/.env*
Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import BaseBsForm from 'ember-bootstrap/components/bs-form';
2+
import { assert } from '@ember/debug';
23

34
export default class BsForm extends BaseBsForm {
45
'__ember-bootstrap_subclass' = true;
@@ -7,7 +8,11 @@ export default class BsForm extends BaseBsForm {
78
return true;
89
}
910

10-
async validate(model) {
11-
throw new Error();
11+
async validate(model, form) {
12+
assert('Expected to receive the form element when validating.', form instanceof HTMLFormElement);
13+
14+
if (!form.checkValidity()) {
15+
throw new Error();
16+
}
1217
}
1318
}
Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,31 @@
11
import BaseBsFormElement from 'ember-bootstrap/components/bs-form/element';
2+
import { action } from '@ember/object';
3+
import { tracked } from '@glimmer/tracking';
24

35
export default class BsFormElement extends BaseBsFormElement {
46
'__ember-bootstrap_subclass' = true;
57

6-
get errors() {
7-
// let { model, property } = this.args;
8-
9-
return ['dummy error'];
8+
get controlElement() {
9+
return document.getElementById(this.formElementId);
1010
}
1111

12+
@tracked
13+
errors = [];
14+
1215
get hasValidator() {
1316
return true;
1417
}
18+
19+
@action
20+
showValidationOnHandler(...args) {
21+
this._updateErrors();
22+
super.showValidationOnHandler(...args);
23+
}
24+
25+
_updateErrors() {
26+
let { controlElement } = this;
27+
this.errors = controlElement.validity.valid
28+
? []
29+
: [controlElement.validationMessage];
30+
}
1531
}

packages/test-app/app/templates/application.hbs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
<div class="container mt-4">
22

33
<BsForm @model={{this.model}} @onSubmit={{this.submit}} @onInvalid={{this.invalid}} as |form|>
4-
<form.element @label="Name" @property="name" />
5-
<form.element @label="Email" @property="email" />
4+
<form.element @label="Name" @property="name" as |el|>
5+
<el.control required/>
6+
</form.element>
7+
<form.element @controlType="email" @label="Email" @property="email" />
68
<form.submitButton>Submit</form.submitButton>
79
</BsForm>
810

0 commit comments

Comments
 (0)