/* Парус 8 - Панели мониторинга - Редакторы панелей Компонент: Условия */ //--------------------- //Подключение библиотек //--------------------- import React, { useState } from "react"; //Классы React import PropTypes from "prop-types"; //Контроль свойств компонента import { Icon, Button } from "@mui/material"; //Интерфейсные элементы import { P8PCCEditor } from "./p8p_component_condition/editor"; //Редактор условия import { P8PChipList } from "./p8p_chip_list"; //Дополнительные настройки редактора import { P8P_CCS_INITIAL, P8P_CC_SHAPE, P8P_CC_FIELD_PRM_SHAPE } from "./p8p_component_condition/common"; //Общие ресурсы компонента "Редактор условия" //--------- //Константы //--------- //----------- //Тело модуля //----------- //Условия const P8PConditions = ({ conditions = P8P_CCS_INITIAL, condFields, resFields, onChange = null } = {}) => { //Собственное состояние - редактор условий const [conditionEditor, setConditionEditor] = useState({ display: false, index: null }); //При изменении условий const handleConditionsChange = conditions => onChange && onChange(conditions); //При добавлении нового условия const handleConditionAdd = () => setConditionEditor({ display: true, index: null }); //При нажатии на условие const handleConditionClick = i => setConditionEditor({ display: true, index: i }); //При удалении условия const handleConditionDelete = i => { const newConditions = [...conditions]; newConditions.splice(i, 1); handleConditionsChange(newConditions); }; //При отмене сохранения изменений условия const handleConditionCancel = () => setConditionEditor({ display: false, index: null }); //При сохранении изменений условия const handleConditionSave = condition => { const newConditions = [...conditions]; conditionEditor.index == null ? newConditions.push({ ...condition }) : (newConditions[conditionEditor.index] = { ...condition }); handleConditionsChange(newConditions); setConditionEditor({ display: false, index: null }); }; //Определяем структуру условий для отображения const conditionChips = conditions.map(item => { //Собираем текст условия let text = `${item.condField.name} ${item.condOperator.name} ${item.condValue}`; //Считываем поле результата let resField = resFields.find(field => field.name === item.resField.name); //Формируем структуру для отображения карточки действия return { text: text, title: text, icon: resField?.icon, iconTitle: resField?.name }; }); //Формирование представления return ( <> {conditionEditor.display && ( )} ); }; //Контроль свойств компонента - условия P8PConditions.propTypes = { conditions: PropTypes.arrayOf(P8P_CC_SHAPE), condFields: PropTypes.arrayOf(P8P_CC_FIELD_PRM_SHAPE).isRequired, resFields: PropTypes.arrayOf(P8P_CC_FIELD_PRM_SHAPE).isRequired, onChange: PropTypes.func }; //---------------- //Интерфейс модуля //---------------- export { P8PConditions };