/* eslint-disable @typescript-eslint/naming-convention */ import * as CRMTypes from '@/graphql/crm.types'; import type { ProcessContext } from '@/process/types'; import ValidationHelper from '@/stores/validation/helper'; import { autorun, reaction } from 'mobx'; export default function reactions({ store, apolloClient }: ProcessContext) { const { $calculation } = store; /** * Если model содержит данные и по связи Модель-Комплектация в CRM у данной модели есть связанные активные записи Комплектаций, * то configuration становится обязательным для заполнения, иначе configuration не обязателен для заполнения */ autorun( () => { const selectConfiguration = $calculation.element('selectConfiguration'); selectConfiguration.validate({ invalid: selectConfiguration.getOptions()?.length > 0 && !selectConfiguration.getValue(), message: 'Не заполнено поле', }); }, { delay: 10, } ); reaction( () => $calculation.$values.getValues([ 'leaseObjectType', 'engineVolume', 'engineType', 'leaseObjectMotorPower', ]), async ({ engineType, engineVolume, leaseObjectType: leaseObjectTypeId, leaseObjectMotorPower, }) => { if (!leaseObjectTypeId) { $calculation.element('selectEngineType').unblock(); $calculation.element('tbxEngineVolume').unblock(); $calculation.element('tbxLeaseObjectMotorPower').unblock(); return; } const { data: { evo_leasingobject_type }, } = await apolloClient.query({ query: CRMTypes.GetLeaseObjectTypeDocument, variables: { leaseObjectTypeId, }, }); if (evo_leasingobject_type?.evo_id === '8') { $calculation.element('selectEngineType').resetValue().block(); $calculation.element('tbxEngineVolume').resetValue().block(); $calculation.element('tbxLeaseObjectMotorPower').resetValue().block(); } else { $calculation.element('selectEngineType').unblock(); $calculation.element('tbxEngineVolume').unblock(); $calculation.element('tbxLeaseObjectMotorPower').unblock(); } const isNotTrailer = evo_leasingobject_type?.evo_id !== null && evo_leasingobject_type?.evo_id !== '8'; $calculation.element('tbxEngineVolume').validate({ invalid: isNotTrailer && engineVolume <= 0, message: 'Не заполнено поле', }); $calculation.element('selectEngineType').validate({ invalid: isNotTrailer && !engineType, message: 'Не заполнено поле', }); $calculation.element('tbxLeaseObjectMotorPower').validate({ invalid: isNotTrailer && leaseObjectMotorPower <= 0, message: 'Не заполнено поле', }); } ); { const validationHelper = new ValidationHelper(); reaction( () => $calculation.$values.getValues(['leaseObjectType', 'countSeats', 'maxMass']), async ({ countSeats, leaseObjectType: leaseObjectTypeId, maxMass }) => { if (!leaseObjectTypeId) { validationHelper.removeErrors(); return; } const { data: { evo_leasingobject_type }, } = await apolloClient.query({ query: CRMTypes.GetLeaseObjectTypeDocument, variables: { leaseObjectTypeId, }, }); $calculation.element('tbxCountSeats').validate({ helper: validationHelper, invalid: evo_leasingobject_type?.evo_id === '1' && countSeats >= 9, message: 'Количество мест должно быть меньше 9', }); $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({ helper: validationHelper, invalid: evo_leasingobject_type?.evo_id === '2' && maxMass <= 0, message: 'Не заполнено поле', }); } ); } { const validationHelper = new ValidationHelper(); reaction( () => $calculation.$values.getValues(['leaseObjectType', 'leaseObjectCategory']), async ({ leaseObjectCategory, leaseObjectType: leaseObjectTypeId }) => { if (!leaseObjectTypeId) { validationHelper.removeErrors(); return; } const { data: { evo_leasingobject_type }, } = await apolloClient.query({ query: CRMTypes.GetLeaseObjectTypeDocument, variables: { leaseObjectTypeId, }, }); $calculation.element('selectLeaseObjectCategory').validate({ helper: validationHelper, invalid: !leaseObjectCategory && Boolean( evo_leasingobject_type?.evo_id && !['6', '9', '10'].includes(evo_leasingobject_type?.evo_id) ), message: 'Не заполнено поле', }); } ); } }