@netgrif/components-core
Version:
Netgrif Application engine frontend core Angular library
99 lines • 14.7 kB
JavaScript
import { Validators } from '@angular/forms';
import { ComponentPrefixes } from '../../models/component';
import { DataField } from '../../models/abstract-data-field';
export var TextFieldView;
(function (TextFieldView) {
TextFieldView["DEFAULT"] = "default";
TextFieldView["TEXTAREA"] = "textarea";
TextFieldView["RICHTEXTAREA"] = "richtextarea";
TextFieldView["HTMLTEXTAREA"] = "htmltextarea";
})(TextFieldView || (TextFieldView = {}));
/**
* A collection of Text field component names supported by the application engine.
*/
export var TextFieldComponent;
(function (TextFieldComponent) {
TextFieldComponent["PASSWORD"] = "password";
TextFieldComponent["TEXT_AREA"] = "textarea";
TextFieldComponent["RICH_TEXT_AREA"] = "richtextarea";
TextFieldComponent["HTML_TEXT_AREA"] = "htmltextarea";
TextFieldComponent["DASHBOARD_LINE_CHART"] = "dashboard_line_chart";
TextFieldComponent["DASHBOARD_PIE_CHART"] = "dashboard_pie_chart";
TextFieldComponent["DASHBOARD_BAR_CHART"] = "dashboard_bar_chart";
TextFieldComponent["DASHBOARD_IFRAME"] = "dashboard_iframe";
TextFieldComponent["DASHBOARD_PORTAL"] = "dashboard_portal";
})(TextFieldComponent || (TextFieldComponent = {}));
export var TextAreaHeight;
(function (TextAreaHeight) {
TextAreaHeight[TextAreaHeight["OUTLINE"] = 20] = "OUTLINE";
TextAreaHeight[TextAreaHeight["FILL_STANDARD"] = 22] = "FILL_STANDARD";
})(TextAreaHeight || (TextAreaHeight = {}));
export var TextFieldValidation;
(function (TextFieldValidation) {
TextFieldValidation["REQUIRED"] = "required";
TextFieldValidation["MIN_LENGTH"] = "minLength";
TextFieldValidation["MAX_LENGTH"] = "maxLength";
TextFieldValidation["VALID_MIN_LENGTH"] = "minlength";
TextFieldValidation["VALID_MAX_LENGTH"] = "maxlength";
TextFieldValidation["PATTERN"] = "pattern";
TextFieldValidation["REGEX"] = "regex";
TextFieldValidation["VALID_TEL_NUMBER"] = "validTelNumber";
TextFieldValidation["TEL_NUMBER"] = "telNumber";
TextFieldValidation["EMAIL"] = "email";
})(TextFieldValidation || (TextFieldValidation = {}));
export class TextField extends DataField {
static FIELD_HEIGHT = 67;
constructor(stringId, title, value, behavior, placeholder, description, layout, validations, _component, parentTaskId) {
super(stringId, title, value, behavior, placeholder, description, layout, validations, _component, parentTaskId);
}
getTypedComponentType() {
return ComponentPrefixes.TEXT + this.getComponentType();
}
resolveValidations() {
const result = [];
this.validations.forEach(item => {
if (item.validationRule.includes(TextFieldValidation.MIN_LENGTH)) {
const tmp = item.validationRule.split(' ');
if (tmp[1] !== undefined) {
const length = parseInt(tmp[1], 10);
if (!isNaN(length)) {
result.push(Validators.minLength(length));
}
}
}
else if (item.validationRule.includes(TextFieldValidation.MAX_LENGTH)) {
const tmp = item.validationRule.split(' ');
if (tmp[1] !== undefined) {
const length = parseInt(tmp[1], 10);
if (!isNaN(length)) {
result.push(Validators.maxLength(length));
}
}
}
else if (item.validationRule.includes(TextFieldValidation.REGEX)) {
if (item.validationRule.startsWith('regex ')) {
result.push(Validators.pattern(new RegExp(item.validationRule.substring(6, item.validationRule.length))));
}
else if (item.validationRule.startsWith('regex("')) {
result.push(Validators.pattern(new RegExp(item.validationRule.substring(7, item.validationRule.length - 2))));
}
}
else if (item.validationRule.includes(TextFieldValidation.EMAIL)) {
result.push(Validators.email);
}
else if (item.validationRule.includes(TextFieldValidation.TEL_NUMBER)) {
result.push(this.validTelNumber);
}
});
return result;
}
validTelNumber(fc) {
if (!(new RegExp(/^(?:\+?(\d{1,3}))?([-. (]*(\d{3})[-. )]*)?((\d{3})[-. ]*(\d{2,4})(?:[-.x ]*(\d+))?)$/).test(fc.value))) {
return ({ validTelNumber: true });
}
else {
return null;
}
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1maWVsZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25ldGdyaWYtY29tcG9uZW50cy1jb3JlL3NyYy9saWIvZGF0YS1maWVsZHMvdGV4dC1maWVsZC9tb2RlbHMvdGV4dC1maWVsZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQTJCLFVBQVUsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBR3BFLE9BQU8sRUFBWSxpQkFBaUIsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ3BFLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUUzRCxNQUFNLENBQU4sSUFBWSxhQUtYO0FBTEQsV0FBWSxhQUFhO0lBQ3JCLG9DQUFtQixDQUFBO0lBQ25CLHNDQUFxQixDQUFBO0lBQ3JCLDhDQUE2QixDQUFBO0lBQzdCLDhDQUE2QixDQUFBO0FBQ2pDLENBQUMsRUFMVyxhQUFhLEtBQWIsYUFBYSxRQUt4QjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxDQUFOLElBQVksa0JBVVg7QUFWRCxXQUFZLGtCQUFrQjtJQUMxQiwyQ0FBcUIsQ0FBQTtJQUNyQiw0Q0FBc0IsQ0FBQTtJQUN0QixxREFBK0IsQ0FBQTtJQUMvQixxREFBK0IsQ0FBQTtJQUMvQixtRUFBNkMsQ0FBQTtJQUM3QyxpRUFBMkMsQ0FBQTtJQUMzQyxpRUFBMkMsQ0FBQTtJQUMzQywyREFBcUMsQ0FBQTtJQUNyQywyREFBcUMsQ0FBQTtBQUN6QyxDQUFDLEVBVlcsa0JBQWtCLEtBQWxCLGtCQUFrQixRQVU3QjtBQUVELE1BQU0sQ0FBTixJQUFZLGNBR1g7QUFIRCxXQUFZLGNBQWM7SUFDdEIsMERBQVksQ0FBQTtJQUNaLHNFQUFrQixDQUFBO0FBQ3RCLENBQUMsRUFIVyxjQUFjLEtBQWQsY0FBYyxRQUd6QjtBQUVELE1BQU0sQ0FBTixJQUFZLG1CQVdYO0FBWEQsV0FBWSxtQkFBbUI7SUFDM0IsNENBQXFC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b0JBQ2xELE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ2pIO2FBQ0o7aUJBQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDaEUsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDakM7aUJBQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsRUFBRTtnQkFDckUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7YUFDcEM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFTyxjQUFjLENBQUMsRUFBZTtRQUNsQyxJQUFJLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxzRkFBc0YsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtZQUN0SCxPQUFPLENBQUMsRUFBQyxjQUFjLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztTQUNuQzthQUFNO1lBQ0gsT0FBTyxJQUFJLENBQUM7U0FDZjtJQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0JlaGF2aW9yfSBmcm9tICcuLi8uLi9tb2RlbHMvYmVoYXZpb3InO1xuaW1wb3J0IHtGb3JtQ29udHJvbCwgVmFsaWRhdG9yRm4sIFZhbGlkYXRvcnN9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7TGF5b3V0fSBmcm9tICcuLi8uLi9tb2RlbHMvbGF5b3V0JztcbmltcG9ydCB7VmFsaWRhdGlvbn0gZnJvbSAnLi4vLi4vbW9kZWxzL3ZhbGlkYXRpb24nO1xuaW1wb3J0IHtDb21wb25lbnQsIENvbXBvbmVudFByZWZpeGVzfSBmcm9tICcuLi8uLi9tb2RlbHMvY29tcG9uZW50JztcbmltcG9ydCB7RGF0YUZpZWxkfSBmcm9tICcuLi8uLi9tb2RlbHMvYWJzdHJhY3QtZGF0YS1maWVsZCc7XG5cbmV4cG9ydCBlbnVtIFRleHRGaWVsZFZpZXcge1xuICAgIERFRkFVTFQgPSAnZGVmYXVsdCcsXG4gICAgVEVYVEFSRUEgPSAndGV4dGFyZWEnLFxuICAgIFJJQ0hURVhUQVJFQSA9ICdyaWNodGV4dGFyZWEnLFxuICAgIEhUTUxURVhUQVJFQSA9ICdodG1sdGV4dGFyZWEnXG59XG5cbi8qKlxuICogQSBjb2xsZWN0aW9uIG9mIFRleHQgZmllbGQgY29tcG9uZW50IG5hbWVzIHN1cHBvcnRlZCBieSB0aGUgYXBwbGljYXRpb24gZW5naW5lLlxuICovXG5leHBvcnQgZW51bSBUZXh0RmllbGRDb21wb25lbnQge1xuICAgIFBBU1NXT1JEID0gJ3Bhc3N3b3JkJyxcbiAgICBURVhUX0FSRUEgPSAndGV4dGFyZWEnLFxuICAgIFJJQ0hfVEVYVF9BUkVBID0gJ3JpY2h0ZXh0YXJlYScsXG4gICAgSFRNTF9URVhUX0FSRUEgPSAnaHRtbHRleHRhcmVhJyxcbiAgICBEQVNIQk9BUkRfTElORV9DSEFSVCA9ICdkYXNoYm9hcmRfbGluZV9jaGFydCcsXG4gICAgREFTSEJPQVJEX1BJRV9DSEFSVCA9ICdkYXNoYm9hcmRfcGllX2NoYXJ0JyxcbiAgICBEQVNIQk9BUkRfQkFSX0NIQVJUID0gJ2Rhc2hib2FyZF9iYXJfY2hhcnQnLFxuICAgIERBU0hCT0FSRF9JRlJBTUUgPSAnZGFzaGJvYXJkX2lmcmFtZScsXG4gICAgREFTSEJPQVJEX1BPUlRBTCA9ICdkYXNoYm9hcmRfcG9ydGFsJyxcbn1cblxuZXhwb3J0IGVudW0gVGV4dEFyZWFIZWlnaHQge1xuICAgIE9VVExJTkUgPSAyMCxcbiAgICBGSUxMX1NUQU5EQVJEID0gMjJcbn1cblxuZXhwb3J0IGVudW0gVGV4dEZpZWxkVmFsaWRhdGlvbiB7XG4gICAgUkVRVUlSRUQgPSAncmVxdWlyZWQnLFxuICAgIE1JTl9MRU5HVEggPSAnbWluTGVuZ3RoJyxcbiAgICBNQVhfTEVOR1RIID0gJ21heExlbmd0aCcsXG4gICAgVkFMSURfTUlOX0xFTkdUSCA9ICdtaW5sZW5ndGgnLFxuICAgIFZBTElEX01BWF9MRU5HVEggPSAnbWF4bGVuZ3RoJyxcbiAgICBQQVRURVJOID0gJ3BhdHRlcm4nLFxuICAgIFJFR0VYID0gJ3JlZ2V4JyxcbiAgICBWQUxJRF9URUxfTlVNQkVSID0gJ3ZhbGlkVGVsTnVtYmVyJyxcbiAgICBURUxfTlVNQkVSID0gJ3RlbE51bWJlcicsXG4gICAgRU1BSUwgPSAnZW1haWwnXG59XG5cbmV4cG9ydCBjbGFzcyBUZXh0RmllbGQgZXh0ZW5kcyBEYXRhRmllbGQ8c3RyaW5nPiB7XG4gICAgcHVibGljIHN0YXRpYyBGSUVMRF9IRUlHSFQgPSA2NztcblxuICAgIGNvbnN0cnVjdG9yKHN0cmluZ0lkOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIGJlaGF2aW9yOiBCZWhhdmlvciwgcGxhY2Vob2xkZXI/OiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb24/OiBzdHJpbmcsIGxheW91dD86IExheW91dCwgdmFsaWRhdGlvbnM/OiBBcnJheTxWYWxpZGF0aW9uPiwgX2NvbXBvbmVudD86IENvbXBvbmVudCxcbiAgICAgICAgICAgICAgICBwYXJlbnRUYXNrSWQ/OiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoc3RyaW5nSWQsIHRpdGxlLCB2YWx1ZSwgYmVoYXZpb3IsIHBsYWNlaG9sZGVyLCBkZXNjcmlwdGlvbiwgbGF5b3V0LCB2YWxpZGF0aW9ucywgX2NvbXBvbmVudCwgcGFyZW50VGFza0lkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VHlwZWRDb21wb25lbnRUeXBlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBDb21wb25lbnRQcmVmaXhlcy5URVhUICsgdGhpcy5nZXRDb21wb25lbnRUeXBlKCk7XG4gICAgfVxuICAgIHByb3RlY3RlZCByZXNvbHZlVmFsaWRhdGlvbnMoKTogQXJyYXk8VmFsaWRhdG9yRm4+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG5cbiAgICAgICAgdGhpcy52YWxpZGF0aW9ucy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0udmFsaWRhdGlvblJ1bGUuaW5jbHVkZXMoVGV4dEZpZWxkVmFsaWRhdGlvbi5NSU5fTEVOR1RIKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRtcCA9IGl0ZW0udmFsaWRhdGlvblJ1bGUuc3BsaXQoJyAnKTtcbiAgICAgICAgICAgICAgICBpZiAodG1wWzFdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGVuZ3RoID0gcGFyc2VJbnQodG1wWzFdLCAxMCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNOYU4obGVuZ3RoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goVmFsaWRhdG9ycy5taW5MZW5ndGgobGVuZ3RoKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0udmFsaWRhdGlvblJ1bGUuaW5jbHVkZXMoVGV4dEZpZWxkVmFsaWRhdGlvbi5NQVhfTEVOR1RIKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRtcCA9IGl0ZW0udmFsaWRhdGlvblJ1bGUuc3BsaXQoJyAnKTtcbiAgICAgICAgICAgICAgICBpZiAodG1wWzFdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGVuZ3RoID0gcGFyc2VJbnQodG1wWzFdLCAxMCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNOYU4obGVuZ3RoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goVmFsaWRhdG9ycy5tYXhMZW5ndGgobGVuZ3RoKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0udmFsaWRhdGlvblJ1bGUuaW5jbHVkZXMoVGV4dEZpZWxkVmFsaWRhdGlvbi5SRUdFWCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS52YWxpZGF0aW9uUnVsZS5zdGFydHNXaXRoKCdyZWdleCAnKSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChWYWxpZGF0b3JzLnBhdHRlcm4obmV3IFJlZ0V4cChpdGVtLnZhbGlkYXRpb25SdWxlLnN1YnN0cmluZyg2LCBpdGVtLnZhbGlkYXRpb25SdWxlLmxlbmd0aCApKSkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS52YWxpZGF0aW9uUnVsZS5zdGFydHNXaXRoKCdyZWdleChcIicpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFZhbGlkYXRvcnMucGF0dGVybihuZXcgUmVnRXhwKGl0ZW0udmFsaWRhdGlvblJ1bGUuc3Vic3RyaW5nKDcsIGl0ZW0udmFsaWRhdGlvblJ1bGUubGVuZ3RoIC0gMikpKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLnZhbGlkYXRpb25SdWxlLmluY2x1ZGVzKFRleHRGaWVsZFZhbGlkYXRpb24uRU1BSUwpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goVmFsaWRhdG9ycy5lbWFpbCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0udmFsaWRhdGlvblJ1bGUuaW5jbHVkZXMoVGV4dEZpZWxkVmFsaWRhdGlvbi5URUxfTlVNQkVSKSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMudmFsaWRUZWxOdW1iZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgdmFsaWRUZWxOdW1iZXIoZmM6IEZvcm1Db250cm9sKSB7XG4gICAgICAgIGlmICghKG5ldyBSZWdFeHAoL14oPzpcXCs/KFxcZHsxLDN9KSk/KFstLiAoXSooXFxkezN9KVstLiApXSopPygoXFxkezN9KVstLiBdKihcXGR7Miw0fSkoPzpbLS54IF0qKFxcZCspKT8pJC8pLnRlc3QoZmMudmFsdWUpKSkge1xuICAgICAgICAgICAgcmV0dXJuICh7dmFsaWRUZWxOdW1iZXI6IHRydWV9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19