aurelia-form
Version:
Makes working with forms just a tad more pleasant.
91 lines (66 loc) • 2.01 kB
JavaScript
import {customElement, bindable, computedFrom} from 'aurelia-framework';
import {resolvedView} from 'aurelia-view-manager';
import {Metadata} from '../aurelia-form';
('spoonx/form', 'entity-form')
('entity-form')
export class EntityForm {
form;
entity;
behavior;
classes;
elementClasses;
labelClasses;
skip = [];
validated = true;
buttonOptions;
buttonLabel;
buttonEnabled;
('entity')
get elements() {
let entityMeta = {};
if (typeof this.entity.getMeta === 'function') {
entityMeta = this.entity.getMeta().metadata;
}
let types = entityMeta.types || {};
let associations = entityMeta.associations || {};
let fields = Metadata.forTarget(this.entity).fetch('fields', {});
return Object.keys(this.entity)
.map(name => {
let field = fields[name] || {};
let association = associations[name];
let options = field.options || {};
let element = types[name] || 'input';
if (association) {
element = 'association';
options.resource = association.entity;
options.multiple = association.type === 'collection';
}
if (field.element) {
element = field.element;
}
return {
element: element,
field : name,
meta : field,
options: options
};
})
.sort((left, right) => {
let leftPosition = left.meta.position || 0;
let rightPosition = right.meta.position || 0;
if (leftPosition < rightPosition) {
return -1;
}
if (leftPosition > rightPosition) {
return 1;
}
return 0;
});
}
isVisible(fieldName) {
return this.skip.indexOf(fieldName) === -1;
}
submit() {
this.form.submit();
}
}