stores: specify values types for ValuesStore

This commit is contained in:
Chika 2022-04-30 15:01:50 +03:00
parent eea6598211
commit 5ae2a6ca53
2 changed files with 258 additions and 154 deletions

View File

@ -1,38 +1,36 @@
import { makeAutoObservable } from 'mobx';
import { RootStore } from '../../root';
import { Values } from './types';
export type CalculationValues = Partial<Record<Values, any>>;
import { Values, ValuesTypes } from './types';
export class ValuesStore {
root: RootStore;
#values: CalculationValues = {};
#values: Partial<ValuesTypes> = {};
constructor(rootStore: RootStore) {
makeAutoObservable(this);
this.root = rootStore;
}
hydrate = (initialValues: CalculationValues) => {
hydrate = (initialValues: Partial<ValuesTypes>) => {
this.#values = initialValues;
};
getValue(valueName: Values) {
getValue<K extends Values>(valueName: K): Partial<ValuesTypes>[K] {
return this.#values[valueName];
}
getValues<K extends Values>(valuesNames: readonly K[]) {
return valuesNames.reduce((values, valueName) => {
values[valueName] = this.#values[valueName];
values[valueName] = this.getValue(valueName);
return values;
}, {} as Record<K, any>);
}, {} as Pick<Partial<ValuesTypes>, typeof valuesNames[number]>);
}
setValue(valueName: Values, value: any) {
this.#values[valueName] = value;
}
setValues(values: CalculationValues, options: { replace?: boolean }) {
setValues(values: Partial<ValuesTypes>, options: { replace?: boolean }) {
if (options.replace) this.#values = values;
this.#values = Object.assign(this.#values, values);
}

View File

@ -1,149 +1,255 @@
export type Values =
| 'lead'
| 'opportunity'
| 'quote'
| 'recalcWithRevision'
| 'product'
| 'clientRisk'
| 'clientType'
| 'leaseObjectPrice'
| 'supplierCurrency'
| 'supplierDiscountRub'
| 'supplierDiscountPerc'
| 'leasingPeriod'
| 'firstPaymentPerc'
| 'firstPaymentRub'
| 'lastPaymentPerc'
| 'lastPaymentRub'
| 'lastPaymentRule'
| 'redemptionPaymentSum'
| 'balanceHolder'
| 'graphType'
| 'parmentsDecreasePercent'
| 'seasonType'
| 'highSeasonStart'
| 'comissionPerc'
| 'comissionRub'
| 'saleBonus'
| 'IRR_Perc'
| 'paymentGraph'
| 'leaseObjectType'
| 'deliveryTime'
| 'leaseObjectRisk'
| 'depreciationGroup'
| 'leaseObjectCount'
| 'withTrailer'
| 'leaseObjectUsed'
| 'maxMass'
| 'countSeats'
| 'maxSpeed'
| 'brand'
| 'model'
| 'configuration'
| 'leaseObjectYear'
| 'engineType'
| 'leaseObjectCategory'
| 'leaseObjectMotorPower'
| 'engineVolume'
| 'leaseObjectUseFor'
| 'dealer'
| 'dealerPerson'
| 'dealerRewardCondition'
| 'dealerRewardSumm'
| 'dealerBroker'
| 'dealerBrokerRewardCondition'
| 'dealerBrokerRewardSumm'
| 'indAgent'
| 'indAgentRewardCondition'
| 'indAgentRewardSumm'
| 'calcDoubleAgent'
| 'calcDoubleAgentRewardCondition'
| 'calcDoubleAgentRewardSumm'
| 'calcBroker'
| 'calcBrokerRewardCondition'
| 'calcBrokerRewardSum'
| 'calcFinDepartment'
| 'finDepartmentRewardCondtion'
| 'finDepartmentRewardSumm'
| 'GPSBrand'
| 'GPSModel'
| 'regionRegistration'
| 'townRegistration'
| 'infuranceOPF'
| 'insKaskoType'
| 'insDecentral'
| 'insFranchise'
| 'insUnlimitDrivers'
| 'insAgeDrivers'
| 'insExpDrivers'
| 'INNForCalc'
| 'lastPaymentRedemption'
| 'priceWithDiscount'
| 'fullPriceWithDiscount'
| 'costIncrease'
| 'insurance'
| 'registrationQuote'
| 'technicalCardQuote'
| 'NSIB'
| 'quoteName'
| 'quoteContactGender'
| 'quoteRedemptionGraph'
| 'showFinGAP'
| 'tarif'
| 'creditRate'
| 'rate'
| 'requirementTelematic'
| 'maxPriceChange'
| 'importerRewardPerc'
| 'importerRewardRub'
| 'disableChecks'
| 'registration'
| 'insNSIB'
| 'technicalCard'
| 'telematic'
| 'tracker'
| 'mileage'
| 'calcType'
| 'totalPayments'
| 'objectRegistration'
| 'objectRegionRegistration'
| 'vehicleTaxInYear'
| 'vehicleTaxInLeasingPeriod'
| 'objectCategoryTax'
| 'objectTypeTax'
| 'typePTS'
| 'legalClientRegion'
| 'legalClientTown'
| 'subsidy'
| 'subsidySum'
| 'fuelCard'
| 'minPriceChange'
| 'leaseObjectPriceWthtVAT'
| 'VATInLeaseObjectPrice'
| 'engineHours'
export interface ValuesTypes {
lead: string;
opportunity: string;
quote: string;
recalcWithRevision: boolean;
product: string;
clientRisk: string;
clientType: string;
leaseObjectPrice: number;
supplierCurrency: string;
supplierDiscountRub: number;
supplierDiscountPerc: number;
leasingPeriod: number;
firstPaymentPerc: number;
firstPaymentRub: number;
lastPaymentPerc: number;
lastPaymentRub: number;
lastPaymentRule: 100_000_000 | 100_000_001 | 100_000_002;
redemptionPaymentSum: number;
balanceHolder: 100_000_000 | 100_000_001;
graphType:
| 100_000_000
| 100_000_001
| 100_000_002
| 100_000_003
| 100_000_004;
parmentsDecreasePercent: number;
seasonType:
| 100_000_000
| 100_000_001
| 100_000_002
| 100_000_003
| 100_000_004
| 100_000_005
| 100_000_006
| 100_000_007;
highSeasonStart:
| 100_000_000
| 100_000_001
| 100_000_002
| 100_000_003
| 100_000_004
| 100_000_005
| 100_000_006
| 100_000_007
| 100_000_008
| 100_000_009
| 100_000_010
| 100_000_011
| 100_000_012;
comissionPerc: number;
comissionRub: number;
saleBonus: number;
IRR_Perc: number;
leaseObjectType: string;
deliveryTime:
| 100_000_000
| 100_000_001
| 100_000_002
| 100_000_003
| 100_000_004
| 100_000_005
| 100_000_006
| 100_000_007
| 100_000_008
| 100_000_009
| 100_000_010
| 100_000_011
| 100_000_012;
depreciationGroup: string;
leaseObjectCount: number;
withTrailer: boolean;
leaseObjectUsed: boolean;
maxMass: number;
countSeats: number;
maxSpeed: number;
brand: string;
model: string;
configuration: string;
leaseObjectYear: number;
engineType:
| 100_000_000
| 100_000_001
| 100_000_002
| 100_000_003
| 100_000_004;
leaseObjectCategory:
| 100_000_000
| 100_000_001
| 100_000_002
| 100_000_003
| 100_000_004;
leaseObjectMotorPower: number;
engineVolume: number;
leaseObjectUseFor:
| 100_000_000
| 100_000_001
| 100_000_002
| 100_000_003
| 100_000_004
| 100_000_005
| 100_000_006
| 100_000_007
| 100_000_008
| 100_000_009
| 100_000_010
| 100_000_011
| 100_000_012
| 100_000_013
| 100_000_014
| 100_000_015
| 100_000_016
| 100_000_017
| 100_000_018
| 100_000_019;
dealer: string;
dealerPerson: string;
dealerRewardCondition: string;
dealerRewardSumm: number;
dealerBroker: string;
dealerBrokerRewardCondition: string;
dealerBrokerRewardSumm: number;
indAgent: string;
indAgentRewardCondition: string;
indAgentRewardSumm: number;
calcDoubleAgent: string;
calcDoubleAgentRewardCondition: string;
calcDoubleAgentRewardSumm: number;
calcBroker: string;
calcBrokerRewardCondition: string;
calcBrokerRewardSum: number;
calcFinDepartment: string;
finDepartmentRewardCondtion: string;
finDepartmentRewardSumm: number;
GPSBrand: string;
GPSModel: string;
regionRegistration: string;
townRegistration: string;
infuranceOPF: 100_000_000 | 100_000_001;
insKaskoType: 100_000_000 | 100_000_001;
insDecentral: boolean;
insFranchise: number;
insUnlimitDrivers: boolean;
insAgeDrivers: number;
insExpDrivers: number;
INNForCalc: number;
lastPaymentRedemption: boolean;
priceWithDiscount: boolean;
fullPriceWithDiscount: boolean;
costIncrease: boolean;
insurance: boolean;
registrationQuote: boolean;
technicalCardQuote: boolean;
NSIB: boolean;
quoteName: string;
quoteContactGender: 100_000_000 | 100_000_001;
quoteRedemptionGraph: boolean;
showFinGAP: boolean;
tarif: string;
creditRate: number;
rate: string;
requirementTelematic:
| 100_000_000
| 100_000_001
| 100_000_002
| 100_000_003
| 100_000_004
| 100_000_005
| 100_000_006
| 100_000_007;
minPriceChange: number;
maxPriceChange: number;
importerRewardPerc: number;
importerRewardRub: number;
disableChecks: boolean;
registration: string;
insNSIB: string;
technicalCard: string;
telematic: string;
tracker: string;
mileage: number;
calcType: 100_000_000 | 100_000_001;
totalPayments: number;
objectRegistration: 100_000_000 | 100_000_001;
objectRegionRegistration: string;
vehicleTaxInYear: number;
vehicleTaxInLeasingPeriod: number;
objectCategoryTax:
| 100_000_000
| 100_000_001
| 100_000_002
| 100_000_003
| 100_000_004
| 100_000_005
| 100_000_006
| 100_000_007
| 100_000_008
| 100_000_009
| 100_000_010
| 100_000_011
| 100_000_012
| 100_000_013
| 100_000_014
| 100_000_015
| 100_000_016
| 100_000_017
| 100_000_018
| 100_000_019
| 100_000_020;
objectTypeTax:
| 100_000_000
| 100_000_001
| 100_000_002
| 100_000_003
| 100_000_004
| 100_000_005;
typePTS: 100_000_000 | 100_000_001;
legalClientRegion: string;
legalClientTown: string;
subsidy: string;
subsidySum: number;
fuelCard: string;
leaseObjectPriceWthtVAT: number;
VATInLeaseObjectPrice: number;
engineHours: number;
/** Result Values */
| 'resultTotalGraphwithNDS'
| 'resultPlPrice'
| 'resultPriceUpPr'
| 'resultIRRGraphPerc'
| 'resultIRRNominalPerc'
| 'resultInsKasko'
| 'resultInsOsago'
| 'resultDopProdSum'
| 'resultFirstPayment'
| 'resultLastPayment'
| 'resultTerm'
| 'resultAB_FL'
| 'resultAB_UL'
| 'resultBonusMPL'
| 'resultDopMPLLeasing'
| 'resultBonusDopProd'
| 'resultBonusSafeFinance'
| 'resultFirstPaymentRiskPolicy'
resultTotalGraphwithNDS: number;
resultPlPrice: number;
resultPriceUpPr: number;
resultIRRGraphPerc: number;
resultIRRNominalPerc: number;
resultInsKasko: number;
resultInsOsago: number;
resultDopProdSum: number;
resultFirstPayment: number;
resultLastPayment: number;
resultTerm: number;
resultAB_FL: number;
resultAB_UL: number;
resultBonusMPL: number;
resultDopMPLLeasing: number;
resultBonusDopProd: number;
resultBonusSafeFinance: number;
resultFirstPaymentRiskPolicy: number;
/** Link Values */
| 'kpUrl'
| 'leadUrl'
| 'opportunityUrl'
| 'quoteUrl';
kpUrl: string;
leadUrl: string;
opportunityUrl: string;
quoteUrl: string;
}
export type Values = keyof ValuesTypes;