Add initial versions
This commit is contained in:
51
form-element.js
Normal file
51
form-element.js
Normal file
@ -0,0 +1,51 @@
|
||||
/**
|
||||
@license
|
||||
Copyright (c) 2022 trading_peter
|
||||
This program is available under Apache License Version 2.0
|
||||
*/
|
||||
|
||||
export const FormElement = function(superClass) {
|
||||
return class extends superClass {
|
||||
static get properties() {
|
||||
return {
|
||||
// The name of this element.
|
||||
name: { type: String },
|
||||
|
||||
// The value for this element.
|
||||
value: { type: String },
|
||||
|
||||
// Set to true to mark the input as required. Element needs to provide a "validate()" function tha returns a boolean.
|
||||
required: { type: Boolean },
|
||||
|
||||
// The form that the element is registered to. Set by the form that got the registration.
|
||||
parentForm: { type: Object }
|
||||
};
|
||||
}
|
||||
|
||||
connectedCallback() {
|
||||
super.connectedCallback();
|
||||
|
||||
// Prevent that child elements register.
|
||||
this.addEventListener('form-element-register', this._onChildRegister.bind(this));
|
||||
}
|
||||
|
||||
firstUpdated() {
|
||||
super.firstUpdated();
|
||||
this.dispatchEvent(new CustomEvent('form-element-register', { bubbles: true, composed: true }));
|
||||
}
|
||||
|
||||
disconnectedCallback() {
|
||||
super.disconnectedCallback();
|
||||
if (this._parentForm) {
|
||||
this._parentForm.dispatchEvent(new CustomEvent('form-element-unregister', { detail: { target: this }, bubbles: true, composed: true }));
|
||||
}
|
||||
}
|
||||
|
||||
// Prevent that child elements register themselves to the form element.
|
||||
_onChildRegister(e) {
|
||||
if (e.composedPath()[0].tagName !== this.tagName) {
|
||||
e.stopPropagation();
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
Reference in New Issue
Block a user