From 0cd80ef783b1fd4ffefa31c6d0d05ea84404f244 Mon Sep 17 00:00:00 2001 From: vchikalkin Date: Mon, 13 Feb 2023 18:20:06 +0300 Subject: [PATCH] stores: refactor validationHelper usage --- .../process/fingap/reactions/validation.ts | 4 ++ .../leasing-object/reactions/validation.ts | 46 +++++++------------ apps/web/process/payments/reactions.ts | 8 +++- .../supplier-agent/lib/create-reactions.ts | 46 +++++++------------ apps/web/stores/calculation/index.ts | 10 ++-- apps/web/stores/tables/fingap/index.ts | 11 +++-- apps/web/stores/tables/insurance/index.ts | 11 +++-- apps/web/stores/tables/payments/index.ts | 11 +++-- apps/web/stores/validation/index.ts | 4 +- apps/web/stores/validation/types.ts | 3 ++ 10 files changed, 77 insertions(+), 77 deletions(-) diff --git a/apps/web/process/fingap/reactions/validation.ts b/apps/web/process/fingap/reactions/validation.ts index cd160d8..3a317f9 100644 --- a/apps/web/process/fingap/reactions/validation.ts +++ b/apps/web/process/fingap/reactions/validation.ts @@ -19,6 +19,10 @@ export default function validationReactions({ store }: ReactionsContext) { invalid: finGAPInsuranceCompany !== null && hasPaymentsErrors, message: 'Неверно заполнены платежи', }); + + if (hasPaymentsErrors) { + $tables.fingap.clear(); + } }, { fireImmediately: true, diff --git a/apps/web/process/leasing-object/reactions/validation.ts b/apps/web/process/leasing-object/reactions/validation.ts index 5608e7b..8eb1c7b 100644 --- a/apps/web/process/leasing-object/reactions/validation.ts +++ b/apps/web/process/leasing-object/reactions/validation.ts @@ -103,37 +103,25 @@ export default function validationReactions({ store, apolloClient }: ReactionsCo }, }); - $calculation - .element('tbxCountSeats') - .validate({ - invalid: evo_leasingobject_type?.evo_id === '1' && countSeats >= 9, - message: 'Количество мест должно быть меньше 9', - }) - .err((removeError) => { - validationHelper.add(removeError); - }); + $calculation.element('tbxCountSeats').validate({ + helper: validationHelper, + invalid: evo_leasingobject_type?.evo_id === '1' && countSeats >= 9, + message: 'Количество мест должно быть меньше 9', + }); - $calculation - .element('tbxCountSeats') - .validate({ - invalid: - (evo_leasingobject_type?.evo_id === '4' || evo_leasingobject_type?.evo_id === '5') && - countSeats <= 8, - message: 'Количество мест должно быть больше 8', - }) - .err((removeError) => { - validationHelper.add(removeError); - }); + $calculation.element('tbxCountSeats').validate({ + helper: validationHelper, + invalid: + (evo_leasingobject_type?.evo_id === '4' || evo_leasingobject_type?.evo_id === '5') && + countSeats <= 8, + message: 'Количество мест должно быть больше 8', + }); - $calculation - .element('tbxMaxMass') - .validate({ - invalid: evo_leasingobject_type?.evo_id === '2' && maxMass <= 0, - message: 'Не заполнено поле', - }) - .err((removeError) => { - validationHelper.add(removeError); - }); + $calculation.element('tbxMaxMass').validate({ + helper: validationHelper, + invalid: evo_leasingobject_type?.evo_id === '2' && maxMass <= 0, + message: 'Не заполнено поле', + }); } ); } diff --git a/apps/web/process/payments/reactions.ts b/apps/web/process/payments/reactions.ts index 3d26d08..8c58429 100644 --- a/apps/web/process/payments/reactions.ts +++ b/apps/web/process/payments/reactions.ts @@ -566,11 +566,15 @@ export function validationReactions({ store }: ReactionsContext) { }, () => { validationHelper.removeErrors(); + const errorText = validatePaymentsTable(store); if (errorText) { - const removeError = $tables.payments.validation.addError(errorText); - validationHelper.add(removeError); + $tables.payments.validate({ + helper: validationHelper, + invalid: errorText !== null, + message: errorText, + }); } }, { diff --git a/apps/web/process/supplier-agent/lib/create-reactions.ts b/apps/web/process/supplier-agent/lib/create-reactions.ts index b0a119b..dfd54c0 100644 --- a/apps/web/process/supplier-agent/lib/create-reactions.ts +++ b/apps/web/process/supplier-agent/lib/create-reactions.ts @@ -147,44 +147,32 @@ export function validateAgentRewardSumm( } if (evo_reward_condition.evo_reward_summ) { - $calculation - .element(rewardSummField) - .validate({ - invalid: rewardSumm > evo_reward_condition?.evo_reward_summ, - message: 'Вознаграждение указано больше условия по агентскому договору!', - }) - .err((removeError) => { - validationHelper.add(removeError); - }); + $calculation.element(rewardSummField).validate({ + helper: validationHelper, + invalid: rewardSumm > evo_reward_condition?.evo_reward_summ, + message: 'Вознаграждение указано больше условия по агентскому договору!', + }); } if ( evo_reward_condition?.evo_reduce_reward !== null && evo_reward_condition.evo_reward_summ ) { - $calculation - .element(rewardSummField) - .validate({ - invalid: - evo_reward_condition.evo_reduce_reward === false && - rewardSumm < evo_reward_condition.evo_reward_summ, - message: 'Вознаграждение указано меньше условия по агентскому договору!', - }) - .err((removeError) => { - validationHelper.add(removeError); - }); + $calculation.element(rewardSummField).validate({ + helper: validationHelper, + invalid: + evo_reward_condition.evo_reduce_reward === false && + rewardSumm < evo_reward_condition.evo_reward_summ, + message: 'Вознаграждение указано меньше условия по агентскому договору!', + }); } if (evo_reward_condition?.evo_min_reward_summ !== null) { - $calculation - .element(rewardSummField) - .validate({ - invalid: rewardSumm < evo_reward_condition?.evo_min_reward_summ, - message: 'Вознаграждение указано меньше условия по агентскому договору!', - }) - .err((removeError) => { - validationHelper.add(removeError); - }); + $calculation.element(rewardSummField).validate({ + helper: validationHelper, + invalid: rewardSumm < evo_reward_condition?.evo_min_reward_summ, + message: 'Вознаграждение указано меньше условия по агентскому договору!', + }); } } ); diff --git a/apps/web/stores/calculation/index.ts b/apps/web/stores/calculation/index.ts index f8048a2..42816cb 100644 --- a/apps/web/stores/calculation/index.ts +++ b/apps/web/stores/calculation/index.ts @@ -99,21 +99,19 @@ export default class CalculationStore { return this.element(elementName); }, - validate: ({ invalid, message, silent }: ValidationParams) => { + validate: ({ invalid, message, silent, helper }: ValidationParams) => { if (!this.$validation[elementName]) this.createElementValidation(elementName); let removeError: RemoveError | undefined; + if (invalid) { removeError = this.$validation[elementName]?.addError(message, silent); + if (helper && removeError) helper.add(removeError); } else { this.$validation[elementName]?.removeError(message); } - return { - err(callback: (removeError: RemoveError) => void) { - if (removeError) callback(removeError); - }, - }; + return removeError; }, }); } diff --git a/apps/web/stores/tables/fingap/index.ts b/apps/web/stores/tables/fingap/index.ts index f2aefd5..9df4da9 100644 --- a/apps/web/stores/tables/fingap/index.ts +++ b/apps/web/stores/tables/fingap/index.ts @@ -1,5 +1,5 @@ import Validation from '../../validation'; -import type { ValidationParams } from '../../validation/types'; +import type { RemoveError, ValidationParams } from '../../validation/types'; import type * as FinGAP from '@/Components/Calculation/Form/Insurance/FinGAPTable/types'; import type RootStore from '@/stores/root'; import type { IObservableArray } from 'mobx'; @@ -38,12 +38,17 @@ export default class FinGAPTable { .reduce((sum, risk) => sum + risk.premium, 0); } - public validate = ({ invalid, message }: ValidationParams) => { + public validate = ({ invalid, message, helper }: ValidationParams) => { + let removeError: RemoveError | undefined; + if (invalid) { - this.validation?.addError(message); + removeError = this.validation?.addError(message); + if (helper && removeError) helper.add(removeError); } else { this.validation?.removeError(message); } + + return removeError; }; public clear = () => { diff --git a/apps/web/stores/tables/insurance/index.ts b/apps/web/stores/tables/insurance/index.ts index 15084c4..b082e03 100644 --- a/apps/web/stores/tables/insurance/index.ts +++ b/apps/web/stores/tables/insurance/index.ts @@ -1,5 +1,5 @@ import Validation from '../../validation'; -import type { ValidationParams } from '../../validation/types'; +import type { RemoveError, ValidationParams } from '../../validation/types'; import type * as Insurance from '@/Components/Calculation/Form/Insurance/InsuranceTable/types'; import * as insuranceTableConfig from '@/config/tables/insurance-table'; import type RootStore from '@/stores/root'; @@ -40,12 +40,17 @@ export default class InsuranceTable { if (initialStatuses) this.statuses = initialStatuses; }; - public validate = ({ invalid, message }: ValidationParams) => { + public validate = ({ invalid, message, helper }: ValidationParams) => { + let removeError: RemoveError | undefined; + if (invalid) { - this.validation?.addError(message); + removeError = this.validation?.addError(message); + if (helper && removeError) helper.add(removeError); } else { this.validation?.removeError(message); } + + return removeError; }; public reset = () => { diff --git a/apps/web/stores/tables/payments/index.ts b/apps/web/stores/tables/payments/index.ts index 5a8f4b6..cbe63eb 100644 --- a/apps/web/stores/tables/payments/index.ts +++ b/apps/web/stores/tables/payments/index.ts @@ -1,5 +1,5 @@ import Validation from '../../validation'; -import type { ValidationParams } from '../../validation/types'; +import type { RemoveError, ValidationParams } from '../../validation/types'; import type { Row } from './types'; import type RootStore from '@/stores/root'; import type { IObservableArray } from 'mobx'; @@ -72,12 +72,17 @@ export default class PaymentsTable { this.setStatuses(statuses); }; - public validate = ({ invalid, message }: ValidationParams) => { + public validate = ({ invalid, message, helper }: ValidationParams) => { + let removeError: RemoveError | undefined; + if (invalid) { - this.validation?.addError(message); + removeError = this.validation?.addError(message); + if (helper && removeError) helper.add(removeError); } else { this.validation?.removeError(message); } + + return removeError; }; public reset = () => { diff --git a/apps/web/stores/validation/index.ts b/apps/web/stores/validation/index.ts index 9092fe1..e9c86b7 100644 --- a/apps/web/stores/validation/index.ts +++ b/apps/web/stores/validation/index.ts @@ -1,4 +1,4 @@ -import type { ValidationConfig } from './types'; +import type { RemoveError, ValidationConfig } from './types'; import { makeAutoObservable } from 'mobx'; import notification from 'ui/elements/notification'; @@ -36,7 +36,7 @@ export default class Validation { this.messages.add(message); - return () => this.removeError(message); + return (() => this.removeError(message)) as RemoveError; }; public clearErrors = () => { diff --git a/apps/web/stores/validation/types.ts b/apps/web/stores/validation/types.ts index c5ef5c9..4c27464 100644 --- a/apps/web/stores/validation/types.ts +++ b/apps/web/stores/validation/types.ts @@ -1,9 +1,12 @@ +import type ValidationHelper from './helper'; + export type ValidationConfig = { err_key: string; err_title: string; }; export type ValidationParams = { + helper?: ValidationHelper; invalid: boolean; message: string; silent?: boolean;