/* eslint-disable object-curly-newline */ import defaultValues from 'config/default-values'; import { makeAutoObservable } from 'mobx'; import type RootStore from '../../root'; import type { CalculationValues, Values } from './types'; export default class ValuesStore { root: RootStore; values: CalculationValues = defaultValues; constructor(rootStore: RootStore) { makeAutoObservable(this); this.root = rootStore; } hydrate = (initialValues: CalculationValues) => { this.values = initialValues; }; getValue(valueName: V) { return this.values[valueName]; } getValues(valuesNames: readonly V[]) { return valuesNames.reduce((values, valueName) => { // eslint-disable-next-line no-param-reassign values[valueName] = this.getValue(valueName); return values; }, {} as Pick); } setValue = (valueName: V, value: CalculationValues[V]) => { this.values[valueName] = value; }; setValues = ( values: Partial, settings?: { reset: boolean; exclude: Values[] } ) => { if (settings?.reset) { this.resetValues( (Object.keys(defaultValues) as Values[]).filter( (valueName) => !settings?.exclude.includes(valueName) ) ); } (Object.keys(values) as Values[]).forEach((valueName) => { this.setValue(valueName, values[valueName]!); }); }; resetValue = (valueName: Values) => { this.setValue(valueName, defaultValues[valueName]); }; resetValues = (valuesNames: readonly Values[]) => { valuesNames.forEach((valueName) => { this.resetValue(valueName); }); }; }