diff --git a/dist/p8-panels.js b/dist/p8-panels.js index b3c6d10..d64e8f3 100644 --- a/dist/p8-panels.js +++ b/dist/p8-panels.js @@ -4536,7 +4536,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ P8PChart: () => (/* binding */ P8PChart),\n/* harmony export */ P8P_CHART_TYPE: () => (/* binding */ P8P_CHART_TYPE)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var chart_js_auto__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! chart.js/auto */ \"./node_modules/chart.js/auto/auto.js\");\n/*\r\n Парус 8 - Панели мониторинга\r\n Компонент: График\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Диаграммы и графики\n\n//---------\n//Константы\n//---------\n\n//Виды графиков\nconst P8P_CHART_TYPE = {\n BAR: \"bar\",\n LINE: \"line\",\n PIE: \"pie\",\n DOUGHNUT: \"doughnut\"\n};\n\n//Структура элемента набора данных\nconst P8P_CHART_DATASET_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_2___default().shape({\n label: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n borderColor: prop_types__WEBPACK_IMPORTED_MODULE_2___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_2___default().string), prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_2___default().string))]),\n backgroundColor: prop_types__WEBPACK_IMPORTED_MODULE_2___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_2___default().string), prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_2___default().string))]),\n data: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_2___default().number)),\n items: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_2___default().object))\n});\n\n//-----------\n//Тело модуля\n//-----------\n\n//График\nconst P8PChart = ({\n type,\n title,\n legendPosition,\n options,\n labels,\n datasets,\n onClick,\n style\n}) => {\n //Ссылки на DOM\n const chartCanvasRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const chartRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n\n //Обработка нажатия на элемент графика\n const handleClick = e => {\n const bar = chartRef.current.getElementsAtEventForMode(e, \"nearest\", {\n intersect: true\n }, true)[0];\n if (onClick && bar) onClick({\n datasetIndex: bar.datasetIndex,\n itemIndex: bar.index,\n item: chartRef.current.data.datasets[bar.datasetIndex].items ? chartRef.current.data.datasets[bar.datasetIndex].items[bar.index] : null\n });\n };\n\n //При подключении к старнице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (!chartRef.current) {\n const ctx = chartCanvasRef.current.getContext(\"2d\");\n chartRef.current = new chart_js_auto__WEBPACK_IMPORTED_MODULE_1__[\"default\"](ctx, {\n type,\n data: {\n labels: [...labels],\n datasets: [...datasets]\n },\n options: {\n ...options,\n ...{\n responsive: true,\n plugins: {\n legend: {\n display: legendPosition ? true : false,\n position: legendPosition\n },\n title: {\n display: title ? true : false,\n text: title\n }\n }\n },\n onClick: handleClick\n }\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n //При обновлении данных\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (chartRef.current) {\n chartRef.current.data.labels = [...labels];\n chartRef.current.data.datasets = [...datasets];\n chartRef.current.update();\n }\n }, [datasets, labels]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: {\n ...style\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"canvas\", {\n ref: chartCanvasRef\n }));\n};\n\n//Контроль свойств - График\nP8PChart.propTypes = {\n type: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n title: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n legendPosition: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n options: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().object),\n labels: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_2___default().string)).isRequired,\n datasets: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf(P8P_CHART_DATASET_SHAPE),\n onClick: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n style: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().object)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_chart.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ P8PChart: () => (/* binding */ P8PChart),\n/* harmony export */ P8P_CHART_TYPE: () => (/* binding */ P8P_CHART_TYPE)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var chart_js_auto__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! chart.js/auto */ \"./node_modules/chart.js/auto/auto.js\");\n/*\r\n Парус 8 - Панели мониторинга\r\n Компонент: График\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Диаграммы и графики\n\n//---------\n//Константы\n//---------\n\n//Виды графиков\nconst P8P_CHART_TYPE = {\n BAR: \"bar\",\n LINE: \"line\",\n PIE: \"pie\",\n DOUGHNUT: \"doughnut\"\n};\n\n//Структура элемента набора данных\nconst P8P_CHART_DATASET_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_2___default().shape({\n label: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n borderColor: prop_types__WEBPACK_IMPORTED_MODULE_2___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_2___default().string), prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_2___default().string))]),\n backgroundColor: prop_types__WEBPACK_IMPORTED_MODULE_2___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_2___default().string), prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_2___default().string))]),\n data: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_2___default().number)),\n items: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_2___default().object))\n});\n\n//-----------\n//Тело модуля\n//-----------\n\n//График\nconst P8PChart = ({\n type,\n title,\n legendPosition,\n options = {},\n labels = [],\n datasets = [],\n onClick,\n style\n}) => {\n //Ссылки на DOM\n const chartCanvasRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const chartRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n\n //Обработка нажатия на элемент графика\n const handleClick = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(e => {\n const bar = chartRef.current.getElementsAtEventForMode(e, \"nearest\", {\n intersect: true\n }, true)[0];\n if (onClick && bar) onClick({\n datasetIndex: bar.datasetIndex,\n itemIndex: bar.index,\n item: chartRef.current.data.datasets[bar.datasetIndex].items ? chartRef.current.data.datasets[bar.datasetIndex].items[bar.index] : null\n });\n }, [onClick]);\n\n //При подключении к старнице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (!chartRef.current) {\n const ctx = chartCanvasRef.current.getContext(\"2d\");\n chartRef.current = new chart_js_auto__WEBPACK_IMPORTED_MODULE_1__[\"default\"](ctx, {\n type,\n data: {\n labels: [...labels],\n datasets: [...datasets]\n },\n options: {\n ...options,\n ...{\n responsive: true,\n plugins: {\n legend: {\n display: legendPosition ? true : false,\n position: legendPosition\n },\n title: {\n display: title ? true : false,\n text: title\n }\n }\n },\n onClick: handleClick\n }\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n //При обновлении данных\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (chartRef.current) {\n chartRef.current.data.labels = [...labels];\n chartRef.current.data.datasets = [...datasets];\n chartRef.current.options.onClick = handleClick;\n chartRef.current.update();\n }\n }, [datasets, labels, handleClick]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: {\n ...style\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"canvas\", {\n ref: chartCanvasRef\n }));\n};\n\n//Контроль свойств - График\nP8PChart.propTypes = {\n type: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n title: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n legendPosition: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n options: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().object),\n labels: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_2___default().string)),\n datasets: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf(P8P_CHART_DATASET_SHAPE),\n onClick: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n style: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().object)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_chart.js?"); /***/ }), @@ -4558,7 +4558,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ P8PDataGrid: () => (/* binding */ P8PDataGrid),\n/* harmony export */ P8P_DATA_GRID_DATA_TYPE: () => (/* binding */ P8P_DATA_GRID_DATA_TYPE),\n/* harmony export */ P8P_DATA_GRID_FILTERS_HEIGHT: () => (/* binding */ P8P_DATA_GRID_FILTERS_HEIGHT),\n/* harmony export */ P8P_DATA_GRID_FILTER_SHAPE: () => (/* binding */ P8P_DATA_GRID_FILTER_SHAPE),\n/* harmony export */ P8P_DATA_GRID_MORE_HEIGHT: () => (/* binding */ P8P_DATA_GRID_MORE_HEIGHT),\n/* harmony export */ P8P_DATA_GRID_SIZE: () => (/* binding */ P8P_DATA_GRID_SIZE)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _p8p_table__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./p8p_table */ \"./app/components/p8p_table.js\");\n/*\r\n Парус 8 - Панели мониторинга\r\n Компонент: Таблица данных\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Таблица\n\n//---------\n//Константы\n//---------\n\n//Размеры отступов\nconst P8P_DATA_GRID_SIZE = _p8p_table__WEBPACK_IMPORTED_MODULE_1__.P8P_TABLE_SIZE;\n\n//Типы данных\nconst P8P_DATA_GRID_DATA_TYPE = _p8p_table__WEBPACK_IMPORTED_MODULE_1__.P8P_TABLE_DATA_TYPE;\n\n//Формат фильтра\nconst P8P_DATA_GRID_FILTER_SHAPE = _p8p_table__WEBPACK_IMPORTED_MODULE_1__.P8P_TABLE_FILTER_SHAPE;\n\n//Высота кнопки догрузки данных\nconst P8P_DATA_GRID_MORE_HEIGHT = _p8p_table__WEBPACK_IMPORTED_MODULE_1__.P8P_TABLE_MORE_HEIGHT;\n\n//Высота фильтров таблицы\nconst P8P_DATA_GRID_FILTERS_HEIGHT = _p8p_table__WEBPACK_IMPORTED_MODULE_1__.P8P_TABLE_FILTERS_HEIGHT;\n\n//-----------\n//Тело модуля\n//-----------\n\n//Таблица данных\nconst P8PDataGrid = ({\n columnsDef,\n filtersInitial,\n groups,\n rows,\n size,\n fixedHeader = false,\n fixedColumns = 0,\n morePages = false,\n reloading = false,\n expandable,\n orderAscMenuItemCaption,\n orderDescMenuItemCaption,\n filterMenuItemCaption,\n valueFilterCaption,\n valueFromFilterCaption,\n valueToFilterCaption,\n okFilterBtnCaption,\n clearFilterBtnCaption,\n cancelFilterBtnCaption,\n morePagesBtnCaption,\n morePagesBtnProps,\n noDataFoundText,\n headCellRender,\n dataCellRender,\n groupCellRender,\n rowExpandRender,\n valueFormatter,\n containerComponent,\n containerComponentProps,\n onOrderChanged,\n onFilterChanged,\n onPagesCountChanged,\n objectsCopier\n}) => {\n //Собственное состояние - сортировки\n const [orders, setOrders] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]);\n\n //Собственное состояние - фильтры\n const [filters, setFilters] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(filtersInitial || []);\n\n //При изменении состояния сортировки\n const handleOrderChanged = ({\n columnName,\n direction\n }) => {\n let newOrders = objectsCopier(orders);\n const curOrder = newOrders.find(o => o.name == columnName);\n if (direction == null && curOrder) newOrders.splice(newOrders.indexOf(curOrder), 1);\n if (direction != null && !curOrder) newOrders.push({\n name: columnName,\n direction\n });\n if (direction != null && curOrder) curOrder.direction = direction;\n setOrders(newOrders);\n if (onOrderChanged) onOrderChanged({\n orders: newOrders\n });\n };\n\n //При изменении состояния фильтра\n const handleFilterChanged = ({\n columnName,\n from,\n to\n }) => {\n let newFilters = objectsCopier(filters);\n let curFilter = newFilters.find(f => f.name == columnName);\n if (from == null && to == null && curFilter) newFilters.splice(newFilters.indexOf(curFilter), 1);\n if ((from != null || to != null) && !curFilter) newFilters.push({\n name: columnName,\n from,\n to\n });\n if ((from != null || to != null) && curFilter) {\n curFilter.from = from;\n curFilter.to = to;\n }\n setFilters(newFilters);\n if (onFilterChanged) onFilterChanged({\n filters: newFilters\n });\n };\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = () => {\n if (onPagesCountChanged) onPagesCountChanged();\n };\n\n //При изменении списка установленных извне фильтров\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n setFilters(filtersInitial || []);\n }, [filtersInitial]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_p8p_table__WEBPACK_IMPORTED_MODULE_1__.P8PTable, {\n columnsDef: columnsDef,\n groups: groups,\n rows: rows,\n orders: orders,\n filters: filters,\n size: size || P8P_DATA_GRID_SIZE.MEDIUM,\n fixedHeader: fixedHeader,\n fixedColumns: fixedColumns,\n morePages: morePages,\n reloading: reloading,\n expandable: expandable,\n orderAscMenuItemCaption: orderAscMenuItemCaption,\n orderDescMenuItemCaption: orderDescMenuItemCaption,\n filterMenuItemCaption: filterMenuItemCaption,\n valueFilterCaption: valueFilterCaption,\n valueFromFilterCaption: valueFromFilterCaption,\n valueToFilterCaption: valueToFilterCaption,\n okFilterBtnCaption: okFilterBtnCaption,\n clearFilterBtnCaption: clearFilterBtnCaption,\n cancelFilterBtnCaption: cancelFilterBtnCaption,\n morePagesBtnCaption: morePagesBtnCaption,\n noDataFoundText: noDataFoundText,\n headCellRender: headCellRender,\n dataCellRender: dataCellRender,\n groupCellRender: groupCellRender,\n rowExpandRender: rowExpandRender,\n valueFormatter: valueFormatter,\n objectsCopier: objectsCopier,\n containerComponent: containerComponent,\n containerComponentProps: containerComponentProps,\n morePagesBtnProps: morePagesBtnProps,\n onOrderChanged: handleOrderChanged,\n onFilterChanged: handleFilterChanged,\n onPagesCountChanged: handlePagesCountChanged\n });\n};\n\n//Контроль свойств - Таблица данных\nP8PDataGrid.propTypes = {\n columnsDef: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().array).isRequired,\n filtersInitial: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf(P8P_DATA_GRID_FILTER_SHAPE),\n groups: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().array),\n rows: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().array).isRequired,\n size: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n fixedHeader: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n fixedColumns: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().number),\n morePages: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n reloading: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n expandable: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n orderAscMenuItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n orderDescMenuItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n filterMenuItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n valueFilterCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n valueFromFilterCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n valueToFilterCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n okFilterBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n clearFilterBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n cancelFilterBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n morePagesBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n morePagesBtnProps: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().object),\n noDataFoundText: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n headCellRender: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n dataCellRender: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n groupCellRender: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n rowExpandRender: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n valueFormatter: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n containerComponent: prop_types__WEBPACK_IMPORTED_MODULE_2___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_2___default().elementType), (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string)]),\n containerComponentProps: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().object),\n onOrderChanged: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n onFilterChanged: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n onPagesCountChanged: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n objectsCopier: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_data_grid.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ P8PDataGrid: () => (/* binding */ P8PDataGrid),\n/* harmony export */ P8P_DATA_GRID_DATA_TYPE: () => (/* binding */ P8P_DATA_GRID_DATA_TYPE),\n/* harmony export */ P8P_DATA_GRID_FILTERS_HEIGHT: () => (/* binding */ P8P_DATA_GRID_FILTERS_HEIGHT),\n/* harmony export */ P8P_DATA_GRID_FILTER_SHAPE: () => (/* binding */ P8P_DATA_GRID_FILTER_SHAPE),\n/* harmony export */ P8P_DATA_GRID_MORE_HEIGHT: () => (/* binding */ P8P_DATA_GRID_MORE_HEIGHT),\n/* harmony export */ P8P_DATA_GRID_SIZE: () => (/* binding */ P8P_DATA_GRID_SIZE)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _p8p_table__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./p8p_table */ \"./app/components/p8p_table.js\");\n/*\r\n Парус 8 - Панели мониторинга\r\n Компонент: Таблица данных\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Таблица\n\n//---------\n//Константы\n//---------\n\n//Размеры отступов\nconst P8P_DATA_GRID_SIZE = _p8p_table__WEBPACK_IMPORTED_MODULE_1__.P8P_TABLE_SIZE;\n\n//Типы данных\nconst P8P_DATA_GRID_DATA_TYPE = _p8p_table__WEBPACK_IMPORTED_MODULE_1__.P8P_TABLE_DATA_TYPE;\n\n//Формат фильтра\nconst P8P_DATA_GRID_FILTER_SHAPE = _p8p_table__WEBPACK_IMPORTED_MODULE_1__.P8P_TABLE_FILTER_SHAPE;\n\n//Высота кнопки догрузки данных\nconst P8P_DATA_GRID_MORE_HEIGHT = _p8p_table__WEBPACK_IMPORTED_MODULE_1__.P8P_TABLE_MORE_HEIGHT;\n\n//Высота фильтров таблицы\nconst P8P_DATA_GRID_FILTERS_HEIGHT = _p8p_table__WEBPACK_IMPORTED_MODULE_1__.P8P_TABLE_FILTERS_HEIGHT;\n\n//-----------\n//Тело модуля\n//-----------\n\n//Таблица данных\nconst P8PDataGrid = ({\n columnsDef = [],\n filtersInitial,\n groups = [],\n rows = [],\n size,\n fixedHeader = false,\n fixedColumns = 0,\n morePages = false,\n reloading = false,\n expandable,\n orderAscMenuItemCaption,\n orderDescMenuItemCaption,\n filterMenuItemCaption,\n valueFilterCaption,\n valueFromFilterCaption,\n valueToFilterCaption,\n okFilterBtnCaption,\n clearFilterBtnCaption,\n cancelFilterBtnCaption,\n morePagesBtnCaption,\n morePagesBtnProps,\n noDataFoundText,\n headCellRender,\n dataCellRender,\n groupCellRender,\n rowExpandRender,\n valueFormatter,\n containerComponent,\n containerComponentProps,\n onOrderChanged,\n onFilterChanged,\n onPagesCountChanged,\n objectsCopier\n}) => {\n //Собственное состояние - сортировки\n const [orders, setOrders] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]);\n\n //Собственное состояние - фильтры\n const [filters, setFilters] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(filtersInitial || []);\n\n //При изменении состояния сортировки\n const handleOrderChanged = ({\n columnName,\n direction\n }) => {\n let newOrders = objectsCopier(orders);\n const curOrder = newOrders.find(o => o.name == columnName);\n if (direction == null && curOrder) newOrders.splice(newOrders.indexOf(curOrder), 1);\n if (direction != null && !curOrder) newOrders.push({\n name: columnName,\n direction\n });\n if (direction != null && curOrder) curOrder.direction = direction;\n setOrders(newOrders);\n if (onOrderChanged) onOrderChanged({\n orders: newOrders\n });\n };\n\n //При изменении состояния фильтра\n const handleFilterChanged = ({\n columnName,\n from,\n to\n }) => {\n let newFilters = objectsCopier(filters);\n let curFilter = newFilters.find(f => f.name == columnName);\n if (from == null && to == null && curFilter) newFilters.splice(newFilters.indexOf(curFilter), 1);\n if ((from != null || to != null) && !curFilter) newFilters.push({\n name: columnName,\n from,\n to\n });\n if ((from != null || to != null) && curFilter) {\n curFilter.from = from;\n curFilter.to = to;\n }\n setFilters(newFilters);\n if (onFilterChanged) onFilterChanged({\n filters: newFilters\n });\n };\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = () => {\n if (onPagesCountChanged) onPagesCountChanged();\n };\n\n //При изменении списка установленных извне фильтров\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n setFilters(filtersInitial || []);\n }, [filtersInitial]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_p8p_table__WEBPACK_IMPORTED_MODULE_1__.P8PTable, {\n columnsDef: columnsDef,\n groups: groups,\n rows: rows,\n orders: orders,\n filters: filters,\n size: size || P8P_DATA_GRID_SIZE.MEDIUM,\n fixedHeader: fixedHeader,\n fixedColumns: fixedColumns,\n morePages: morePages,\n reloading: reloading,\n expandable: expandable,\n orderAscMenuItemCaption: orderAscMenuItemCaption,\n orderDescMenuItemCaption: orderDescMenuItemCaption,\n filterMenuItemCaption: filterMenuItemCaption,\n valueFilterCaption: valueFilterCaption,\n valueFromFilterCaption: valueFromFilterCaption,\n valueToFilterCaption: valueToFilterCaption,\n okFilterBtnCaption: okFilterBtnCaption,\n clearFilterBtnCaption: clearFilterBtnCaption,\n cancelFilterBtnCaption: cancelFilterBtnCaption,\n morePagesBtnCaption: morePagesBtnCaption,\n noDataFoundText: noDataFoundText,\n headCellRender: headCellRender,\n dataCellRender: dataCellRender,\n groupCellRender: groupCellRender,\n rowExpandRender: rowExpandRender,\n valueFormatter: valueFormatter,\n objectsCopier: objectsCopier,\n containerComponent: containerComponent,\n containerComponentProps: containerComponentProps,\n morePagesBtnProps: morePagesBtnProps,\n onOrderChanged: handleOrderChanged,\n onFilterChanged: handleFilterChanged,\n onPagesCountChanged: handlePagesCountChanged\n });\n};\n\n//Контроль свойств - Таблица данных\nP8PDataGrid.propTypes = {\n columnsDef: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().array),\n filtersInitial: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf(P8P_DATA_GRID_FILTER_SHAPE),\n groups: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().array),\n rows: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().array),\n size: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n fixedHeader: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n fixedColumns: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().number),\n morePages: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n reloading: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n expandable: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n orderAscMenuItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n orderDescMenuItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n filterMenuItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n valueFilterCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n valueFromFilterCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n valueToFilterCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n okFilterBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n clearFilterBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n cancelFilterBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n morePagesBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n morePagesBtnProps: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().object),\n noDataFoundText: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n headCellRender: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n dataCellRender: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n groupCellRender: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n rowExpandRender: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n valueFormatter: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n containerComponent: prop_types__WEBPACK_IMPORTED_MODULE_2___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_2___default().elementType), (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string)]),\n containerComponentProps: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().object),\n onOrderChanged: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n onFilterChanged: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n onPagesCountChanged: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n objectsCopier: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_data_grid.js?"); /***/ }), @@ -4613,7 +4613,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ P8PTable: () => (/* binding */ P8PTable),\n/* harmony export */ P8P_TABLE_DATA_TYPE: () => (/* binding */ P8P_TABLE_DATA_TYPE),\n/* harmony export */ P8P_TABLE_FILTERS_HEIGHT: () => (/* binding */ P8P_TABLE_FILTERS_HEIGHT),\n/* harmony export */ P8P_TABLE_FILTER_SHAPE: () => (/* binding */ P8P_TABLE_FILTER_SHAPE),\n/* harmony export */ P8P_TABLE_MORE_HEIGHT: () => (/* binding */ P8P_TABLE_MORE_HEIGHT),\n/* harmony export */ P8P_TABLE_SIZE: () => (/* binding */ P8P_TABLE_SIZE)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/MenuItem/MenuItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Divider/Divider.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Menu/Menu.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Chip/Chip.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TableCell/TableCell.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TableContainer/TableContainer.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Paper/Paper.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Table/Table.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TableHead/TableHead.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TableRow/TableRow.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Link/Link.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TableBody/TableBody.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Container/Container.js\");\n/* harmony import */ var _mui_material_styles__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material/styles */ \"./node_modules/@mui/material/styles/useTheme.js\");\n/* harmony import */ var _p8p_app_message__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./p8p_app_message */ \"./app/components/p8p_app_message.js\");\n/* harmony import */ var _p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./p8p_table_reducer */ \"./app/components/p8p_table_reducer.js\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга\r\n Компонент: Таблица\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n //Взаимодействие со стилями MUI\n //Встраиваемое сообщение об ошибке\n //Редьюсер состояния\n\n//---------\n//Константы\n//---------\n\n//Размеры отступов\nconst P8P_TABLE_SIZE = {\n SMALL: \"small\",\n MEDIUM: \"medium\"\n};\n\n//Типы данных\nconst P8P_TABLE_DATA_TYPE = {\n STR: \"STR\",\n NUMB: \"NUMB\",\n DATE: \"DATE\"\n};\n\n//Направления сортировки\nconst P8P_TABLE_COLUMN_ORDER_DIRECTIONS = {\n ASC: \"ASC\",\n DESC: \"DESC\"\n};\n\n//Действия панели инструментов столбца\nconst P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS = {\n ORDER_TOGGLE: \"ORDER_TOGGLE\",\n FILTER_TOGGLE: \"FILTER_TOGGLE\",\n EXPAND_TOGGLE: \"EXPAND_TOGGLE\"\n};\n\n//Действия меню столбца\nconst P8P_TABLE_COLUMN_MENU_ACTIONS = {\n ORDER_ASC: \"ORDER_ASC\",\n ORDER_DESC: \"ORDER_DESC\",\n FILTER: \"FILTER\"\n};\n\n//Структура элемента описания фильтра\nconst P8P_TABLE_FILTER_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_3___default().shape({\n name: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n from: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().any),\n to: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().any)\n});\n\n//Высота кнопки догрузки данных\nconst P8P_TABLE_MORE_HEIGHT = \"49px\";\n\n//Высота фильтров таблицы\nconst P8P_TABLE_FILTERS_HEIGHT = \"48px\";\n\n//Стили\nconst STYLES = {\n TABLE: {\n with: \"100%\"\n },\n TABLE_HEAD_STICKY: {\n position: \"sticky\",\n top: 0,\n zIndex: 1000\n },\n TABLE_HEAD_CELL_STICKY: (theme, left) => ({\n position: \"sticky\",\n left,\n backgroundColor: theme.palette.background.default,\n zIndex: 1000\n }),\n TABLE_ROW: {\n \"&:last-child td, &:last-child th\": {\n border: 0\n }\n },\n TABLE_CELL_STICKY: (theme, left) => ({\n position: \"sticky\",\n left,\n backgroundColor: theme.palette.background.default,\n zIndex: 500\n }),\n TABLE_CELL_EXPAND_CONTROL: {\n minWidth: \"60px\",\n maxWidth: \"60px\"\n },\n TABLE_CELL_EXPAND_CONTAINER: {\n paddingBottom: 0,\n paddingTop: 0,\n paddingLeft: 0,\n paddingRight: 0\n },\n TABLE_CELL_GROUP_HEADER: {\n backgroundColor: \"lightgray\"\n },\n TABLE_CELL_GROUP_HEADER_STICKY: {\n position: \"sticky\",\n left: 0\n },\n TABLE_COLUMN_STACK: {\n alignItems: \"center\"\n },\n TABLE_COLUMN_MENU_ITEM_ICON: {\n paddingRight: \"10px\"\n },\n FILTER_CHIP: {\n alignItems: \"center\"\n },\n MORE_BUTTON_CONTAINER: {\n with: \"100%\",\n textAlign: \"center\",\n padding: \"5px\"\n }\n};\n\n//--------------------------------\n//Вспомогательные классы и функции\n//--------------------------------\n\n//Панель инструментов столбца (левая)\nconst P8PTableColumnToolBarLeft = ({\n columnDef,\n onItemClick\n}) => {\n //Кнопка развёртывания/свёртывания\n let expButton = null;\n if (columnDef.expandable) expButton = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: () => onItemClick ? onItemClick(P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.EXPAND_TOGGLE, columnDef.name) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, columnDef.expanded ? \"indeterminate_check_box\" : \"add_box\"));\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, expButton);\n};\n\n//Контроль свойств - Панель инструментов столбца (левая)\nP8PTableColumnToolBarLeft.propTypes = {\n columnDef: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object).isRequired,\n onItemClick: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//Панель инструментов столбца (правая)\nconst P8PTableColumnToolBarRight = ({\n columnDef,\n orders,\n filters,\n onItemClick\n}) => {\n //Кнопка сортировки\n const order = orders.find(o => o.name == columnDef.name);\n let orderButton = null;\n if (order) orderButton = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: () => onItemClick ? onItemClick(P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.ORDER_TOGGLE, columnDef.name) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, order.direction === P8P_TABLE_COLUMN_ORDER_DIRECTIONS.ASC ? \"arrow_upward\" : \"arrow_downward\"));\n\n //Кнопка фильтрации\n const filter = filters.find(f => f.name == columnDef.name);\n let filterButton = null;\n if ((0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.hasValue)(filter?.from) || (0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.hasValue)(filter?.to)) filterButton = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: () => onItemClick ? onItemClick(P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.FILTER_TOGGLE, columnDef.name) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, \"filter_alt\"));\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, orderButton, filterButton);\n};\n\n//Контроль свойств - Панель инструментов столбца (правая)\nP8PTableColumnToolBarRight.propTypes = {\n columnDef: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object).isRequired,\n orders: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array).isRequired,\n filters: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array).isRequired,\n onItemClick: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//Меню столбца\nconst P8PTableColumnMenu = ({\n columnDef,\n orderAscItemCaption,\n orderDescItemCaption,\n filterItemCaption,\n onItemClick\n}) => {\n //Собственное состояние\n const [anchorEl, setAnchorEl] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Флаг отображения\n const open = Boolean(anchorEl);\n\n //По нажатию на открытие меню\n const handleMenuButtonClick = event => {\n setAnchorEl(event.currentTarget);\n };\n\n //По нажатию на пункт меню\n const handleMenuItemClick = (event, index, action, columnName) => {\n if (onItemClick) onItemClick(action, columnName);\n setAnchorEl(null);\n };\n\n //При закрытии меню\n const handleMenuClose = () => {\n setAnchorEl(null);\n };\n\n //Формирование списка элементов меню в зависимости от описания колонки таблицы\n const menuItems = [];\n if (columnDef.order === true) {\n menuItems.push( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n key: \"orderAsc\",\n onClick: (event, index) => handleMenuItemClick(event, index, P8P_TABLE_COLUMN_MENU_ACTIONS.ORDER_ASC, columnDef.name)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.TABLE_COLUMN_MENU_ITEM_ICON\n }, \"arrow_upward\"), orderAscItemCaption));\n menuItems.push( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n key: \"orderDesc\",\n onClick: (event, index) => handleMenuItemClick(event, index, P8P_TABLE_COLUMN_MENU_ACTIONS.ORDER_DESC, columnDef.name)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.TABLE_COLUMN_MENU_ITEM_ICON\n }, \"arrow_downward\"), orderDescItemCaption));\n }\n if (columnDef.filter === true) {\n if (menuItems.length > 0) menuItems.push( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n key: \"divider\",\n sx: {\n my: 0.5\n }\n }));\n menuItems.push( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n key: \"filter\",\n onClick: (event, index) => handleMenuItemClick(event, index, P8P_TABLE_COLUMN_MENU_ACTIONS.FILTER, columnDef.name)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.TABLE_COLUMN_MENU_ITEM_ICON\n }, \"filter_alt\"), filterItemCaption));\n }\n\n //Генерация содержимого\n return menuItems.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n id: `${columnDef.name}_menu_button`,\n \"aria-haspopup\": \"true\",\n onClick: handleMenuButtonClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, \"more_vert\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n id: `${columnDef.name}_menu`,\n anchorEl: anchorEl,\n open: open,\n onClose: handleMenuClose\n }, menuItems)) : null;\n};\n\n//Контроль свойств - Меню столбца\nP8PTableColumnMenu.propTypes = {\n columnDef: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object).isRequired,\n orderAscItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n orderDescItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n filterItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n onItemClick: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//Диалог подсказки\nconst P8PTableColumnHintDialog = ({\n columnDef,\n okBtnCaption,\n onOk\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n open: true,\n \"aria-labelledby\": \"filter-dialog-title\",\n \"aria-describedby\": \"filter-dialog-description\",\n onClose: () => onOk ? onOk() : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n id: \"filter-dialog-title\"\n }, columnDef.caption), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n dangerouslySetInnerHTML: {\n __html: columnDef.hint\n }\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: () => onOk ? onOk() : null\n }, okBtnCaption)));\n};\n\n//Контроль свойств - Диалог подсказки\nP8PTableColumnHintDialog.propTypes = {\n columnDef: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object).isRequired,\n okBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n onOk: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//Диалог фильтра\nconst P8PTableColumnFilterDialog = ({\n columnDef,\n from,\n to,\n valueCaption,\n valueFromCaption,\n valueToCaption,\n okBtnCaption,\n clearBtnCaption,\n cancelBtnCaption,\n valueFormatter,\n onOk,\n onClear,\n onCancel\n}) => {\n //Собственное состояние - значения с-по\n const [filterValues, setFilterValues] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n from,\n to\n });\n\n //Отработка воода значения в фильтр\n const handleFilterTextFieldChanged = e => {\n setFilterValues(prev => ({\n ...prev,\n [e.target.name]: e.target.value\n }));\n };\n\n //Элементы ввода значений фильтра\n let inputs = null;\n if (Array.isArray(columnDef.values) && columnDef.values.length > 0) {\n inputs = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n name: \"from\",\n fullWidth: true,\n select: true,\n label: valueCaption,\n variant: \"standard\",\n value: filterValues.from,\n onChange: handleFilterTextFieldChanged\n }, columnDef.values.map((v, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n key: i,\n value: v\n }, valueFormatter ? valueFormatter({\n value: v,\n columnDef\n }) : v)));\n } else {\n switch (columnDef.dataType) {\n case P8P_TABLE_DATA_TYPE.STR:\n {\n inputs = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n name: \"from\",\n fullWidth: true,\n InputLabelProps: {\n shrink: true\n },\n value: filterValues.from,\n onChange: handleFilterTextFieldChanged,\n label: valueCaption,\n variant: \"standard\"\n });\n break;\n }\n case P8P_TABLE_DATA_TYPE.NUMB:\n case P8P_TABLE_DATA_TYPE.DATE:\n {\n inputs = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n name: \"from\",\n InputLabelProps: {\n shrink: true\n },\n type: columnDef.dataType == P8P_TABLE_DATA_TYPE.NUMB ? \"number\" : \"date\",\n value: filterValues.from,\n onChange: handleFilterTextFieldChanged,\n label: valueFromCaption,\n variant: \"standard\"\n }), \"\\xA0\", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n name: \"to\",\n InputLabelProps: {\n shrink: true\n },\n type: columnDef.dataType == P8P_TABLE_DATA_TYPE.NUMB ? \"number\" : \"date\",\n value: filterValues.to,\n onChange: handleFilterTextFieldChanged,\n label: valueToCaption,\n variant: \"standard\"\n }));\n break;\n }\n }\n }\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n open: true,\n \"aria-labelledby\": \"filter-dialog-title\",\n \"aria-describedby\": \"filter-dialog-description\",\n onClose: () => onCancel ? onCancel(columnDef.name) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n id: \"filter-dialog-title\"\n }, columnDef.caption), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, inputs), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: () => onOk ? onOk(columnDef.name, filterValues.from, filterValues.to) : null\n }, okBtnCaption), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: () => onClear ? onClear(columnDef.name) : null,\n variant: \"secondary\"\n }, clearBtnCaption), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: () => onCancel ? onCancel(columnDef.name) : null\n }, cancelBtnCaption)));\n};\n\n//Контроль свойств - Диалог фильтра\nP8PTableColumnFilterDialog.propTypes = {\n columnDef: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object).isRequired,\n from: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().any),\n to: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().any),\n valueCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueFromCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueToCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n okBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n clearBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n cancelBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueFormatter: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onOk: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onClear: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onCancel: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//Сводный фильтр\nconst P8PTableFiltersChips = ({\n filters,\n columnsDef,\n valueFromCaption,\n valueToCaption,\n onFilterChipClick,\n onFilterChipDelete,\n valueFormatter\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n direction: \"row\",\n spacing: 1,\n p: 1\n }, filters.map((filter, i) => {\n const columnDef = columnsDef.find(columnDef => columnDef.name == filter.name);\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n key: i,\n label: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n direction: \"row\",\n sx: STYLES.FILTER_CHIP\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"strong\", null, columnDef.caption), \":\\xA0\", (0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.hasValue)(filter.from) && !columnDef.values && columnDef.dataType != P8P_TABLE_DATA_TYPE.STR ? `${valueFromCaption.toLowerCase()} ` : null, (0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.hasValue)(filter.from) ? valueFormatter ? valueFormatter({\n value: filter.from,\n columnDef\n }) : filter.from : null, (0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.hasValue)(filter.to) && !columnDef.values && columnDef.dataType != P8P_TABLE_DATA_TYPE.STR ? ` ${valueToCaption.toLowerCase()} ` : null, (0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.hasValue)(filter.to) ? valueFormatter ? valueFormatter({\n value: filter.to,\n columnDef\n }) : filter.to : null),\n variant: \"outlined\",\n onClick: () => onFilterChipClick ? onFilterChipClick(columnDef.name) : null,\n onDelete: () => onFilterChipDelete ? onFilterChipDelete(columnDef.name) : null\n });\n }));\n};\n\n//Контроль свойств - Сводный фильтр\nP8PTableFiltersChips.propTypes = {\n filters: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array).isRequired,\n columnsDef: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array).isRequired,\n valueFromCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueToCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n onFilterChipClick: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onFilterChipDelete: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n valueFormatter: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Таблица\nconst P8PTable = ({\n columnsDef,\n groups,\n rows,\n orders,\n filters,\n size,\n fixedHeader = false,\n fixedColumns = 0,\n morePages = false,\n reloading = false,\n expandable,\n orderAscMenuItemCaption,\n orderDescMenuItemCaption,\n filterMenuItemCaption,\n valueFilterCaption,\n valueFromFilterCaption,\n valueToFilterCaption,\n okFilterBtnCaption,\n clearFilterBtnCaption,\n cancelFilterBtnCaption,\n morePagesBtnCaption,\n morePagesBtnProps,\n noDataFoundText,\n headCellRender,\n dataCellRender,\n groupCellRender,\n rowExpandRender,\n valueFormatter,\n onOrderChanged,\n onFilterChanged,\n onPagesCountChanged,\n objectsCopier,\n containerComponent,\n containerComponentProps\n}) => {\n //Собственное состояние - описание заголовка\n const [header, dispatchHeaderAction] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useReducer)(_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.p8pTableReducer, (0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.HEADER_INITIAL_STATE)());\n\n //Собственное состояние - фильтруемая колонка\n const [filterColumn, setFilterColumn] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Собственное состояние - развёрнутые строки\n const [expanded, setExpanded] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({});\n\n //Собственное состояния - развёрнутые группы\n const [expandedGroups, setExpandedGroups] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(Array.isArray(groups) && groups.length > 0 ? Object.assign({}, ...groups.map(g => ({\n [g.name]: g.expanded\n }))) : {});\n\n //Собственное состояние - колонка с отображаемой подсказкой\n const [displayHintColumn, setDisplayHintColumn] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Стили\n const theme = (0,_mui_material_styles__WEBPACK_IMPORTED_MODULE_17__[\"default\"])();\n\n //Описание фильтруемой колонки\n const filterColumnDef = filterColumn ? columnsDef.find(columnDef => columnDef.name == filterColumn) || null : null;\n\n //Описание колонки с отображаемой подсказкой\n const displayHintColumnDef = displayHintColumn ? columnsDef.find(columnDef => columnDef.name == displayHintColumn) || null : null;\n\n //Значения фильтра фильтруемой колонки\n const [filterColumnFrom, filterColumnTo] = filterColumn ? (() => {\n const filter = filters.find(filter => filter.name == filterColumn);\n return filter ? [filter.from == null ? \"\" : filter.from, filter.to == null ? \"\" : filter.to] : [\"\", \"\"];\n })() : [\"\", \"\"];\n\n //Формирование заголовка таблицы\n const setHeader = ({\n columnsDef,\n expandable,\n fixedColumns,\n objectsCopier\n }) => dispatchHeaderAction({\n type: _p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.P8P_TABLE_AT.SET_HEADER,\n payload: {\n columnsDef,\n expandable,\n fixedColumns,\n objectsCopier\n }\n });\n\n //Сворачивание/разворачивание уровня заголовка таблицы\n const toggleHeaderExpand = ({\n columnName,\n objectsCopier\n }) => dispatchHeaderAction({\n type: _p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.P8P_TABLE_AT.TOGGLE_HEADER_EXPAND,\n payload: {\n columnName,\n expandable,\n fixedColumns,\n objectsCopier\n }\n });\n\n //Выравнивание в зависимости от типа данных\n const getAlignByDataType = ({\n dataType,\n hasChild\n }) => dataType === P8P_TABLE_DATA_TYPE.DATE || hasChild ? \"center\" : dataType === P8P_TABLE_DATA_TYPE.NUMB ? \"right\" : \"left\";\n\n //Упорядочение содержимого в зависимости от типа данных\n const getJustifyContentByDataType = ({\n dataType,\n hasChild\n }) => dataType === P8P_TABLE_DATA_TYPE.DATE || hasChild ? \"center\" : dataType === P8P_TABLE_DATA_TYPE.NUMB ? \"flex-end\" : \"flex-start\";\n\n //Отработка нажатия на элемент пункта меню\n const handleToolBarItemClick = (action, columnName) => {\n switch (action) {\n case P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.ORDER_TOGGLE:\n {\n const colOrder = orders.find(o => o.name == columnName);\n const newDirection = colOrder?.direction == P8P_TABLE_COLUMN_ORDER_DIRECTIONS.ASC ? P8P_TABLE_COLUMN_ORDER_DIRECTIONS.DESC : colOrder?.direction == P8P_TABLE_COLUMN_ORDER_DIRECTIONS.DESC ? null : P8P_TABLE_COLUMN_ORDER_DIRECTIONS.ASC;\n if (onOrderChanged) onOrderChanged({\n columnName,\n direction: newDirection\n });\n break;\n }\n case P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.FILTER_TOGGLE:\n setFilterColumn(columnName);\n break;\n case P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.EXPAND_TOGGLE:\n toggleHeaderExpand({\n columnName,\n objectsCopier\n });\n break;\n }\n };\n\n //Отработка нажатия на пункты меню\n const handleMenuItemClick = (action, columnName) => {\n switch (action) {\n case P8P_TABLE_COLUMN_MENU_ACTIONS.ORDER_ASC:\n onOrderChanged({\n columnName,\n direction: P8P_TABLE_COLUMN_ORDER_DIRECTIONS.ASC\n });\n break;\n case P8P_TABLE_COLUMN_MENU_ACTIONS.ORDER_DESC:\n onOrderChanged({\n columnName,\n direction: P8P_TABLE_COLUMN_ORDER_DIRECTIONS.DESC\n });\n break;\n case P8P_TABLE_COLUMN_MENU_ACTIONS.FILTER:\n setFilterColumn(columnName);\n break;\n }\n };\n\n //Отработка ввода значения фильтра колонки\n const handleFilterOk = (columnName, from, to) => {\n if (onFilterChanged) onFilterChanged({\n columnName,\n from: from === \"\" ? null : from,\n to: to === \"\" ? null : to\n });\n setFilterColumn(null);\n };\n\n //Отработка очистки значения фильтра колонки\n const handleFilterClear = columnName => {\n if (onFilterChanged) onFilterChanged({\n columnName,\n from: null,\n to: null\n });\n setFilterColumn(null);\n };\n\n //Отработка отмены ввода значения фильтра колонки\n const handleFilterCancel = () => {\n setFilterColumn(null);\n };\n\n //Отработка нажатия на элемент сводного фильтра\n const handleFilterChipClick = columnName => setFilterColumn(columnName);\n\n //Отработка удаления элемента сводного фильтра\n const handleFilterChipDelete = columnName => onFilterChanged ? onFilterChanged({\n columnName,\n from: null,\n to: null\n }) : null;\n\n //Отработка нажатия на кнопку догрузки страницы\n const handleMorePagesBtnClick = () => {\n if (onPagesCountChanged) onPagesCountChanged();\n };\n\n //Отработка нажатия на элемент отображения подсказки по колонке\n const handleColumnShowHintClick = columnName => setDisplayHintColumn(columnName);\n\n //Отработка сокрытия подсказки по колонке\n const handleHintOk = () => setDisplayHintColumn(null);\n\n //Отработка нажатия на кнопку раскрытия элемента\n const handleExpandClick = rowIndex => {\n if (expanded[rowIndex] === true) setExpanded(pv => {\n let res = {\n ...pv\n };\n delete res[rowIndex];\n return res;\n });else setExpanded(pv => ({\n ...pv,\n [rowIndex]: true\n }));\n };\n\n //При перезагрузке данных\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (reloading) setExpanded({});\n }, [reloading]);\n\n //При изменении описания колонок\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n setHeader({\n columnsDef,\n expandable,\n fixedColumns,\n objectsCopier\n });\n }, [columnsDef, expandable, fixedColumns, objectsCopier]);\n\n //Генерация заголовка группы\n const renderGroupCell = group => {\n let customRender = {};\n if (groupCellRender) customRender = groupCellRender({\n columnsDef: header.columnsDef,\n group\n }) || {};\n return header.displayDataColumns.map((columnDef, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], _extends({\n key: `group-header-cell-${i}`\n }, customRender.cellProps, {\n sx: {\n ...STYLES.TABLE_CELL_GROUP_HEADER,\n ...customRender.cellStyle,\n ...(columnDef.width ? {\n minWidth: columnDef.width,\n maxWidth: columnDef.width\n } : {}),\n ...(i == 0 && fixedColumns ? STYLES.TABLE_CELL_GROUP_HEADER_STICKY : {})\n },\n colSpan: expandable && rowExpandRender ? 2 : 1\n }), i == 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n direction: \"row\",\n sx: STYLES.TABLE_COLUMN_STACK\n }, group.expandable ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: () => {\n setExpandedGroups(pv => ({\n ...pv,\n ...{\n [group.name]: !pv[group.name]\n }\n }));\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, expandedGroups[group.name] ? \"indeterminate_check_box\" : \"add_box\")) : null, customRender.data ? customRender.data : group.caption) : null));\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, displayHintColumn ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableColumnHintDialog, {\n columnDef: displayHintColumnDef,\n okBtnCaption: okFilterBtnCaption,\n onOk: handleHintOk\n }) : null, filterColumn ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableColumnFilterDialog, {\n columnDef: filterColumnDef,\n from: filterColumnFrom,\n to: filterColumnTo,\n valueCaption: valueFilterCaption,\n valueFromCaption: valueFromFilterCaption,\n valueToCaption: valueToFilterCaption,\n okBtnCaption: okFilterBtnCaption,\n clearBtnCaption: clearFilterBtnCaption,\n cancelBtnCaption: cancelFilterBtnCaption,\n valueFormatter: valueFormatter,\n onOk: handleFilterOk,\n onClear: handleFilterClear,\n onCancel: handleFilterCancel\n }) : null, Array.isArray(filters) && filters.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableFiltersChips, {\n filters: filters,\n columnsDef: columnsDef,\n valueFromCaption: valueFromFilterCaption,\n valueToCaption: valueToFilterCaption,\n onFilterChipClick: handleFilterChipClick,\n onFilterChipDelete: handleFilterChipDelete,\n valueFormatter: valueFormatter\n }) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], _extends({\n component: containerComponent ? containerComponent : _mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"]\n }, containerComponentProps ? containerComponentProps : {}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n stickyHeader: fixedHeader,\n sx: STYLES.TABLE,\n size: size || P8P_TABLE_SIZE.MEDIUM\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], {\n sx: fixedHeader ? STYLES.TABLE_HEAD_STICKY : {}\n }, header.displayLevels.map((level, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], {\n key: level\n }, expandable && rowExpandRender && i == 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n key: \"head-cell-expand-control\",\n align: \"center\",\n sx: {\n ...STYLES.TABLE_CELL_EXPAND_CONTROL,\n ...(fixedColumns ? STYLES.TABLE_HEAD_CELL_STICKY(theme, 0) : {})\n },\n rowSpan: header.displayLevelsColumns[level][0].rowSpan\n }) : null, header.displayLevelsColumns[level].map((columnDef, j) => {\n let customRender = {};\n if (headCellRender) customRender = headCellRender({\n columnDef\n }) || {};\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], _extends({\n key: `head-cell-${j}`,\n align: getAlignByDataType(columnDef),\n sx: {\n ...(columnDef.width ? {\n minWidth: columnDef.width,\n maxWidth: columnDef.width\n } : {}),\n ...(columnDef.fixed ? STYLES.TABLE_HEAD_CELL_STICKY(theme, columnDef.fixedLeft) : {}),\n ...customRender.cellStyle\n },\n rowSpan: columnDef.rowSpan,\n colSpan: columnDef.colSpan\n }, customRender.cellProps), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], _extends({\n direction: \"row\",\n justifyContent: getJustifyContentByDataType(columnDef),\n sx: {\n ...STYLES.TABLE_COLUMN_STACK,\n ...customRender.stackStyle\n }\n }, customRender.stackProps), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableColumnToolBarLeft, {\n columnDef: columnDef,\n onItemClick: handleToolBarItemClick\n }), customRender.data ? customRender.data : columnDef.hint ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_24__[\"default\"], {\n component: \"button\",\n variant: \"body2\",\n align: \"left\",\n underline: \"always\",\n onClick: () => handleColumnShowHintClick(columnDef.name)\n }, columnDef.caption) : columnDef.caption, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableColumnToolBarRight, {\n columnDef: columnDef,\n orders: orders,\n filters: filters,\n onItemClick: handleToolBarItemClick\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableColumnMenu, {\n columnDef: columnDef,\n orderAscItemCaption: orderAscMenuItemCaption,\n orderDescItemCaption: orderDescMenuItemCaption,\n filterItemCaption: filterMenuItemCaption,\n onItemClick: handleMenuItemClick\n })));\n })))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_25__[\"default\"], null, rows.length > 0 ? (Array.isArray(groups) && groups.length > 0 ? groups : [{}]).map((group, g) => {\n const rowsView = rows.map((row, i) => !group?.name || group?.name == row.groupName ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), {\n key: `data-${i}`\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], {\n key: `data-row-${i}`,\n sx: STYLES.TABLE_ROW\n }, expandable && rowExpandRender ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n key: `data-cell-expand-control-${i}`,\n align: \"center\",\n sx: {\n ...STYLES.TABLE_CELL_EXPAND_CONTROL,\n ...(fixedColumns ? STYLES.TABLE_CELL_STICKY(theme, 0) : {})\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: () => handleExpandClick(i)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, expanded[i] === true ? \"keyboard_arrow_down\" : \"keyboard_arrow_right\"))) : null, header.displayDataColumns.map((columnDef, j) => {\n let customRender = {};\n if (dataCellRender) customRender = dataCellRender({\n row,\n columnDef\n }) || {};\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], _extends({\n key: `data-cell-${j}`,\n align: getAlignByDataType(columnDef),\n sx: {\n ...(columnDef.width ? {\n minWidth: columnDef.width,\n maxWidth: columnDef.width\n } : {}),\n ...(columnDef.fixed ? STYLES.TABLE_CELL_STICKY(theme, columnDef.fixedLeft) : {}),\n ...customRender.cellStyle\n }\n }, customRender.cellProps), customRender.data ? customRender.data : valueFormatter ? valueFormatter({\n value: row[columnDef.name],\n columnDef\n }) : row[columnDef.name]);\n })), expandable && rowExpandRender && expanded[i] === true ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], {\n key: `data-row-expand-${i}`\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n sx: {\n ...STYLES.TABLE_CELL_EXPAND_CONTAINER,\n ...(fixedColumns ? STYLES.TABLE_CELL_STICKY(theme, 0) : {})\n },\n colSpan: fixedColumns ? header.displayFixedColumnsCount + 1 : header.displayDataColumnsCount\n }, rowExpandRender({\n columnsDef,\n row\n }))) : null) : null);\n return !group?.name ? rowsView : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), {\n key: `group-${g}`\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], {\n key: `group-header-${g}`\n }, renderGroupCell(group)), !group.expandable || expandedGroups[group.name] === true ? rowsView : null);\n }) : noDataFoundText && !reloading ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n colSpan: header.displayDataColumnsCount\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_p8p_app_message__WEBPACK_IMPORTED_MODULE_1__.P8PAppInlineError, {\n text: noDataFoundText\n }))) : null))), morePages ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_26__[\"default\"], {\n style: STYLES.MORE_BUTTON_CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], _extends({\n fullWidth: true,\n onClick: handleMorePagesBtnClick\n }, morePagesBtnProps ? morePagesBtnProps : {}), morePagesBtnCaption)) : null);\n};\n\n//Контроль свойств - Таблица\nP8PTable.propTypes = {\n columnsDef: prop_types__WEBPACK_IMPORTED_MODULE_3___default().arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_3___default().shape({\n name: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n caption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n order: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n filter: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n dataType: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n visible: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n values: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array),\n parent: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),\n expandable: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n expanded: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n width: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number)\n })).isRequired,\n groups: prop_types__WEBPACK_IMPORTED_MODULE_3___default().arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_3___default().shape({\n name: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n caption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n expandable: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n expanded: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired\n })),\n rows: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array).isRequired,\n orders: prop_types__WEBPACK_IMPORTED_MODULE_3___default().arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_3___default().shape({\n name: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n direction: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired\n })).isRequired,\n filters: prop_types__WEBPACK_IMPORTED_MODULE_3___default().arrayOf(P8P_TABLE_FILTER_SHAPE).isRequired,\n size: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),\n fixedHeader: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool),\n fixedColumns: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number),\n morePages: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool),\n reloading: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool),\n expandable: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool),\n orderAscMenuItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n orderDescMenuItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n filterMenuItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueFilterCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueFromFilterCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueToFilterCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n okFilterBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n clearFilterBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n cancelFilterBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n morePagesBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n morePagesBtnProps: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object),\n noDataFoundText: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),\n headCellRender: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n dataCellRender: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n groupCellRender: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n rowExpandRender: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n valueFormatter: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onOrderChanged: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onFilterChanged: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onPagesCountChanged: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n objectsCopier: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func).isRequired,\n containerComponent: prop_types__WEBPACK_IMPORTED_MODULE_3___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_3___default().elementType), (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string)]),\n containerComponentProps: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_table.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ P8PTable: () => (/* binding */ P8PTable),\n/* harmony export */ P8P_TABLE_DATA_TYPE: () => (/* binding */ P8P_TABLE_DATA_TYPE),\n/* harmony export */ P8P_TABLE_FILTERS_HEIGHT: () => (/* binding */ P8P_TABLE_FILTERS_HEIGHT),\n/* harmony export */ P8P_TABLE_FILTER_SHAPE: () => (/* binding */ P8P_TABLE_FILTER_SHAPE),\n/* harmony export */ P8P_TABLE_MORE_HEIGHT: () => (/* binding */ P8P_TABLE_MORE_HEIGHT),\n/* harmony export */ P8P_TABLE_SIZE: () => (/* binding */ P8P_TABLE_SIZE)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/MenuItem/MenuItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Divider/Divider.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Menu/Menu.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Chip/Chip.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TableCell/TableCell.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TableContainer/TableContainer.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Paper/Paper.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Table/Table.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TableHead/TableHead.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TableRow/TableRow.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Link/Link.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TableBody/TableBody.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Container/Container.js\");\n/* harmony import */ var _mui_material_styles__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material/styles */ \"./node_modules/@mui/material/styles/useTheme.js\");\n/* harmony import */ var _p8p_app_message__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./p8p_app_message */ \"./app/components/p8p_app_message.js\");\n/* harmony import */ var _p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./p8p_table_reducer */ \"./app/components/p8p_table_reducer.js\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга\r\n Компонент: Таблица\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n //Взаимодействие со стилями MUI\n //Встраиваемое сообщение об ошибке\n //Редьюсер состояния\n\n//---------\n//Константы\n//---------\n\n//Размеры отступов\nconst P8P_TABLE_SIZE = {\n SMALL: \"small\",\n MEDIUM: \"medium\"\n};\n\n//Типы данных\nconst P8P_TABLE_DATA_TYPE = {\n STR: \"STR\",\n NUMB: \"NUMB\",\n DATE: \"DATE\"\n};\n\n//Направления сортировки\nconst P8P_TABLE_COLUMN_ORDER_DIRECTIONS = {\n ASC: \"ASC\",\n DESC: \"DESC\"\n};\n\n//Действия панели инструментов столбца\nconst P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS = {\n ORDER_TOGGLE: \"ORDER_TOGGLE\",\n FILTER_TOGGLE: \"FILTER_TOGGLE\",\n EXPAND_TOGGLE: \"EXPAND_TOGGLE\"\n};\n\n//Действия меню столбца\nconst P8P_TABLE_COLUMN_MENU_ACTIONS = {\n ORDER_ASC: \"ORDER_ASC\",\n ORDER_DESC: \"ORDER_DESC\",\n FILTER: \"FILTER\"\n};\n\n//Структура элемента описания фильтра\nconst P8P_TABLE_FILTER_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_3___default().shape({\n name: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n from: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().any),\n to: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().any)\n});\n\n//Высота кнопки догрузки данных\nconst P8P_TABLE_MORE_HEIGHT = \"49px\";\n\n//Высота фильтров таблицы\nconst P8P_TABLE_FILTERS_HEIGHT = \"48px\";\n\n//Стили\nconst STYLES = {\n TABLE: {\n with: \"100%\"\n },\n TABLE_HEAD_STICKY: {\n position: \"sticky\",\n top: 0,\n zIndex: 1000\n },\n TABLE_HEAD_CELL_STICKY: (theme, left) => ({\n position: \"sticky\",\n left,\n backgroundColor: theme.palette.background.default,\n zIndex: 1000\n }),\n TABLE_ROW: {\n \"&:last-child td, &:last-child th\": {\n border: 0\n }\n },\n TABLE_CELL_STICKY: (theme, left) => ({\n position: \"sticky\",\n left,\n backgroundColor: theme.palette.background.default,\n zIndex: 500\n }),\n TABLE_CELL_EXPAND_CONTROL: {\n minWidth: \"60px\",\n maxWidth: \"60px\"\n },\n TABLE_CELL_EXPAND_CONTAINER: {\n paddingBottom: 0,\n paddingTop: 0,\n paddingLeft: 0,\n paddingRight: 0\n },\n TABLE_CELL_GROUP_HEADER: {\n backgroundColor: \"lightgray\"\n },\n TABLE_CELL_GROUP_HEADER_STICKY: {\n position: \"sticky\",\n left: 0\n },\n TABLE_COLUMN_STACK: {\n alignItems: \"center\"\n },\n TABLE_COLUMN_MENU_ITEM_ICON: {\n paddingRight: \"10px\"\n },\n FILTER_CHIP: {\n alignItems: \"center\"\n },\n MORE_BUTTON_CONTAINER: {\n with: \"100%\",\n textAlign: \"center\",\n padding: \"5px\"\n }\n};\n\n//--------------------------------\n//Вспомогательные классы и функции\n//--------------------------------\n\n//Панель инструментов столбца (левая)\nconst P8PTableColumnToolBarLeft = ({\n columnDef,\n onItemClick\n}) => {\n //Кнопка развёртывания/свёртывания\n let expButton = null;\n if (columnDef.expandable) expButton = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: () => onItemClick ? onItemClick(P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.EXPAND_TOGGLE, columnDef.name) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, columnDef.expanded ? \"indeterminate_check_box\" : \"add_box\"));\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, expButton);\n};\n\n//Контроль свойств - Панель инструментов столбца (левая)\nP8PTableColumnToolBarLeft.propTypes = {\n columnDef: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object).isRequired,\n onItemClick: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//Панель инструментов столбца (правая)\nconst P8PTableColumnToolBarRight = ({\n columnDef,\n orders,\n filters,\n onItemClick\n}) => {\n //Кнопка сортировки\n const order = orders.find(o => o.name == columnDef.name);\n let orderButton = null;\n if (order) orderButton = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: () => onItemClick ? onItemClick(P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.ORDER_TOGGLE, columnDef.name) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, order.direction === P8P_TABLE_COLUMN_ORDER_DIRECTIONS.ASC ? \"arrow_upward\" : \"arrow_downward\"));\n\n //Кнопка фильтрации\n const filter = filters.find(f => f.name == columnDef.name);\n let filterButton = null;\n if ((0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.hasValue)(filter?.from) || (0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.hasValue)(filter?.to)) filterButton = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: () => onItemClick ? onItemClick(P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.FILTER_TOGGLE, columnDef.name) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, \"filter_alt\"));\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, orderButton, filterButton);\n};\n\n//Контроль свойств - Панель инструментов столбца (правая)\nP8PTableColumnToolBarRight.propTypes = {\n columnDef: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object).isRequired,\n orders: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array).isRequired,\n filters: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array).isRequired,\n onItemClick: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//Меню столбца\nconst P8PTableColumnMenu = ({\n columnDef,\n orderAscItemCaption,\n orderDescItemCaption,\n filterItemCaption,\n onItemClick\n}) => {\n //Собственное состояние\n const [anchorEl, setAnchorEl] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Флаг отображения\n const open = Boolean(anchorEl);\n\n //По нажатию на открытие меню\n const handleMenuButtonClick = event => {\n setAnchorEl(event.currentTarget);\n };\n\n //По нажатию на пункт меню\n const handleMenuItemClick = (event, index, action, columnName) => {\n if (onItemClick) onItemClick(action, columnName);\n setAnchorEl(null);\n };\n\n //При закрытии меню\n const handleMenuClose = () => {\n setAnchorEl(null);\n };\n\n //Формирование списка элементов меню в зависимости от описания колонки таблицы\n const menuItems = [];\n if (columnDef.order === true) {\n menuItems.push( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n key: \"orderAsc\",\n onClick: (event, index) => handleMenuItemClick(event, index, P8P_TABLE_COLUMN_MENU_ACTIONS.ORDER_ASC, columnDef.name)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.TABLE_COLUMN_MENU_ITEM_ICON\n }, \"arrow_upward\"), orderAscItemCaption));\n menuItems.push( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n key: \"orderDesc\",\n onClick: (event, index) => handleMenuItemClick(event, index, P8P_TABLE_COLUMN_MENU_ACTIONS.ORDER_DESC, columnDef.name)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.TABLE_COLUMN_MENU_ITEM_ICON\n }, \"arrow_downward\"), orderDescItemCaption));\n }\n if (columnDef.filter === true) {\n if (menuItems.length > 0) menuItems.push( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n key: \"divider\",\n sx: {\n my: 0.5\n }\n }));\n menuItems.push( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n key: \"filter\",\n onClick: (event, index) => handleMenuItemClick(event, index, P8P_TABLE_COLUMN_MENU_ACTIONS.FILTER, columnDef.name)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.TABLE_COLUMN_MENU_ITEM_ICON\n }, \"filter_alt\"), filterItemCaption));\n }\n\n //Генерация содержимого\n return menuItems.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n id: `${columnDef.name}_menu_button`,\n \"aria-haspopup\": \"true\",\n onClick: handleMenuButtonClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, \"more_vert\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n id: `${columnDef.name}_menu`,\n anchorEl: anchorEl,\n open: open,\n onClose: handleMenuClose\n }, menuItems)) : null;\n};\n\n//Контроль свойств - Меню столбца\nP8PTableColumnMenu.propTypes = {\n columnDef: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object).isRequired,\n orderAscItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n orderDescItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n filterItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n onItemClick: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//Диалог подсказки\nconst P8PTableColumnHintDialog = ({\n columnDef,\n okBtnCaption,\n onOk\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n open: true,\n \"aria-labelledby\": \"filter-dialog-title\",\n \"aria-describedby\": \"filter-dialog-description\",\n onClose: () => onOk ? onOk() : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n id: \"filter-dialog-title\"\n }, columnDef.caption), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n dangerouslySetInnerHTML: {\n __html: columnDef.hint\n }\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: () => onOk ? onOk() : null\n }, okBtnCaption)));\n};\n\n//Контроль свойств - Диалог подсказки\nP8PTableColumnHintDialog.propTypes = {\n columnDef: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object).isRequired,\n okBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n onOk: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//Диалог фильтра\nconst P8PTableColumnFilterDialog = ({\n columnDef,\n from,\n to,\n valueCaption,\n valueFromCaption,\n valueToCaption,\n okBtnCaption,\n clearBtnCaption,\n cancelBtnCaption,\n valueFormatter,\n onOk,\n onClear,\n onCancel\n}) => {\n //Собственное состояние - значения с-по\n const [filterValues, setFilterValues] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n from,\n to\n });\n\n //Отработка воода значения в фильтр\n const handleFilterTextFieldChanged = e => {\n setFilterValues(prev => ({\n ...prev,\n [e.target.name]: e.target.value\n }));\n };\n\n //Элементы ввода значений фильтра\n let inputs = null;\n if (Array.isArray(columnDef.values) && columnDef.values.length > 0) {\n inputs = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n name: \"from\",\n fullWidth: true,\n select: true,\n label: valueCaption,\n variant: \"standard\",\n value: filterValues.from,\n onChange: handleFilterTextFieldChanged\n }, columnDef.values.map((v, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n key: i,\n value: v\n }, valueFormatter ? valueFormatter({\n value: v,\n columnDef\n }) : v)));\n } else {\n switch (columnDef.dataType) {\n case P8P_TABLE_DATA_TYPE.STR:\n {\n inputs = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n name: \"from\",\n fullWidth: true,\n InputLabelProps: {\n shrink: true\n },\n value: filterValues.from,\n onChange: handleFilterTextFieldChanged,\n label: valueCaption,\n variant: \"standard\"\n });\n break;\n }\n case P8P_TABLE_DATA_TYPE.NUMB:\n case P8P_TABLE_DATA_TYPE.DATE:\n {\n inputs = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n name: \"from\",\n InputLabelProps: {\n shrink: true\n },\n type: columnDef.dataType == P8P_TABLE_DATA_TYPE.NUMB ? \"number\" : \"date\",\n value: filterValues.from,\n onChange: handleFilterTextFieldChanged,\n label: valueFromCaption,\n variant: \"standard\"\n }), \"\\xA0\", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n name: \"to\",\n InputLabelProps: {\n shrink: true\n },\n type: columnDef.dataType == P8P_TABLE_DATA_TYPE.NUMB ? \"number\" : \"date\",\n value: filterValues.to,\n onChange: handleFilterTextFieldChanged,\n label: valueToCaption,\n variant: \"standard\"\n }));\n break;\n }\n }\n }\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n open: true,\n \"aria-labelledby\": \"filter-dialog-title\",\n \"aria-describedby\": \"filter-dialog-description\",\n onClose: () => onCancel ? onCancel(columnDef.name) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n id: \"filter-dialog-title\"\n }, columnDef.caption), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, inputs), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: () => onOk ? onOk(columnDef.name, filterValues.from, filterValues.to) : null\n }, okBtnCaption), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: () => onClear ? onClear(columnDef.name) : null,\n variant: \"secondary\"\n }, clearBtnCaption), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: () => onCancel ? onCancel(columnDef.name) : null\n }, cancelBtnCaption)));\n};\n\n//Контроль свойств - Диалог фильтра\nP8PTableColumnFilterDialog.propTypes = {\n columnDef: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object).isRequired,\n from: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().any),\n to: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().any),\n valueCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueFromCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueToCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n okBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n clearBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n cancelBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueFormatter: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onOk: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onClear: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onCancel: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//Сводный фильтр\nconst P8PTableFiltersChips = ({\n filters,\n columnsDef,\n valueFromCaption,\n valueToCaption,\n onFilterChipClick,\n onFilterChipDelete,\n valueFormatter\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n direction: \"row\",\n spacing: 1,\n p: 1\n }, filters.map((filter, i) => {\n const columnDef = columnsDef.find(columnDef => columnDef.name == filter.name);\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n key: i,\n label: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n direction: \"row\",\n sx: STYLES.FILTER_CHIP\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"strong\", null, columnDef.caption), \":\\xA0\", (0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.hasValue)(filter.from) && !columnDef.values && columnDef.dataType != P8P_TABLE_DATA_TYPE.STR ? `${valueFromCaption.toLowerCase()} ` : null, (0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.hasValue)(filter.from) ? valueFormatter ? valueFormatter({\n value: filter.from,\n columnDef\n }) : filter.from : null, (0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.hasValue)(filter.to) && !columnDef.values && columnDef.dataType != P8P_TABLE_DATA_TYPE.STR ? ` ${valueToCaption.toLowerCase()} ` : null, (0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.hasValue)(filter.to) ? valueFormatter ? valueFormatter({\n value: filter.to,\n columnDef\n }) : filter.to : null),\n variant: \"outlined\",\n onClick: () => onFilterChipClick ? onFilterChipClick(columnDef.name) : null,\n onDelete: () => onFilterChipDelete ? onFilterChipDelete(columnDef.name) : null\n });\n }));\n};\n\n//Контроль свойств - Сводный фильтр\nP8PTableFiltersChips.propTypes = {\n filters: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array).isRequired,\n columnsDef: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array).isRequired,\n valueFromCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueToCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n onFilterChipClick: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onFilterChipDelete: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n valueFormatter: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Таблица\nconst P8PTable = ({\n columnsDef = [],\n groups = [],\n rows = [],\n orders,\n filters,\n size,\n fixedHeader = false,\n fixedColumns = 0,\n morePages = false,\n reloading = false,\n expandable,\n orderAscMenuItemCaption,\n orderDescMenuItemCaption,\n filterMenuItemCaption,\n valueFilterCaption,\n valueFromFilterCaption,\n valueToFilterCaption,\n okFilterBtnCaption,\n clearFilterBtnCaption,\n cancelFilterBtnCaption,\n morePagesBtnCaption,\n morePagesBtnProps,\n noDataFoundText,\n headCellRender,\n dataCellRender,\n groupCellRender,\n rowExpandRender,\n valueFormatter,\n onOrderChanged,\n onFilterChanged,\n onPagesCountChanged,\n objectsCopier,\n containerComponent,\n containerComponentProps\n}) => {\n //Собственное состояние - описание заголовка\n const [header, dispatchHeaderAction] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useReducer)(_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.p8pTableReducer, (0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.HEADER_INITIAL_STATE)());\n\n //Собственное состояние - фильтруемая колонка\n const [filterColumn, setFilterColumn] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Собственное состояние - развёрнутые строки\n const [expanded, setExpanded] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({});\n\n //Собственное состояния - развёрнутые группы\n const [expandedGroups, setExpandedGroups] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(Array.isArray(groups) && groups.length > 0 ? Object.assign({}, ...groups.map(g => ({\n [g.name]: g.expanded\n }))) : {});\n\n //Собственное состояние - колонка с отображаемой подсказкой\n const [displayHintColumn, setDisplayHintColumn] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Стили\n const theme = (0,_mui_material_styles__WEBPACK_IMPORTED_MODULE_17__[\"default\"])();\n\n //Описание фильтруемой колонки\n const filterColumnDef = filterColumn ? columnsDef.find(columnDef => columnDef.name == filterColumn) || null : null;\n\n //Описание колонки с отображаемой подсказкой\n const displayHintColumnDef = displayHintColumn ? columnsDef.find(columnDef => columnDef.name == displayHintColumn) || null : null;\n\n //Значения фильтра фильтруемой колонки\n const [filterColumnFrom, filterColumnTo] = filterColumn ? (() => {\n const filter = filters.find(filter => filter.name == filterColumn);\n return filter ? [filter.from == null ? \"\" : filter.from, filter.to == null ? \"\" : filter.to] : [\"\", \"\"];\n })() : [\"\", \"\"];\n\n //Формирование заголовка таблицы\n const setHeader = ({\n columnsDef,\n expandable,\n fixedColumns,\n objectsCopier\n }) => dispatchHeaderAction({\n type: _p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.P8P_TABLE_AT.SET_HEADER,\n payload: {\n columnsDef,\n expandable,\n fixedColumns,\n objectsCopier\n }\n });\n\n //Сворачивание/разворачивание уровня заголовка таблицы\n const toggleHeaderExpand = ({\n columnName,\n objectsCopier\n }) => dispatchHeaderAction({\n type: _p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.P8P_TABLE_AT.TOGGLE_HEADER_EXPAND,\n payload: {\n columnName,\n expandable,\n fixedColumns,\n objectsCopier\n }\n });\n\n //Выравнивание в зависимости от типа данных\n const getAlignByDataType = ({\n dataType,\n hasChild\n }) => dataType === P8P_TABLE_DATA_TYPE.DATE || hasChild ? \"center\" : dataType === P8P_TABLE_DATA_TYPE.NUMB ? \"right\" : \"left\";\n\n //Упорядочение содержимого в зависимости от типа данных\n const getJustifyContentByDataType = ({\n dataType,\n hasChild\n }) => dataType === P8P_TABLE_DATA_TYPE.DATE || hasChild ? \"center\" : dataType === P8P_TABLE_DATA_TYPE.NUMB ? \"flex-end\" : \"flex-start\";\n\n //Отработка нажатия на элемент пункта меню\n const handleToolBarItemClick = (action, columnName) => {\n switch (action) {\n case P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.ORDER_TOGGLE:\n {\n const colOrder = orders.find(o => o.name == columnName);\n const newDirection = colOrder?.direction == P8P_TABLE_COLUMN_ORDER_DIRECTIONS.ASC ? P8P_TABLE_COLUMN_ORDER_DIRECTIONS.DESC : colOrder?.direction == P8P_TABLE_COLUMN_ORDER_DIRECTIONS.DESC ? null : P8P_TABLE_COLUMN_ORDER_DIRECTIONS.ASC;\n if (onOrderChanged) onOrderChanged({\n columnName,\n direction: newDirection\n });\n break;\n }\n case P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.FILTER_TOGGLE:\n setFilterColumn(columnName);\n break;\n case P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.EXPAND_TOGGLE:\n toggleHeaderExpand({\n columnName,\n objectsCopier\n });\n break;\n }\n };\n\n //Отработка нажатия на пункты меню\n const handleMenuItemClick = (action, columnName) => {\n switch (action) {\n case P8P_TABLE_COLUMN_MENU_ACTIONS.ORDER_ASC:\n onOrderChanged({\n columnName,\n direction: P8P_TABLE_COLUMN_ORDER_DIRECTIONS.ASC\n });\n break;\n case P8P_TABLE_COLUMN_MENU_ACTIONS.ORDER_DESC:\n onOrderChanged({\n columnName,\n direction: P8P_TABLE_COLUMN_ORDER_DIRECTIONS.DESC\n });\n break;\n case P8P_TABLE_COLUMN_MENU_ACTIONS.FILTER:\n setFilterColumn(columnName);\n break;\n }\n };\n\n //Отработка ввода значения фильтра колонки\n const handleFilterOk = (columnName, from, to) => {\n if (onFilterChanged) onFilterChanged({\n columnName,\n from: from === \"\" ? null : from,\n to: to === \"\" ? null : to\n });\n setFilterColumn(null);\n };\n\n //Отработка очистки значения фильтра колонки\n const handleFilterClear = columnName => {\n if (onFilterChanged) onFilterChanged({\n columnName,\n from: null,\n to: null\n });\n setFilterColumn(null);\n };\n\n //Отработка отмены ввода значения фильтра колонки\n const handleFilterCancel = () => {\n setFilterColumn(null);\n };\n\n //Отработка нажатия на элемент сводного фильтра\n const handleFilterChipClick = columnName => setFilterColumn(columnName);\n\n //Отработка удаления элемента сводного фильтра\n const handleFilterChipDelete = columnName => onFilterChanged ? onFilterChanged({\n columnName,\n from: null,\n to: null\n }) : null;\n\n //Отработка нажатия на кнопку догрузки страницы\n const handleMorePagesBtnClick = () => {\n if (onPagesCountChanged) onPagesCountChanged();\n };\n\n //Отработка нажатия на элемент отображения подсказки по колонке\n const handleColumnShowHintClick = columnName => setDisplayHintColumn(columnName);\n\n //Отработка сокрытия подсказки по колонке\n const handleHintOk = () => setDisplayHintColumn(null);\n\n //Отработка нажатия на кнопку раскрытия элемента\n const handleExpandClick = rowIndex => {\n if (expanded[rowIndex] === true) setExpanded(pv => {\n let res = {\n ...pv\n };\n delete res[rowIndex];\n return res;\n });else setExpanded(pv => ({\n ...pv,\n [rowIndex]: true\n }));\n };\n\n //При перезагрузке данных\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (reloading) setExpanded({});\n }, [reloading]);\n\n //При изменении описания колонок\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n setHeader({\n columnsDef,\n expandable,\n fixedColumns,\n objectsCopier\n });\n }, [columnsDef, expandable, fixedColumns, objectsCopier]);\n\n //Генерация заголовка группы\n const renderGroupCell = group => {\n let customRender = {};\n if (groupCellRender) customRender = groupCellRender({\n columnsDef: header.columnsDef,\n group\n }) || {};\n return header.displayDataColumns.map((columnDef, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], _extends({\n key: `group-header-cell-${i}`\n }, customRender.cellProps, {\n sx: {\n ...STYLES.TABLE_CELL_GROUP_HEADER,\n ...customRender.cellStyle,\n ...(columnDef.width ? {\n minWidth: columnDef.width,\n maxWidth: columnDef.width\n } : {}),\n ...(i == 0 && fixedColumns ? STYLES.TABLE_CELL_GROUP_HEADER_STICKY : {})\n },\n colSpan: expandable && rowExpandRender ? 2 : 1\n }), i == 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n direction: \"row\",\n sx: STYLES.TABLE_COLUMN_STACK\n }, group.expandable ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: () => {\n setExpandedGroups(pv => ({\n ...pv,\n ...{\n [group.name]: !pv[group.name]\n }\n }));\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, expandedGroups[group.name] ? \"indeterminate_check_box\" : \"add_box\")) : null, customRender.data ? customRender.data : group.caption) : null));\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, displayHintColumn ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableColumnHintDialog, {\n columnDef: displayHintColumnDef,\n okBtnCaption: okFilterBtnCaption,\n onOk: handleHintOk\n }) : null, filterColumn ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableColumnFilterDialog, {\n columnDef: filterColumnDef,\n from: filterColumnFrom,\n to: filterColumnTo,\n valueCaption: valueFilterCaption,\n valueFromCaption: valueFromFilterCaption,\n valueToCaption: valueToFilterCaption,\n okBtnCaption: okFilterBtnCaption,\n clearBtnCaption: clearFilterBtnCaption,\n cancelBtnCaption: cancelFilterBtnCaption,\n valueFormatter: valueFormatter,\n onOk: handleFilterOk,\n onClear: handleFilterClear,\n onCancel: handleFilterCancel\n }) : null, Array.isArray(filters) && filters.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableFiltersChips, {\n filters: filters,\n columnsDef: columnsDef,\n valueFromCaption: valueFromFilterCaption,\n valueToCaption: valueToFilterCaption,\n onFilterChipClick: handleFilterChipClick,\n onFilterChipDelete: handleFilterChipDelete,\n valueFormatter: valueFormatter\n }) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], _extends({\n component: containerComponent ? containerComponent : _mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"]\n }, containerComponentProps ? containerComponentProps : {}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n stickyHeader: fixedHeader,\n sx: STYLES.TABLE,\n size: size || P8P_TABLE_SIZE.MEDIUM\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], {\n sx: fixedHeader ? STYLES.TABLE_HEAD_STICKY : {}\n }, header.displayLevels.map((level, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], {\n key: level\n }, expandable && rowExpandRender && i == 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n key: \"head-cell-expand-control\",\n align: \"center\",\n sx: {\n ...STYLES.TABLE_CELL_EXPAND_CONTROL,\n ...(fixedColumns ? STYLES.TABLE_HEAD_CELL_STICKY(theme, 0) : {})\n },\n rowSpan: header.displayLevelsColumns[level][0].rowSpan\n }) : null, header.displayLevelsColumns[level].map((columnDef, j) => {\n let customRender = {};\n if (headCellRender) customRender = headCellRender({\n columnDef\n }) || {};\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], _extends({\n key: `head-cell-${j}`,\n align: getAlignByDataType(columnDef),\n sx: {\n ...(columnDef.width ? {\n minWidth: columnDef.width,\n maxWidth: columnDef.width\n } : {}),\n ...(columnDef.fixed ? STYLES.TABLE_HEAD_CELL_STICKY(theme, columnDef.fixedLeft) : {}),\n ...customRender.cellStyle\n },\n rowSpan: columnDef.rowSpan,\n colSpan: columnDef.colSpan\n }, customRender.cellProps), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], _extends({\n direction: \"row\",\n justifyContent: getJustifyContentByDataType(columnDef),\n sx: {\n ...STYLES.TABLE_COLUMN_STACK,\n ...customRender.stackStyle\n }\n }, customRender.stackProps), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableColumnToolBarLeft, {\n columnDef: columnDef,\n onItemClick: handleToolBarItemClick\n }), customRender.data ? customRender.data : columnDef.hint ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_24__[\"default\"], {\n component: \"button\",\n variant: \"body2\",\n align: \"left\",\n underline: \"always\",\n onClick: () => handleColumnShowHintClick(columnDef.name)\n }, columnDef.caption) : columnDef.caption, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableColumnToolBarRight, {\n columnDef: columnDef,\n orders: orders,\n filters: filters,\n onItemClick: handleToolBarItemClick\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableColumnMenu, {\n columnDef: columnDef,\n orderAscItemCaption: orderAscMenuItemCaption,\n orderDescItemCaption: orderDescMenuItemCaption,\n filterItemCaption: filterMenuItemCaption,\n onItemClick: handleMenuItemClick\n })));\n })))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_25__[\"default\"], null, rows.length > 0 ? (Array.isArray(groups) && groups.length > 0 ? groups : [{}]).map((group, g) => {\n const rowsView = rows.map((row, i) => !group?.name || group?.name == row.groupName ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), {\n key: `data-${i}`\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], {\n key: `data-row-${i}`,\n sx: STYLES.TABLE_ROW\n }, expandable && rowExpandRender ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n key: `data-cell-expand-control-${i}`,\n align: \"center\",\n sx: {\n ...STYLES.TABLE_CELL_EXPAND_CONTROL,\n ...(fixedColumns ? STYLES.TABLE_CELL_STICKY(theme, 0) : {})\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: () => handleExpandClick(i)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, expanded[i] === true ? \"keyboard_arrow_down\" : \"keyboard_arrow_right\"))) : null, header.displayDataColumns.map((columnDef, j) => {\n let customRender = {};\n if (dataCellRender) customRender = dataCellRender({\n row,\n columnDef\n }) || {};\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], _extends({\n key: `data-cell-${j}`,\n align: getAlignByDataType(columnDef),\n sx: {\n ...(columnDef.width ? {\n minWidth: columnDef.width,\n maxWidth: columnDef.width\n } : {}),\n ...(columnDef.fixed ? STYLES.TABLE_CELL_STICKY(theme, columnDef.fixedLeft) : {}),\n ...customRender.cellStyle\n }\n }, customRender.cellProps), customRender.data ? customRender.data : valueFormatter ? valueFormatter({\n value: row[columnDef.name],\n columnDef\n }) : row[columnDef.name]);\n })), expandable && rowExpandRender && expanded[i] === true ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], {\n key: `data-row-expand-${i}`\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n sx: {\n ...STYLES.TABLE_CELL_EXPAND_CONTAINER,\n ...(fixedColumns ? STYLES.TABLE_CELL_STICKY(theme, 0) : {})\n },\n colSpan: fixedColumns ? header.displayFixedColumnsCount + 1 : header.displayDataColumnsCount\n }, rowExpandRender({\n columnsDef,\n row\n }))) : null) : null);\n return !group?.name ? rowsView : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), {\n key: `group-${g}`\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], {\n key: `group-header-${g}`\n }, renderGroupCell(group)), !group.expandable || expandedGroups[group.name] === true ? rowsView : null);\n }) : noDataFoundText && !reloading ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n colSpan: header.displayDataColumnsCount\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_p8p_app_message__WEBPACK_IMPORTED_MODULE_1__.P8PAppInlineError, {\n text: noDataFoundText\n }))) : null))), morePages ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_26__[\"default\"], {\n style: STYLES.MORE_BUTTON_CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], _extends({\n fullWidth: true,\n onClick: handleMorePagesBtnClick\n }, morePagesBtnProps ? morePagesBtnProps : {}), morePagesBtnCaption)) : null);\n};\n\n//Контроль свойств - Таблица\nP8PTable.propTypes = {\n columnsDef: prop_types__WEBPACK_IMPORTED_MODULE_3___default().arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_3___default().shape({\n name: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n caption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n order: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n filter: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n dataType: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n visible: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n values: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array),\n parent: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),\n expandable: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n expanded: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n width: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number)\n })).isRequired,\n groups: prop_types__WEBPACK_IMPORTED_MODULE_3___default().arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_3___default().shape({\n name: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n caption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n expandable: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n expanded: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired\n })),\n rows: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array).isRequired,\n orders: prop_types__WEBPACK_IMPORTED_MODULE_3___default().arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_3___default().shape({\n name: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n direction: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired\n })).isRequired,\n filters: prop_types__WEBPACK_IMPORTED_MODULE_3___default().arrayOf(P8P_TABLE_FILTER_SHAPE).isRequired,\n size: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),\n fixedHeader: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool),\n fixedColumns: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number),\n morePages: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool),\n reloading: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool),\n expandable: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool),\n orderAscMenuItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n orderDescMenuItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n filterMenuItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueFilterCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueFromFilterCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueToFilterCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n okFilterBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n clearFilterBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n cancelFilterBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n morePagesBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n morePagesBtnProps: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object),\n noDataFoundText: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),\n headCellRender: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n dataCellRender: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n groupCellRender: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n rowExpandRender: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n valueFormatter: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onOrderChanged: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onFilterChanged: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onPagesCountChanged: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n objectsCopier: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func).isRequired,\n containerComponent: prop_types__WEBPACK_IMPORTED_MODULE_3___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_3___default().elementType), (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string)]),\n containerComponentProps: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_table.js?"); /***/ }), @@ -4723,7 +4723,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ deepCopyObject: () => (/* binding */ deepCopyObject),\n/* harmony export */ formatDateJSONDateOnly: () => (/* binding */ formatDateJSONDateOnly),\n/* harmony export */ formatDateRF: () => (/* binding */ formatDateRF),\n/* harmony export */ formatDateTimeRF: () => (/* binding */ formatDateTimeRF),\n/* harmony export */ formatNumberRFCurrency: () => (/* binding */ formatNumberRFCurrency),\n/* harmony export */ genGUID: () => (/* binding */ genGUID),\n/* harmony export */ getDisplaySize: () => (/* binding */ getDisplaySize),\n/* harmony export */ hasValue: () => (/* binding */ hasValue),\n/* harmony export */ object2Base64XML: () => (/* binding */ object2Base64XML),\n/* harmony export */ xml2JSON: () => (/* binding */ xml2JSON)\n/* harmony export */ });\n/* harmony import */ var fast_xml_parser__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! fast-xml-parser */ \"./node_modules/fast-xml-parser/src/fxp.js\");\n/* harmony import */ var fast_xml_parser__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(fast_xml_parser__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! dayjs */ \"./node_modules/dayjs/dayjs.min.js\");\n/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(dayjs__WEBPACK_IMPORTED_MODULE_1__);\n/*\r\n Парус 8 - Панели мониторинга\r\n Ядро: Вспомогательные функции\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Конвертация XML в JSON и JSON в XML\n //Работа с датами\n\n//---------\n//Константы\n//---------\n\n//Коды типовых размеров экранов\nconst DISPLAY_SIZE_CODE = {\n XS: \"XS\",\n //eXtra Small - супер маленький экран\n SM: \"SM\",\n //Small - маленький экран\n MD: \"MD\",\n //Middle - средний экран\n LG: \"LG\" //Large - большой экран\n};\n\n//Типовые размеры экранов\nconst DISPLAY_SIZE = {\n [DISPLAY_SIZE_CODE.XS]: {\n WIDTH_FROM: 0,\n WIDTH_TO: 767\n },\n //eXtra Small - супер маленький экран < 768px\n [DISPLAY_SIZE_CODE.SM]: {\n WIDTH_FROM: 768,\n WIDTH_TO: 991\n },\n //Small - маленький экран >= 768px\n [DISPLAY_SIZE_CODE.MD]: {\n WIDTH_FROM: 992,\n WIDTH_TO: 1199\n },\n //Middle - средний экран >= 992px\n [DISPLAY_SIZE_CODE.LG]: {\n WIDTH_FROM: 1200,\n WIDTH_TO: 1000000\n } //Large - большой экран >= 1200px\n};\n\n//Типовые пути конвертации в массив (при переводе XML -> JSON)\nconst XML_ALWAYS_ARRAY_PATHS = [\"XRESPOND.XPAYLOAD.XOUT_ARGUMENTS\", \"XRESPOND.XPAYLOAD.XDATA_GRID.rows\", \"XRESPOND.XPAYLOAD.XDATA_GRID.columnsDef\", \"XRESPOND.XPAYLOAD.XDATA_GRID.columnsDef.values\", \"XRESPOND.XPAYLOAD.XDATA_GRID.groups\", \"XRESPOND.XPAYLOAD.XGANTT.taskAttributes\", \"XRESPOND.XPAYLOAD.XGANTT.taskColors\", \"XRESPOND.XPAYLOAD.XGANTT.tasks\", \"XRESPOND.XPAYLOAD.XGANTT.tasks.dependencies\", \"XRESPOND.XPAYLOAD.XCHART.labels\", \"XRESPOND.XPAYLOAD.XCHART.datasets\", \"XRESPOND.XPAYLOAD.XCHART.datasets.data\", \"XRESPOND.XPAYLOAD.XCHART.datasets.items\", \"XRESPOND.XPAYLOAD.XCYCLOGRAM.taskAttributes\", \"XRESPOND.XPAYLOAD.XCYCLOGRAM.columns\", \"XRESPOND.XPAYLOAD.XCYCLOGRAM.groups\", \"XRESPOND.XPAYLOAD.XCYCLOGRAM.tasks\"];\n\n//Типовые шаблоны конвертации в массив (при переводе XML -> JSON)\nconst XML_ALWAYS_ARRAY_PATH_PATTERNS = [/(.*)XDATA_GRID.rows$/, /(.*)XDATA_GRID.columnsDef$/, /(.*)XDATA_GRID.columnsDef.values$/, /(.*)XDATA_GRID.groups$/, /(.*)XGANTT.taskAttributes$/, /(.*)XGANTT.taskColors$/, /(.*)XGANTT.tasks$/, /(.*)XGANTT.tasks.dependencies$/, /(.*)XCHART.labels$/, /(.*)XCHART.datasets$/, /(.*)XCHART.datasets.data$/, /(.*)XCHART.datasets.items$/, /(.*)XCYCLOGRAM.taskAttributes$/, /(.*)XCYCLOGRAM.columns$/, /(.*)XCYCLOGRAM.groups$/, /(.*)XCYCLOGRAM.tasks$/];\n\n//Типовой постфикс тега для массива (при переводе XML -> JSON)\nconst XML_ALWAYS_ARRAY_POSTFIX = \"__SYSTEM__ARRAY__\";\n\n//Типовые шаблоны конвертации значения атрибута в строку (при переводе XML -> JSON)\nconst XML_ATTR_ALWAYS_STR_PATH_PATTERNS = [/(.*)XDATA_GRID.columnsDef.name$/, /(.*)XDATA_GRID.columnsDef.caption$/, /(.*)XDATA_GRID.columnsDef.parent$/, /(.*)XDATA_GRID.groups.name$/, /(.*)XDATA_GRID.groups.caption$/, /(.*)XCYCLOGRAM.columns.name$/, /(.*)XCYCLOGRAM.groups.name$/];\n\n//-----------\n//Тело модуля\n//-----------\n\n//Проверка существования значения\nconst hasValue = value => typeof value !== \"undefined\" && value !== null && value !== \"\";\n\n//Проверка типа устройства\nconst getDisplaySize = () => {\n let res = DISPLAY_SIZE_CODE.MD;\n Object.keys(DISPLAY_SIZE).map(dspl => {\n if (window.innerWidth >= DISPLAY_SIZE[dspl].WIDTH_FROM && window.innerWidth <= DISPLAY_SIZE[dspl].WIDTH_TO) res = dspl;\n });\n return res;\n};\n\n//Глубокое копирование объекта\nconst deepCopyObject = obj => JSON.parse(JSON.stringify(obj));\n\n//Конвертация объекта в Base64 XML\nconst object2Base64XML = (obj, builderOptions) => {\n const builder = new fast_xml_parser__WEBPACK_IMPORTED_MODULE_0__.XMLBuilder(builderOptions);\n //onOrderChanged({ orders: btoa(ordersBuilder.build(newOrders)) });\n return btoa(unescape(encodeURIComponent(builder.build(obj))));\n};\n\n//Конвертация XML в JSON\nconst xml2JSON = ({\n xmlDoc,\n isArray,\n transformTagName,\n tagValueProcessor,\n attributeValueProcessor,\n useDefaultPatterns = true\n}) => {\n return new Promise((resolve, reject) => {\n try {\n let opts = {\n ignoreDeclaration: true,\n ignoreAttributes: false,\n parseAttributeValue: true,\n attributeNamePrefix: \"\"\n };\n if (useDefaultPatterns) {\n opts.isArray = (name, jPath, isLeafNode, isAttribute) => XML_ALWAYS_ARRAY_PATHS.indexOf(jPath) !== -1 || XML_ALWAYS_ARRAY_PATH_PATTERNS.some(pattern => pattern.test(jPath)) || jPath.endsWith(XML_ALWAYS_ARRAY_POSTFIX) || (isArray ? isArray(name, jPath, isLeafNode, isAttribute) : undefined);\n opts.attributeValueProcessor = (name, val, jPath) => XML_ATTR_ALWAYS_STR_PATH_PATTERNS.some(pattern => pattern.test(`${jPath}.${name}`)) ? undefined : attributeValueProcessor ? attributeValueProcessor(name, val, jPath) : val;\n } else {\n if (isArray) opts.isArray = isArray;\n if (attributeValueProcessor) opts.attributeValueProcessor = attributeValueProcessor;\n }\n if (transformTagName) opts.transformTagName = transformTagName;\n if (tagValueProcessor) opts.tagValueProcessor = tagValueProcessor;\n const parser = new fast_xml_parser__WEBPACK_IMPORTED_MODULE_0__.XMLParser(opts);\n resolve(parser.parse(xmlDoc));\n } catch (e) {\n reject(e);\n }\n });\n};\n\n//Форматирование даты в формат РФ\nconst formatDateRF = value => value ? dayjs__WEBPACK_IMPORTED_MODULE_1___default()(value).format(\"DD.MM.YYYY\") : null;\n\n//Форматирование даты и времени в формат РФ\nconst formatDateTimeRF = value => value ? dayjs__WEBPACK_IMPORTED_MODULE_1___default()(value).format(\"DD.MM.YYYY HH:mm:ss\") : null;\n\n//Форматирование даты в формат JSON (только дата, без времени)\nconst formatDateJSONDateOnly = value => value ? dayjs__WEBPACK_IMPORTED_MODULE_1___default()(value).format(\"YYYY-MM-DD\") : null;\n\n//Форматирование числа в \"Денежном\" формате РФ\nconst formatNumberRFCurrency = value => hasValue(value) ? new Intl.NumberFormat(\"ru-RU\", {\n minimumFractionDigits: 2\n}).format(value) : null;\n\n//Формирование уникального идентификатора\nconst genGUID = () => \"10000000-1000-4000-8000-100000000000\".replace(/[018]/g, c => (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16));\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/core/utils.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ deepCopyObject: () => (/* binding */ deepCopyObject),\n/* harmony export */ formatDateJSONDateOnly: () => (/* binding */ formatDateJSONDateOnly),\n/* harmony export */ formatDateRF: () => (/* binding */ formatDateRF),\n/* harmony export */ formatDateTimeRF: () => (/* binding */ formatDateTimeRF),\n/* harmony export */ formatNumberRFCurrency: () => (/* binding */ formatNumberRFCurrency),\n/* harmony export */ genGUID: () => (/* binding */ genGUID),\n/* harmony export */ getDisplaySize: () => (/* binding */ getDisplaySize),\n/* harmony export */ hasValue: () => (/* binding */ hasValue),\n/* harmony export */ object2Base64XML: () => (/* binding */ object2Base64XML),\n/* harmony export */ xml2JSON: () => (/* binding */ xml2JSON)\n/* harmony export */ });\n/* harmony import */ var fast_xml_parser__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! fast-xml-parser */ \"./node_modules/fast-xml-parser/src/fxp.js\");\n/* harmony import */ var fast_xml_parser__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(fast_xml_parser__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! dayjs */ \"./node_modules/dayjs/dayjs.min.js\");\n/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(dayjs__WEBPACK_IMPORTED_MODULE_1__);\n/*\r\n Парус 8 - Панели мониторинга\r\n Ядро: Вспомогательные функции\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Конвертация XML в JSON и JSON в XML\n //Работа с датами\n\n//---------\n//Константы\n//---------\n\n//Коды типовых размеров экранов\nconst DISPLAY_SIZE_CODE = {\n XS: \"XS\",\n //eXtra Small - супер маленький экран\n SM: \"SM\",\n //Small - маленький экран\n MD: \"MD\",\n //Middle - средний экран\n LG: \"LG\" //Large - большой экран\n};\n\n//Типовые размеры экранов\nconst DISPLAY_SIZE = {\n [DISPLAY_SIZE_CODE.XS]: {\n WIDTH_FROM: 0,\n WIDTH_TO: 767\n },\n //eXtra Small - супер маленький экран < 768px\n [DISPLAY_SIZE_CODE.SM]: {\n WIDTH_FROM: 768,\n WIDTH_TO: 991\n },\n //Small - маленький экран >= 768px\n [DISPLAY_SIZE_CODE.MD]: {\n WIDTH_FROM: 992,\n WIDTH_TO: 1199\n },\n //Middle - средний экран >= 992px\n [DISPLAY_SIZE_CODE.LG]: {\n WIDTH_FROM: 1200,\n WIDTH_TO: 1000000\n } //Large - большой экран >= 1200px\n};\n\n//Типовые пути конвертации в массив (при переводе XML -> JSON)\nconst XML_ALWAYS_ARRAY_PATHS = [\"XRESPOND.XPAYLOAD.XOUT_ARGUMENTS\", \"XRESPOND.XPAYLOAD.XDATA_GRID.rows\", \"XRESPOND.XPAYLOAD.XDATA_GRID.columnsDef\", \"XRESPOND.XPAYLOAD.XDATA_GRID.columnsDef.values\", \"XRESPOND.XPAYLOAD.XDATA_GRID.groups\", \"XRESPOND.XPAYLOAD.XGANTT.taskAttributes\", \"XRESPOND.XPAYLOAD.XGANTT.taskColors\", \"XRESPOND.XPAYLOAD.XGANTT.tasks\", \"XRESPOND.XPAYLOAD.XGANTT.tasks.dependencies\", \"XRESPOND.XPAYLOAD.XCHART.labels\", \"XRESPOND.XPAYLOAD.XCHART.datasets\", \"XRESPOND.XPAYLOAD.XCHART.datasets.data\", \"XRESPOND.XPAYLOAD.XCHART.datasets.items\", \"XRESPOND.XPAYLOAD.XCYCLOGRAM.taskAttributes\", \"XRESPOND.XPAYLOAD.XCYCLOGRAM.columns\", \"XRESPOND.XPAYLOAD.XCYCLOGRAM.groups\", \"XRESPOND.XPAYLOAD.XCYCLOGRAM.tasks\"];\n\n//Типовые шаблоны конвертации в массив (при переводе XML -> JSON)\nconst XML_ALWAYS_ARRAY_PATH_PATTERNS = [/(.*)XDATA_GRID.rows$/, /(.*)XDATA_GRID.columnsDef$/, /(.*)XDATA_GRID.columnsDef.values$/, /(.*)XDATA_GRID.groups$/, /(.*)XGANTT.taskAttributes$/, /(.*)XGANTT.taskColors$/, /(.*)XGANTT.tasks$/, /(.*)XGANTT.tasks.dependencies$/, /(.*)XCHART.labels$/, /(.*)XCHART.datasets$/, /(.*)XCHART.datasets.data$/, /(.*)XCHART.datasets.items$/, /(.*)XCYCLOGRAM.taskAttributes$/, /(.*)XCYCLOGRAM.columns$/, /(.*)XCYCLOGRAM.groups$/, /(.*)XCYCLOGRAM.tasks$/];\n\n//Типовой постфикс тега для массива (при переводе XML -> JSON)\nconst XML_ALWAYS_ARRAY_POSTFIX = \"__SYSTEM__ARRAY__\";\n\n//Типовые шаблоны конвертации значения атрибута в строку (при переводе XML -> JSON)\nconst XML_ATTR_ALWAYS_STR_PATH_PATTERNS = [/(.*)XDATA_GRID.columnsDef.name$/, /(.*)XDATA_GRID.columnsDef.caption$/, /(.*)XDATA_GRID.columnsDef.parent$/, /(.*)XDATA_GRID.groups.name$/, /(.*)XDATA_GRID.groups.caption$/, /(.*)XCYCLOGRAM.columns.name$/, /(.*)XCYCLOGRAM.groups.name$/];\n\n//-----------\n//Тело модуля\n//-----------\n\n//Проверка существования значения\nconst hasValue = value => typeof value !== \"undefined\" && value !== null && value !== \"\";\n\n//Проверка типа устройства\nconst getDisplaySize = () => {\n let res = DISPLAY_SIZE_CODE.MD;\n Object.keys(DISPLAY_SIZE).map(dspl => {\n if (window.innerWidth >= DISPLAY_SIZE[dspl].WIDTH_FROM && window.innerWidth <= DISPLAY_SIZE[dspl].WIDTH_TO) res = dspl;\n });\n return res;\n};\n\n//Глубокое копирование объекта\nconst deepCopyObject = obj => JSON.parse(JSON.stringify(obj));\n\n//Конвертация объекта в Base64 XML\nconst object2Base64XML = (obj, builderOptions) => {\n const builder = new fast_xml_parser__WEBPACK_IMPORTED_MODULE_0__.XMLBuilder(builderOptions);\n return btoa(unescape(encodeURIComponent(builder.build(obj))));\n};\n\n//Конвертация XML в JSON\nconst xml2JSON = ({\n xmlDoc,\n isArray,\n transformTagName,\n tagValueProcessor,\n attributeValueProcessor,\n useDefaultPatterns = true\n}) => {\n return new Promise((resolve, reject) => {\n try {\n let opts = {\n ignoreDeclaration: true,\n ignoreAttributes: false,\n parseAttributeValue: true,\n attributeNamePrefix: \"\"\n };\n if (useDefaultPatterns) {\n opts.isArray = (name, jPath, isLeafNode, isAttribute) => XML_ALWAYS_ARRAY_PATHS.indexOf(jPath) !== -1 || XML_ALWAYS_ARRAY_PATH_PATTERNS.some(pattern => pattern.test(jPath)) || jPath.endsWith(XML_ALWAYS_ARRAY_POSTFIX) || (isArray ? isArray(name, jPath, isLeafNode, isAttribute) : undefined);\n opts.attributeValueProcessor = (name, val, jPath) => XML_ATTR_ALWAYS_STR_PATH_PATTERNS.some(pattern => pattern.test(`${jPath}.${name}`)) ? undefined : attributeValueProcessor ? attributeValueProcessor(name, val, jPath) : val;\n } else {\n if (isArray) opts.isArray = isArray;\n if (attributeValueProcessor) opts.attributeValueProcessor = attributeValueProcessor;\n }\n if (transformTagName) opts.transformTagName = transformTagName;\n if (tagValueProcessor) opts.tagValueProcessor = tagValueProcessor;\n const parser = new fast_xml_parser__WEBPACK_IMPORTED_MODULE_0__.XMLParser(opts);\n resolve(parser.parse(xmlDoc));\n } catch (e) {\n reject(e);\n }\n });\n};\n\n//Форматирование даты в формат РФ\nconst formatDateRF = value => value ? dayjs__WEBPACK_IMPORTED_MODULE_1___default()(value).format(\"DD.MM.YYYY\") : null;\n\n//Форматирование даты и времени в формат РФ\nconst formatDateTimeRF = value => value ? dayjs__WEBPACK_IMPORTED_MODULE_1___default()(value).format(\"DD.MM.YYYY HH:mm:ss\") : null;\n\n//Форматирование даты в формат JSON (только дата, без времени)\nconst formatDateJSONDateOnly = value => value ? dayjs__WEBPACK_IMPORTED_MODULE_1___default()(value).format(\"YYYY-MM-DD\") : null;\n\n//Форматирование числа в \"Денежном\" формате РФ\nconst formatNumberRFCurrency = value => hasValue(value) ? new Intl.NumberFormat(\"ru-RU\", {\n minimumFractionDigits: 2\n}).format(value) : null;\n\n//Формирование уникального идентификатора\nconst genGUID = () => \"10000000-1000-4000-8000-100000000000\".replace(/[018]/g, c => (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16));\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/core/utils.js?"); /***/ }), @@ -5504,7 +5504,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Chart: () => (/* binding */ Chart)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Paper/Paper.js\");\n/* harmony import */ var _components_p8p_chart__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../components/p8p_chart */ \"./app/components/p8p_chart.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - Примеры для разработчиков\r\n Пример: Графики \"P8PChart\"\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //График\n //Контекст взаимодействия с сервером\n //Контекст приложения\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n CONTAINER: {\n textAlign: \"center\",\n paddingTop: \"20px\"\n },\n TITLE: {\n paddingBottom: \"15px\"\n },\n CHART: {\n minWidth: \"65vw\",\n maxHeight: \"65vw\",\n display: \"flex\",\n justifyContent: \"center\"\n },\n CHART_PAPER: {\n padding: \"25px\"\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Пример: Графики \"P8PChart\"\nconst Chart = ({\n title\n}) => {\n //Собственное состояние - график\n const [chart, setChart] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n loaded: false,\n labels: [],\n datasets: []\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_2__[\"BackEndСtx\"]);\n\n //Подключение к контексту приложения\n const {\n pOnlineShowUnit\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_3__[\"ApplicationСtx\"]);\n\n //Загрузка данных графика с сервера\n const loadChart = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n const chart = await executeStored({\n stored: \"PKG_P8PANELS_SAMPLES.CHART\",\n respArg: \"COUT\"\n });\n setChart(pv => ({\n ...pv,\n loaded: true,\n ...chart.XCHART\n }));\n }, [executeStored]);\n\n //Отработка нажатия на график\n const handleChartClick = ({\n item\n }) => {\n pOnlineShowUnit({\n unitCode: \"Contracts\",\n inputParameters: [{\n name: item.SCOND,\n value: item.SCOND_VALUE\n }]\n });\n };\n\n //При подключении к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadChart();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: STYLES.CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n sx: STYLES.TITLE,\n variant: \"h6\"\n }, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n container: true,\n spacing: 0,\n pt: 5,\n direction: \"column\",\n alignItems: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n item: true,\n xs: 12\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n elevation: 6,\n sx: STYLES.CHART_PAPER\n }, chart.loaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_chart__WEBPACK_IMPORTED_MODULE_1__.P8PChart, _extends({}, chart, {\n onClick: handleChartClick,\n style: STYLES.CHART\n })) : null))));\n};\n\n//Контроль свойств - Пример: Графики \"P8PChart\"\nChart.propTypes = {\n title: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/samples/chart.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Chart: () => (/* binding */ Chart)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Paper/Paper.js\");\n/* harmony import */ var _components_p8p_chart__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../components/p8p_chart */ \"./app/components/p8p_chart.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - Примеры для разработчиков\r\n Пример: Графики \"P8PChart\"\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //График\n //Контекст взаимодействия с сервером\n //Контекст приложения\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n CONTAINER: {\n textAlign: \"center\",\n paddingTop: \"20px\"\n },\n TITLE: {\n paddingBottom: \"15px\"\n },\n CHART: {\n minWidth: \"65vw\",\n maxHeight: \"65vw\",\n display: \"flex\",\n justifyContent: \"center\"\n },\n CHART_PAPER: {\n padding: \"25px\"\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Пример: Графики \"P8PChart\"\nconst Chart = ({\n title\n}) => {\n //Собственное состояние - график\n const [chart, setChart] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n loaded: false\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_2__[\"BackEndСtx\"]);\n\n //Подключение к контексту приложения\n const {\n pOnlineShowUnit\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_3__[\"ApplicationСtx\"]);\n\n //Загрузка данных графика с сервера\n const loadChart = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n const chart = await executeStored({\n stored: \"PKG_P8PANELS_SAMPLES.CHART\",\n respArg: \"COUT\"\n });\n setChart(pv => ({\n ...pv,\n loaded: true,\n ...chart.XCHART\n }));\n }, [executeStored]);\n\n //Отработка нажатия на график\n const handleChartClick = ({\n item\n }) => {\n pOnlineShowUnit({\n unitCode: \"Contracts\",\n inputParameters: [{\n name: item.SCOND,\n value: item.SCOND_VALUE\n }]\n });\n };\n\n //При подключении к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadChart();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: STYLES.CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n sx: STYLES.TITLE,\n variant: \"h6\"\n }, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n container: true,\n spacing: 0,\n pt: 5,\n direction: \"column\",\n alignItems: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n item: true,\n xs: 12\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n elevation: 6,\n sx: STYLES.CHART_PAPER\n }, chart.loaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_chart__WEBPACK_IMPORTED_MODULE_1__.P8PChart, _extends({}, chart, {\n onClick: handleChartClick,\n style: STYLES.CHART\n })) : null))));\n};\n\n//Контроль свойств - Пример: Графики \"P8PChart\"\nChart.propTypes = {\n title: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/samples/chart.js?"); /***/ }), @@ -5526,7 +5526,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ DataGrid: () => (/* binding */ DataGrid),\n/* harmony export */ groupCellRender: () => (/* binding */ groupCellRender)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_13__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _app_styles__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../app.styles */ \"./app.styles.js\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - Примеры для разработчиков\r\n Пример: Таблица данных \"P8PDataGrid\"\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Вспомогательные процедуры и функции\n //Таблица данных\n //Подключение компонентов к настройкам приложения\n //Контекст взаимодействия с сервером\n //Контекст приложения\n //Типовые стили\n\n//---------\n//Константы\n//---------\n\n//Размер страницы данных\nconst DATA_GRID_PAGE_SIZE = 5;\n\n//Стили\nconst STYLES = {\n CONTAINER: {\n textAlign: \"center\",\n paddingTop: \"20px\"\n },\n TITLE: {\n paddingBottom: \"15px\"\n },\n DATA_GRID_CONTAINER: {\n maxWidth: 700,\n maxHeight: 500,\n minHeight: 500,\n ..._app_styles__WEBPACK_IMPORTED_MODULE_6__.APP_STYLES.SCROLL\n }\n};\n\n//---------------------------------------------\n//Вспомогательные функции форматирования данных\n//---------------------------------------------\n\n//Формирование значения для колонки \"Тип контрагента\"\nconst formatAgentTypeValue = (value, addText = false) => {\n const [text, icon] = value == 0 ? [\"Юридическое лицо\", \"business\"] : [\"Физическое лицо\", \"person\"];\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n direction: \"row\",\n gap: 0.5,\n alignItems: \"center\",\n justifyContent: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n title: text\n }, icon), addText == true ? text : null);\n};\n\n//Форматирование значений колонок\nconst valueFormatter = ({\n value,\n columnDef\n}) => {\n switch (columnDef.name) {\n case \"NAGNTYPE\":\n return formatAgentTypeValue(value, true);\n }\n return value;\n};\n\n//Генерация представления ячейки c данными\nconst dataCellRender = ({\n row,\n columnDef\n}) => {\n switch (columnDef.name) {\n case \"NAGNTYPE\":\n return {\n cellProps: {\n align: \"center\"\n },\n data: formatAgentTypeValue(row[columnDef.name], false)\n };\n }\n};\n\n//Генерация представления ячейки заголовка\nconst headCellRender = ({\n columnDef\n}) => {\n switch (columnDef.name) {\n case \"NAGNTYPE\":\n return {\n stackProps: {\n justifyContent: \"center\"\n },\n cellProps: {\n align: \"center\"\n }\n };\n }\n};\n\n//Генерация представления ячейки заголовка группы\nconst groupCellRender = () => ({\n cellStyle: {\n padding: \"2px\"\n }\n});\n\n//-----------\n//Тело модуля\n//-----------\n\n//Пример: Таблица данных \"P8PDataGrid\"\nconst DataGrid = ({\n title\n}) => {\n //Собственное состояние - таблица данных\n const [dataGrid, setDataGrid] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n filters: null,\n orders: null,\n groups: [],\n rows: [],\n reloading: true,\n pageNumber: 1,\n morePages: true,\n fixedHeader: false,\n fixedColumns: 0\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_4__[\"BackEndСtx\"]);\n\n //Подключение к контексту приложения\n const {\n pOnlineShowDocument\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_5__[\"ApplicationСtx\"]);\n\n //Загрузка данных таблицы с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (dataGrid.reloading) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_SAMPLES.DATA_GRID\",\n args: {\n CFILTERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.object2Base64XML)(dataGrid.filters, {\n arrayNodeName: \"filters\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.object2Base64XML)(dataGrid.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: dataGrid.pageNumber,\n NPAGE_SIZE: DATA_GRID_PAGE_SIZE,\n NINCLUDE_DEF: dataGrid.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\"\n });\n setDataGrid(pv => ({\n ...pv,\n ...data.XDATA_GRID,\n columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XDATA_GRID.rows || [])] : [...pv.rows, ...(data.XDATA_GRID.rows || [])],\n groups: data.XDATA_GRID.groups ? pv.pageNumber == 1 ? [...data.XDATA_GRID.groups] : [...pv.groups, ...data.XDATA_GRID.groups.filter(g => !pv.groups.find(pg => pg.name == g.name))] : [...pv.groups],\n dataLoaded: true,\n reloading: false,\n morePages: (data.XDATA_GRID.rows || []).length >= DATA_GRID_PAGE_SIZE\n }));\n }\n }, [dataGrid.reloading, dataGrid.filters, dataGrid.orders, dataGrid.dataLoaded, dataGrid.pageNumber, executeStored, SERV_DATA_TYPE_CLOB]);\n\n //При изменении состояния фильтра\n const handleFilterChanged = ({\n filters\n }) => setDataGrid(pv => ({\n ...pv,\n filters: [...filters],\n pageNumber: 1,\n reloading: true\n }));\n\n //При изменении состояния сортировки\n const handleOrderChanged = ({\n orders\n }) => setDataGrid(pv => ({\n ...pv,\n orders: [...orders],\n pageNumber: 1,\n reloading: true\n }));\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = () => setDataGrid(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reloading: true\n }));\n\n //При нажатии на копку контрагента\n const handleAgnButtonClicked = agnCode => pOnlineShowDocument({\n unitCode: \"AGNLIST\",\n document: agnCode,\n inRnParameter: \"in_AGNABBR\"\n });\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadData();\n }, [dataGrid.reloading, loadData]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: STYLES.CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n sx: STYLES.TITLE,\n variant: \"h6\"\n }, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n container: true,\n spacing: 1,\n pt: 5\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n item: true,\n xs: 12\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n p: 5,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\"\n }, dataGrid.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_2__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_GRID_CONFIG_PROPS, {\n containerComponentProps: {\n elevation: 6,\n sx: STYLES.DATA_GRID_CONTAINER\n }\n }, dataGrid, {\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_2__.P8P_DATA_GRID_SIZE.LARGE,\n valueFormatter: valueFormatter,\n headCellRender: headCellRender,\n dataCellRender: dataCellRender,\n groupCellRender: groupCellRender,\n onOrderChanged: handleOrderChanged,\n onFilterChanged: handleFilterChanged,\n onPagesCountChanged: handlePagesCountChanged,\n expandable: true,\n rowExpandRender: ({\n row\n }) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n onClick: () => handleAgnButtonClicked(row.SAGNABBR)\n }, \"\\u041F\\u043E\\u043A\\u0430\\u0437\\u0430\\u0442\\u044C \\u0432 \\u0440\\u0430\\u0437\\u0434\\u0435\\u043B\\u0435\")\n })) : null))));\n};\n\n//Контроль свойств - Пример: Таблица данных \"P8PDataGrid\"\nDataGrid.propTypes = {\n title: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().string).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/samples/data_grid.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ DataGrid: () => (/* binding */ DataGrid),\n/* harmony export */ groupCellRender: () => (/* binding */ groupCellRender)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_13__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _app_styles__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../app.styles */ \"./app.styles.js\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - Примеры для разработчиков\r\n Пример: Таблица данных \"P8PDataGrid\"\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Вспомогательные процедуры и функции\n //Таблица данных\n //Подключение компонентов к настройкам приложения\n //Контекст взаимодействия с сервером\n //Контекст приложения\n //Типовые стили\n\n//---------\n//Константы\n//---------\n\n//Размер страницы данных\nconst DATA_GRID_PAGE_SIZE = 5;\n\n//Стили\nconst STYLES = {\n CONTAINER: {\n textAlign: \"center\",\n paddingTop: \"20px\"\n },\n TITLE: {\n paddingBottom: \"15px\"\n },\n DATA_GRID_CONTAINER: {\n maxWidth: 700,\n maxHeight: 500,\n minHeight: 500,\n ..._app_styles__WEBPACK_IMPORTED_MODULE_6__.APP_STYLES.SCROLL\n }\n};\n\n//---------------------------------------------\n//Вспомогательные функции форматирования данных\n//---------------------------------------------\n\n//Формирование значения для колонки \"Тип контрагента\"\nconst formatAgentTypeValue = (value, addText = false) => {\n const [text, icon] = value == 0 ? [\"Юридическое лицо\", \"business\"] : [\"Физическое лицо\", \"person\"];\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n direction: \"row\",\n gap: 0.5,\n alignItems: \"center\",\n justifyContent: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n title: text\n }, icon), addText == true ? text : null);\n};\n\n//Форматирование значений колонок\nconst valueFormatter = ({\n value,\n columnDef\n}) => {\n switch (columnDef.name) {\n case \"NAGNTYPE\":\n return formatAgentTypeValue(value, true);\n }\n return value;\n};\n\n//Генерация представления ячейки c данными\nconst dataCellRender = ({\n row,\n columnDef\n}) => {\n switch (columnDef.name) {\n case \"NAGNTYPE\":\n return {\n cellProps: {\n align: \"center\"\n },\n data: formatAgentTypeValue(row[columnDef.name], false)\n };\n }\n};\n\n//Генерация представления ячейки заголовка\nconst headCellRender = ({\n columnDef\n}) => {\n switch (columnDef.name) {\n case \"NAGNTYPE\":\n return {\n stackProps: {\n justifyContent: \"center\"\n },\n cellProps: {\n align: \"center\"\n }\n };\n }\n};\n\n//Генерация представления ячейки заголовка группы\nconst groupCellRender = () => ({\n cellStyle: {\n padding: \"2px\"\n }\n});\n\n//-----------\n//Тело модуля\n//-----------\n\n//Пример: Таблица данных \"P8PDataGrid\"\nconst DataGrid = ({\n title\n}) => {\n //Собственное состояние - таблица данных\n const [dataGrid, setDataGrid] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n filters: null,\n orders: null,\n pageNumber: 1,\n morePages: true,\n expandable: true,\n reloading: true\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_4__[\"BackEndСtx\"]);\n\n //Подключение к контексту приложения\n const {\n pOnlineShowDocument\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_5__[\"ApplicationСtx\"]);\n\n //Загрузка данных таблицы с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (dataGrid.reloading) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_SAMPLES.DATA_GRID\",\n args: {\n CFILTERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.object2Base64XML)(dataGrid.filters, {\n arrayNodeName: \"filters\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.object2Base64XML)(dataGrid.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: dataGrid.pageNumber,\n NPAGE_SIZE: DATA_GRID_PAGE_SIZE,\n NINCLUDE_DEF: dataGrid.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\"\n });\n setDataGrid(pv => ({\n ...pv,\n ...data.XDATA_GRID,\n columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef || [],\n rows: pv.pageNumber == 1 ? [...(data.XDATA_GRID.rows || [])] : [...(pv.rows || []), ...(data.XDATA_GRID.rows || [])],\n groups: data.XDATA_GRID.groups ? pv.pageNumber == 1 ? [...data.XDATA_GRID.groups] : [...(pv.groups || []), ...data.XDATA_GRID.groups.filter(g => !pv.groups.find(pg => pg.name == g.name))] : [...(pv.groups || [])],\n dataLoaded: true,\n reloading: false,\n morePages: (data.XDATA_GRID.rows || []).length >= DATA_GRID_PAGE_SIZE\n }));\n }\n }, [dataGrid.reloading, dataGrid.filters, dataGrid.orders, dataGrid.dataLoaded, dataGrid.pageNumber, executeStored, SERV_DATA_TYPE_CLOB]);\n\n //При изменении состояния фильтра\n const handleFilterChanged = ({\n filters\n }) => setDataGrid(pv => ({\n ...pv,\n filters: [...filters],\n pageNumber: 1,\n reloading: true\n }));\n\n //При изменении состояния сортировки\n const handleOrderChanged = ({\n orders\n }) => setDataGrid(pv => ({\n ...pv,\n orders: [...orders],\n pageNumber: 1,\n reloading: true\n }));\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = () => setDataGrid(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reloading: true\n }));\n\n //При нажатии на копку контрагента\n const handleAgnButtonClicked = agnCode => pOnlineShowDocument({\n unitCode: \"AGNLIST\",\n document: agnCode,\n inRnParameter: \"in_AGNABBR\"\n });\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadData();\n }, [dataGrid.reloading, loadData]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: STYLES.CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n sx: STYLES.TITLE,\n variant: \"h6\"\n }, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n container: true,\n spacing: 1,\n pt: 5\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n item: true,\n xs: 12\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n p: 5,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\"\n }, dataGrid.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_2__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_GRID_CONFIG_PROPS, dataGrid, {\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_2__.P8P_DATA_GRID_SIZE.LARGE,\n containerComponentProps: {\n elevation: 6,\n sx: STYLES.DATA_GRID_CONTAINER\n },\n valueFormatter: valueFormatter,\n headCellRender: headCellRender,\n dataCellRender: dataCellRender,\n groupCellRender: groupCellRender,\n onOrderChanged: handleOrderChanged,\n onFilterChanged: handleFilterChanged,\n onPagesCountChanged: handlePagesCountChanged,\n rowExpandRender: ({\n row\n }) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n onClick: () => handleAgnButtonClicked(row.SAGNABBR)\n }, \"\\u041F\\u043E\\u043A\\u0430\\u0437\\u0430\\u0442\\u044C \\u0432 \\u0440\\u0430\\u0437\\u0434\\u0435\\u043B\\u0435\")\n })) : null))));\n};\n\n//Контроль свойств - Пример: Таблица данных \"P8PDataGrid\"\nDataGrid.propTypes = {\n title: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().string).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/samples/data_grid.js?"); /***/ }),