This repository has been archived on 2025-05-09. You can view files and clone it, but cannot push or open issues or pull requests.
2022-02-03 15:56:32 +03:00

130 lines
3.4 KiB
JavaScript

import { getValueName } from 'client/Containers/Calculation/Elements/tools';
import initialFilters, {
noResetValueElements
} from 'client/stores/CalculationStore/config/initialFilters';
import initialStatuses from 'client/stores/CalculationStore/config/initialStatuses';
import { isNil, mergeWith, pick } from 'lodash';
const valuesData = {
values: {},
statuses: initialStatuses,
validations: {},
options: {},
filters: initialFilters,
};
const valuesActions = {
getValue(sourceValueName) {
return this.values[sourceValueName];
},
getValues(valuesNames) {
return pick(this.values, valuesNames);
},
setValue(sourceValueName, newValue) {
this.values[sourceValueName] = newValue;
},
setValues(values, override) {
if (override) this.values = values;
this.values = Object.assign(this.values, values);
},
getStatus(elementName) {
if (this.stores.calculationProcess.bypass.status) {
const { target, value } = this.stores.calculationProcess.bypass.status;
if (target.indexOf(elementName) > -1) {
return value;
}
}
return this.statuses[elementName];
},
setStatus(elementName, status) {
this.statuses[elementName] = status;
},
setStatuses(statuses, override) {
if (override) this.statuses = statuses;
this.statuses = Object.assign(this.statuses, statuses);
},
getValidation(elementName) {
return this.validations[elementName];
},
setValidation(elementName, validation) {
this.validations[elementName] = validation;
},
getOption(elementName, fields) {
if (!this.options[elementName]) {
return;
}
if (!fields) {
return this.getCurrentOption(elementName);
}
return this.options[elementName].find(option => {
return Object.keys(fields).every(
fieldName => option[fieldName] === fields[fieldName],
);
});
},
getOptions(elementName, fields, filtered = false) {
let options = this.options[elementName];
const filter = this.filters[elementName];
if (filtered && filter) {
options = filter(options);
}
if (!options) {
return;
}
if (!fields) return options;
return this.options[elementName].filter(option => {
return Object.keys(fields).every(
fieldName => option[fieldName] === fields[fieldName],
);
});
},
getCurrentOption(elementName) {
const valueName = getValueName(elementName);
const currentValue = this.values[valueName];
if (!currentValue) {
return;
}
const currentOption = this.options[elementName].find(
x => x.value === currentValue,
);
return currentOption;
},
setOptions(elementName, options) {
this.options[elementName] = options;
},
applyOptions(options) {
this.options = mergeWith(this.options, options, (obj, src) => {
if (!isNil(src)) {
return src;
}
return obj;
});
},
getFilter(elementName) {
return this.filters[elementName];
},
setFilter(elementName, filter) {
const valueName = getValueName(elementName);
const value = this.getValue(valueName);
if (
filter &&
!filter(this.getOptions(elementName)).some(x => x.value === value) &&
!noResetValueElements.includes(elementName)
) {
this.setValue(valueName, null);
}
this.filters[elementName] = filter;
},
// applyFilters(filters) {
// this.filters = { ...this.filters, ...filters };
// },
};
export default Object.assign(valuesData, valuesActions);