stores: move some nested methods to $calculation

This commit is contained in:
Chika 2022-07-09 19:31:47 +03:00
parent 26f6149b39
commit ed8c22de18
4 changed files with 36 additions and 37 deletions

View File

@ -15,7 +15,7 @@ export default function leadOpportunityUrlsReactions(
*/
function makeLinkReaction(elementName: Elements, linkElementName: Elements, query: DocumentNode) {
reaction(
() => $calculation.$values.getElementValue(elementName),
() => $calculation.getElementValue(elementName),
(id) => {
const timeoutId = setTimeout(() => {
$calculation.$status.setStatus(linkElementName, 'Loading');
@ -31,17 +31,17 @@ export default function leadOpportunityUrlsReactions(
.then(({ data }) => {
clearTimeout(timeoutId);
if (data.entity?.link) {
$calculation.$values.setElementValue(linkElementName, data.entity?.link);
$calculation.setElementValue(linkElementName, data.entity?.link);
}
})
.catch(() => {
clearTimeout(timeoutId);
$calculation.$values.setElementValue(linkElementName, null);
$calculation.setElementValue(linkElementName, null);
});
}
);
reaction(
() => $calculation.$values.getElementValue(linkElementName),
() => $calculation.getElementValue(linkElementName),
(url) => {
if (!url) {
$calculation.blockElement(linkElementName);

View File

@ -1,6 +1,7 @@
/* eslint-disable import/no-cycle */
import type { Elements as ElementsActions } from 'Components/Calculation/config/map/actions';
import type { Elements as ElementsValues } from 'Components/Calculation/config/map/values';
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';
@ -20,18 +21,40 @@ export default class CalculationStore {
this.$validation = new ValidationStore(rootStore);
}
resetElement = (elementName: ElementsValues) => {
this.$values.resetElementValue(elementName);
resetElement = (elementName: Values.Elements) => {
this.resetElementValue(elementName);
this.$options.resetOption(elementName);
this.$status.resetStatus(elementName);
this.$validation.clearErrors(elementName);
};
blockElement = (elementName: ElementsValues | ElementsActions) => {
blockElement = (elementName: Values.Elements | ElementsActions) => {
this.$status.setStatus(elementName, 'Disabled');
};
unblockElement = (elementName: ElementsValues | ElementsActions) => {
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);
}
}

View File

@ -34,13 +34,7 @@ export default class OptionsStore {
this.options = initialOptions;
};
getOption<T extends Elements>(elementName: T) {
const value = this.root.$calculation.$values.getElementValue(elementName);
return this.options[elementName]?.find((x) => x.value === value);
}
getOptions(elementName: Elements) {
getOptions<T extends Elements>(elementName: T) {
const options = this.options[elementName];
return options;
@ -60,9 +54,9 @@ export default class OptionsStore {
/**
* Проверяем, что значение есть в новом списке, иначе сбрасываем значение
*/
const value = this.root.$calculation.$values.getElementValue(elementName);
const value = this.root.$calculation.getElementValue(elementName);
if (!options?.length || options.some((x) => x.value === value)) {
this.root.$calculation.$values.resetElementValue(elementName);
this.root.$calculation.resetElementValue(elementName);
}
/**
@ -73,7 +67,7 @@ export default class OptionsStore {
const optionValue = options.at(0)?.value;
if (optionValue) {
this.root.$calculation.$values.setElementValue(elementName, optionValue);
this.root.$calculation.setElementValue(elementName, optionValue);
}
}
};

View File

@ -1,6 +1,4 @@
/* eslint-disable object-curly-newline */
import type { Elements, ElementsTypes } from 'Components/Calculation/config/map/values';
import { getValueName } from 'Components/Calculation/config/map/values';
import defaultValues from 'config/default-values';
import { makeAutoObservable } from 'mobx';
import type RootStore from '../../root';
@ -23,12 +21,6 @@ export default class ValuesStore {
return this.values[valueName];
}
getElementValue<E extends Elements>(elementName: E) {
const valueName = getValueName(elementName);
return this.getValue(valueName) as ElementsTypes[E];
}
getValues<V extends Values>(valuesNames: readonly V[]) {
return valuesNames.reduce((values, valueName) => {
// eslint-disable-next-line no-param-reassign
@ -59,20 +51,10 @@ export default class ValuesStore {
});
};
setElementValue = <E extends Elements>(elementName: E, value: ElementsTypes[E]) => {
const valueName = getValueName(elementName);
this.setValue(valueName, value);
};
resetValue = (valueName: Values) => {
this.setValue(valueName, defaultValues[valueName]);
};
resetElementValue = (elementName: Elements) => {
const valueName = getValueName(elementName);
this.resetValue(valueName);
};
resetValues = (valuesNames: readonly Values[]) => {
valuesNames.forEach((valueName) => {
this.resetValue(valueName);