stores: update OptionsStore methods

This commit is contained in:
Chika 2022-05-29 20:56:40 +03:00
parent 2d8aeed99e
commit 0e7fe7814a

View File

@ -6,7 +6,6 @@
import type { Elements } from 'Components/Calculation/config/map-values'; import type { Elements } from 'Components/Calculation/config/map-values';
import defaultOptions from 'config/default-options'; import defaultOptions from 'config/default-options';
import type { BaseOption } from 'Elements/types'; import type { BaseOption } from 'Elements/types';
import { mergeWith } from 'lodash';
import { makeAutoObservable } from 'mobx'; import { makeAutoObservable } from 'mobx';
import type RootStore from 'stores/root'; import type RootStore from 'stores/root';
import type { CalculationOptions, Filter, OptionsFilters } from './types'; import type { CalculationOptions, Filter, OptionsFilters } from './types';
@ -63,14 +62,31 @@ export default class OptionsStore {
return filter ? options && filter(options) : options; return filter ? options && filter(options) : options;
} }
setOptions = (elementName: Elements, options: BaseOption[]) => { resetOptions = (elementsNames: readonly Elements[]) => {
this.options[elementName] = options; elementsNames.forEach((elementName) => {
this.setOption(elementName, defaultOptions[elementName]!);
});
}; };
mergeOptions = (options: Partial<CalculationOptions>) => { setOption = (elementName: Elements, option: BaseOption[]) => {
mergeWith(this.options, options, (objValue, srcValue) => this.options[elementName] = option;
objValue === undefined ? srcValue : objValue };
);
setOptions = (
options: Partial<CalculationOptions>,
settings?: { reset: boolean; exclude: Elements[] }
) => {
if (settings?.reset) {
this.resetOptions(
(Object.keys(defaultOptions) as Elements[]).filter(
(elementName) => !settings?.exclude.includes(elementName)
)
);
}
(Object.keys(options) as Elements[]).forEach((elementName) => {
this.setOption(elementName, options[elementName]!);
});
}; };
clearOptions = (elementName: Elements) => { clearOptions = (elementName: Elements) => {