90 lines
3.6 KiB
JavaScript

/*
Парус 8 - Панели мониторинга - Редакторы панелей
Вспомогательные ресурсы компонента "Редактор условия"
*/
//---------------------
//Подключение библиотек
//---------------------
//---------
//Константы
//---------
//Функции операторов условий
const P8P_CC_OPERATOR_FUNC = {
equal: (objValue, value) => objValue == value,
notEqual: (objValue, value) => objValue != value,
lessEqual: (objValue, value) => objValue <= value,
less: (objValue, value) => objValue < value,
greaterEqual: (objValue, value) => objValue >= value,
greater: (objValue, value) => objValue > value,
in: (objValue, value) =>
value
.split(",")
.map(item => item.trim())
.includes(objValue + "")
};
//------------------------------------
//Вспомогательные функции и компоненты
//------------------------------------
//Загрузка условий в объект
const loadConditionsToObject = (obj, conditions) => {
//Инициализируем новый объект
let newObj = { ...obj };
//Инициализируем функцию оператора
let operatorFunc;
//Если изначальный индикатор загружен
if (Object.keys(newObj).length !== 0) {
//Обходим условия
conditions.map(item => {
//Функция оператора
operatorFunc = P8P_CC_OPERATOR_FUNC[item.condOperator.value];
//Проверяем условие
if (operatorFunc && operatorFunc(newObj[item.condField.value], item.condValue)) {
//Устанавливаем поле в новое значение
newObj[item.resField.value] = item.resValue;
}
});
}
//Возвращаем новый объект
return newObj;
};
//Считывание результатов условия
const getConditionsValues = (obj, conditions, element = "") => {
//Инициализируем функцию оператора
let operatorFunc;
//Инициализируем значение поля
let condFieldValue = "";
//Инициализируем результат
let resObject = {};
//Обходим условия
conditions.map(item => {
//Определяем значение поля условия
condFieldValue = item.condElement ? obj[item.condElement] : obj[item.condField.value];
//Функция оператора
operatorFunc = P8P_CC_OPERATOR_FUNC[item.condOperator.value];
//Проверяем условие
if (operatorFunc && operatorFunc(condFieldValue, item.condValue)) {
//Если в условии нет элемента результата или он равен текущему элементу
if (!item.resElement || (element && item.resElement === element)) {
resObject[item.resField.value] = item.resValue;
}
}
});
//Возвращаем новый объект
return resObject;
};
//Доступность сохранения настроек условия
const isConditionOkDisabled = condition => (!condition.condField.value || !condition.condOperator.value || !condition.resField.value ? true : false);
//----------------
//Интерфейс модуля
//----------------
export { loadConditionsToObject, getConditionsValues, isConditionOkDisabled };