/* Парус 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 };