diff --git a/stores/calculation/options/index.ts b/stores/calculation/options/index.ts index 58ad86d..f9838b8 100644 --- a/stores/calculation/options/index.ts +++ b/stores/calculation/options/index.ts @@ -6,7 +6,6 @@ import type { Elements } from 'Components/Calculation/config/map-values'; import defaultOptions from 'config/default-options'; import type { BaseOption } from 'Elements/types'; -import { mergeWith } from 'lodash'; import { makeAutoObservable } from 'mobx'; import type RootStore from 'stores/root'; import type { CalculationOptions, Filter, OptionsFilters } from './types'; @@ -63,14 +62,31 @@ export default class OptionsStore { return filter ? options && filter(options) : options; } - setOptions = (elementName: Elements, options: BaseOption[]) => { - this.options[elementName] = options; + resetOptions = (elementsNames: readonly Elements[]) => { + elementsNames.forEach((elementName) => { + this.setOption(elementName, defaultOptions[elementName]!); + }); }; - mergeOptions = (options: Partial) => { - mergeWith(this.options, options, (objValue, srcValue) => - objValue === undefined ? srcValue : objValue - ); + setOption = (elementName: Elements, option: BaseOption[]) => { + this.options[elementName] = option; + }; + + setOptions = ( + options: Partial, + 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) => {