From e5b0d7a746330144e1a32c062c552256aeb148a1 Mon Sep 17 00:00:00 2001 From: vchikalkin Date: Wed, 12 Apr 2023 17:17:09 +0300 Subject: [PATCH] process/calculate(validation): disable reset options value on load-kp --- .../web/process/calculate/reactions/validation.ts | 11 ++++++++--- packages/tools/object.ts | 15 +++++++++++++++ 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/apps/web/process/calculate/reactions/validation.ts b/apps/web/process/calculate/reactions/validation.ts index 6dbb79b..4592fbf 100644 --- a/apps/web/process/calculate/reactions/validation.ts +++ b/apps/web/process/calculate/reactions/validation.ts @@ -6,6 +6,7 @@ import ValidationHelper from '@/stores/validation/helper'; import { disposableReaction } from '@/utils/mobx'; import { reaction } from 'mobx'; import { uid } from 'radash'; +import { filterObject } from 'tools'; import type { BaseOption } from 'ui/elements/types'; function hasInvalidValueOrOptions(value: unknown, options: Array>) { @@ -92,7 +93,8 @@ export default function reactions({ store }: ProcessContext) { } ); - reaction( + disposableReaction( + () => $process.has('LoadKP'), () => element.getOptions(), (options) => { const value = element.getValue(); @@ -106,7 +108,9 @@ export default function reactions({ store }: ProcessContext) { ); } - (Object.keys(types) as Values.Elements[]).forEach((elementName) => + const optionsTypes = filterObject(types, (type) => type().typeName === 'Options'); + + (Object.keys(optionsTypes) as Values.Elements[]).forEach((elementName) => validateOptionsElement(elementName) ); @@ -142,7 +146,8 @@ export default function reactions({ store }: ProcessContext) { } ); - reaction( + disposableReaction( + () => $process.has('LoadKP'), () => row.getOptions('insuranceCompany'), (options) => { const value = row.getValue('insuranceCompany'); diff --git a/packages/tools/object.ts b/packages/tools/object.ts index 7d79028..eaacfd8 100644 --- a/packages/tools/object.ts +++ b/packages/tools/object.ts @@ -1,3 +1,18 @@ export function flatten(obj: object) { return Object.values(obj).flat(); } + +export function filterObject( + obj: T, + filter: (value: T[keyof T]) => boolean +): Omit { + const keys = Object.keys(obj) as Array; + + return keys.reduce((acc, objKey) => { + if (filter(obj[objKey])) { + acc[objKey] = obj[objKey]; + } + + return acc; + }, {} as T); +}