lion/packages/validate
CircleCI d67225984c chore: release new versions
- @lion/ajax@0.2.4
 - @lion/button@0.5.4
 - @lion/calendar@0.6.9
 - @lion/checkbox-group@0.5.8
 - @lion/checkbox@0.3.8
 - @lion/choice-input@0.5.8
 - @lion/core@0.4.3
 - @lion/dialog@0.4.4
 - @lion/field@0.8.8
 - @lion/fieldset@0.6.8
 - @lion/form-system@0.3.15
 - @lion/form@0.4.8
 - @lion/helpers@0.3.1
 - @lion/icon@0.3.3
 - @lion/input-amount@0.5.8
 - @lion/input-date@0.5.8
 - @lion/input-datepicker@0.8.11
 - @lion/input-email@0.5.8
 - @lion/input-iban@0.5.9
 - @lion/input-range@0.2.8
 - @lion/input@0.5.8
 - @lion/localize@0.8.6
 - @lion/option@0.4.8
 - @lion/overlays@0.12.0
 - @lion/radio-group@0.5.8
 - @lion/radio@0.3.8
 - @lion/select-rich@0.9.10
 - @lion/select@0.5.8
 - @lion/steps@0.3.3
 - @lion/switch@0.5.10
 - @lion/tabs@0.2.3
 - @lion/textarea@0.5.9
 - @lion/tooltip@0.8.0
 - @lion/validate@0.6.6
2020-02-06 10:19:18 +00:00
..
docs feat: improved storybook demos 2020-01-13 13:58:03 +01:00
src fix(validator): throw error if getMessage not of type Function 2020-02-06 11:16:24 +01:00
stories fix: update links in stories 2020-01-23 18:24:38 +01:00
test fix(validator): throw error if getMessage not of type Function 2020-02-06 11:16:24 +01:00
test-helpers feat: finalize validation and adopt it everywhere 2019-11-18 15:30:08 +01:00
test-suites fix(validate): allow getMessage to return message based on config 2019-12-13 15:19:41 +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-02-06 10:19:18 +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-02-06 10:19:18 +00:00
README.md feat: finalize validation and adopt it everywhere 2019-11-18 15:30:08 +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 {
  constructor(...args) {
    super(...args);
    this.name = 'IsExampleInitials';
  }

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

  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');