/* Парус 8 - Панели мониторинга - Редакторы панелей Компонент: Действия */ //--------------------- //Подключение библиотек //--------------------- import React, { useState } from "react"; //Классы React import PropTypes from "prop-types"; //Контроль свойств компонента import { Icon, Button } from "@mui/material"; //Интерфейсные элементы import { P8PCAEditor } from "./p8p_component_action/editor"; //Редактор действия import { P8PChipList } from "./p8p_chip_list"; //Дополнительные настройки редактора import { P8P_CA_SHAPE, P8P_CAS_INITIAL, P8P_CA_TYPE } from "./p8p_component_action/common"; //Общие ресурсы действий //--------- //Константы //--------- //------------------------------------ //Вспомогательные функции и компоненты //------------------------------------ const getActionChipText = (type, params) => { //Определяем от типа switch (type) { //Открыть раздел case P8P_CA_TYPE.openUnit.code: return params.unitName; //Открыть панель case P8P_CA_TYPE.openPanel.code: return params.panelValue.value; //Установить переменную case P8P_CA_TYPE.setVariable.code: return params.reduce((prev, cur) => [...prev, cur.variableSource], []).join(", "); //Для всех остальных default: return "Не определен"; } }; //----------- //Тело модуля //----------- //Действия const P8PActions = ({ actions = P8P_CAS_INITIAL, valueProviders = {}, areas = [], valueTypes = [], onChange = null } = {}) => { //Собственное состояние - редактор действий const [actionEditor, setActionEditor] = useState({ display: false, index: null }); //При изменении действий const handleActionsChange = actions => onChange && onChange(actions); //При добавлении действия const handleActionAdd = () => setActionEditor({ display: true, index: null }); //При нажатии на действие const handleActionClick = i => setActionEditor({ display: true, index: i }); //При удалении действия const handleActionDelete = i => { const newActions = [...actions]; newActions.splice(i, 1); handleActionsChange(newActions); }; //При отмене сохранения изменений действия const handleActionCancel = () => setActionEditor({ display: false, index: null }); //При сохранении изменений действия const handleActionSave = action => { const newActions = [...actions]; actionEditor.index == null ? newActions.push({ ...action }) : (newActions[actionEditor.index] = { ...action }); handleActionsChange(newActions); setActionEditor({ display: false, index: null }); }; //Определяем структуру действий для отображения const actionChips = actions.map(item => { //Собираем текст действия let text = getActionChipText(item.type, item.params); //Формируем структуру для отображения карточки действия return { text: text, title: text, icon: P8P_CA_TYPE[item.type]?.icon, iconTitle: P8P_CA_TYPE[item.type]?.name }; }); //Формирование представления return ( <> {actionEditor.display && ( )} ); }; //Контроль свойств компонента - действия P8PActions.propTypes = { actions: PropTypes.arrayOf(P8P_CA_SHAPE), valueProviders: PropTypes.object, areas: PropTypes.array, valueTypes: PropTypes.array, onChange: PropTypes.func }; //---------------- //Интерфейс модуля //---------------- export { P8PActions };