86 lines
3.0 KiB
TypeScript
86 lines
3.0 KiB
TypeScript
/* eslint-disable @typescript-eslint/naming-convention */
|
||
import * as CRMTypes from '@/graphql/crm.types';
|
||
import type { ReactionsContext } from '@/process/types';
|
||
import { autorun, reaction } from 'mobx';
|
||
import { pick } from 'radash';
|
||
|
||
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(
|
||
() =>
|
||
pick($calculation.$values.values, [
|
||
'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: 'Не заполнено поле',
|
||
});
|
||
}
|
||
);
|
||
}
|