69 lines
2.3 KiB
TypeScript
69 lines
2.3 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 { BaseOption } from 'Elements/types';
|
|
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);
|
|
};
|
|
|
|
setElementOptions = <T extends Values.Elements>(
|
|
elementName: T,
|
|
options: BaseOption<Values.ElementsTypes[T]>[]
|
|
) => {
|
|
this.$options.setOptions(elementName, options);
|
|
};
|
|
|
|
getElementOption<T extends Values.Elements>(elementName: T) {
|
|
const value = this.getElementValue(elementName);
|
|
|
|
return this.$options.getOptions(elementName)?.find((x) => x.value === value);
|
|
}
|
|
}
|