61 lines
2.1 KiB
TypeScript

/* eslint-disable import/no-cycle */
import type { Elements as ElementsActions } from 'Components/Calculation/config/map/actions';
import type * as Values from 'Components/Calculation/config/map/values';
import { getValueName } from 'Components/Calculation/config/map/values';
import type RootStore from 'stores/root';
import OptionsStore from './options';
import StatusStore from './statuses';
import ValidationStore from './validation';
import ValuesStore from './values';
export default class CalculationStore {
$values: ValuesStore;
$status: StatusStore;
$options: OptionsStore;
$validation: ValidationStore;
constructor(rootStore: RootStore) {
this.$values = new ValuesStore(rootStore);
this.$status = new StatusStore(rootStore);
this.$options = new OptionsStore(rootStore);
this.$validation = new ValidationStore(rootStore);
}
resetElement = (elementName: Values.Elements) => {
this.resetElementValue(elementName);
this.$options.resetOption(elementName);
this.$status.resetStatus(elementName);
this.$validation.clearErrors(elementName);
};
blockElement = (elementName: Values.Elements | ElementsActions) => {
this.$status.setStatus(elementName, 'Disabled');
};
unblockElement = (elementName: Values.Elements | ElementsActions) => {
this.$status.setStatus(elementName, 'Default');
};
getElementValue<E extends Values.Elements>(elementName: E) {
const valueName = getValueName(elementName);
return this.$values.getValue(valueName) as Values.ElementsTypes[E];
}
setElementValue = <E extends Values.Elements>(elementName: E, value: Values.ElementsTypes[E]) => {
const valueName = getValueName(elementName);
this.$values.setValue(valueName, value);
};
resetElementValue = (elementName: Values.Elements) => {
const valueName = getValueName(elementName);
this.$values.resetValue(valueName);
};
getElementOption<T extends Values.Elements>(elementName: T) {
const value = this.getElementValue(elementName);
return this.$options.getOptions(elementName)?.find((x) => x.value === value);
}
}