SUPPORT-8971: add validation by idm

This commit is contained in:
Emir Suleimanov 2025-03-10 17:41:56 +03:00
parent b45e478148
commit 26ae0cdfce
4 changed files with 39 additions and 551 deletions

View file

@ -1,8 +1,8 @@
import {Behavior, TextField} from "@webbpm/base-package";
import {SimpleValidator, TextField} from "@webbpm/base-package";
import {Observable} from "rxjs";
import {IdmService} from "../IdmService";
export abstract class IdmTextFieldValidation extends Behavior {
export abstract class AbstractIdmValidator extends SimpleValidator {
protected abstract ERROR_MESSAGE: string;
protected abstract checkValueExists(value: string): Observable<boolean>;
@ -18,35 +18,35 @@ export abstract class IdmTextFieldValidation extends Behavior {
this.textInput.addEventListener('blur', this.onBlurHandler.bind(this));
}
private async onBlurHandler(event: FocusEvent): Promise<void> {
const inputValue: string = (event.target as HTMLInputElement).value;
if (!inputValue) return;
async isValid(): Promise<boolean> {
const inputValue: string = this.textInput.value;
if (!inputValue) return Promise.resolve(false);
const cleanedValue = this.cleanValue(inputValue);
if (!this.isValid(cleanedValue)) return;
if (!this.isPatternValid(cleanedValue)) return Promise.resolve(false);
this.checkValueExists(cleanedValue).subscribe({
next: (exists) => {
if (exists) {
this.textField.addCustomValidationMessage(this.ERROR_MESSAGE);
this.textField.model.control.setErrors({ exists: this.ERROR_MESSAGE });
} else {
this.textField.removeCustomValidationMessage(this.ERROR_MESSAGE);
this.textField.model.control.setErrors(null);
return this.checkValueExists(cleanedValue).toPromise().then(
(exists) => {
this.pushError(!exists, this.ERROR_MESSAGE);
return !exists;
},
(err) => {
const fieldName = this.textField.getObjectName();
console.error(`Ошибка проверки ${fieldName}: ${err.message}`);
return false;
}
},
error: (err) => {
console.error(`Ошибка проверки: ${err}`);
}
});
);
}
private async onBlurHandler(event: FocusEvent): Promise<void> {
await this.isValid();
}
protected cleanValue(value: string): string {
return value;
}
protected isValid(value: string): boolean {
protected isPatternValid(value: string): boolean {
return true;
}
}

View file

@ -1,14 +1,14 @@
import {IdmTextFieldValidation} from "./IdmTextFieldValidation";
import {Observable} from "rxjs";
import {AbstractIdmValidator} from "./AbstractIdmValidator";
export class IdmLoginTextFieldValidation extends IdmTextFieldValidation {
export class IdmLoginValidator extends AbstractIdmValidator {
protected ERROR_MESSAGE = "Пользователь с указанным логином уже существует";
protected checkValueExists(value: string): Observable<boolean> {
return this.idmService.checkLoginExists(value);
}
protected isValid(value: string): boolean {
protected isPatternValid(value: string): boolean {
let pattern = this.context.pattern;
return pattern ? new RegExp(pattern).test(value) : true;
}

View file

@ -1,7 +1,7 @@
import {IdmTextFieldValidation} from "./IdmTextFieldValidation";
import {Observable} from "rxjs";
import {AbstractIdmValidator} from "./AbstractIdmValidator";
export class IdmSnilsTextFieldValidation extends IdmTextFieldValidation {
export class IdmSnilsValidator extends AbstractIdmValidator {
protected ERROR_MESSAGE = "Пользователь с указанным СНИЛС уже существует";
protected checkValueExists(value: string): Observable<boolean> {

View file

@ -884,278 +884,11 @@
<entry>
<key>conditions</key>
<value>
<item id="1552d53f-3d86-455b-aeeb-fe5783eb0137" removed="false">
<value>
<complex>
<entry>
<key>_isGroupSelected</key>
<value>
<simple>false</simple>
</value>
</entry>
<entry>
<key>one</key>
<value>
<complex>
<entry>
<key>conditionFirstPart</key>
<value>
<complex>
<entry>
<key>objectValue</key>
<value>
<complex>
<entry>
<key>behavior</key>
<value>
<simple>{"objectId":"3745904b-db0b-40d3-adb5-64faeb8d967b","packageName":"component.field","className":"LinkField","type":"TS"}</simple>
</value>
</entry>
<entry>
<key>method</key>
<value>
<simple>"getDisplayedRowCount"</simple>
</value>
</entry>
</complex>
</value>
</entry>
</complex>
</value>
</entry>
<entry>
<key>conditionSecondPart</key>
<value>
<complex>
<entry>
<key>staticValue</key>
<value>
<implRef type="TS">
<className>number</className>
<packageName></packageName>
</implRef>
<simple>0.0</simple>
</value>
</entry>
</complex>
</value>
</entry>
<entry>
<key>operation</key>
<value>
<simple>"EQUALS"</simple>
</value>
</entry>
</complex>
</value>
</entry>
</complex>
</value>
</item>
<item id="9c20eda2-e947-4aad-852f-cc811805c8d8" removed="false">
<value>
<complex>
<entry>
<key>_isGroupSelected</key>
<value>
<simple>false</simple>
</value>
</entry>
<entry>
<key>one</key>
<value>
<complex>
<entry>
<key>conditionFirstPart</key>
<value>
<complex>
<entry>
<key>objectValue</key>
<value>
<complex>
<entry>
<key>behavior</key>
<value>
<simple>{"objectId":"14f179eb-cabb-439d-b24d-cbc4809d77b7","packageName":"component.field","className":"TextField","type":"TS"}</simple>
</value>
</entry>
<entry>
<key>method</key>
<value>
<simple>"getValue"</simple>
</value>
</entry>
</complex>
</value>
</entry>
</complex>
</value>
</entry>
<entry>
<key>operation</key>
<value>
<simple>"IS_EMPTY"</simple>
</value>
</entry>
</complex>
</value>
</entry>
</complex>
</value>
</item>
<item id="7f7f6354-c982-4561-8118-5599588b0093" removed="false">
<value>
<complex>
<entry>
<key>_isGroupSelected</key>
<value>
<simple>false</simple>
</value>
</entry>
<entry>
<key>one</key>
<value>
<complex>
<entry>
<key>conditionFirstPart</key>
<value>
<complex>
<entry>
<key>objectValue</key>
<value>
<complex>
<entry>
<key>behavior</key>
<value>
<simple>{"objectId":"28499aed-570d-4733-aa77-fd7f8e71faad","packageName":"component.field","className":"TextField","type":"TS"}</simple>
</value>
</entry>
<entry>
<key>method</key>
<value>
<simple>"getValue"</simple>
</value>
</entry>
</complex>
</value>
</entry>
</complex>
</value>
</entry>
<entry>
<key>operation</key>
<value>
<simple>"IS_EMPTY"</simple>
</value>
</entry>
</complex>
</value>
</entry>
</complex>
</value>
</item>
<item id="0c16e426-de11-4287-88a5-09442c865a86" removed="false">
<value>
<complex>
<entry>
<key>_isGroupSelected</key>
<value>
<simple>false</simple>
</value>
</entry>
<entry>
<key>one</key>
<value>
<complex>
<entry>
<key>conditionFirstPart</key>
<value>
<complex>
<entry>
<key>objectValue</key>
<value>
<complex>
<entry>
<key>behavior</key>
<value>
<simple>{"objectId":"5cce7e30-858d-489f-8b46-6e0f8dfc9a22","packageName":"component.field","className":"StaticComboBox","type":"TS"}</simple>
</value>
</entry>
<entry>
<key>method</key>
<value>
<simple>"getValue"</simple>
</value>
</entry>
</complex>
</value>
</entry>
</complex>
</value>
</entry>
<entry>
<key>operation</key>
<value>
<simple>"IS_EMPTY"</simple>
</value>
</entry>
</complex>
</value>
</entry>
</complex>
</value>
</item>
<item id="fda5280c-c4df-4b13-9c8a-2748af352c40" removed="false">
<value>
<complex>
<entry>
<key>_isGroupSelected</key>
<value>
<simple>false</simple>
</value>
</entry>
<entry>
<key>one</key>
<value>
<complex>
<entry>
<key>conditionFirstPart</key>
<value>
<complex>
<entry>
<key>objectValue</key>
<value>
<complex>
<entry>
<key>behavior</key>
<value>
<simple>{"objectId":"a5dae62b-3f02-44d6-a905-4c461bc8842c","packageName":"component.field","className":"DateTimePicker","type":"TS"}</simple>
</value>
</entry>
<entry>
<key>method</key>
<value>
<simple>"getDateValue"</simple>
</value>
</entry>
</complex>
</value>
</entry>
</complex>
</value>
</entry>
<entry>
<key>operation</key>
<value>
<simple>"IS_EMPTY"</simple>
</value>
</entry>
</complex>
</value>
</entry>
</complex>
</value>
</item>
<item id="1552d53f-3d86-455b-aeeb-fe5783eb0137" removed="true"/>
<item id="9c20eda2-e947-4aad-852f-cc811805c8d8" removed="true"/>
<item id="7f7f6354-c982-4561-8118-5599588b0093" removed="true"/>
<item id="0c16e426-de11-4287-88a5-09442c865a86" removed="true"/>
<item id="fda5280c-c4df-4b13-9c8a-2748af352c40" removed="true"/>
<item id="37f2214c-13f1-440b-be44-34adfb4358a5" removed="false">
<value>
<complex>
@ -1207,57 +940,7 @@
</complex>
</value>
</item>
<item id="1198327d-75ba-444f-8b06-cc92a345b2c0" removed="false">
<value>
<complex>
<entry>
<key>_isGroupSelected</key>
<value>
<simple>false</simple>
</value>
</entry>
<entry>
<key>one</key>
<value>
<complex>
<entry>
<key>conditionFirstPart</key>
<value>
<complex>
<entry>
<key>objectValue</key>
<value>
<complex>
<entry>
<key>behavior</key>
<value>
<simple>{"objectId":"f333d509-d21e-400a-abfb-afbc84e5c56b","packageName":"component.field","className":"TextField","type":"TS"}</simple>
</value>
</entry>
<entry>
<key>method</key>
<value>
<simple>"getValue"</simple>
</value>
</entry>
</complex>
</value>
</entry>
</complex>
</value>
</entry>
<entry>
<key>operation</key>
<value>
<simple>"IS_EMPTY"</simple>
</value>
</entry>
</complex>
</value>
</entry>
</complex>
</value>
</item>
<item id="1198327d-75ba-444f-8b06-cc92a345b2c0" removed="true"/>
<item id="2a2bc0c0-0f2b-4404-ac85-cbb001799560" removed="false">
<value>
<complex>
@ -1309,203 +992,9 @@
</complex>
</value>
</item>
<item id="3c3e048a-8cb4-46fb-9980-569f60a474cc" removed="false">
<value>
<complex>
<entry>
<key>_isGroupSelected</key>
<value>
<simple>false</simple>
</value>
</entry>
<entry>
<key>one</key>
<value>
<complex>
<entry>
<key>conditionFirstPart</key>
<value>
<complex>
<entry>
<key>objectValue</key>
<value>
<complex>
<entry>
<key>behavior</key>
<value>
<simple>{"objectId":"2d8045ff-efc0-44ab-8fa3-df34c239d16c","packageName":"account_applications.component.field","className":"DropdownTreeViewComponent","type":"TS"}</simple>
</value>
</entry>
<entry>
<key>method</key>
<value>
<simple>"getBusinessId"</simple>
</value>
</entry>
</complex>
</value>
</entry>
</complex>
</value>
</entry>
<entry>
<key>conditionSecondPart</key>
<value>
<simple>null</simple>
</value>
</entry>
<entry>
<key>operation</key>
<value>
<simple>"IS_EMPTY"</simple>
</value>
</entry>
</complex>
</value>
</entry>
</complex>
</value>
</item>
<item id="11132055-dfd8-41fc-99ac-da4ea2b5aaf0" removed="false">
<value>
<complex>
<entry>
<key>_isGroupSelected</key>
<value>
<simple>false</simple>
</value>
</entry>
<entry>
<key>one</key>
<value>
<complex>
<entry>
<key>conditionFirstPart</key>
<value>
<complex>
<entry>
<key>objectValue</key>
<value>
<complex>
<entry>
<key>argument</key>
<value>
<complex>
<entry>
<key>objectValue</key>
<value>
<complex>
<entry>
<key>argument</key>
<value>
<simple>null</simple>
</value>
</entry>
<entry>
<key>behavior</key>
<value>
<simple>{"objectId":"f04c6a48-0dd2-4308-a4ad-efad0e0e6f3e","packageName":"component.editablegrid.editors","className":"TextFieldGridEditor","type":"TS"}</simple>
</value>
</entry>
<entry>
<key>method</key>
<value>
<simple>"getTextValue"</simple>
</value>
</entry>
</complex>
</value>
</entry>
</complex>
</value>
</entry>
<entry>
<key>behavior</key>
<value>
<simple>{"objectId":"a44f98ec-c47e-40b3-983f-73b5a72bb31d","packageName":"component.editablegrid","className":"EditableGrid","type":"TS"}</simple>
</value>
</entry>
<entry>
<key>method</key>
<value>
<simple>"getValue"</simple>
</value>
</entry>
</complex>
</value>
</entry>
</complex>
</value>
</entry>
<entry>
<key>conditionSecondPart</key>
<value>
<simple>null</simple>
</value>
</entry>
<entry>
<key>operation</key>
<value>
<simple>"IS_EMPTY"</simple>
</value>
</entry>
</complex>
</value>
</entry>
</complex>
</value>
</item>
<item id="9ddc648a-572d-459e-bb7b-6e0ed5bbbc1c" removed="false">
<value>
<complex>
<entry>
<key>_isGroupSelected</key>
<value>
<simple>false</simple>
</value>
</entry>
<entry>
<key>one</key>
<value>
<complex>
<entry>
<key>conditionFirstPart</key>
<value>
<complex>
<entry>
<key>objectValue</key>
<value>
<complex>
<entry>
<key>behavior</key>
<value>
<simple>{"objectId":"ec5d9cdb-1eb5-4793-8cf0-f14a2f518626","packageName":"component.field","className":"TextField","type":"TS"}</simple>
</value>
</entry>
<entry>
<key>method</key>
<value>
<simple>"getValue"</simple>
</value>
</entry>
</complex>
</value>
</entry>
</complex>
</value>
</entry>
<entry>
<key>operation</key>
<value>
<simple>"IS_EMPTY"</simple>
</value>
</entry>
</complex>
</value>
</entry>
</complex>
</value>
</item>
<item id="3c3e048a-8cb4-46fb-9980-569f60a474cc" removed="true"/>
<item id="11132055-dfd8-41fc-99ac-da4ea2b5aaf0" removed="true"/>
<item id="9ddc648a-572d-459e-bb7b-6e0ed5bbbc1c" removed="true"/>
<item id="2550c4c6-fd61-46ee-bd6e-dfb6b9baadc6" removed="true"/>
</value>
</entry>
@ -1575,7 +1064,6 @@
<componentRootId>b15ecae8-7ddd-470b-821d-48a9e512bac0</componentRootId>
<name>Vbox_1</name>
<container>true</container>
<expanded>false</expanded>
<childrenReordered>false</childrenReordered>
<scripts id="bf098f19-480e-44e4-9084-aa42955c4d0f">
<properties>
@ -2077,9 +1565,9 @@
<scripts id="d9ac3145-9d66-42bd-9f24-1c3d0d2e31d0">
<expanded>false</expanded>
</scripts>
<scripts id="54e85176-10b6-40bd-91da-d9803b24e777">
<scripts id="695bb7e5-c28c-4e53-88fb-d66f1d0bf7a1">
<classRef type="TS">
<className>IdmLoginTextFieldValidation</className>
<className>IdmLoginValidator</className>
<packageName>account_applications.component.field</packageName>
</classRef>
<enabled>true</enabled>
@ -2318,9 +1806,9 @@
<scripts id="d9ac3145-9d66-42bd-9f24-1c3d0d2e31d0">
<expanded>false</expanded>
</scripts>
<scripts id="fa03ff89-29d0-40cc-9f7b-a7e2a5dbff75">
<scripts id="53a668b4-ca0b-4531-a194-d831bdaa5275">
<classRef type="TS">
<className>IdmSnilsTextFieldValidation</className>
<className>IdmSnilsValidator</className>
<packageName>account_applications.component.field</packageName>
</classRef>
<enabled>true</enabled>