@astro-utils/forms
Version:
Server component for Astro (call server functions from client side with validation and state management)
38 lines (37 loc) • 1.09 kB
JavaScript
import HTMLInputRadioPlugin from './bind-form-plugins/input-radio.js';
import HTMLSelectPlugin from './bind-form-plugins/select.js';
const DEFAULT_PLUGINS = [HTMLInputRadioPlugin, HTMLSelectPlugin];
export class BindForm {
constructor(_defaults) {
this._defaults = _defaults;
this.errors = [];
this.on = {};
this.defaults();
this.initializePlugins();
}
initializePlugins() {
this._plugins = DEFAULT_PLUGINS.map(plugin => new plugin(this));
}
getPlugin(name) {
return this._plugins.find(x => x.constructor.name == name);
}
async defaults() {
Object.assign(this, this._defaults);
}
__finishFormValidation() {
for (const plugin of this._plugins) {
plugin.createValidation();
}
}
__getState() {
const state = { ...this };
delete state._defaults;
delete state._plugins;
delete state.errors;
delete state.on;
return state;
}
}
export default function Bind(defaults) {
return new BindForm(defaults);
}