open-vault/ui/app/components/regex-validator.js
Chelsea Shaw d65947134d
UI: Regex validation on transform templates (#11586)
* Add regex validator component with tests, add to form-field, use in transform template

* Update tests with data-test selectors

* Add changelog
2021-05-12 10:12:33 -05:00

50 lines
1.6 KiB
JavaScript

/**
* @module RegexValidator
* RegexValidator components are used to provide input forms for regex values, along with a toggle-able validation input which does not get saved to the model.
*
* @example
* ```js
* const attrExample = {
* name: 'valName',
* options: {
* helpText: 'Shows in tooltip',
* subText: 'Shows underneath label',
* docLink: 'Adds docs link to subText if present',
* defaultValue: 'hello', // Shows if no value on model
* }
* }
* <RegexValidator @onChange={action 'myAction'} @attr={attrExample} @labelString="Label String" @value="initial value" />
* ```
* @param {func} onChange - the action that should trigger when the main input is changed.
* @param {string} value - the value of the main input which will be updated in onChange
* @param {string} labelString - Form label. Anticipated from form-field
* @param {object} attr - attribute from model. Anticipated from form-field. Example of attribute shape above
*/
import Component from '@glimmer/component';
import { tracked } from '@glimmer/tracking';
import { action } from '@ember/object';
export default class RegexValidator extends Component {
@tracked testValue = '';
@tracked showTestValue = false;
get regexError() {
const testString = this.testValue;
if (!testString || !this.args.value) return false;
const regex = new RegExp(this.args.value, 'g');
const matchArray = testString.toString().match(regex);
return testString !== matchArray?.join('');
}
@action
updateTestValue(evt) {
this.testValue = evt.target.value;
}
@action
toggleTestValue() {
this.showTestValue = !this.showTestValue;
}
}