UNPKG

@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
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); }