UNPKG

@netgrif/components-core

Version:

Netgrif Application engine frontend core Angular library

136 lines 16.7 kB
import { ComponentPrefixes } from '../../models/component'; import { DataField } from '../../models/abstract-data-field'; export var NumberFieldValidation; (function (NumberFieldValidation) { NumberFieldValidation["ODD"] = "odd"; NumberFieldValidation["EVEN"] = "even"; NumberFieldValidation["POSITIVE"] = "positive"; NumberFieldValidation["NEGATIVE"] = "negative"; NumberFieldValidation["DECIMAL"] = "decimal"; NumberFieldValidation["IN_RANGE"] = "inrange"; NumberFieldValidation["INF"] = "inf"; NumberFieldValidation["REQUIRED"] = "required"; NumberFieldValidation["VALID_ODD"] = "validOdd"; NumberFieldValidation["VALID_EVEN"] = "validEven"; NumberFieldValidation["VALID_POSITIVE"] = "validPositive"; NumberFieldValidation["VALID_NEGATIVE"] = "validNegative"; NumberFieldValidation["VALID_DECIMAL"] = "validDecimal"; NumberFieldValidation["VALID_IN_RANGE"] = "validInRange"; })(NumberFieldValidation || (NumberFieldValidation = {})); export class NumberField extends DataField { _formatFilter; constructor(stringId, title, value, behavior, validations, placeholder, description, layout, format, component, parentTaskId) { super(stringId, title, value, behavior, placeholder, description, layout, validations, component, parentTaskId); this._formatFilter = format; } getTypedComponentType() { return ComponentPrefixes.NUMBER + this.getComponentType(); } resolveValidations() { const result = []; this.validations.forEach(item => { if (item.validationRule.includes(NumberFieldValidation.ODD)) { result.push(this.validOdd); } else if (item.validationRule.includes(NumberFieldValidation.EVEN)) { result.push(this.validEven); } else if (item.validationRule.includes(NumberFieldValidation.POSITIVE)) { result.push(this.validPositive); } else if (item.validationRule.includes(NumberFieldValidation.NEGATIVE)) { result.push(this.validNegative); } else if (item.validationRule.includes(NumberFieldValidation.DECIMAL)) { result.push(this.validDecimal); } else if (item.validationRule.includes(NumberFieldValidation.IN_RANGE)) { const tmp = item.validationRule.split(' '); const ranges = tmp[1].split(','); const first = parseFloat(ranges[0]); const second = parseFloat(ranges[1]); if (isNaN(first) && !isNaN(second) && ranges[0].includes(NumberFieldValidation.INF)) { result.push(this.validInRangeSmaller(second)); } else if (isNaN(second) && !isNaN(first) && ranges[1].includes(NumberFieldValidation.INF)) { result.push(this.validInRangeBigger(first)); } else if (!isNaN(first) && !isNaN(second)) { result.push(this.validInRange(first, second)); } } }); return result; } validOdd(fc) { if ((fc.value % 2) === 0) { return ({ validOdd: true }); } else { return (null); } } validEven(fc) { if ((fc.value % 2) !== 0) { return ({ validEven: true }); } else { return (null); } } validPositive(fc) { if (fc.value < 0) { return ({ validPositive: true }); } else { return (null); } } validNegative(fc) { if (fc.value >= 0) { return ({ validNegative: true }); } else { return (null); } } validDecimal(fc) { if (fc.value % 1 !== 0) { return ({ validDecimal: true }); } else { return (null); } } validInRangeSmaller(range) { return (fc) => { if (fc.value > range) { return ({ validInRange: true }); } else { return (null); } }; } validInRangeBigger(range) { return (fc) => { if (fc.value < range) { return ({ validInRange: true }); } else { return (null); } }; } validInRange(first, second) { return (fc) => { if (fc.value < first || fc.value > second) { return ({ validInRange: true }); } else { return (null); } }; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtYmVyLWZpZWxkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmV0Z3JpZi1jb21wb25lbnRzLWNvcmUvc3JjL2xpYi9kYXRhLWZpZWxkcy9udW1iZXItZmllbGQvbW9kZWxzL251bWJlci1maWVsZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxPQUFPLEVBQVksaUJBQWlCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFFM0QsTUFBTSxDQUFOLElBQVkscUJBZVg7QUFmRCxXQUFZLHFCQUFxQjtJQUM3QixvQ0FBVyxDQUFBO0lBQ1gsc0NBQWEsQ0FBQTtJQUNiLDhDQUFxQixDQUFBO0lBQ3JCLDhDQUFxQixDQUFBO0lBQ3JCLDRDQUFtQixDQUFBO0lBQ25CLDZDQUFvQixDQUFBO0lBQ3BCLG9DQUFXLENBQUE7SUFDWCw4Q0FBcUIsQ0FBQTtJQUNyQiwrQ0FBc0IsQ0FBQTtJQUN0QixpREFBd0IsQ0FBQTtJQUN4Qix5REFBZ0MsQ0FBQTtJQUNoQyx5REFBZ0MsQ0FBQTtJQUNoQyx1REFBOEIsQ0FBQTtJQUM5Qix3REFBK0IsQ0FBQTtBQUNuQyxDQUFDLEVBZlcscUJBQXFCLEtBQXJCLHFCQUFxQixRQWVoQztBQUVELE1BQU0sT0FBTyxXQUFZLFNBQVEsU0FBaUI7SUFDdkMsYUFBYSxDQUFlO0lBRW5DLFlBQVksUUFBZ0IsRUFBRSxLQUFhLEVBQUUsS0FBYSxFQUFFLFFBQWtCLEVBQUUsV0FBK0IsRUFBRSxXQUFvQixFQUN6SCxXQUFvQixFQUFFLE1BQWUsRUFBRSxNQUFxQixFQUFFLFNBQXFCLEVBQUUsWUFBcUI7UUFDbEgsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFlB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QUM7SUFFTyxtQkFBbUIsQ0FBQyxLQUFhO1FBQ3JDLE9BQU8sQ0FBQyxFQUFlLEVBQStCLEVBQUU7WUFDcEQsSUFBSSxFQUFFLENBQUMsS0FBSyxHQUFHLEtBQUssRUFBRTtnQkFBRSxPQUFPLENBQUMsRUFBQyxZQUFZLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQzthQUFFO2lCQUFNO2dCQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUFFO1FBQ3BGLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxLQUFhO1FBQ3BDLE9BQU8sQ0FBQyxFQUFlLEVBQStCLEVBQUU7WUFDcEQsSUFBSSxFQUFFLENBQUMsS0FBSyxHQUFHLEtBQUssRUFBRTtnQkFBRSxPQUFPLENBQUMsRUFBQyxZQUFZLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQzthQUFFO2lCQUFNO2dCQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUFFO1FBQ3BGLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFTyxZQUFZLENBQUMsS0FBYSxFQUFFLE1BQWM7UUFDOUMsT0FBTyxDQUFDLEVBQWUsRUFBK0IsRUFBRTtZQUNwRCxJQUFJLEVBQUUsQ0FBQyxLQUFLLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEdBQUcsTUFBTSxFQUFFO2dCQUFFLE9BQU8sQ0FBQyxFQUFDLFlBQVksRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO2FBQUU7aUJBQU07Z0JBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQUU7UUFDekcsQ0FBQyxDQUFDO0lBQ04sQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtCZWhhdmlvcn0gZnJvbSAnLi4vLi4vbW9kZWxzL2JlaGF2aW9yJztcbmltcG9ydCB7Rm9ybUNvbnRyb2wsIFZhbGlkYXRvckZufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge0xheW91dH0gZnJvbSAnLi4vLi4vbW9kZWxzL2xheW91dCc7XG5pbXBvcnQge1ZhbGlkYXRpb259IGZyb20gJy4uLy4uL21vZGVscy92YWxpZGF0aW9uJztcbmltcG9ydCB7Rm9ybWF0RmlsdGVyfSBmcm9tICcuLi8uLi9tb2RlbHMvZm9ybWF0LWZpbHRlcic7XG5pbXBvcnQge0NvbXBvbmVudCwgQ29tcG9uZW50UHJlZml4ZXN9IGZyb20gJy4uLy4uL21vZGVscy9jb21wb25lbnQnO1xuaW1wb3J0IHtEYXRhRmllbGR9IGZyb20gJy4uLy4uL21vZGVscy9hYnN0cmFjdC1kYXRhLWZpZWxkJztcblxuZXhwb3J0IGVudW0gTnVtYmVyRmllbGRWYWxpZGF0aW9uIHtcbiAgICBPREQgPSAnb2RkJyxcbiAgICBFVkVOID0gJ2V2ZW4nLFxuICAgIFBPU0lUSVZFID0gJ3Bvc2l0aXZlJyxcbiAgICBORUdBVElWRSA9ICduZWdhdGl2ZScsXG4gICAgREVDSU1BTCA9ICdkZWNpbWFsJyxcbiAgICBJTl9SQU5HRSA9ICdpbnJhbmdlJyxcbiAgICBJTkYgPSAnaW5mJyxcbiAgICBSRVFVSVJFRCA9ICdyZXF1aXJlZCcsXG4gICAgVkFMSURfT0REID0gJ3ZhbGlkT2RkJyxcbiAgICBWQUxJRF9FVkVOID0gJ3ZhbGlkRXZlbicsXG4gICAgVkFMSURfUE9TSVRJVkUgPSAndmFsaWRQb3NpdGl2ZScsXG4gICAgVkFMSURfTkVHQVRJVkUgPSAndmFsaWROZWdhdGl2ZScsXG4gICAgVkFMSURfREVDSU1BTCA9ICd2YWxpZERlY2ltYWwnLFxuICAgIFZBTElEX0lOX1JBTkdFID0gJ3ZhbGlkSW5SYW5nZSdcbn1cblxuZXhwb3J0IGNsYXNzIE51bWJlckZpZWxkIGV4dGVuZHMgRGF0YUZpZWxkPG51bWJlcj4ge1xuICAgIHB1YmxpYyBfZm9ybWF0RmlsdGVyOiBGb3JtYXRGaWx0ZXI7XG5cbiAgICBjb25zdHJ1Y3RvcihzdHJpbmdJZDogc3RyaW5nLCB0aXRsZTogc3RyaW5nLCB2YWx1ZTogbnVtYmVyLCBiZWhhdmlvcjogQmVoYXZpb3IsIHZhbGlkYXRpb25zPzogQXJyYXk8VmFsaWRhdGlvbj4sIHBsYWNlaG9sZGVyPzogc3RyaW5nLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nLCBsYXlvdXQ/OiBMYXlvdXQsIGZvcm1hdD86IEZvcm1hdEZpbHRlciwgY29tcG9uZW50PzogQ29tcG9uZW50LCBwYXJlbnRUYXNrSWQ/OiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoc3RyaW5nSWQsIHRpdGxlLCB2YWx1ZSwgYmVoYXZpb3IsIHBsYWNlaG9sZGVyLCBkZXNjcmlwdGlvbiwgbGF5b3V0LCB2YWxpZGF0aW9ucywgY29tcG9uZW50LCBwYXJlbnRUYXNrSWQpO1xuICAgICAgICB0aGlzLl9mb3JtYXRGaWx0ZXIgPSBmb3JtYXQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFR5cGVkQ29tcG9uZW50VHlwZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gQ29tcG9uZW50UHJlZml4ZXMuTlVNQkVSICsgdGhpcy5nZXRDb21wb25lbnRUeXBlKCk7XG4gICAgfVxuICAgIHByb3RlY3RlZCByZXNvbHZlVmFsaWRhdGlvbnMoKTogQXJyYXk8VmFsaWRhdG9yRm4+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG5cbiAgICAgICAgdGhpcy52YWxpZGF0aW9ucy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0udmFsaWRhdGlvblJ1bGUuaW5jbHVkZXMoTnVtYmVyRmllbGRWYWxpZGF0aW9uLk9ERCkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh0aGlzLnZhbGlkT2RkKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS52YWxpZGF0aW9uUnVsZS5pbmNsdWRlcyhOdW1iZXJGaWVsZFZhbGlkYXRpb24uRVZFTikpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh0aGlzLnZhbGlkRXZlbik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0udmFsaWRhdGlvblJ1bGUuaW5jbHVkZXMoTnVtYmVyRmllbGRWYWxpZGF0aW9uLlBPU0lUSVZFKSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMudmFsaWRQb3NpdGl2ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0udmFsaWRhdGlvblJ1bGUuaW5jbHVkZXMoTnVtYmVyRmllbGRWYWxpZGF0aW9uLk5FR0FUSVZFKSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMudmFsaWROZWdhdGl2ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0udmFsaWRhdGlvblJ1bGUuaW5jbHVkZXMoTnVtYmVyRmllbGRWYWxpZGF0aW9uLkRFQ0lNQUwpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2godGhpcy52YWxpZERlY2ltYWwpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLnZhbGlkYXRpb25SdWxlLmluY2x1ZGVzKE51bWJlckZpZWxkVmFsaWRhdGlvbi5JTl9SQU5HRSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0bXAgPSBpdGVtLnZhbGlkYXRpb25SdWxlLnNwbGl0KCcgJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmFuZ2VzID0gdG1wWzFdLnNwbGl0KCcsJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlyc3QgPSBwYXJzZUZsb2F0KHJhbmdlc1swXSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2Vjb25kID0gcGFyc2VGbG9hdChyYW5nZXNbMV0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKGlzTmFOKGZpcnN0KSAmJiAhaXNOYU4oc2Vjb25kKSAmJiByYW5nZXNbMF0uaW5jbHVkZXMoTnVtYmVyRmllbGRWYWxpZGF0aW9uLklORikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2godGhpcy52YWxpZEluUmFuZ2VTbWFsbGVyKHNlY29uZCkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNOYU4oc2Vjb25kKSAmJiAhaXNOYU4oZmlyc3QpICYmIHJhbmdlc1sxXS5pbmNsdWRlcyhOdW1iZXJGaWVsZFZhbGlkYXRpb24uSU5GKSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh0aGlzLnZhbGlkSW5SYW5nZUJpZ2dlcihmaXJzdCkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWlzTmFOKGZpcnN0KSAmJiAhaXNOYU4oc2Vjb25kKSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh0aGlzLnZhbGlkSW5SYW5nZShmaXJzdCwgc2Vjb25kKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgdmFsaWRPZGQoZmM6IEZvcm1Db250cm9sKSB7XG4gICAgICAgIGlmICgoZmMudmFsdWUgJSAyKSA9PT0gMCkgeyByZXR1cm4gKHt2YWxpZE9kZDogdHJ1ZX0pOyB9IGVsc2UgeyByZXR1cm4gKG51bGwpOyB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2YWxpZEV2ZW4oZmM6IEZvcm1Db250cm9sKSB7XG4gICAgICAgIGlmICgoZmMudmFsdWUgJSAyKSAhPT0gMCkgeyByZXR1cm4gKHt2YWxpZEV2ZW46IHRydWV9KTsgfSBlbHNlIHsgcmV0dXJuIChudWxsKTsgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdmFsaWRQb3NpdGl2ZShmYzogRm9ybUNvbnRyb2wpIHtcbiAgICAgICAgaWYgKGZjLnZhbHVlIDwgMCkgeyByZXR1cm4gKHt2YWxpZFBvc2l0aXZlOiB0cnVlfSk7IH0gZWxzZSB7IHJldHVybiAobnVsbCk7IH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHZhbGlkTmVnYXRpdmUoZmM6IEZvcm1Db250cm9sKSB7XG4gICAgICAgIGlmIChmYy52YWx1ZSA+PSAwKSB7IHJldHVybiAoe3ZhbGlkTmVnYXRpdmU6IHRydWV9KTsgfSBlbHNlIHsgcmV0dXJuIChudWxsKTsgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdmFsaWREZWNpbWFsKGZjOiBGb3JtQ29udHJvbCkge1xuICAgICAgICBpZiAoZmMudmFsdWUgJSAxICE9PSAwKSB7IHJldHVybiAoe3ZhbGlkRGVjaW1hbDogdHJ1ZX0pOyB9IGVsc2UgeyByZXR1cm4gKG51bGwpOyB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2YWxpZEluUmFuZ2VTbWFsbGVyKHJhbmdlOiBudW1iZXIpOiBWYWxpZGF0b3JGbiB7XG4gICAgICAgIHJldHVybiAoZmM6IEZvcm1Db250cm9sKToge1trZXk6IHN0cmluZ106IGFueX0gfCBudWxsID0+IHtcbiAgICAgICAgICAgIGlmIChmYy52YWx1ZSA+IHJhbmdlKSB7IHJldHVybiAoe3ZhbGlkSW5SYW5nZTogdHJ1ZX0pOyB9IGVsc2UgeyByZXR1cm4gKG51bGwpOyB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2YWxpZEluUmFuZ2VCaWdnZXIocmFuZ2U6IG51bWJlcik6IFZhbGlkYXRvckZuIHtcbiAgICAgICAgcmV0dXJuIChmYzogRm9ybUNvbnRyb2wpOiB7W2tleTogc3RyaW5nXTogYW55fSB8IG51bGwgPT4ge1xuICAgICAgICAgICAgaWYgKGZjLnZhbHVlIDwgcmFuZ2UpIHsgcmV0dXJuICh7dmFsaWRJblJhbmdlOiB0cnVlfSk7IH0gZWxzZSB7IHJldHVybiAobnVsbCk7IH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHZhbGlkSW5SYW5nZShmaXJzdDogbnVtYmVyLCBzZWNvbmQ6IG51bWJlcik6IFZhbGlkYXRvckZuIHtcbiAgICAgICAgcmV0dXJuIChmYzogRm9ybUNvbnRyb2wpOiB7W2tleTogc3RyaW5nXTogYW55fSB8IG51bGwgPT4ge1xuICAgICAgICAgICAgaWYgKGZjLnZhbHVlIDwgZmlyc3QgfHwgZmMudmFsdWUgPiBzZWNvbmQpIHsgcmV0dXJuICh7dmFsaWRJblJhbmdlOiB0cnVlfSk7IH0gZWxzZSB7IHJldHVybiAobnVsbCk7IH1cbiAgICAgICAgfTtcbiAgICB9XG59XG4iXX0=