0.0.2 • Published 4 years ago
valiko v0.0.2
valiko
valiko is a TypeScript plugin that adds validation on top of knockoutjs.
Features
- Custom validation rules
- Field validation
- Form validation
Instalation:
- Create your web app.
- Add knockout library to it
- Add valiko
$ npm install valiko --save-dev
Field Usage:
Create a validation rule by extending RuleBase
import { RuleBase, RuleResult } from 'valiko'; export class StringRequired extends RuleBase<string> { constructor() { super("Required"); } public check(value?: string): Promise<RuleResult> { const self = this; if (value === null || value === undefined || value.length === 0) { return self.toNotValid(); } return self.toValid(); } }
Create a form by extending
ObsFrm
import { ObsExtension, ObsFrm } from 'valiko'; interface Person { name: string; } export class Form extends ObsFrm { public name: ObsExtension<string>; constructor(ko: KnockoutStatic) { super(ko); this.name = this.add<string>().with(new StringRequired()); } public load(model: Person): void { const self = this; this.name.value(model.name); } public retrieve(): Person { const self = this; return { name: self.name.value() } } public async onSave(): Promise<void> { const self = this; let isValid = await self.validate(); if (isValid === false) return; // ... save logic } }
Bind your Form model
<form data-bind="submit: $data.onSave.bind($data)" novalidate> <textinput> <div class="form-group"> <label for="txtName">Name</label> <input type="text" data-bind="textInput: name.value, css: { 'is-invalid': name.hasError(), 'is-valid': !name.hasError() && name.wasValidated() }" class="form-control" id="txtName" aria-describedby="name" placeholder="Name"> <div class="invalid-feedback"> <!-- ko foreach: name.errors --> <span data-bind="text: $data"></span> <!-- /ko --> </div> </div> </textinput> <div class="float-right"> <button type="submit" class="btn btn-outline-success">Save</button> </div> </form>