import { MAX_FRANCHISE } from 'constants/values'; import DownloadOutlined from 'Elements/icons/DownloadOutlined'; import date from 'tools/date'; import { formatMoney, formatNumber } from 'tools/format'; import { pipe } from 'tools/function'; import { round } from 'tools/number'; import type { ElementsProps } from '../types/elements-props'; const props: Partial = { tbxLeaseObjectPrice: { min: 0.0, max: 1000000000.0, step: 10000.0, precision: 2, formatter: formatNumber, }, tbxLeaseObjectPriceWthtVAT: { min: 0.0, max: 1000000000.0, step: 10000.0, precision: 2, formatter: formatNumber, }, tbxVATInLeaseObjectPrice: { min: 0.0, max: 1000000000.0, step: 10000.0, precision: 2, formatter: formatNumber, }, tbxEngineHours: { min: 0.0, step: 10.0, precision: 2, formatter: formatNumber, }, tbxSupplierDiscountRub: { min: 0, max: 1000000000, step: 10000.0, precision: 2, formatter: formatNumber, }, tbxSupplierDiscountPerc: { min: 0, max: 100, precision: 2, formatter: formatNumber, }, radioBalanceHolder: { optionType: 'button', buttonStyle: 'solid', }, tbxSaleBonus: { min: 0.0, // max: 1.30, step: 0.1, precision: 2, formatter: formatNumber, }, tbxFirstPaymentPerc: { min: 0, max: 50, precision: 4, formatter: formatNumber, }, tbxFirstPaymentRub: { min: 0, max: 1000000000, step: 10000.0, precision: 2, formatter: formatNumber, }, tbxLastPaymentPerc: { min: 0, max: 70, step: 1.0, precision: 6, formatter: formatNumber, }, tbxLastPaymentRub: { min: 0, max: 1000000000, step: 10000.0, precision: 2, formatter: formatNumber, }, tbxRedemptionPaymentSum: { min: 1000, max: 2000, step: 1000.0, precision: 2, formatter: formatNumber, }, tbxLeasingPeriod: { min: 13, max: 60, }, tbxParmentsDecreasePercent: { min: 50, max: 99, }, tbxComissionPerc: { min: 0, max: 100, }, tbxComissionRub: { min: 0, max: 1000000000, step: 10000.0, }, selectLeaseObjectType: { showSearch: true, }, selectBrand: { showSearch: true, }, selectModel: { showSearch: true, }, selectConfiguration: { showSearch: true, }, radioDeliveryTime: { optionType: 'button', buttonStyle: 'solid', }, tbxLeaseObjectCount: { min: 1, max: 1000, }, selectLeaseObjectUseFor: { showSearch: true, }, tbxLeaseObjectYear: { min: 1994, max: date().year(), }, selectLeaseObjectCategory: { showSearch: false, }, selectEngineType: { showSearch: true, }, tbxLeaseObjectMotorPower: { min: 0.0, max: 20000.0, step: 10.0, precision: 2, formatter: formatNumber, }, tbxEngineVolume: { min: 0.0, max: 99.9999, step: 0.5, precision: 4, formatter: formatNumber, }, tbxMaxMass: { min: 0, max: 999999, step: 100, formatter: formatNumber, }, tbxCountSeats: { min: 0, max: 2000, }, tbxMaxSpeed: { min: 0, max: 2000, }, selectDealer: { showSearch: true, }, tbxDealerRewardSumm: { min: 0.0, max: 20.0, step: 0.1, precision: 2, formatter: formatNumber, }, tbxDealerBrokerRewardSumm: { min: 0.0, max: 20.0, step: 0.1, precision: 2, formatter: formatNumber, }, tbxIndAgentRewardSumm: { min: 0.0, max: 20.0, step: 0.1, precision: 2, formatter: formatNumber, }, tbxCalcDoubleAgentRewardSumm: { min: 0.0, max: 20.0, step: 0.1, precision: 2, formatter: formatNumber, }, tbxCalcBrokerRewardSum: { min: 0.0, max: 20.0, step: 0.1, precision: 2, formatter: formatNumber, }, tbxFinDepartmentRewardSumm: { min: 0.0, max: 20.0, step: 0.1, precision: 2, formatter: formatNumber, }, radioInsKaskoType: { optionType: 'button', buttonStyle: 'solid', }, tbxInsFranchise: { min: 0, max: MAX_FRANCHISE, step: 10000.0, precision: 2, formatter: formatNumber, }, tbxInsAgeDrivers: { // min: 18, // max: 99, }, tbxInsExpDrivers: { // min: 0, // max: 99, }, selectRegionRegistration: { showSearch: true, }, selectTownRegistration: { showSearch: true, }, radioQuoteContactGender: { optionType: 'button', buttonStyle: 'solid', }, btnCreateKP: { type: 'primary', text: 'Создать КП', }, tbxCreditRate: { min: 0.0, max: 99.99, step: 0.1, }, tbxMaxPriceChange: { min: 0, max: 34999990, step: 10000.0, }, tbxMinPriceChange: { min: 0, max: 34999990, step: 10000.0, }, tbxImporterRewardPerc: { min: 0.0, max: 99.99, step: 0.1, precision: 2, }, tbxImporterRewardRub: { min: 0.0, max: 1000000000.0, step: 10000.0, precision: 2, }, selectLead: { showSearch: true, }, selectOpportunity: { showSearch: true, }, selectQuote: { showSearch: true, }, btnCalculate: { text: 'Рассчитать график', type: 'primary', }, tbxIRR_Perc: { min: 0.0, max: 500.0, step: 0.0001, precision: 6, formatter: formatNumber, }, linkDownloadKp: { type: 'primary', text: 'Скачать КП', icon: DownloadOutlined, }, tbxMileage: { min: 0, step: 100.0, precision: 2, formatter: formatNumber, }, cbxRecalcWithRevision: { text: 'Пересчет без пересмотра', style: { marginBottom: '8px', }, }, radioCalcType: { optionType: 'button', buttonStyle: 'solid', }, tbxTotalPayments: { min: 0, step: 1000, precision: 2, formatter: formatNumber, }, tbxVehicleTaxInYear: { min: 0, step: 100, max: 9999999, precision: 2, }, tbxVehicleTaxInLeasingPeriod: { min: 0, step: 100, max: 9999999, precision: 2, }, selectObjectRegionRegistration: { showSearch: true, }, tbxInsKaskoPriceLeasePeriod: { min: 0, precision: 2, formatter: formatNumber, readOnly: true, controls: false, }, selectLegalClientRegion: { showSearch: true, }, selectLegalClientTown: { showSearch: true, }, radioInfuranceOPF: { optionType: 'button', buttonStyle: 'solid', }, }; const moneyResultElementsProps = ( [ 'labelResultTotalGraphwithNDS', 'labelResultPlPrice', 'labelResultInsKasko', 'labelResultInsOsago', 'labelResultDopProdSum', 'labelResultFirstPayment', 'labelResultLastPayment', 'labelResultAB_FL', 'labelResultAB_UL', 'labelResultBonusMPL', 'labelResultDopMPLLeasing', 'labelResultBonusDopProd', 'labelSubsidySum', 'labelResultBonusSafeFinance', ] as (keyof ElementsProps)[] ).reduce( (ac, a) => ({ ...ac, [a]: { middleware: (value: number) => pipe(round, formatMoney)(value), }, }), // eslint-disable-next-line object-curly-newline {} ); const numberResultElementsProps = ( [ 'labelResultPriceUpPr', 'labelResultIRRGraphPerc', 'labelResultIRRNominalPerc', 'labelResultTerm', 'labelResultFirstPaymentRiskPolicy', ] as (keyof ElementsProps)[] ).reduce( (ac, a) => ({ ...ac, [a]: { middleware: (value: number) => pipe(round)(value), }, }), // eslint-disable-next-line object-curly-newline {} ); export default Object.assign(props, moneyResultElementsProps, numberResultElementsProps);