lion/packages/validate
Joren Broekema 42c840f949 feat: refrain from using dynamic vars inside dynamic import
BREAKING: Dynamic variables inside dynamic content are problematic for tools that use static analysis, therefore we have removed it, but you can still add it back on your extension if it works for you. The change may break your extension if you relied on this logic, you can add it back yourself by overriding the static get localizeNamespaces(). Example can be found here: https://github.com/ing-bank/lion/blob/%40lion/localize%400.8.10/packages/localize/stories/50-system-overview.stories.mdx#rendering-with-localizemixin
2020-03-25 17:02:10 +01:00
..
docs feat: improved storybook demos 2020-01-13 13:58:03 +01:00
src feat: refrain from using dynamic vars inside dynamic import 2020-03-25 17:02:10 +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-05 15:08:00 +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-05 15:08:00 +00:00
README.md chore: fix readme validate 2020-03-04 17:33:09 +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;
    const isStringValidator = new IsString();
    if (!isStringValidator.execute(value) || !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');