Skip to content
Snippets Groups Projects
Commit 886fc2b3 authored by Jan Zickermann's avatar Jan Zickermann
Browse files

OZG-4949 Add `getControlForInvalidParam`

parent ee1025c5
No related branches found
No related tags found
No related merge requests found
......@@ -25,6 +25,7 @@ import { AbstractControl, FormControl, FormGroup, UntypedFormControl, UntypedFor
import { createInvalidParam, createIssue } from '../../../test/error';
import { InvalidParam, Issue } from '../tech.model';
import {
getControlForInvalidParam,
getControlForIssue,
getMessageForInvalidParam,
getMessageForIssue,
......@@ -143,17 +144,7 @@ describe('ValidationUtils', () => {
});
});
describe('getMessageForInvalidParam', () => {
it('should return message', () => {
const invalidParam: InvalidParam = createInvalidParam();
const msg: string = getMessageForInvalidParam(invalidParam);
expect(msg).toEqual(`Bitte ${invalidParam.name} ausfüllen`);
});
});
describe('setInvalidParamValidationError', () => {
describe('invalid param', () => {
const formPrefixes = ['', 'some-prefix'];
const fieldNames = ['baseField1', 'baseField2', 'subGroup.subGroupField1'];
const prefixNameCombinations = formPrefixes.flatMap((prefix) =>
......@@ -165,20 +156,34 @@ describe('ValidationUtils', () => {
'with prefix "%s" and fieldName "%s"',
(prefix, fieldName) => {
let invalidParam: InvalidParam;
let invalidParamWithoutPrefix: InvalidParam;
beforeEach(() => {
form.reset();
invalidParamWithoutPrefix = createInvalidParam();
invalidParamWithoutPrefix.name = fieldName;
invalidParam = {
reason: invalidParamWithoutPrefix.reason,
...createInvalidParam(),
name: prefix.length ? `${prefix}.${fieldName}` : fieldName,
};
});
describe('get message for invalid param', () => {
it('should return', () => {
const msg: string = getMessageForInvalidParam(invalidParam, prefix);
expect(msg).toEqual(`Bitte ${fieldName} ausfüllen`);
});
});
describe('get control for invalid param', () => {
it('should find', () => {
const control: AbstractControl = getControlForInvalidParam(form, invalidParam, prefix);
expect(control).toBeTruthy();
});
});
describe('set invalid param validation error', () => {
it('should assign invalidParam to form control error without prefix', () => {
const message = getMessageForInvalidParam(invalidParamWithoutPrefix);
const message = getMessageForInvalidParam(invalidParam, prefix);
setInvalidParamValidationError(form, invalidParam, prefix);
......@@ -191,6 +196,7 @@ describe('ValidationUtils', () => {
expect(form.touched).toBeTruthy();
});
});
},
);
......@@ -211,6 +217,16 @@ describe('ValidationUtils', () => {
invalidParam.name = paramPrefix.length > 0 ? `${paramPrefix}.${fieldName}` : fieldName;
});
it('should not find form control', () => {
const control: AbstractControl = getControlForInvalidParam(
form,
invalidParam,
pathPrefix,
);
expect(control).toBeFalsy();
});
it('should not assign to field control error', () => {
setInvalidParamValidationError(form, invalidParam, pathPrefix);
......@@ -225,15 +241,5 @@ describe('ValidationUtils', () => {
});
},
);
it('should not assign invalidParam with incorrect prefix', () => {
const invalidParam: InvalidParam = createInvalidParam();
invalidParam.name = `correct-prefix.baseField1`;
setInvalidParamValidationError(form, invalidParam, 'incorrect-prefix');
const errorMessage = form.getError(invalidParam.reason, unknownName);
expect(errorMessage).toBeFalsy();
});
});
});
......@@ -47,7 +47,7 @@ export function getControlForIssue(
issue: Issue,
pathPrefix?: string,
): AbstractControl {
const fieldPath: string = pathPrefix ? issue.field.substring(pathPrefix.length + 1) : issue.field;
const fieldPath: string = getFieldPathWithoutPrefix(issue.field, pathPrefix);
let curControl: AbstractControl = form;
fieldPath
......@@ -85,20 +85,31 @@ export function setInvalidParamValidationError(
invalidParam: InvalidParam,
pathPrefix: string = '',
): void {
const item: InvalidParam = mapInvalidParamWithoutPrefix(invalidParam, pathPrefix);
const formControl: AbstractControl = form.get(item.name);
if (isNotNil(formControl)) {
formControl.setErrors({ [item.reason]: getMessageForInvalidParam(item) });
formControl.markAsTouched();
const control: AbstractControl = getControlForInvalidParam(form, invalidParam, pathPrefix);
if (isNotNil(control)) {
control.setErrors({
[invalidParam.reason]: getMessageForInvalidParam(invalidParam, pathPrefix),
});
control.markAsTouched();
}
}
function getFieldPathWithoutPrefix(name: string, pathPrefix: string): string {
return pathPrefix.length > 0 ? name.substring(pathPrefix.length + 1) : name;
}
function mapInvalidParamWithoutPrefix(item: InvalidParam, pathPrefix: string): InvalidParam {
return pathPrefix.length > 0 ?
{ ...item, name: item.name.substring(pathPrefix.length + 1) }
: item;
export function getControlForInvalidParam(
form: UntypedFormGroup,
invalidParam: InvalidParam,
pathPrefix: string = '',
): AbstractControl {
return form.get(getFieldPathWithoutPrefix(invalidParam.name, pathPrefix));
}
export function getMessageForInvalidParam(item: InvalidParam): string {
return replacePlaceholder(VALIDATION_MESSAGES[item.reason], 'field', item.name);
export function getMessageForInvalidParam(item: InvalidParam, pathPrefix: string): string {
return replacePlaceholder(
VALIDATION_MESSAGES[item.reason],
'field',
getFieldPathWithoutPrefix(item.name, pathPrefix),
);
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment