lion/packages/validate
2020-03-04 17:33:09 +01:00
..
docs feat: improved storybook demos 2020-01-13 13:58:03 +01:00
src chore: unify the naming of changedProperties param (#620) 2020-03-04 17:33:09 +01:00
stories feat(validate): use static validatorName instead of instance name (#600) 2020-02-26 15:25:12 +01:00
test chore: unify the naming of changedProperties param (#620) 2020-03-04 17:33:09 +01:00
test-helpers feat(validate): use static validatorName instead of instance name (#600) 2020-02-26 15:25:12 +01:00
test-suites feat(validate): use static validatorName instead of instance name (#600) 2020-02-26 15:25:12 +01:00
translations feat: finalize validation and adopt it everywhere 2019-11-18 15:30:08 +01:00
CHANGELOG.md chore: release new versions 2020-03-01 23:08:13 +00:00
index.js feat: finalize validation and adopt it everywhere 2019-11-18 15:30:08 +01:00
lion-validation-feedback.js feat(validate): new validation api, async validation and more 2019-11-15 16:57:58 +01:00
package.json chore: release new versions 2020-03-01 23:08:13 +00:00
README.md feat(validate): use static validatorName instead of instance name (#600) 2020-02-26 15:25:12 +01:00
test-helpers.js feat: finalize validation and adopt it everywhere 2019-11-18 15:30:08 +01:00

Validate

Features

  • allow for advanced UX scenarios by updating validation state on every value change
  • provide a powerful way of writing validation via pure functions
  • multiple validation types(error, warning, info, success)
  • default validators
  • custom validators

Validation is applied by default to all form controls via the ValidateMixin.

For a detailed description of the validation system and the ValidateMixin, please see ValidationSystem.

How to use

Installation

npm i --save @lion/validate
import '@lion/input/lion-input.js';
import { %ValidatorName% } from '@lion/validate';

Note that we import an lion-input here as an example of a form control implementing ValidateMixin. We could equally well use lion-textarea, lion-select, lion-fieldset etc. to illustrate our example.

Example

All validators are provided as pure functions. They should be applied to the formcontrol (implementing ValidateMixin) as follows:

import '@lion/input/lion-input.js';
import { Required, IsString, MaxLength, DefaultSuccess, Validator } from '@lion/validate';

const isInitialsRegex = /^([A-Z]\.)+$/;
class IsInitialsExample extends Validator {
  static get validatorName() {
    return 'IsExampleInitials';
  }

  execute(value) {
    let hasFeedback = false;
    if (!IsString || !isInitialsRegex.test(value.toLowerCase())) {
      hasFeedback = true;
    }
    return hasFeedback;
  }

  static getMessage({ fieldName }) {
    return `Please enter a valid {fieldName} in the format "A.B.C.".`;
  }
}
<lion-input
  label="Initials"
  name="initials"
  .validators="${[new Required(), new MaxLength(10), new IsInitialsExample(null, { type: 'warning' }), new DefaultSuccess()]}"
></lion-input>

In the example above we use different types of validators. A validator applied to .validators expects an array with a function, a parameters object and optionally an additional configuration object.

MinMaxLength({ min: 5, max: 10 });

The custom IsInitialsExample checks if the value is fitting our regex, but does not prevent the user from submitting other values.

Retrieving validity states is as easy as checking for:

myInitialsInput.hasFeedbackFor.include('error');