Skip to content

Commit f53c6e9

Browse files
committed
feat: custom validation implementation
Related to #1162
1 parent 950da0c commit f53c6e9

File tree

2 files changed

+17
-5
lines changed

2 files changed

+17
-5
lines changed

packages/form-js-viewer/src/core/Validator.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,18 @@ export class Validator {
8181

8282
errors = [...errors, ...runPresetValidation(field, evaluatedValidation, value)];
8383

84+
const evaluateExpression = (expression) =>
85+
runExpressionEvaluation(this._expressionLanguage, expression, { ...expressionContextInfo, value });
86+
87+
if ('custom' in evaluatedValidation && value && evaluatedValidation.custom.length) {
88+
const { custom } = evaluatedValidation;
89+
custom.forEach(({ condition, message }) => {
90+
if (condition && message && !evaluateExpression(condition)) {
91+
errors = [...errors, evaluateExpression(message)];
92+
}
93+
});
94+
}
95+
8496
return errors;
8597
}
8698
}

packages/form-js-viewer/src/util/expressions.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,13 @@ export function buildExpressionContext(context) {
2222
* If the string is not an expression, it is returned as is.
2323
*
2424
* @param {any} expressionLanguage - The expression language to use.
25-
* @param {string} value - The string to evaluate.
25+
* @param {string} expression - The string expression to evaluate.
2626
* @param {Object} expressionContextInfo - The context information to use.
2727
* @returns {any} - Evaluated value or the original value if not an expression.
2828
*/
29-
export function runExpressionEvaluation(expressionLanguage, value, expressionContextInfo) {
30-
if (expressionLanguage && expressionLanguage.isExpression(value)) {
31-
return expressionLanguage.evaluate(value, buildExpressionContext(expressionContextInfo));
29+
export function runExpressionEvaluation(expressionLanguage, expression, expressionContextInfo) {
30+
if (expressionLanguage && expressionLanguage.isExpression(expression)) {
31+
return expressionLanguage.evaluate(expression, buildExpressionContext(expressionContextInfo));
3232
}
33-
return value;
33+
return expression;
3434
}

0 commit comments

Comments
 (0)