128 lines
4.3 KiB
TypeScript
128 lines
4.3 KiB
TypeScript
/* eslint-disable @typescript-eslint/naming-convention */
|
||
import * as CRMTypes from '@/graphql/crm.types';
|
||
import type { ReactionsContext } from '@/process/types';
|
||
import ValidationHelper from '@/stores/validation/helper';
|
||
import { autorun, reaction } from 'mobx';
|
||
|
||
export default function validationReactions({ store, apolloClient }: ReactionsContext) {
|
||
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: 'Не заполнено поле',
|
||
});
|
||
}
|
||
);
|
||
}
|