Created
April 1, 2023 09:55
-
-
Save imgsrc/4c780953a5cacfe7309b09372c917318 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import * as yup from 'yup'; | |
import cleanDeep from 'clean-deep'; | |
import { INewDriver, IReplacedCar, ISvZak, ITransport } from 'AppFeatures/ETRN/types/IEtrnContent'; | |
import { isObjectNotEmpty } from 'AppFeatures/ETRN/lib'; | |
yup.setLocale({ | |
mixed: { | |
required: 'Обязательное поле', | |
}, | |
string: { | |
max: 'Максимум ${max} символов', | |
min: 'Минимум ${min} символов', | |
length: 'Длина должна быть ${length} символов', | |
}, | |
}); | |
const transportFields = yup.object({ | |
ТипВлад: yup.string().required(), | |
РегНомер: yup.string().required(), | |
НомСТС: yup.string(), | |
НомерВИН: yup.string(), | |
ПарТС: yup.object({ | |
Тип: yup.string().required(), | |
Марка: yup.string().required(), | |
Грузопод: yup.number().nullable(true).required(), | |
Вместим: yup.number().nullable(true).required(), | |
}), | |
ОснАрЛиз: yup.array(yup.object({})).when('ТипВлад', { | |
is: (ТипВлад: string) => ТипВлад === '3' || ТипВлад === '4' || ТипВлад === '5', | |
then: (ОснАрЛиз) => ОснАрЛиз.min(1, 'Обязательное поле'), | |
}), | |
}); | |
export const driverFields = yup.object({ | |
НовВодит: yup.object().shape( | |
{ | |
НомВУ: yup | |
.string() | |
.max(20) | |
.when('ИННФЛ', { | |
is: (ИННФЛ: string) => !ИННФЛ, | |
then: () => | |
yup.string().required('Заполните номер, серию и дату водительского удостоверения или ИНН'), | |
}), | |
СерВУ: yup | |
.string() | |
.max(20) | |
.when('ИННФЛ', { | |
is: (ИННФЛ: string) => !ИННФЛ, | |
then: () => | |
yup.string().required('Заполните номер, серию и дату водительского удостоверения или ИНН'), | |
}), | |
ДатаВыдВУ: yup.string().when('ИННФЛ', { | |
is: (val: string) => !val, | |
then: () => yup.string().required('Заполните номер, серию и дату водительского удостоверения или ИНН'), | |
}), | |
ИННФЛ: yup | |
.string() | |
.min(12, 'ИНН 12 символов') | |
.max(12, 'ИНН 12 символов') | |
.when(['ДатаВыдВУ', 'НомВУ', 'СерВУ'], { | |
is: (ДатаВыдВУ: string, НомВУ: string, СерВУ: string) => !НомВУ || !СерВУ || !ДатаВыдВУ, | |
then: () => | |
yup | |
.string() | |
.required('Заполните номер, серию и дату водительского удостоверения или ИНН') | |
.min(12, 'ИНН 12 символов') | |
.max(12, 'ИНН 12 символов'), | |
}) | |
.matches(/([0-9]{1}[1-9]{1}|[1-9]{1}[0-9]{1})[0-9]{10}/, { | |
excludeEmptyString: true, | |
message: 'Невалидный формат', | |
}), | |
СвСпИдПодп: yup.string().max(1000), | |
Тлф: yup | |
.array( | |
yup.object({ | |
Тлф: yup.string().max(20).required(), | |
}), | |
) | |
.min(1), | |
ФИО: yup.object({ | |
Фамилия: yup.string().max(60).required(), | |
Имя: yup.string().max(60).required(), | |
Отчество: yup.string().max(60), | |
}), | |
ПутевойЛист: yup.array(yup.object({})), | |
}, | |
[ | |
['ИННФЛ', 'НомВУ'], | |
['ИННФЛ', 'СерВУ'], | |
['ИННФЛ', 'ДатаВыдВУ'], | |
], | |
), | |
ДокПерГрВод: yup.array(yup.object({})), | |
}); | |
export const schema = yup.object({ | |
Файл: yup.object({ | |
Документ: yup.object({ | |
СодИнфЗамен: yup.object().shape( | |
{ | |
ЗаменВодит: yup | |
.array(driverFields) | |
.min(1) | |
.when('ЗаменТС', { | |
is: (ЗаменТС: IReplacedCar[]) => cleanDeep(ЗаменТС).length > 0, | |
then: yup.array().min(0).notRequired(), | |
}), | |
ЗаменТС: yup | |
.array( | |
yup.object().shape( | |
{ | |
ТС: transportFields.when('Прицеп', { | |
is: (Прицеп: ITransport[]) => cleanDeep(Прицеп).length > 0, | |
then: yup.object().notRequired(), | |
}), | |
Прицеп: yup | |
.array(transportFields) | |
.min(1) | |
.when('ТС', { | |
is: (ТС: ITransport) => isObjectNotEmpty(ТС), | |
then: yup.array().min(0).notRequired(), | |
}), | |
}, | |
[['ТС', 'Прицеп']], | |
), | |
) | |
.min(1) | |
.when('ЗаменВодит', { | |
is: (ЗаменВодит: INewDriver[]) => cleanDeep(ЗаменВодит).length > 0, | |
then: yup.array().min(0).notRequired(), | |
}), | |
СодОпер: yup.string().required(), | |
ДатЗамен: yup.string().nullable(true), | |
ВрЗамен: yup.string().nullable(true), | |
UTCПА: yup.string().nullable(true), | |
НалКоорТочВрПА: yup.string(), | |
ПричЗамДок: yup.object({}).when('ПричЗамТекст', { | |
is: (ПричЗамТекст: string) => !ПричЗамТекст, | |
then: (ПричЗамДок) => ПричЗамДок.required(), | |
}), | |
ПричЗамТекст: yup.string().when('ПричЗамДок', { | |
is: (ПричЗамДок: ISvZak) => !ПричЗамДок, | |
then: (ПричЗамТекст) => ПричЗамТекст.required(), | |
}), | |
}, | |
[ | |
['ПричЗамДок', 'ПричЗамТекст'], | |
['ЗаменВодит', 'ЗаменТС'], | |
], | |
), | |
}), | |
}), | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment