/* Парус 8 - Панели мониторинга - Редактор панелей Компоненты: Таблица (представление) */ //--------------------- //Подключение библиотек //--------------------- import React from "react"; //Классы React import PropTypes from "prop-types"; //Контроль свойств компонента import { Paper, Link } from "@mui/material"; //Интерфейсные элементы import { APP_STYLES } from "../../../../../app.styles"; //Типовые стили import { P8PDataGrid } from "../../../../components/p8p_data_grid"; //Таблица данных import { P8P_DATA_GRID_CONFIG_PROPS } from "../../../../config_wrapper"; //Подключение компонентов к настройкам приложения import { useDataSource, useComponentHandlers } from "../../../../components/editors/p8p_data_source_hooks"; //Хуки для данных import { P8P_DATA_SOURCE_SHAPE } from "../../../../components/editors/p8p_data_source_common"; //Общие ресурсы источника данных import { P8P_COMPONENT_INLINE_MESSAGE_TYPE, P8P_COMPONENT_INLINE_MESSAGE, P8PComponentInlineMessage } from "../../../../components/editors/p8p_component_inline_message"; //Информационное сообщение внутри компонента import { P8P_COMPONENT_SETTINGS_RESP_ARGS } from "../../../../components/editors/p8p_component_settings"; //Дополнительный функционал источников данных import { P8P_CC_SHAPE, P8P_CCS_INITIAL } from "../../../../components/editors/p8p_component_condition/common"; //Общие ресурсы условий import { P8P_CA_SHAPE, P8P_CAS_INITIAL } from "../../../../components/editors/p8p_component_action/common"; //Общие ресурсы действий import { getDataGridCustomTypeValue, getDataGridHandlers, isHasCellRender } from "./action"; //Общие ресурсы действий таблицы import { getColumnStylesByConditions } from "./conditions"; //--------- //Константы //--------- //Иконка компонента const COMPONENT_ICON = "table_view"; //Наименование компонента const COMPONENT_NAME = "Таблица"; //Стили const STYLES = { CONTAINER: clickable => ({ display: "flex", height: "100%", overflow: "hidden", ...(clickable ? { cursor: "pointer" } : {}) }), DATA_GRID: { width: "100%" }, DATA_GRID_CONTAINER: { height: `calc(100%)`, ...APP_STYLES.SCROLL }, DATA_GRID_ROW_CLICABLE: { cursor: "pointer" } }; //--------------------------------------------- //Вспомогательные функции и компоненты //--------------------------------------------- //Форматирование значения ячейки const dataCellRender = ({ row, columnDef, values, handlers, conditions }) => { //Инициализируем обработчики строки const { onRowClick, onColumnClick } = getDataGridHandlers(handlers, columnDef.name); //Инициализируем стили по условию const condStyles = getColumnStylesByConditions(conditions, row, columnDef.name); //Накладываем нужные обработчики return { cellStyle: { ...(onRowClick ? { ...STYLES.DATA_GRID_ROW_CLICABLE } : {}), ...condStyles }, cellProps: { ...(onRowClick ? { onClick: event => { onRowClick({ event, values, prms: { row, columnDef } }); } } : {}) }, data: onColumnClick ? ( onColumnClick({ event, values, prms: { row, columnDef } })}> {row[columnDef.name]} ) : ( row[columnDef.name] ) }; }; //----------- //Тело модуля //----------- //Таблица (представление) const Table = ({ dataSource = null, values = {}, conditions = P8P_CCS_INITIAL, actions = P8P_CAS_INITIAL, onValuesChange = null } = {}) => { //Собственное состояние - данные const [dataGrid, error, haveConfing, haveData] = useDataSource({ dataSource, values, componentRespArg: P8P_COMPONENT_SETTINGS_RESP_ARGS.TABLE }); //Собственное состояние - обработчики компонента const [handlers] = useComponentHandlers({ actions, onValuesChange, getCustomTypeValue: getDataGridCustomTypeValue }); //Признак необходимости рендера ячеек const hasCellRender = isHasCellRender(handlers, conditions); //Обработчики областей const { onComponentClick } = getDataGridHandlers(handlers); //Формирование представления return ( onComponentClick && onComponentClick({ event, values })} > {haveConfing && haveData ? ( dataCellRender({ ...prms, values, handlers, conditions }) : null } /> ) : ( )} ); }; //Контроль свойств компонента - Таблица (представление) Table.propTypes = { dataSource: P8P_DATA_SOURCE_SHAPE, values: PropTypes.object, conditions: PropTypes.arrayOf(P8P_CC_SHAPE), actions: PropTypes.arrayOf(P8P_CA_SHAPE), onValuesChange: PropTypes.func }; //---------------- //Интерфейс модуля //---------------- export default Table;