From 9f0c2aa9468f8f8dca7a58420d830c2c38fb29c0 Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Fri, 8 Nov 2024 19:48:28 +0300 Subject: [PATCH 1/7] =?UTF-8?q?=D0=90=D0=BA=D1=82=D1=83=D0=B0=D0=BB=D0=B8?= =?UTF-8?q?=D0=B7=D0=B0=D1=86=D0=B8=D1=8F=20=D0=B4=D0=BE=D0=BA=D1=83=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D1=82=D0=B0=D1=86=D0=B8=D0=B8:=20=D0=BE=D1=81?= =?UTF-8?q?=D0=BE=D0=B1=D0=B5=D0=BD=D0=BD=D0=BE=D1=81=D1=82=D0=B8=20=D1=83?= =?UTF-8?q?=D1=81=D1=82=D0=B0=D0=BD=D0=BE=D0=B2=D0=BA=D0=B8=20=D0=BD=D0=B0?= =?UTF-8?q?=20=D1=80=D0=B0=D0=B7=D0=BD=D1=8B=D0=B5=20=D1=80=D0=B5=D0=BB?= =?UTF-8?q?=D0=B8=D0=B7=D1=8B=20=D0=9F=D0=B0=D1=80=D1=83=D1=81-=D0=9E?= =?UTF-8?q?=D0=BD=D0=BB=D0=B0=D0=B9=D0=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index c6a6461..94167c2 100644 --- a/README.md +++ b/README.md @@ -68,13 +68,13 @@ > **Внимание:** > +> - **Проверьте версию "ПАРУС 8 Онлайн"** +> +> Перед копированием расширения из репозитория убедитесь, что в [релизах расширения](https://git.citpb.ru/CITKParus/P8-Panels-ParusOnlineExt/releases) нет специальной сборки для Вашей версии "ПАРУС 8 Онлайн". **Если таковая есть - необходимо устанавливать именно её, а не актуальную сборку из основной ветки репозитория!** +> > - **Для релиза "ПАРУС 8 Онлайн" от 30.08.2024** > -> Требуется [патч до промежуточной сборки 02.09.2024 или старше](https://cloud.mail.ru/public/nEZb/y4oQa1N6D). Установка расширения на данный релиз не рекомендуется, по возможности - пропустите его. -> -> - **Для релизов "ПАРУС 8 Онлайн" до 30.08.2024** -> -> Содержимое папки "bin" следует брать из специальной сборки расширения - [Для сборок Парус-Онлайн до 30.08.2024](https://git.citpb.ru/CITKParus/P8-Panels-ParusOnlineExt/releases/tag/FOR_PARUS_ONLINE_BEFORE_20240830) +> Требуется [патч для "ПАРУС 8 Онлайн" до промежуточной сборки 02.09.2024](https://cloud.mail.ru/public/nEZb/y4oQa1N6D). Установка расширения на данный релиз не рекомендуется, по возможности - пропустите его. 3. Подключите библиотеку расширения к серверу приложений "ПАРУС 8 Онлайн". Для этого добавьте ссылку на библиотеку в файл "Config\extensions.config" сервера приложений: -- 2.34.1 From 47532b9c19ff37b261af65db9cd759c310e35718 Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Mon, 18 Nov 2024 19:31:46 +0300 Subject: [PATCH 2/7] =?UTF-8?q?WEB=20APP:=20=D0=92=D1=8B=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BD=D0=B8=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BD=D0=BE?= =?UTF-8?q?=D0=BF=D0=BE=D0=BA=20=D0=BD=D0=B0=20=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=87=D0=B5=D0=BC=20=D1=81=D1=82=D0=BE=D0=BB=D0=B5,=20=D0=BC?= =?UTF-8?q?=D0=B0=D1=81=D1=88=D1=82=D0=B0=D0=B1=20"=D0=93=D0=BE=D0=B4"=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20P8PGantt,=20=D1=84=D1=83=D0=BD=D0=BA=D1=86?= =?UTF-8?q?=D0=B8=D1=8F=20=D1=84=D0=BE=D1=80=D0=BC=D0=B0=D1=82=D0=B8=D1=80?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=B4=D0=B0=D1=82=D1=8B?= =?UTF-8?q?=20=D1=81=D0=BE=20=D0=B2=D1=80=D0=B5=D0=BC=D0=B5=D0=BD=D0=B5?= =?UTF-8?q?=D0=BC=20=D0=B2=20=D1=84=D0=BE=D1=80=D0=BC=D0=B0=D1=82=D0=B5=20?= =?UTF-8?q?=D0=A0=D0=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/components/p8p_gantt.js | 5 +++-- app/components/p8p_panels_menu.js | 28 +++++++++++++++++++--------- app/core/utils.js | 4 ++++ 3 files changed, 26 insertions(+), 11 deletions(-) diff --git a/app/components/p8p_gantt.js b/app/components/p8p_gantt.js index 0cb42f8..5e3f20b 100644 --- a/app/components/p8p_gantt.js +++ b/app/components/p8p_gantt.js @@ -33,7 +33,7 @@ import { P8PAppInlineError } from "./p8p_app_message"; //Встраиваемо //--------- //Уровни масштаба -const P8P_GANTT_ZOOM = [0, 1, 2, 3, 4]; +const P8P_GANTT_ZOOM = [0, 1, 2, 3, 4, 5]; //Уровни масштаба (строковые наименования в терминах библиотеки) const P8P_GANTT_ZOOM_VIEW_MODES = { @@ -41,7 +41,8 @@ const P8P_GANTT_ZOOM_VIEW_MODES = { 1: "Half Day", 2: "Day", 3: "Week", - 4: "Month" + 4: "Month", + 5: "Year" }; //Структура задачи diff --git a/app/components/p8p_panels_menu.js b/app/components/p8p_panels_menu.js index 48212d5..edf884a 100644 --- a/app/components/p8p_panels_menu.js +++ b/app/components/p8p_panels_menu.js @@ -62,8 +62,15 @@ const STYLES = { GRID_PANEL_CARD_CONTENT_TITLE_ICON: { paddingTop: "4px" }, GRID_PANEL_CARD_ACTIONS: { marginTop: "auto", display: "flex", justifyContent: "flex-end", alignItems: "flex-start" }, DESKTOP_GROUP_HEADER: { fontWeight: "bold", fontFamily: "tahoma, arial, verdana, sans-serif!important", fontSize: "13px!important" }, - DESKTOP_ITEM_BUTTON: { fontSize: "12px", textTransform: "none", "&:hover": { backgroundColor: "#c3e1ff" }, maxWidth: "150px" }, - DESKTOP_ITEM_STACK: { justifyContent: "center", alignItems: "center", fontSize: "12px" }, + DESKTOP_ITEM_BUTTON: { + fontSize: "12px", + textTransform: "none", + "&:hover": { backgroundColor: "#c3e1ff" }, + width: "150px", + height: "90px", + flexDirection: "column", + justifyContent: "flex-start" + }, DESKTOP_ITEM_ICON: { width: "48px", height: "48px", fontSize: "48px" }, DESKTOP_ITEM_CATION: { display: "-webkit-box", @@ -165,12 +172,10 @@ const getPanelsLinks = ({ variant, panels, selectedPanel, group, defaultGroupTyt sx={STYLES.DESKTOP_ITEM_BUTTON} title={panel.caption} > - - {panel.icon} - - {panel.caption} - - + {panel.icon} + + {panel.caption} + ) ); @@ -230,7 +235,12 @@ const P8PPanelsMenuDesktop = ({ group, onItemNavigate, panels = [], defaultGroup const panelsLinks = getPanelsLinks({ variant: P8P_PANELS_MENU_VARIANT.DESKTOP, panels, group, defaultGroupTytle, onItemNavigate }); //Генерация содержимого - return {panelsLinks}; + return ( + + {panelsLinks[0]} + {panelsLinks.map((l, i) => (i > 0 ? l : null))} + + ); }; //Контроль свойств - Меню панелей - рабочий стол diff --git a/app/core/utils.js b/app/core/utils.js index 1ca71b9..205a31b 100644 --- a/app/core/utils.js +++ b/app/core/utils.js @@ -140,6 +140,9 @@ const xml2JSON = ({ xmlDoc, isArray, transformTagName, tagValueProcessor, attrib //Форматирование даты в формат РФ const formatDateRF = value => (value ? dayjs(value).format("DD.MM.YYYY") : null); +//Форматирование даты и времени в формат РФ +const formatDateTimeRF = value => (value ? dayjs(value).format("DD.MM.YYYY HH:mm:ss") : null); + //Форматирование даты в формат JSON (только дата, без времени) const formatDateJSONDateOnly = value => (value ? dayjs(value).format("YYYY-MM-DD") : null); @@ -163,6 +166,7 @@ export { object2Base64XML, xml2JSON, formatDateRF, + formatDateTimeRF, formatDateJSONDateOnly, formatNumberRFCurrency, genGUID -- 2.34.1 From a8c9bf2fecc22097aba91b2faf91221c0e392a61 Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Mon, 18 Nov 2024 19:32:04 +0300 Subject: [PATCH 3/7] =?UTF-8?q?WEB=20APP:=20=D0=A1=D0=B2=D0=B5=D0=B6=D0=B0?= =?UTF-8?q?=D1=8F=20=D1=81=D0=B1=D0=BE=D1=80=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dist/p8-panels.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dist/p8-panels.js b/dist/p8-panels.js index 478c709..d323425 100644 --- a/dist/p8-panels.js +++ b/dist/p8-panels.js @@ -4569,7 +4569,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 */ P8PGantt: () => (/* binding */ P8PGantt),\n/* harmony export */ P8P_GANTT_TASK_ATTRIBUTE_SHAPE: () => (/* binding */ P8P_GANTT_TASK_ATTRIBUTE_SHAPE),\n/* harmony export */ P8P_GANTT_TASK_COLOR_SHAPE: () => (/* binding */ P8P_GANTT_TASK_COLOR_SHAPE),\n/* harmony export */ P8P_GANTT_TASK_SHAPE: () => (/* binding */ P8P_GANTT_TASK_SHAPE),\n/* harmony export */ taskLegendDesc: () => (/* binding */ taskLegendDesc)\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 _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemText/ListItemText.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/List/List.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItem/ListItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Divider/Divider.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Slider/Slider.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.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 _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Link/Link.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _p8p_app_message__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./p8p_app_message */ \"./app/components/p8p_app_message.js\");\n/*\r\n Парус 8 - Панели мониторинга\r\n Компонент: Диаграмма Ганта\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n //Встраиваемое сообщение об ошибке\n\n//---------\n//Константы\n//---------\n\n//Уровни масштаба\nconst P8P_GANTT_ZOOM = [0, 1, 2, 3, 4];\n\n//Уровни масштаба (строковые наименования в терминах библиотеки)\nconst P8P_GANTT_ZOOM_VIEW_MODES = {\n 0: \"Quarter Day\",\n 1: \"Half Day\",\n 2: \"Day\",\n 3: \"Week\",\n 4: \"Month\"\n};\n\n//Структура задачи\nconst P8P_GANTT_TASK_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_2___default().shape({\n id: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n rn: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().number).isRequired,\n numb: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n name: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n fullName: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n start: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n end: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n progress: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().number),\n dependencies: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().array),\n readOnly: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n readOnlyDates: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n readOnlyProgress: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n bgColor: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n textColor: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n bgProgressColor: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string)\n});\n\n//Структура динамического атрибута задачи\nconst P8P_GANTT_TASK_ATTRIBUTE_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_2___default().shape({\n name: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n caption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n visible: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool).isRequired\n});\n\n//Структура описания цвета задачи\nconst P8P_GANTT_TASK_COLOR_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_2___default().shape({\n bgColor: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n textColor: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n bgProgressColor: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n desc: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired\n});\n\n//Высота заголовка\nconst TITLE_HEIGHT = \"44px\";\n\n//Высота панели масштабирования\nconst ZOOM_HEIGHT = \"56px\";\n\n//Стили\nconst STYLES = {\n TASK_EDITOR_CONTENT: {\n minWidth: 400,\n overflowX: \"auto\"\n },\n TASK_EDITOR_LIST: {\n width: \"100%\",\n minWidth: 300,\n maxWidth: 700,\n bgcolor: \"background.paper\"\n },\n GANTT_TITLE: {\n height: TITLE_HEIGHT\n },\n GANTT_ZOOM: {\n height: ZOOM_HEIGHT\n },\n GANTT: (noData, title, zoomBar) => ({\n height: `calc(100% - ${zoomBar ? ZOOM_HEIGHT : \"0px\"} - ${title ? TITLE_HEIGHT : \"0px\"})`,\n display: noData ? \"none\" : \"\"\n })\n};\n\n//--------------------------------\n//Вспомогательные классы и функции\n//--------------------------------\n\n//Проверка существования значения\nconst hasValue = value => typeof value !== \"undefined\" && value !== null && value !== \"\";\n\n//Формирование описания для легенды\nconst taskLegendDesc = ({\n task,\n taskColors\n}) => {\n if (Array.isArray(taskColors) && taskColors.length > 0) {\n const colorDesc = taskColors.find(color => task.bgColor === color.bgColor && task.textColor === color.textColor && task.bgProgressColor === color.bgProgressColor);\n if (colorDesc) return {\n text: colorDesc.desc,\n style: {\n ...(colorDesc.bgProgressColor ? {\n background: `linear-gradient(to right, ${colorDesc.bgProgressColor} ,${colorDesc.bgColor ? colorDesc.bgColor : \"transparent\"})`\n } : colorDesc.bgColor ? {\n backgroundColor: colorDesc.bgColor\n } : {}),\n ...(colorDesc.textColor ? {\n color: colorDesc.textColor\n } : {})\n }\n };else return null;\n } else return null;\n};\n\n//Редактор задачи\nconst P8PGanttTaskEditor = ({\n task,\n taskAttributes,\n taskColors,\n onOk,\n onCancel,\n taskAttributeRenderer,\n taskDialogRenderer,\n numbCaption,\n nameCaption,\n startCaption,\n endCaption,\n progressCaption,\n legendCaption,\n okBtnCaption,\n cancelBtnCaption\n}) => {\n //Собственное состояние\n const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n start: task.start,\n end: task.end,\n progress: task.progress\n });\n\n //Отображаемые атрибуты\n const dispTaskAttributes = Array.isArray(taskAttributes) && taskAttributes.length > 0 ? taskAttributes.filter(attr => attr.visible && hasValue(task[attr.name])) : [];\n\n //При сохранении\n const handleOk = () => onOk && state.start && state.end ? onOk({\n task,\n start: state.start,\n end: state.end,\n progress: state.progress\n }) : null;\n\n //При отмене\n const handleCancel = () => onCancel ? onCancel() : null;\n\n //При изменении сроков\n const handlePeriodChanged = e => setState(prev => ({\n ...prev,\n [e.target.name]: e.target.value\n }));\n\n //При изменении прогресса\n const handleProgressChanged = (e, newValue) => setState(prev => ({\n ...prev,\n progress: newValue\n }));\n\n //Описание легенды для задачи\n const legendDesc = taskLegendDesc({\n task,\n taskColors\n });\n let legend = legendDesc ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n secondaryTypographyProps: {\n p: 1,\n sx: legendDesc.style\n },\n primary: legendCaption,\n secondary: legendDesc.text\n }) : null;\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n open: true,\n onClose: handleCancel\n }, taskDialogRenderer ? taskDialogRenderer({\n task,\n taskAttributes,\n taskColors,\n close: handleCancel\n }) : /*#__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_5__[\"default\"], {\n sx: STYLES.TASK_EDITOR_CONTENT\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.TASK_EDITOR_LIST\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n alignItems: \"flex-start\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n primary: numbCaption,\n secondary: task.numb\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n component: \"li\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n alignItems: \"flex-start\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n primary: nameCaption,\n secondary: task.fullName\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n component: \"li\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n alignItems: \"flex-start\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n secondaryTypographyProps: {\n component: \"span\"\n },\n primary: startCaption,\n secondary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n error: !state.start,\n disabled: task.readOnly === true || task.readOnlyDates === true,\n name: \"start\",\n fullWidth: true,\n required: true,\n InputLabelProps: {\n shrink: true\n },\n type: \"date\",\n value: state.start,\n onChange: handlePeriodChanged,\n variant: \"standard\",\n size: \"small\",\n margin: \"normal\"\n })\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n component: \"li\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n alignItems: \"flex-start\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n secondaryTypographyProps: {\n component: \"span\"\n },\n primary: endCaption,\n secondary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n error: !state.end,\n disabled: task.readOnly === true || task.readOnlyDates === true,\n name: \"end\",\n fullWidth: true,\n required: true,\n InputLabelProps: {\n shrink: true\n },\n type: \"date\",\n value: state.end,\n onChange: handlePeriodChanged,\n variant: \"standard\",\n size: \"small\",\n margin: \"normal\"\n })\n })), hasValue(task.progress) || legend || dispTaskAttributes.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n component: \"li\"\n }) : null, hasValue(task.progress) ? /*#__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_7__[\"default\"], {\n alignItems: \"flex-start\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n secondaryTypographyProps: {\n component: \"span\"\n },\n primary: `${progressCaption}${task.readOnly === true || task.readOnlyProgress === true ? ` (${task.progress}%)` : \"\"}`,\n secondary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n disabled: task.readOnly === true || task.readOnlyProgress === true,\n defaultValue: task.progress,\n valueLabelDisplay: \"auto\",\n onChange: handleProgressChanged\n })\n })), legend || dispTaskAttributes.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n component: \"li\"\n }) : null) : null, legend ? /*#__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_7__[\"default\"], {\n alignItems: \"flex-start\"\n }, legend), dispTaskAttributes.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n component: \"li\"\n }) : null) : null, dispTaskAttributes.length > 0 ? dispTaskAttributes.map((attr, i) => {\n const defaultView = task[attr.name];\n const customView = taskAttributeRenderer ? taskAttributeRenderer({\n task,\n attribute: attr\n }) : null;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), {\n key: i\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n alignItems: \"flex-start\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n primary: attr.caption,\n secondaryTypographyProps: {\n component: \"span\"\n },\n secondary: customView ? customView : defaultView\n })), i < dispTaskAttributes.length - 1 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n component: \"li\"\n }) : null);\n }) : null)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n disabled: !state.start || !state.end || task.readOnly,\n onClick: handleOk\n }, okBtnCaption), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n onClick: handleCancel\n }, cancelBtnCaption))));\n};\n\n//Контроль свойств - Редактор задачи\nP8PGanttTaskEditor.propTypes = {\n task: P8P_GANTT_TASK_SHAPE,\n taskAttributes: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf(P8P_GANTT_TASK_ATTRIBUTE_SHAPE),\n taskColors: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf(P8P_GANTT_TASK_COLOR_SHAPE),\n onOk: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n onCancel: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n taskAttributeRenderer: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n taskDialogRenderer: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n numbCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n nameCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n startCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n endCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n progressCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n legendCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n okBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n cancelBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Диаграмма Ганта\nconst P8PGantt = ({\n containerStyle,\n title,\n titleStyle,\n onTitleClick,\n zoomBar,\n readOnly,\n readOnlyDates,\n readOnlyProgress,\n zoom,\n tasks,\n taskAttributes,\n taskColors,\n onTaskDatesChange,\n onTaskProgressChange,\n taskAttributeRenderer,\n taskDialogRenderer,\n noDataFoundText,\n numbTaskEditorCaption,\n nameTaskEditorCaption,\n startTaskEditorCaption,\n endTaskEditorCaption,\n progressTaskEditorCaption,\n legendTaskEditorCaption,\n okTaskEditorBtnCaption,\n cancelTaskEditorBtnCaption\n}) => {\n //Собственное состояние\n const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n noData: true,\n gantt: null,\n zoom: P8P_GANTT_ZOOM.includes(zoom) ? zoom : 3,\n editTask: null\n });\n\n //Ссылки на DOM\n const svgContainerRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n\n //Отображение диаграммы\n const showGantt = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n if (!state.gantt) {\n // eslint-disable-next-line no-undef\n const gantt = new Gantt(\"#__gantt__\", tasks, {\n view_mode: P8P_GANTT_ZOOM_VIEW_MODES[state.zoom],\n date_format: \"YYYY-MM-DD\",\n language: \"ru\",\n readOnly,\n readOnlyDates,\n readOnlyProgress,\n on_date_change: (task, start, end, isMain) => onTaskDatesChange ? onTaskDatesChange({\n task,\n start,\n end,\n isMain\n }) : null,\n on_progress_change: (task, progress) => onTaskProgressChange ? onTaskProgressChange({\n task,\n progress\n }) : null,\n on_click: openTaskEditor\n });\n setState(pv => ({\n ...pv,\n gantt,\n noData: false\n }));\n } else {\n state.gantt.refresh(tasks);\n setState(pv => ({\n ...pv,\n noData: false\n }));\n }\n }, [state.gantt, state.zoom, readOnly, readOnlyDates, readOnlyProgress, tasks, onTaskDatesChange, onTaskProgressChange]);\n\n //Обновление масштаба диаграммы\n const handleZoomChange = direction => setState(pv => ({\n ...pv,\n zoom: pv.zoom + direction < 0 ? 0 : pv.zoom + direction >= P8P_GANTT_ZOOM.length ? P8P_GANTT_ZOOM.length - 1 : pv.zoom + direction\n }));\n\n //Открытие редактора задачи\n const openTaskEditor = task => setState(pv => ({\n ...pv,\n editTask: {\n ...task\n }\n }));\n\n //При сохранении задачи в редакторе\n const handleTaskEditorSave = ({\n task,\n start,\n end,\n progress\n }) => {\n setState(pv => ({\n ...pv,\n editTask: null\n }));\n if (onTaskDatesChange && (task.start != start || task.end != end)) onTaskDatesChange({\n task,\n start,\n end,\n isMain: true\n });\n if (onTaskProgressChange && task.progress != progress) onTaskProgressChange({\n task,\n progress\n });\n };\n\n //При закрытии редактора задачи без сохранения\n const handleTaskEditorCancel = () => setState(pv => ({\n ...pv,\n editTask: null\n }));\n\n //При изменении масштаба\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (state.gantt) state.gantt.change_view_mode(P8P_GANTT_ZOOM_VIEW_MODES[state.zoom]);\n }, [state.gantt, state.zoom]);\n\n //При изменении списка задач\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (Array.isArray(tasks) && tasks.length > 0) showGantt();else setState(pv => ({\n ...pv,\n noData: true\n }));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [tasks]);\n\n //При подключении компонента к старице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n svgContainerRef.current.children[0].classList.add(\"scroll\");\n }, []);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: {\n ...(containerStyle ? containerStyle : {})\n }\n }, state.gantt && state.noData ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_p8p_app_message__WEBPACK_IMPORTED_MODULE_1__.P8PAppInlineError, {\n text: noDataFoundText\n }) : null, state.gantt && !state.noData && title ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n p: 1,\n sx: {\n ...STYLES.GANTT_TITLE,\n ...(titleStyle ? titleStyle : {})\n },\n align: \"center\",\n color: \"textSecondary\",\n variant: \"subtitle1\"\n }, onTitleClick ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n component: \"button\",\n variant: \"body2\",\n underline: \"hover\",\n onClick: () => onTitleClick()\n }, title) : title) : null, state.gantt && !state.noData && zoomBar ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n p: 1,\n sx: STYLES.GANTT_ZOOM\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n onClick: () => handleZoomChange(-1),\n disabled: state.zoom == 0\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], null, \"zoom_in\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n onClick: () => handleZoomChange(1),\n disabled: state.zoom == P8P_GANTT_ZOOM.length - 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], null, \"zoom_out\"))) : null, state.editTask ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PGanttTaskEditor, {\n task: state.editTask,\n taskAttributes: taskAttributes,\n taskColors: taskColors,\n onOk: handleTaskEditorSave,\n onCancel: handleTaskEditorCancel,\n taskAttributeRenderer: taskAttributeRenderer,\n taskDialogRenderer: taskDialogRenderer,\n numbCaption: numbTaskEditorCaption,\n nameCaption: nameTaskEditorCaption,\n startCaption: startTaskEditorCaption,\n endCaption: endTaskEditorCaption,\n progressCaption: progressTaskEditorCaption,\n legendCaption: legendTaskEditorCaption,\n okBtnCaption: okTaskEditorBtnCaption,\n cancelBtnCaption: cancelTaskEditorBtnCaption\n }) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: STYLES.GANTT(state.noData, title, zoomBar),\n ref: svgContainerRef\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"svg\", {\n id: \"__gantt__\",\n width: \"100%\"\n })));\n};\n\n//Контроль свойств - Диаграмма Ганта\nP8PGantt.propTypes = {\n containerStyle: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().object),\n title: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n titleStyle: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().object),\n onTitleClick: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n zoomBar: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n readOnly: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n readOnlyDates: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n readOnlyProgress: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n zoom: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().number),\n tasks: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf(P8P_GANTT_TASK_SHAPE).isRequired,\n taskAttributes: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf(P8P_GANTT_TASK_ATTRIBUTE_SHAPE),\n taskColors: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf(P8P_GANTT_TASK_COLOR_SHAPE),\n onTaskDatesChange: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n onTaskProgressChange: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n taskAttributeRenderer: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n taskDialogRenderer: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n noDataFoundText: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n numbTaskEditorCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n nameTaskEditorCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n startTaskEditorCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n endTaskEditorCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n progressTaskEditorCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n legendTaskEditorCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n okTaskEditorBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n cancelTaskEditorBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_gantt.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ P8PGantt: () => (/* binding */ P8PGantt),\n/* harmony export */ P8P_GANTT_TASK_ATTRIBUTE_SHAPE: () => (/* binding */ P8P_GANTT_TASK_ATTRIBUTE_SHAPE),\n/* harmony export */ P8P_GANTT_TASK_COLOR_SHAPE: () => (/* binding */ P8P_GANTT_TASK_COLOR_SHAPE),\n/* harmony export */ P8P_GANTT_TASK_SHAPE: () => (/* binding */ P8P_GANTT_TASK_SHAPE),\n/* harmony export */ taskLegendDesc: () => (/* binding */ taskLegendDesc)\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 _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemText/ListItemText.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/List/List.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItem/ListItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Divider/Divider.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Slider/Slider.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.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 _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Link/Link.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _p8p_app_message__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./p8p_app_message */ \"./app/components/p8p_app_message.js\");\n/*\r\n Парус 8 - Панели мониторинга\r\n Компонент: Диаграмма Ганта\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n //Встраиваемое сообщение об ошибке\n\n//---------\n//Константы\n//---------\n\n//Уровни масштаба\nconst P8P_GANTT_ZOOM = [0, 1, 2, 3, 4, 5];\n\n//Уровни масштаба (строковые наименования в терминах библиотеки)\nconst P8P_GANTT_ZOOM_VIEW_MODES = {\n 0: \"Quarter Day\",\n 1: \"Half Day\",\n 2: \"Day\",\n 3: \"Week\",\n 4: \"Month\",\n 5: \"Year\"\n};\n\n//Структура задачи\nconst P8P_GANTT_TASK_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_2___default().shape({\n id: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n rn: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().number).isRequired,\n numb: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n name: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n fullName: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n start: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n end: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n progress: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().number),\n dependencies: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().array),\n readOnly: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n readOnlyDates: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n readOnlyProgress: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n bgColor: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n textColor: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n bgProgressColor: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string)\n});\n\n//Структура динамического атрибута задачи\nconst P8P_GANTT_TASK_ATTRIBUTE_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_2___default().shape({\n name: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n caption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n visible: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool).isRequired\n});\n\n//Структура описания цвета задачи\nconst P8P_GANTT_TASK_COLOR_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_2___default().shape({\n bgColor: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n textColor: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n bgProgressColor: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n desc: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired\n});\n\n//Высота заголовка\nconst TITLE_HEIGHT = \"44px\";\n\n//Высота панели масштабирования\nconst ZOOM_HEIGHT = \"56px\";\n\n//Стили\nconst STYLES = {\n TASK_EDITOR_CONTENT: {\n minWidth: 400,\n overflowX: \"auto\"\n },\n TASK_EDITOR_LIST: {\n width: \"100%\",\n minWidth: 300,\n maxWidth: 700,\n bgcolor: \"background.paper\"\n },\n GANTT_TITLE: {\n height: TITLE_HEIGHT\n },\n GANTT_ZOOM: {\n height: ZOOM_HEIGHT\n },\n GANTT: (noData, title, zoomBar) => ({\n height: `calc(100% - ${zoomBar ? ZOOM_HEIGHT : \"0px\"} - ${title ? TITLE_HEIGHT : \"0px\"})`,\n display: noData ? \"none\" : \"\"\n })\n};\n\n//--------------------------------\n//Вспомогательные классы и функции\n//--------------------------------\n\n//Проверка существования значения\nconst hasValue = value => typeof value !== \"undefined\" && value !== null && value !== \"\";\n\n//Формирование описания для легенды\nconst taskLegendDesc = ({\n task,\n taskColors\n}) => {\n if (Array.isArray(taskColors) && taskColors.length > 0) {\n const colorDesc = taskColors.find(color => task.bgColor === color.bgColor && task.textColor === color.textColor && task.bgProgressColor === color.bgProgressColor);\n if (colorDesc) return {\n text: colorDesc.desc,\n style: {\n ...(colorDesc.bgProgressColor ? {\n background: `linear-gradient(to right, ${colorDesc.bgProgressColor} ,${colorDesc.bgColor ? colorDesc.bgColor : \"transparent\"})`\n } : colorDesc.bgColor ? {\n backgroundColor: colorDesc.bgColor\n } : {}),\n ...(colorDesc.textColor ? {\n color: colorDesc.textColor\n } : {})\n }\n };else return null;\n } else return null;\n};\n\n//Редактор задачи\nconst P8PGanttTaskEditor = ({\n task,\n taskAttributes,\n taskColors,\n onOk,\n onCancel,\n taskAttributeRenderer,\n taskDialogRenderer,\n numbCaption,\n nameCaption,\n startCaption,\n endCaption,\n progressCaption,\n legendCaption,\n okBtnCaption,\n cancelBtnCaption\n}) => {\n //Собственное состояние\n const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n start: task.start,\n end: task.end,\n progress: task.progress\n });\n\n //Отображаемые атрибуты\n const dispTaskAttributes = Array.isArray(taskAttributes) && taskAttributes.length > 0 ? taskAttributes.filter(attr => attr.visible && hasValue(task[attr.name])) : [];\n\n //При сохранении\n const handleOk = () => onOk && state.start && state.end ? onOk({\n task,\n start: state.start,\n end: state.end,\n progress: state.progress\n }) : null;\n\n //При отмене\n const handleCancel = () => onCancel ? onCancel() : null;\n\n //При изменении сроков\n const handlePeriodChanged = e => setState(prev => ({\n ...prev,\n [e.target.name]: e.target.value\n }));\n\n //При изменении прогресса\n const handleProgressChanged = (e, newValue) => setState(prev => ({\n ...prev,\n progress: newValue\n }));\n\n //Описание легенды для задачи\n const legendDesc = taskLegendDesc({\n task,\n taskColors\n });\n let legend = legendDesc ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n secondaryTypographyProps: {\n p: 1,\n sx: legendDesc.style\n },\n primary: legendCaption,\n secondary: legendDesc.text\n }) : null;\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n open: true,\n onClose: handleCancel\n }, taskDialogRenderer ? taskDialogRenderer({\n task,\n taskAttributes,\n taskColors,\n close: handleCancel\n }) : /*#__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_5__[\"default\"], {\n sx: STYLES.TASK_EDITOR_CONTENT\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.TASK_EDITOR_LIST\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n alignItems: \"flex-start\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n primary: numbCaption,\n secondary: task.numb\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n component: \"li\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n alignItems: \"flex-start\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n primary: nameCaption,\n secondary: task.fullName\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n component: \"li\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n alignItems: \"flex-start\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n secondaryTypographyProps: {\n component: \"span\"\n },\n primary: startCaption,\n secondary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n error: !state.start,\n disabled: task.readOnly === true || task.readOnlyDates === true,\n name: \"start\",\n fullWidth: true,\n required: true,\n InputLabelProps: {\n shrink: true\n },\n type: \"date\",\n value: state.start,\n onChange: handlePeriodChanged,\n variant: \"standard\",\n size: \"small\",\n margin: \"normal\"\n })\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n component: \"li\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n alignItems: \"flex-start\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n secondaryTypographyProps: {\n component: \"span\"\n },\n primary: endCaption,\n secondary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n error: !state.end,\n disabled: task.readOnly === true || task.readOnlyDates === true,\n name: \"end\",\n fullWidth: true,\n required: true,\n InputLabelProps: {\n shrink: true\n },\n type: \"date\",\n value: state.end,\n onChange: handlePeriodChanged,\n variant: \"standard\",\n size: \"small\",\n margin: \"normal\"\n })\n })), hasValue(task.progress) || legend || dispTaskAttributes.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n component: \"li\"\n }) : null, hasValue(task.progress) ? /*#__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_7__[\"default\"], {\n alignItems: \"flex-start\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n secondaryTypographyProps: {\n component: \"span\"\n },\n primary: `${progressCaption}${task.readOnly === true || task.readOnlyProgress === true ? ` (${task.progress}%)` : \"\"}`,\n secondary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n disabled: task.readOnly === true || task.readOnlyProgress === true,\n defaultValue: task.progress,\n valueLabelDisplay: \"auto\",\n onChange: handleProgressChanged\n })\n })), legend || dispTaskAttributes.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n component: \"li\"\n }) : null) : null, legend ? /*#__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_7__[\"default\"], {\n alignItems: \"flex-start\"\n }, legend), dispTaskAttributes.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n component: \"li\"\n }) : null) : null, dispTaskAttributes.length > 0 ? dispTaskAttributes.map((attr, i) => {\n const defaultView = task[attr.name];\n const customView = taskAttributeRenderer ? taskAttributeRenderer({\n task,\n attribute: attr\n }) : null;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), {\n key: i\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n alignItems: \"flex-start\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n primary: attr.caption,\n secondaryTypographyProps: {\n component: \"span\"\n },\n secondary: customView ? customView : defaultView\n })), i < dispTaskAttributes.length - 1 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n component: \"li\"\n }) : null);\n }) : null)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n disabled: !state.start || !state.end || task.readOnly,\n onClick: handleOk\n }, okBtnCaption), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n onClick: handleCancel\n }, cancelBtnCaption))));\n};\n\n//Контроль свойств - Редактор задачи\nP8PGanttTaskEditor.propTypes = {\n task: P8P_GANTT_TASK_SHAPE,\n taskAttributes: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf(P8P_GANTT_TASK_ATTRIBUTE_SHAPE),\n taskColors: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf(P8P_GANTT_TASK_COLOR_SHAPE),\n onOk: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n onCancel: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n taskAttributeRenderer: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n taskDialogRenderer: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n numbCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n nameCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n startCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n endCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n progressCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n legendCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n okBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n cancelBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Диаграмма Ганта\nconst P8PGantt = ({\n containerStyle,\n title,\n titleStyle,\n onTitleClick,\n zoomBar,\n readOnly,\n readOnlyDates,\n readOnlyProgress,\n zoom,\n tasks,\n taskAttributes,\n taskColors,\n onTaskDatesChange,\n onTaskProgressChange,\n taskAttributeRenderer,\n taskDialogRenderer,\n noDataFoundText,\n numbTaskEditorCaption,\n nameTaskEditorCaption,\n startTaskEditorCaption,\n endTaskEditorCaption,\n progressTaskEditorCaption,\n legendTaskEditorCaption,\n okTaskEditorBtnCaption,\n cancelTaskEditorBtnCaption\n}) => {\n //Собственное состояние\n const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n noData: true,\n gantt: null,\n zoom: P8P_GANTT_ZOOM.includes(zoom) ? zoom : 3,\n editTask: null\n });\n\n //Ссылки на DOM\n const svgContainerRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n\n //Отображение диаграммы\n const showGantt = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n if (!state.gantt) {\n // eslint-disable-next-line no-undef\n const gantt = new Gantt(\"#__gantt__\", tasks, {\n view_mode: P8P_GANTT_ZOOM_VIEW_MODES[state.zoom],\n date_format: \"YYYY-MM-DD\",\n language: \"ru\",\n readOnly,\n readOnlyDates,\n readOnlyProgress,\n on_date_change: (task, start, end, isMain) => onTaskDatesChange ? onTaskDatesChange({\n task,\n start,\n end,\n isMain\n }) : null,\n on_progress_change: (task, progress) => onTaskProgressChange ? onTaskProgressChange({\n task,\n progress\n }) : null,\n on_click: openTaskEditor\n });\n setState(pv => ({\n ...pv,\n gantt,\n noData: false\n }));\n } else {\n state.gantt.refresh(tasks);\n setState(pv => ({\n ...pv,\n noData: false\n }));\n }\n }, [state.gantt, state.zoom, readOnly, readOnlyDates, readOnlyProgress, tasks, onTaskDatesChange, onTaskProgressChange]);\n\n //Обновление масштаба диаграммы\n const handleZoomChange = direction => setState(pv => ({\n ...pv,\n zoom: pv.zoom + direction < 0 ? 0 : pv.zoom + direction >= P8P_GANTT_ZOOM.length ? P8P_GANTT_ZOOM.length - 1 : pv.zoom + direction\n }));\n\n //Открытие редактора задачи\n const openTaskEditor = task => setState(pv => ({\n ...pv,\n editTask: {\n ...task\n }\n }));\n\n //При сохранении задачи в редакторе\n const handleTaskEditorSave = ({\n task,\n start,\n end,\n progress\n }) => {\n setState(pv => ({\n ...pv,\n editTask: null\n }));\n if (onTaskDatesChange && (task.start != start || task.end != end)) onTaskDatesChange({\n task,\n start,\n end,\n isMain: true\n });\n if (onTaskProgressChange && task.progress != progress) onTaskProgressChange({\n task,\n progress\n });\n };\n\n //При закрытии редактора задачи без сохранения\n const handleTaskEditorCancel = () => setState(pv => ({\n ...pv,\n editTask: null\n }));\n\n //При изменении масштаба\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (state.gantt) state.gantt.change_view_mode(P8P_GANTT_ZOOM_VIEW_MODES[state.zoom]);\n }, [state.gantt, state.zoom]);\n\n //При изменении списка задач\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (Array.isArray(tasks) && tasks.length > 0) showGantt();else setState(pv => ({\n ...pv,\n noData: true\n }));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [tasks]);\n\n //При подключении компонента к старице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n svgContainerRef.current.children[0].classList.add(\"scroll\");\n }, []);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: {\n ...(containerStyle ? containerStyle : {})\n }\n }, state.gantt && state.noData ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_p8p_app_message__WEBPACK_IMPORTED_MODULE_1__.P8PAppInlineError, {\n text: noDataFoundText\n }) : null, state.gantt && !state.noData && title ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n p: 1,\n sx: {\n ...STYLES.GANTT_TITLE,\n ...(titleStyle ? titleStyle : {})\n },\n align: \"center\",\n color: \"textSecondary\",\n variant: \"subtitle1\"\n }, onTitleClick ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n component: \"button\",\n variant: \"body2\",\n underline: \"hover\",\n onClick: () => onTitleClick()\n }, title) : title) : null, state.gantt && !state.noData && zoomBar ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n p: 1,\n sx: STYLES.GANTT_ZOOM\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n onClick: () => handleZoomChange(-1),\n disabled: state.zoom == 0\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], null, \"zoom_in\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n onClick: () => handleZoomChange(1),\n disabled: state.zoom == P8P_GANTT_ZOOM.length - 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], null, \"zoom_out\"))) : null, state.editTask ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PGanttTaskEditor, {\n task: state.editTask,\n taskAttributes: taskAttributes,\n taskColors: taskColors,\n onOk: handleTaskEditorSave,\n onCancel: handleTaskEditorCancel,\n taskAttributeRenderer: taskAttributeRenderer,\n taskDialogRenderer: taskDialogRenderer,\n numbCaption: numbTaskEditorCaption,\n nameCaption: nameTaskEditorCaption,\n startCaption: startTaskEditorCaption,\n endCaption: endTaskEditorCaption,\n progressCaption: progressTaskEditorCaption,\n legendCaption: legendTaskEditorCaption,\n okBtnCaption: okTaskEditorBtnCaption,\n cancelBtnCaption: cancelTaskEditorBtnCaption\n }) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: STYLES.GANTT(state.noData, title, zoomBar),\n ref: svgContainerRef\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"svg\", {\n id: \"__gantt__\",\n width: \"100%\"\n })));\n};\n\n//Контроль свойств - Диаграмма Ганта\nP8PGantt.propTypes = {\n containerStyle: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().object),\n title: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n titleStyle: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().object),\n onTitleClick: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n zoomBar: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n readOnly: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n readOnlyDates: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n readOnlyProgress: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n zoom: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().number),\n tasks: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf(P8P_GANTT_TASK_SHAPE).isRequired,\n taskAttributes: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf(P8P_GANTT_TASK_ATTRIBUTE_SHAPE),\n taskColors: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf(P8P_GANTT_TASK_COLOR_SHAPE),\n onTaskDatesChange: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n onTaskProgressChange: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n taskAttributeRenderer: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n taskDialogRenderer: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n noDataFoundText: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n numbTaskEditorCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n nameTaskEditorCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n startTaskEditorCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n endTaskEditorCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n progressTaskEditorCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n legendTaskEditorCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n okTaskEditorBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n cancelTaskEditorBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_gantt.js?"); /***/ }), @@ -4580,7 +4580,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 */ P8PPanelsMenuDesktop: () => (/* binding */ P8PPanelsMenuDesktop),\n/* harmony export */ P8PPanelsMenuDrawer: () => (/* binding */ P8PPanelsMenuDrawer),\n/* harmony export */ P8PPanelsMenuGrid: () => (/* binding */ P8PPanelsMenuGrid),\n/* harmony export */ P8P_PANELS_MENU_PANEL_SHAPE: () => (/* binding */ P8P_PANELS_MENU_PANEL_SHAPE)\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_1__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Divider/Divider.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Card/Card.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/CardMedia/CardMedia.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/CardContent/CardContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/CardActions/CardActions.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 _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItem/ListItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemButton/ListItemButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemIcon/ListItemIcon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemText/ListItemText.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/List/List.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_PANELS_MENU_VARIANT = {\n DRAWER: \"DRAWER\",\n GRID: \"GRID\",\n DESKTOP: \"DESKTOP\"\n};\n\n//Структура элемента описания панели\nconst P8P_PANELS_MENU_PANEL_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_1___default().shape({\n name: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired,\n caption: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired,\n desc: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired,\n group: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string),\n icon: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired,\n path: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired,\n preview: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired,\n showInPanelsList: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().bool).isRequired,\n url: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired\n});\n\n//Стили\nconst STYLES = {\n GRID_CONTAINER: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"flex-start\",\n minHeight: \"100vh\"\n },\n GRID: {\n maxWidth: 1200,\n direction: \"row\",\n justifyContent: \"left\",\n alignItems: \"stretch\"\n },\n GRID_PANEL_CARD: {\n maxWidth: 400,\n height: \"100%\",\n flexDirection: \"column\",\n display: \"flex\"\n },\n GRID_PANEL_CARD_MEDIA: {\n height: 140\n },\n GRID_PANEL_CARD_CONTENT_TITLE: {\n alignItems: \"flex-start\"\n },\n GRID_PANEL_CARD_CONTENT_TITLE_ICON: {\n paddingTop: \"4px\"\n },\n GRID_PANEL_CARD_ACTIONS: {\n marginTop: \"auto\",\n display: \"flex\",\n justifyContent: \"flex-end\",\n alignItems: \"flex-start\"\n },\n DESKTOP_GROUP_HEADER: {\n fontWeight: \"bold\",\n fontFamily: \"tahoma, arial, verdana, sans-serif!important\",\n fontSize: \"13px!important\"\n },\n DESKTOP_ITEM_BUTTON: {\n fontSize: \"12px\",\n textTransform: \"none\",\n \"&:hover\": {\n backgroundColor: \"#c3e1ff\"\n },\n maxWidth: \"150px\"\n },\n DESKTOP_ITEM_STACK: {\n justifyContent: \"center\",\n alignItems: \"center\",\n fontSize: \"12px\"\n },\n DESKTOP_ITEM_ICON: {\n width: \"48px\",\n height: \"48px\",\n fontSize: \"48px\"\n },\n DESKTOP_ITEM_CATION: {\n display: \"-webkit-box\",\n overflow: \"hidden\",\n WebkitBoxOrient: \"vertical\",\n WebkitLineClamp: 2,\n fontSize: \"12px\",\n maxWidth: \"140px\",\n lineHeight: \"1.2\"\n }\n};\n\n//--------------------------------\n//Вспомогательные классы и функции\n//--------------------------------\n\n//Формирование групп\nconst getGroups = (panels, group) => {\n let res = [];\n let addDefaultGroup = false;\n for (const panel of panels) if (panel.showInPanelsList == true) {\n if (panel.group && !res.includes(panel.group)) res.push(panel.group);\n if (!panel.group) addDefaultGroup = true;\n }\n if (addDefaultGroup || res.length == 0) res.push(null);\n if (group) res = res.filter(g => g == group);\n return res;\n};\n\n//Формирование ссылок на панели\nconst getPanelsLinks = ({\n variant,\n panels,\n selectedPanel,\n group,\n defaultGroupTytle,\n navigateCaption,\n onItemNavigate\n}) => {\n //Получим группы\n let grps = getGroups(panels, group);\n\n //Построим ссылки\n const panelsLinks = [];\n for (const grp of grps) {\n if (!(grps.length == 1 && grps[0] == null)) panelsLinks.push(variant === P8P_PANELS_MENU_VARIANT.GRID ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n item: true,\n xs: 12,\n sm: 12,\n md: 12,\n lg: 12,\n xl: 12,\n key: grp\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n variant: \"h5\",\n color: \"secondary\"\n }, grp ? grp : defaultGroupTytle)) : variant === P8P_PANELS_MENU_VARIANT.DRAWER ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n key: grp\n }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n pb: 1,\n key: grp\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n variant: \"h7\",\n sx: STYLES.DESKTOP_GROUP_HEADER\n }, grp ? grp : defaultGroupTytle)));\n for (const panel of panels) {\n if (panel.showInPanelsList == true && (grp && panel.group === grp || !grp && !panel.group)) panelsLinks.push(variant === P8P_PANELS_MENU_VARIANT.GRID ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n item: true,\n xs: 12,\n sm: 6,\n md: 4,\n lg: 4,\n xl: 4,\n key: panel.name\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.GRID_PANEL_CARD\n }, panel.preview ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n component: \"img\",\n alt: panel.name,\n image: panel.preview,\n sx: STYLES.GRID_PANEL_CARD_MEDIA\n }) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n gap: 1,\n direction: \"row\",\n sx: STYLES.GRID_PANEL_CARD_CONTENT_TITLE\n }, panel.icon ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n sx: STYLES.GRID_PANEL_CARD_CONTENT_TITLE_ICON\n }, panel.icon) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n variant: \"h5\"\n }, panel.caption)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n variant: \"body2\",\n color: \"text.secondary\"\n }, panel.desc)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n sx: STYLES.GRID_PANEL_CARD_ACTIONS\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n size: \"large\",\n onClick: () => onItemNavigate ? onItemNavigate(panel) : null\n }, navigateCaption)))) : variant === P8P_PANELS_MENU_VARIANT.DRAWER ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n key: panel.name,\n disablePadding: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n selected: selectedPanel?.name === panel.name,\n onClick: () => onItemNavigate ? onItemNavigate(panel) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null, panel.icon)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n primary: panel.caption\n }))) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n p: 3,\n key: panel.name,\n onClick: () => onItemNavigate ? onItemNavigate(panel) : null,\n sx: STYLES.DESKTOP_ITEM_BUTTON,\n title: panel.caption\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n sx: STYLES.DESKTOP_ITEM_STACK\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n sx: STYLES.DESKTOP_ITEM_ICON\n }, panel.icon), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n sx: STYLES.DESKTOP_ITEM_CATION,\n variant: \"body1\"\n }, panel.caption))));\n }\n }\n\n //Вернём ссылки\n return panelsLinks;\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Меню панелей - сдвигающееся боковое меню\nconst P8PPanelsMenuDrawer = ({\n onItemNavigate,\n panels = [],\n selectedPanel\n} = {}) => {\n //Формируем ссылки на панели\n const panelsLinks = getPanelsLinks({\n variant: P8P_PANELS_MENU_VARIANT.DRAWER,\n panels,\n selectedPanel,\n onItemNavigate\n });\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n sx: {\n paddingTop: 0\n }\n }, panelsLinks);\n};\n\n//Контроль свойств - Меню панелей - сдвигающееся боковое меню\nP8PPanelsMenuDrawer.propTypes = {\n onItemNavigate: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n panels: prop_types__WEBPACK_IMPORTED_MODULE_1___default().arrayOf(P8P_PANELS_MENU_PANEL_SHAPE).isRequired,\n selectedPanel: P8P_PANELS_MENU_PANEL_SHAPE\n};\n\n//Меню панелей - грид\nconst P8PPanelsMenuGrid = ({\n onItemNavigate,\n navigateCaption,\n panels = [],\n defaultGroupTytle\n} = {}) => {\n //Формируем ссылки на панели\n const panelsLinks = getPanelsLinks({\n variant: P8P_PANELS_MENU_VARIANT.GRID,\n panels,\n defaultGroupTytle,\n navigateCaption,\n onItemNavigate\n });\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.GRID_CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n container: true,\n spacing: 2,\n p: 2,\n sx: STYLES.GRID\n }, panelsLinks));\n};\n\n//Контроль свойств - Меню панелей - грид\nP8PPanelsMenuGrid.propTypes = {\n onItemNavigate: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n navigateCaption: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired,\n panels: prop_types__WEBPACK_IMPORTED_MODULE_1___default().arrayOf(P8P_PANELS_MENU_PANEL_SHAPE).isRequired,\n defaultGroupTytle: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired\n};\n\n//Меню панелей - рабочий стол\nconst P8PPanelsMenuDesktop = ({\n group,\n onItemNavigate,\n panels = [],\n defaultGroupTytle\n} = {}) => {\n //Формируем ссылки на панели\n const panelsLinks = getPanelsLinks({\n variant: P8P_PANELS_MENU_VARIANT.DESKTOP,\n panels,\n group,\n defaultGroupTytle,\n onItemNavigate\n });\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n p: 2\n }, panelsLinks);\n};\n\n//Контроль свойств - Меню панелей - рабочий стол\nP8PPanelsMenuDesktop.propTypes = {\n group: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string),\n onItemNavigate: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n panels: prop_types__WEBPACK_IMPORTED_MODULE_1___default().arrayOf(P8P_PANELS_MENU_PANEL_SHAPE).isRequired,\n defaultGroupTytle: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_panels_menu.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ P8PPanelsMenuDesktop: () => (/* binding */ P8PPanelsMenuDesktop),\n/* harmony export */ P8PPanelsMenuDrawer: () => (/* binding */ P8PPanelsMenuDrawer),\n/* harmony export */ P8PPanelsMenuGrid: () => (/* binding */ P8PPanelsMenuGrid),\n/* harmony export */ P8P_PANELS_MENU_PANEL_SHAPE: () => (/* binding */ P8P_PANELS_MENU_PANEL_SHAPE)\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_1__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Divider/Divider.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Card/Card.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/CardMedia/CardMedia.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/CardContent/CardContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/CardActions/CardActions.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 _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItem/ListItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemButton/ListItemButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemIcon/ListItemIcon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemText/ListItemText.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/List/List.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_PANELS_MENU_VARIANT = {\n DRAWER: \"DRAWER\",\n GRID: \"GRID\",\n DESKTOP: \"DESKTOP\"\n};\n\n//Структура элемента описания панели\nconst P8P_PANELS_MENU_PANEL_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_1___default().shape({\n name: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired,\n caption: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired,\n desc: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired,\n group: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string),\n icon: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired,\n path: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired,\n preview: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired,\n showInPanelsList: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().bool).isRequired,\n url: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired\n});\n\n//Стили\nconst STYLES = {\n GRID_CONTAINER: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"flex-start\",\n minHeight: \"100vh\"\n },\n GRID: {\n maxWidth: 1200,\n direction: \"row\",\n justifyContent: \"left\",\n alignItems: \"stretch\"\n },\n GRID_PANEL_CARD: {\n maxWidth: 400,\n height: \"100%\",\n flexDirection: \"column\",\n display: \"flex\"\n },\n GRID_PANEL_CARD_MEDIA: {\n height: 140\n },\n GRID_PANEL_CARD_CONTENT_TITLE: {\n alignItems: \"flex-start\"\n },\n GRID_PANEL_CARD_CONTENT_TITLE_ICON: {\n paddingTop: \"4px\"\n },\n GRID_PANEL_CARD_ACTIONS: {\n marginTop: \"auto\",\n display: \"flex\",\n justifyContent: \"flex-end\",\n alignItems: \"flex-start\"\n },\n DESKTOP_GROUP_HEADER: {\n fontWeight: \"bold\",\n fontFamily: \"tahoma, arial, verdana, sans-serif!important\",\n fontSize: \"13px!important\"\n },\n DESKTOP_ITEM_BUTTON: {\n fontSize: \"12px\",\n textTransform: \"none\",\n \"&:hover\": {\n backgroundColor: \"#c3e1ff\"\n },\n width: \"150px\",\n height: \"90px\",\n flexDirection: \"column\",\n justifyContent: \"flex-start\"\n },\n DESKTOP_ITEM_ICON: {\n width: \"48px\",\n height: \"48px\",\n fontSize: \"48px\"\n },\n DESKTOP_ITEM_CATION: {\n display: \"-webkit-box\",\n overflow: \"hidden\",\n WebkitBoxOrient: \"vertical\",\n WebkitLineClamp: 2,\n fontSize: \"12px\",\n maxWidth: \"140px\",\n lineHeight: \"1.2\"\n }\n};\n\n//--------------------------------\n//Вспомогательные классы и функции\n//--------------------------------\n\n//Формирование групп\nconst getGroups = (panels, group) => {\n let res = [];\n let addDefaultGroup = false;\n for (const panel of panels) if (panel.showInPanelsList == true) {\n if (panel.group && !res.includes(panel.group)) res.push(panel.group);\n if (!panel.group) addDefaultGroup = true;\n }\n if (addDefaultGroup || res.length == 0) res.push(null);\n if (group) res = res.filter(g => g == group);\n return res;\n};\n\n//Формирование ссылок на панели\nconst getPanelsLinks = ({\n variant,\n panels,\n selectedPanel,\n group,\n defaultGroupTytle,\n navigateCaption,\n onItemNavigate\n}) => {\n //Получим группы\n let grps = getGroups(panels, group);\n\n //Построим ссылки\n const panelsLinks = [];\n for (const grp of grps) {\n if (!(grps.length == 1 && grps[0] == null)) panelsLinks.push(variant === P8P_PANELS_MENU_VARIANT.GRID ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n item: true,\n xs: 12,\n sm: 12,\n md: 12,\n lg: 12,\n xl: 12,\n key: grp\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n variant: \"h5\",\n color: \"secondary\"\n }, grp ? grp : defaultGroupTytle)) : variant === P8P_PANELS_MENU_VARIANT.DRAWER ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n key: grp\n }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n pb: 1,\n key: grp\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n variant: \"h7\",\n sx: STYLES.DESKTOP_GROUP_HEADER\n }, grp ? grp : defaultGroupTytle)));\n for (const panel of panels) {\n if (panel.showInPanelsList == true && (grp && panel.group === grp || !grp && !panel.group)) panelsLinks.push(variant === P8P_PANELS_MENU_VARIANT.GRID ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n item: true,\n xs: 12,\n sm: 6,\n md: 4,\n lg: 4,\n xl: 4,\n key: panel.name\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.GRID_PANEL_CARD\n }, panel.preview ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n component: \"img\",\n alt: panel.name,\n image: panel.preview,\n sx: STYLES.GRID_PANEL_CARD_MEDIA\n }) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n gap: 1,\n direction: \"row\",\n sx: STYLES.GRID_PANEL_CARD_CONTENT_TITLE\n }, panel.icon ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n sx: STYLES.GRID_PANEL_CARD_CONTENT_TITLE_ICON\n }, panel.icon) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n variant: \"h5\"\n }, panel.caption)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n variant: \"body2\",\n color: \"text.secondary\"\n }, panel.desc)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n sx: STYLES.GRID_PANEL_CARD_ACTIONS\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n size: \"large\",\n onClick: () => onItemNavigate ? onItemNavigate(panel) : null\n }, navigateCaption)))) : variant === P8P_PANELS_MENU_VARIANT.DRAWER ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n key: panel.name,\n disablePadding: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n selected: selectedPanel?.name === panel.name,\n onClick: () => onItemNavigate ? onItemNavigate(panel) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null, panel.icon)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n primary: panel.caption\n }))) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n p: 3,\n key: panel.name,\n onClick: () => onItemNavigate ? onItemNavigate(panel) : null,\n sx: STYLES.DESKTOP_ITEM_BUTTON,\n title: panel.caption\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n sx: STYLES.DESKTOP_ITEM_ICON\n }, panel.icon), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n sx: STYLES.DESKTOP_ITEM_CATION,\n variant: \"body1\"\n }, panel.caption)));\n }\n }\n\n //Вернём ссылки\n return panelsLinks;\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Меню панелей - сдвигающееся боковое меню\nconst P8PPanelsMenuDrawer = ({\n onItemNavigate,\n panels = [],\n selectedPanel\n} = {}) => {\n //Формируем ссылки на панели\n const panelsLinks = getPanelsLinks({\n variant: P8P_PANELS_MENU_VARIANT.DRAWER,\n panels,\n selectedPanel,\n onItemNavigate\n });\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n sx: {\n paddingTop: 0\n }\n }, panelsLinks);\n};\n\n//Контроль свойств - Меню панелей - сдвигающееся боковое меню\nP8PPanelsMenuDrawer.propTypes = {\n onItemNavigate: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n panels: prop_types__WEBPACK_IMPORTED_MODULE_1___default().arrayOf(P8P_PANELS_MENU_PANEL_SHAPE).isRequired,\n selectedPanel: P8P_PANELS_MENU_PANEL_SHAPE\n};\n\n//Меню панелей - грид\nconst P8PPanelsMenuGrid = ({\n onItemNavigate,\n navigateCaption,\n panels = [],\n defaultGroupTytle\n} = {}) => {\n //Формируем ссылки на панели\n const panelsLinks = getPanelsLinks({\n variant: P8P_PANELS_MENU_VARIANT.GRID,\n panels,\n defaultGroupTytle,\n navigateCaption,\n onItemNavigate\n });\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.GRID_CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n container: true,\n spacing: 2,\n p: 2,\n sx: STYLES.GRID\n }, panelsLinks));\n};\n\n//Контроль свойств - Меню панелей - грид\nP8PPanelsMenuGrid.propTypes = {\n onItemNavigate: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n navigateCaption: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired,\n panels: prop_types__WEBPACK_IMPORTED_MODULE_1___default().arrayOf(P8P_PANELS_MENU_PANEL_SHAPE).isRequired,\n defaultGroupTytle: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired\n};\n\n//Меню панелей - рабочий стол\nconst P8PPanelsMenuDesktop = ({\n group,\n onItemNavigate,\n panels = [],\n defaultGroupTytle\n} = {}) => {\n //Формируем ссылки на панели\n const panelsLinks = getPanelsLinks({\n variant: P8P_PANELS_MENU_VARIANT.DESKTOP,\n panels,\n group,\n defaultGroupTytle,\n onItemNavigate\n });\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n p: 2\n }, panelsLinks[0], /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n direction: \"row\"\n }, panelsLinks.map((l, i) => i > 0 ? l : null)));\n};\n\n//Контроль свойств - Меню панелей - рабочий стол\nP8PPanelsMenuDesktop.propTypes = {\n group: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string),\n onItemNavigate: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n panels: prop_types__WEBPACK_IMPORTED_MODULE_1___default().arrayOf(P8P_PANELS_MENU_PANEL_SHAPE).isRequired,\n defaultGroupTytle: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_panels_menu.js?"); /***/ }), @@ -4712,7 +4712,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 */ 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.XROWS\", \"XRESPOND.XPAYLOAD.XCOLUMNS_DEF\", \"XRESPOND.XPAYLOAD.XCOLUMNS_DEF.values\", \"XRESPOND.XPAYLOAD.XGROUPS\", \"XRESPOND.XPAYLOAD.XGANTT_DEF.taskAttributes\", \"XRESPOND.XPAYLOAD.XGANTT_DEF.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\"];\n\n//Типовые шаблоны конвертации в массив (при переводе XML -> JSON)\nconst XML_ALWAYS_ARRAY_PATH_PATTERNS = [/(.*)XROWS$/, /(.*)XCOLUMNS_DEF$/, /(.*)XCOLUMNS_DEF.values$/, /(.*)XGROUPS$/, /(.*)XGANTT_DEF.taskAttributes$/, /(.*)XGANTT_DEF.taskColors$/, /(.*)XGANTT_TASKS$/, /(.*)XGANTT_TASKS.dependencies$/, /(.*)XCHART.labels$/, /(.*)XCHART.datasets$/, /(.*)XCHART.datasets.data$/, /(.*)XCHART.datasets.items$/];\n\n//Типовой постфикс тега для массива (при переводе XML -> JSON)\nconst XML_ALWAYS_ARRAY_POSTFIX = \"__SYSTEM__ARRAY__\";\n\n//Типовые шаблоны конвертации значения атрибута в строку (при переводе XML -> JSON)\nconst XML_ATTR_ALWAYS_STR_PATH_PATTERNS = [/(.*)XCOLUMNS_DEF.name$/, /(.*)XCOLUMNS_DEF.caption$/, /(.*)XCOLUMNS_DEF.parent$/, /(.*)XGROUPS.name$/, /(.*)XGROUPS.caption$/];\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//Форматирование даты в формат 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.XROWS\", \"XRESPOND.XPAYLOAD.XCOLUMNS_DEF\", \"XRESPOND.XPAYLOAD.XCOLUMNS_DEF.values\", \"XRESPOND.XPAYLOAD.XGROUPS\", \"XRESPOND.XPAYLOAD.XGANTT_DEF.taskAttributes\", \"XRESPOND.XPAYLOAD.XGANTT_DEF.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\"];\n\n//Типовые шаблоны конвертации в массив (при переводе XML -> JSON)\nconst XML_ALWAYS_ARRAY_PATH_PATTERNS = [/(.*)XROWS$/, /(.*)XCOLUMNS_DEF$/, /(.*)XCOLUMNS_DEF.values$/, /(.*)XGROUPS$/, /(.*)XGANTT_DEF.taskAttributes$/, /(.*)XGANTT_DEF.taskColors$/, /(.*)XGANTT_TASKS$/, /(.*)XGANTT_TASKS.dependencies$/, /(.*)XCHART.labels$/, /(.*)XCHART.datasets$/, /(.*)XCHART.datasets.data$/, /(.*)XCHART.datasets.items$/];\n\n//Типовой постфикс тега для массива (при переводе XML -> JSON)\nconst XML_ALWAYS_ARRAY_POSTFIX = \"__SYSTEM__ARRAY__\";\n\n//Типовые шаблоны конвертации значения атрибута в строку (при переводе XML -> JSON)\nconst XML_ATTR_ALWAYS_STR_PATH_PATTERNS = [/(.*)XCOLUMNS_DEF.name$/, /(.*)XCOLUMNS_DEF.caption$/, /(.*)XCOLUMNS_DEF.parent$/, /(.*)XGROUPS.name$/, /(.*)XGROUPS.caption$/];\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?"); /***/ }), -- 2.34.1 From 2bfce51fed2a1413a21d98b1941364140315e8ed Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Wed, 20 Nov 2024 16:05:26 +0300 Subject: [PATCH 4/7] =?UTF-8?q?=D0=A6=D0=98=D0=A2=D0=9A-904=20-=20Code-rev?= =?UTF-8?q?iew=20"P8PCyclogram"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 8 +- app/components/p8p_cyclogram.js | 2 +- app/config_wrapper.js | 6 + app/panels/samples/cyclogram.js | 4 +- db/P8PNL_SMPL_CYCLOGRAM.sql | 18 +- db/PKG_P8PANELS_SAMPLES.pck | 24 +- db/PKG_P8PANELS_VISUAL.pck | 760 ++++++++++++++++++++++++++++++-- 7 files changed, 761 insertions(+), 61 deletions(-) diff --git a/README.md b/README.md index 52dd0cd..bba4835 100644 --- a/README.md +++ b/README.md @@ -2377,8 +2377,8 @@ const Svg = ({ title }) => { - Отображение произвольного пользовательского диалога в качестве карточки задачи/редактора задачи - Масштабирование визуального представления -![Пример P8PGantt](docs/img/72.png) -![Пример P8PGantt](docs/img/73.png) +![Пример P8PCyclogram](docs/img/72.png) +![Пример P8PCyclogram](docs/img/73.png) **Подключение** @@ -2719,7 +2719,7 @@ const LINE_HEIGHT = 30; const STYLES = { CONTAINER: { textAlign: "center", paddingTop: CONTAINER_PADDING_TOP }, TITLE: { paddingBottom: "15px", height: TITLE_HEIGHT }, - GANTT_CONTAINER: { + CYCLOGRAM_CONTAINER: { height: `calc(100vh - ${APP_BAR_HEIGHT} - ${TITLE_HEIGHT} - ${CONTAINER_PADDING_TOP})`, width: "100vw", paddingTop: "5px" @@ -2833,7 +2833,7 @@ const Cyclogram = ({ title }) => { ( diff --git a/app/components/p8p_cyclogram.js b/app/components/p8p_cyclogram.js index 08a4866..bd0e3b1 100644 --- a/app/components/p8p_cyclogram.js +++ b/app/components/p8p_cyclogram.js @@ -536,7 +536,7 @@ const P8PCyclogramTaskEditor = ({ cancelBtnCaption }) => { //Собственное состояние - const [state, setState] = useState({ + const [state] = useState({ start: task.start, end: task.end }); diff --git a/app/config_wrapper.js b/app/config_wrapper.js index 808b6a7..86de65d 100644 --- a/app/config_wrapper.js +++ b/app/config_wrapper.js @@ -15,6 +15,7 @@ import { P8PAppWorkspace } from "./components/p8p_app_workspace"; //Рабоче import { P8PTable, P8P_TABLE_DATA_TYPE, P8P_TABLE_SIZE, P8P_TABLE_FILTER_SHAPE } from "./components/p8p_table"; //Таблица данных import { P8PDataGrid, P8P_DATA_GRID_DATA_TYPE, P8P_DATA_GRID_SIZE, P8P_DATA_GRID_FILTER_SHAPE } from "./components/p8p_data_grid"; //Таблица данных import { P8PGantt, P8P_GANTT_TASK_SHAPE, P8P_GANTT_TASK_ATTRIBUTE_SHAPE, P8P_GANTT_TASK_COLOR_SHAPE } from "./components/p8p_gantt"; //Диаграмма Ганта +import { P8PCyclogram } from "./components/p8p_cyclogram"; //Циклограмма //--------- //Константы @@ -98,6 +99,7 @@ const addConfigChildProps = children => if (child.type.name === "P8PTable") configProps = P8P_TABLE_CONFIG_PROPS; if (child.type.name === "P8PDataGrid") configProps = P8P_DATA_GRID_CONFIG_PROPS; if (child.type.name === "P8PGantt") configProps = P8P_GANTT_CONFIG_PROPS; + if (child.type.name === "P8PCyclogram") configProps = P8P_CYCLOGRAM_CONFIG_PROPS; return React.createElement(child.type, { ...configProps, ...restProps }, addConfigChildProps(children)); }); @@ -120,6 +122,9 @@ const P8PDataGridConfigWrapped = (props = {}) => ; +//Обёртка для компонента "Циклограмма" (P8PCyclogram) +const P8PCyclogramConfigWrapped = (props = {}) => ; + //Универсальный элемент-обёртка в параметры конфигурации const ConfigWrapper = ({ children }) => addConfigChildProps(children); @@ -149,5 +154,6 @@ export { P8PTableConfigWrapped, P8PDataGridConfigWrapped, P8PGanttConfigWrapped, + P8PCyclogramConfigWrapped, ConfigWrapper }; diff --git a/app/panels/samples/cyclogram.js b/app/panels/samples/cyclogram.js index 8517d78..d9ee6cb 100644 --- a/app/panels/samples/cyclogram.js +++ b/app/panels/samples/cyclogram.js @@ -47,7 +47,7 @@ const LINE_HEIGHT = 30; const STYLES = { CONTAINER: { textAlign: "center", paddingTop: CONTAINER_PADDING_TOP }, TITLE: { paddingBottom: "15px", height: TITLE_HEIGHT }, - GANTT_CONTAINER: { + CYCLOGRAM_CONTAINER: { height: `calc(100vh - ${APP_BAR_HEIGHT} - ${TITLE_HEIGHT} - ${CONTAINER_PADDING_TOP})`, width: "100vw", paddingTop: "5px" @@ -274,7 +274,7 @@ const Cyclogram = ({ title }) => { ( diff --git a/db/P8PNL_SMPL_CYCLOGRAM.sql b/db/P8PNL_SMPL_CYCLOGRAM.sql index 3c16eff..77634ee 100644 --- a/db/P8PNL_SMPL_CYCLOGRAM.sql +++ b/db/P8PNL_SMPL_CYCLOGRAM.sql @@ -4,15 +4,15 @@ */ create table P8PNL_SMPL_CYCLOGRAM ( - RN number( 17 ) not null, - IDENT number( 17 ) not null, - TYPE number( 1 ) not null, - NAME varchar2( 200 ) not null, - POS_START number( 17 ) default null, - POS_END number( 17 ) default null, - DATE_FROM date default null, - DATE_TO date default null, - TASK_GROUP number( 17 ) default null, + RN number(17) not null, -- Рег. номер записи + IDENT number(17) not null, -- Идентификатор процесса + TYPE number(1) not null, -- Тип (0 - колонка, 1 - группа, 2 - задача) + NAME varchar2(200) not null, -- Наименование + POS_START number(17) default null, -- Начальная позиция на циклограмме + POS_END number(17) default null, -- Конечная позиция на циклограмме + DATE_FROM date default null, -- Дата начала + DATE_TO date default null, -- Дата окончания + TASK_GROUP number(17) default null, -- Группа задач constraint C_P8PNL_SMPL_CYCLOGRAM_RN_PK primary key (RN), constraint C_P8PNL_SMPL_CYCLOGRAM_TP_VAL check (TYPE in (0, 1, 2)) ); diff --git a/db/PKG_P8PANELS_SAMPLES.pck b/db/PKG_P8PANELS_SAMPLES.pck index 74e7101..ee842fa 100644 --- a/db/PKG_P8PANELS_SAMPLES.pck +++ b/db/PKG_P8PANELS_SAMPLES.pck @@ -85,7 +85,7 @@ end PKG_P8PANELS_SAMPLES; / create or replace package body PKG_P8PANELS_SAMPLES as - /* Константы для циклограммы */ + /* Константы - циклограмма */ NCG_MULTIPLIER constant PKG_STD.TNUMBER := 5; -- Множитель для ширины отображения /* Получение списка контрагентов */ @@ -756,7 +756,7 @@ create or replace package body PKG_P8PANELS_SAMPLES as and T.IDENT = NIDENT; end CYCLOGRAM_BASE_UPDATE; - /* Инициализация буфера данных для диаграммы Ганта */ + /* Инициализация буфера данных для циклограммы */ procedure CYCLOGRAM_INIT ( NIDENT in out number -- Идентификатор буфера сформированных данных (null - сгенерировать новый, !null - удалить старые данные и пересоздать с указанным идентификатором) @@ -1161,18 +1161,18 @@ create or replace package body PKG_P8PANELS_SAMPLES as /* Изменение задачи циклограммы */ procedure CYCLOGRAM_TASK_MODIFY ( - NIDENT in number, -- Идентификатор буфера - NRN in number, -- Рег. номер записи - SDATE_FROM in varchar2, -- Дата начала (в строковом представлении) - SDATE_TO in varchar2 -- Дата окончания (в строковом представлении) + NIDENT in number, -- Идентификатор буфера + NRN in number, -- Рег. номер записи + SDATE_FROM in varchar2, -- Дата начала (в строковом представлении) + SDATE_TO in varchar2 -- Дата окончания (в строковом представлении) ) is - DDATE_FROM PKG_STD.TLDATE; -- Дата начала - DDATE_TO PKG_STD.TLDATE; -- Дата окончания - NYEAR PKG_STD.TNUMBER; -- Текущий год - DCYCLOGRAM_START PKG_STD.TLDATE; -- Дата начала циклограммы - NSTART PKG_STD.TNUMBER; -- Позиция начала элемента - NEND PKG_STD.TNUMBER; -- Позиция окончания элемента + DDATE_FROM PKG_STD.TLDATE; -- Дата начала + DDATE_TO PKG_STD.TLDATE; -- Дата окончания + NYEAR PKG_STD.TNUMBER; -- Текущий год + DCYCLOGRAM_START PKG_STD.TLDATE; -- Дата начала циклограммы + NSTART PKG_STD.TNUMBER; -- Позиция начала элемента + NEND PKG_STD.TNUMBER; -- Позиция окончания элемента begin /* Фиксируем текущий год */ NYEAR := EXTRACT(year from sysdate); diff --git a/db/PKG_P8PANELS_VISUAL.pck b/db/PKG_P8PANELS_VISUAL.pck index c1580f2..7b88ef2 100644 --- a/db/PKG_P8PANELS_VISUAL.pck +++ b/db/PKG_P8PANELS_VISUAL.pck @@ -16,17 +16,31 @@ create or replace package PKG_P8PANELS_VISUAL as NGANTT_ZOOM_WEEK constant PKG_STD.TNUMBER := 3; -- Неделя NGANTT_ZOOM_MONTH constant PKG_STD.TNUMBER := 4; -- Месяц + /* Константы - масштаб циклограммы */ + NCYCLOGRAM_ZOOM_MIN constant PKG_STD.TLNUMBER := 0.2; -- Минимальный (0.2 от исходного) + NCYCLOGRAM_ZOOM_TINY constant PKG_STD.TLNUMBER := 0.4; -- Мелкий (0.4 от исходного) + NCYCLOGRAM_ZOOM_SMALL constant PKG_STD.TLNUMBER := 0.7; -- Уменьшенный (0.7 от исходного) + NCYCLOGRAM_ZOOM_DEFAULT constant PKG_STD.TLNUMBER := 1; -- Исходный + NCYCLOGRAM_ZOOM_LARGE constant PKG_STD.TLNUMBER := 1.5; -- Увеличенный (1.5 от исходного) + NCYCLOGRAM_ZOOM_HUGE constant PKG_STD.TLNUMBER := 2; -- Большой (2 от исходного) + NCYCLOGRAM_ZOOM_MAX constant PKG_STD.TLNUMBER := 2.5; -- Максимальный (2.5 от исходного) + /* Константы - тип графика */ - SCHART_TYPE_BAR constant PKG_STD.TSTRING := 'bar'; - SCHART_TYPE_LINE constant PKG_STD.TSTRING := 'line'; - SCHART_TYPE_PIE constant PKG_STD.TSTRING := 'pie'; - SCHART_TYPE_DOUGHNUT constant PKG_STD.TSTRING := 'doughnut'; + SCHART_TYPE_BAR constant PKG_STD.TSTRING := 'bar'; -- Столбчатая + SCHART_TYPE_LINE constant PKG_STD.TSTRING := 'line'; -- Линейная + SCHART_TYPE_PIE constant PKG_STD.TSTRING := 'pie'; -- Круговая + SCHART_TYPE_DOUGHNUT constant PKG_STD.TSTRING := 'doughnut'; -- Кольцевая /* Константы - расположение легенды графика */ - SCHART_LGND_POS_LEFT constant PKG_STD.TSTRING := 'left'; - SCHART_LGND_POS_RIGHT constant PKG_STD.TSTRING := 'right'; - SCHART_LGND_POS_TOP constant PKG_STD.TSTRING := 'top'; - SCHART_LGND_POS_BOTTOM constant PKG_STD.TSTRING := 'bottom'; + SCHART_LGND_POS_LEFT constant PKG_STD.TSTRING := 'left'; -- Слева + SCHART_LGND_POS_RIGHT constant PKG_STD.TSTRING := 'right'; -- Справа + SCHART_LGND_POS_TOP constant PKG_STD.TSTRING := 'top'; -- Наверху + SCHART_LGND_POS_BOTTOM constant PKG_STD.TSTRING := 'bottom'; -- Внизу + + /* Константы - циклограмма */ + NCYCLOGRAM_GROUP_DEF_WIDTH constant PKG_STD.TNUMBER := 100; -- Высота заголовка группы (по умолчанию) + NCYCLOGRAM_GROUP_DEF_HEIGHT constant PKG_STD.TNUMBER := 42; -- Ширина заголовка группы (по умолчанию) + NCYCLOGRAM_LINE_HEIGHT constant PKG_STD.TNUMBER := 20; -- Высота строк циклограммы /* Типы данных - значение колонки таблицы данных */ type TCOL_VAL is record @@ -242,6 +256,83 @@ create or replace package PKG_P8PANELS_VISUAL as RDATASETS TCHART_DATASETS -- Наборы данных ); + /* Типы данных - описание атрибута задачи для циклограммы */ + type TCYCLOGRAM_TASK_ATTR is record + ( + SNAME PKG_STD.TSTRING, -- Наименование + SCAPTION PKG_STD.TSTRING, -- Заголовок + BVISIBLE boolean -- Разрешить отображение + ); + + /* Типы данных - коллекция описаний атрибутов задачи для циклограммы */ + type TCYCLOGRAM_TASK_ATTRS is table of TCYCLOGRAM_TASK_ATTR; + + /* Типы данных - значение атрибута задачи для циклограммы */ + type TCYCLOGRAM_TASK_ATTR_VAL is record + ( + SNAME PKG_STD.TSTRING, -- Наименование + SVALUE PKG_STD.TSTRING -- Значение + ); + + /* Типы данных - коллекция значений атрибутов задачи для циклограммы */ + type TCYCLOGRAM_TASK_ATTR_VALS is table of TCYCLOGRAM_TASK_ATTR_VAL; + + /* Типы данных - колонка циклограммы */ + type TCYCLOGRAM_COLUMN is record + ( + SNAME PKG_STD.TSTRING, -- Наименование колонки + NSTART PKG_STD.TNUMBER, -- Позиция начала колонки + NEND PKG_STD.TNUMBER -- Позиция конца колонки + ); + + /* Типы данных - коллекция колонок циклограммы */ + type TCYCLOGRAM_COLUMNS is table of TCYCLOGRAM_COLUMN; + + /* Типы данных - строки циклограммы */ + type TCYCLOGRAM_TASK is record + ( + NRN PKG_STD.TREF, -- Рег. номер + SCAPTION PKG_STD.TSTRING, -- Заголовок + SNAME PKG_STD.TSTRING, -- Наименование + NLINE_NUMB PKG_STD.TNUMBER, -- Номер строки + NSTART PKG_STD.TNUMBER, -- Позиция начала задачи + NEND PKG_STD.TNUMBER, -- Позиция конца задачи + SGROUP PKG_STD.TSTRING, -- Наименование группы + SBG_COLOR PKG_STD.TSTRING := null, -- Цвет заливки задачи (null - использовать цвет по умолчанию из стилей, формат - HTML-цвет, #RRGGBBAA) + STEXT_COLOR PKG_STD.TSTRING := null, -- Цвет текста заголовка задачи (null - использовать цвет по умолчанию из стилей, формат - HTML-цвет, #RRGGBBAA) + SHIGHLIGHT_COLOR PKG_STD.TSTRING := null, -- Цвет при наведении (null - использовать цвет по умолчанию из стилей, формат - HTML-цвет, #RRGGBBAA) + RATTR_VALS TCYCLOGRAM_TASK_ATTR_VALS := null -- Значения дополнительных атрбутов (null - дополнительные атрибуты не определены) + ); + + /* Типы данных - коллекция строк циклограммы */ + type TCYCLOGRAM_TASKS is table of TCYCLOGRAM_TASK; + + /* Типы данных - группа строк циклограммы */ + type TCYCLOGRAM_GROUP is record + ( + SNAME PKG_STD.TSTRING, -- Имя группы + BHEADER_VISIBLE boolean, -- Признак отображения заголовка группы + NHEADER_HEIGHT PKG_STD.TNUMBER, -- Высота заголовка группы + NHEADER_WIDTH PKG_STD.TNUMBER, -- Ширина заголовка группы + SHIGHLIGHT_COLOR PKG_STD.TSTRING := null -- Цвет при наведении (null - использовать цвет по умолчанию из стилей, формат - HTML-цвет, #RRGGBBAA) + ); + + /* Типы данных - коллекция групп строк циклограммы */ + type TCYCLOGRAM_GROUPS is table of TCYCLOGRAM_GROUP; + + /* Типы данных - циклограмма */ + type TCYCLOGRAM is record + ( + STITLE PKG_STD.TSTRING, -- Заголовок (null - не отображать) + NLINE_HEIGHT PKG_STD.TLNUMBER, -- Высота строк + NZOOM PKG_STD.TNUMBER := NCYCLOGRAM_ZOOM_DEFAULT, -- Текущий масштаб (см. константы NCYCLOGRAM_ZOOM_*) + BZOOM_BAR boolean := true, -- Обображать панель масштабирования + RCOLUMNS TCYCLOGRAM_COLUMNS, -- Коллекция колонок циклограммы + RGROUPS TCYCLOGRAM_GROUPS, -- Коллекция групп строк циклограммы + RTASKS TCYCLOGRAM_TASKS, -- Коллекция строк циклограммы + RTASK_ATTRS TCYCLOGRAM_TASK_ATTRS -- Описание атрибутов карточки задачи + ); + /* Расчет диапаона выдаваемых записей */ procedure UTL_ROWS_LIMITS_CALC ( @@ -577,6 +668,87 @@ create or replace package PKG_P8PANELS_VISUAL as RCHART in TCHART, -- Описание графика NINCLUDE_DEF in number := 1 -- Включить описание заголовка (0 - нет, 1 - да) ) return clob; -- XML-описание + + /* Формирование задачи циклограммы */ + function TCYCLOGRAM_TASK_MAKE + ( + NRN in number, -- Рег. номер записи + SCAPTION in varchar2, -- Заголовок + SNAME in varchar2, -- Наименование + NLINE_NUMB in number, -- Номер строки + NSTART in number, -- Позиция начала задачи + NEND in number, -- Позиция конца задачи + SGROUP in varchar2 := null, -- Наименование группы + SBG_COLOR in varchar2 := null, -- Цвет заливки задачи (null - использовать цвет по умолчанию из стилей, формат - HTML-цвет, #RRGGBBAA) + STEXT_COLOR in varchar2 := null, -- Цвет текста заголовка задачи (null - использовать цвет по умолчанию из стилей, формат - HTML-цвет, #RRGGBBAA) + SHIGHLIGHT_COLOR in varchar2 := null -- Цвет при наведении (null - использовать цвет по умолчанию из стилей, формат - HTML-цвет, #RRGGBBAA) + ) return TCYCLOGRAM_TASK; -- Результат работы + + /* Добавление значения атрибута к задаче циклограммы */ + procedure TCYCLOGRAM_TASK_ADD_ATTR_VAL + ( + RCYCLOGRAM in TCYCLOGRAM, -- Описание циклограммы + RTASK in out nocopy TCYCLOGRAM_TASK, -- Описание задачи + SNAME in varchar2, -- Наименование + SVALUE in varchar2, -- Значение + BCLEAR in boolean := false -- Флаг очистки коллекции значений атрибутов (false - не очищать, true - очистить коллекцию перед добавлением) + ); + + /* Формирование циклограммы */ + function TCYCLOGRAM_MAKE + ( + STITLE in varchar2, -- Заголовок (null - не отображать) + NLINE_HEIGHT in number := NCYCLOGRAM_LINE_HEIGHT, -- Высота строк + NZOOM in number := NCYCLOGRAM_ZOOM_DEFAULT, -- Текущий масштаб (см. константы NCYCLOGRAM_ZOOM_*) + BZOOM_BAR in boolean := true -- Обображать панель масштабирования + ) return TCYCLOGRAM; -- Результат работы + + /* Добавление колонки в циклограмму */ + procedure TCYCLOGRAM_ADD_COLUMN + ( + RCYCLOGRAM in out nocopy TCYCLOGRAM, -- Описание циклограммы + SNAME in varchar2, -- Заголовок колонки + NSTART in number, -- Позиция начала колонки + NEND in number, -- Позиция конца колонки + BCLEAR in boolean := false -- Флаг очистки коллекции колонок циклограммы (false - не очищать, true - очистить коллекцию перед добавлением) + ); + + /* Добавление группы в циклограмму */ + procedure TCYCLOGRAM_ADD_GROUP + ( + RCYCLOGRAM in out nocopy TCYCLOGRAM, -- Описание циклограммы + SNAME in varchar2, -- Имя группы + BHEADER_VISIBLE in boolean := true, -- Признак отображения заголовка группы + NHEADER_HEIGHT in number := NCYCLOGRAM_GROUP_DEF_HEIGHT, -- Высота заголовка группы + NHEADER_WIDTH in number := NCYCLOGRAM_GROUP_DEF_WIDTH, -- Ширина заголовка группы + SHIGHLIGHT_COLOR in varchar2 := null, -- Цвет при наведении (null - использовать цвет по умолчанию из стилей, формат - HTML-цвет, #RRGGBBAA) + BCLEAR in boolean := false -- Флаг очистки коллекции групп (false - не очищать, true - очистить коллекцию перед добавлением) + ); + + /* Добавление задачи в циклограммы */ + procedure TCYCLOGRAM_ADD_TASK + ( + RCYCLOGRAM in out nocopy TCYCLOGRAM, -- Описание циклограммы + RTASK in TCYCLOGRAM_TASK, -- Задача циклограммы + BCLEAR in boolean := false -- Флаг очистки коллекции задач (false - не очищать, true - очистить коллекцию перед добавлением) + ); + + /* Добавление описания атрибута задачи циклограммы */ + procedure TCYCLOGRAM_ADD_TASK_ATTR + ( + RCYCLOGRAM in out nocopy TCYCLOGRAM, -- Описание циклограммы + SNAME in varchar2, -- Наименование + SCAPTION in varchar2, -- Заголовок + BVISIBLE boolean := true, -- Разрешить отображение + BCLEAR in boolean := false -- Флаг очистки коллекции атрибутов (false - не очищать, true - очистить коллекцию перед добавлением) + ); + + /* Сериализация циклограммы */ + function TCYCLOGRAM_TO_XML + ( + RCYCLOGRAM in TCYCLOGRAM, -- Описание циклограммы + NINCLUDE_DEF in number := 1 -- Включить описание колонок (0 - нет, 1 - да) + ) return clob; -- XML-описание end PKG_P8PANELS_VISUAL; / @@ -603,38 +775,44 @@ text="Формат data_grid и gant как в chart" SRESP_TAG_XGANTT_TASKS constant PKG_STD.TSTRING := 'XGANTT_TASKS'; -- Тэг для описания коллекции задач диаграммы Ганта SRESP_TAG_XCHART constant PKG_STD.TSTRING := 'XCHART'; -- Тэг для описания графика SRESP_TAG_XDATA_GRID constant PKG_STD.TSTRING := 'XDATA_GRID'; -- Тэг для описания таблицы данных + SRESP_TAG_XCYCLOGRAM constant PKG_STD.TSTRING := 'XCYCLOGRAM'; -- Тэг для описания заголовка циклограммы /* Константы - атрибуты ответов (универсальные) */ - SRESP_ATTR_NAME constant PKG_STD.TSTRING := 'name'; -- Атрибут для наименования - SRESP_ATTR_CAPTION constant PKG_STD.TSTRING := 'caption'; -- Атрибут для подписи - SRESP_ATTR_DATA_TYPE constant PKG_STD.TSTRING := 'dataType'; -- Атрибут для типа данных - SRESP_ATTR_VISIBLE constant PKG_STD.TSTRING := 'visible'; -- Атрибут для флага видимости - SRESP_ATTR_TITLE constant PKG_STD.TSTRING := 'title'; -- Атрибут для заголовка - SRESP_ATTR_ZOOM constant PKG_STD.TSTRING := 'zoom'; -- Атрибут для масштаба - SRESP_ATTR_ID constant PKG_STD.TSTRING := 'id'; -- Атрибут для идентификатора - SRESP_ATTR_START constant PKG_STD.TSTRING := 'start'; -- Атрибут для даты начала - SRESP_ATTR_END constant PKG_STD.TSTRING := 'end'; -- Атрибут для даты окончания - SRESP_ATTR_RN constant PKG_STD.TSTRING := 'rn'; -- Атрибут для рег. номера - SRESP_ATTR_NUMB constant PKG_STD.TSTRING := 'numb'; -- Атрибут для номера - SRESP_ATTR_FULL_NAME constant PKG_STD.TSTRING := 'fullName'; -- Атрибут для полного наименования - SRESP_ATTR_DESC constant PKG_STD.TSTRING := 'desc'; -- Атрибут для описания - SRESP_ATTR_TYPE constant PKG_STD.TSTRING := 'type'; -- Атрибут для типа - SRESP_ATTR_HINT constant PKG_STD.TSTRING := 'hint'; -- Атрибут для подсказки - SRESP_ATTR_GROUP_NAME constant PKG_STD.TSTRING := 'groupName'; -- Атрибут для наименования группы - SRESP_ATTR_PARENT constant PKG_STD.TSTRING := 'parent'; -- Атрибут для ссылки на родителя - SRESP_ATTR_EXPANDABLE constant PKG_STD.TSTRING := 'expandable'; -- Атрибут для доступности действия сокрытия/отображения - SRESP_ATTR_EXPANDED constant PKG_STD.TSTRING := 'expanded'; -- Атрибут для флага сокрытия/отображения - SRESP_ATTR_FIXED_HEADER constant PKG_STD.TSTRING := 'fixedHeader'; -- Атрибут для флага фиксации заголовка - SRESP_ATTR_FIXED_COLUMNS constant PKG_STD.TSTRING := 'fixedColumns'; -- Атрибут для количества фиксированных колонок - SRESP_ATTR_WIDTH constant PKG_STD.TSTRING := 'width'; -- Атрибут для ширины - + SRESP_ATTR_NAME constant PKG_STD.TSTRING := 'name'; -- Атрибут для наименования + SRESP_ATTR_CAPTION constant PKG_STD.TSTRING := 'caption'; -- Атрибут для подписи + SRESP_ATTR_DATA_TYPE constant PKG_STD.TSTRING := 'dataType'; -- Атрибут для типа данных + SRESP_ATTR_VISIBLE constant PKG_STD.TSTRING := 'visible'; -- Атрибут для флага видимости + SRESP_ATTR_TITLE constant PKG_STD.TSTRING := 'title'; -- Атрибут для заголовка + SRESP_ATTR_ZOOM constant PKG_STD.TSTRING := 'zoom'; -- Атрибут для масштаба + SRESP_ATTR_ID constant PKG_STD.TSTRING := 'id'; -- Атрибут для идентификатора + SRESP_ATTR_START constant PKG_STD.TSTRING := 'start'; -- Атрибут для даты начала + SRESP_ATTR_END constant PKG_STD.TSTRING := 'end'; -- Атрибут для даты окончания + SRESP_ATTR_RN constant PKG_STD.TSTRING := 'rn'; -- Атрибут для рег. номера + SRESP_ATTR_NUMB constant PKG_STD.TSTRING := 'numb'; -- Атрибут для номера + SRESP_ATTR_FULL_NAME constant PKG_STD.TSTRING := 'fullName'; -- Атрибут для полного наименования + SRESP_ATTR_DESC constant PKG_STD.TSTRING := 'desc'; -- Атрибут для описания + SRESP_ATTR_TYPE constant PKG_STD.TSTRING := 'type'; -- Атрибут для типа + SRESP_ATTR_HINT constant PKG_STD.TSTRING := 'hint'; -- Атрибут для подсказки + SRESP_ATTR_GROUP_NAME constant PKG_STD.TSTRING := 'groupName'; -- Атрибут для наименования группы + SRESP_ATTR_PARENT constant PKG_STD.TSTRING := 'parent'; -- Атрибут для ссылки на родителя + SRESP_ATTR_EXPANDABLE constant PKG_STD.TSTRING := 'expandable'; -- Атрибут для доступности действия сокрытия/отображения + SRESP_ATTR_EXPANDED constant PKG_STD.TSTRING := 'expanded'; -- Атрибут для флага сокрытия/отображения + SRESP_ATTR_FIXED_HEADER constant PKG_STD.TSTRING := 'fixedHeader'; -- Атрибут для флага фиксации заголовка + SRESP_ATTR_FIXED_COLUMNS constant PKG_STD.TSTRING := 'fixedColumns'; -- Атрибут для количества фиксированных колонок + SRESP_ATTR_WIDTH constant PKG_STD.TSTRING := 'width'; -- Атрибут для ширины + SRESP_ATTR_HEIGHT constant PKG_STD.TSTRING := 'height'; -- Атрибут для высоты + SRESP_ATTR_GROUPS constant PKG_STD.TSTRING := 'groups'; -- Атрибут для групп + SRESP_ATTR_COLUMNS constant PKG_STD.TSTRING := 'columns'; -- Атрибут для колонок + SRESP_ATTR_TASKS constant PKG_STD.TSTRING := 'tasks'; -- Атрибут для задач + SRESP_ATTR_HL_COLOR constant PKG_STD.TSTRING := 'highlightColor'; -- Атрибут для цвета подсветки + SRESP_ATTR_ZOOM_BAR constant PKG_STD.TSTRING := 'zoomBar'; -- Атрибут для флага отображения панели масштаба + /* Константы - атрибуты ответов (таблица данных) */ SRESP_ATTR_DT_ORDER constant PKG_STD.TSTRING := 'order'; -- Атрибут для флага сортировки SRESP_ATTR_DT_FILTER constant PKG_STD.TSTRING := 'filter'; -- Атрибут для флага отбора SRESP_ATTR_DT_COLUMN_VALUES constant PKG_STD.TSTRING := 'values'; -- Атрибут для предопределённых значений /* Константы - атрибуты ответов (диаграмма Ганта) */ - SRESP_ATTR_GANTT_ZOOM_BAR constant PKG_STD.TSTRING := 'zoomBar'; -- Атрибут для флага отображения панели масштаба диаграммы Ганта SRESP_ATTR_TASK_PROGRESS constant PKG_STD.TSTRING := 'progress'; -- Атрибут для прогресса задачи SRESP_ATTR_TASK_DEPS constant PKG_STD.TSTRING := 'dependencies'; -- Атрибут для зависимостей задачи SRESP_ATTR_TASK_RO constant PKG_STD.TSTRING := 'readOnly'; -- Атрибут для флага задачи "только для чтения" @@ -657,6 +835,10 @@ text="Формат data_grid и gant как в chart" SRESP_ATTR_CHART_DS_ITEMS constant PKG_STD.TSTRING := 'items'; -- Атрибут для коллекции элементов набора данных SRESP_ATTR_CHART_DS_I_VAL constant PKG_STD.TSTRING := 'value'; -- Атрибут для значения элемента набора данных + /* Константы - атрибуты ответов (циклограмма) */ + SRESP_ATTR_CG_TASK_LINE constant PKG_STD.TSTRING := 'lineNumb'; -- Атрибут для номера строки (по оси Y) + SRESP_ATTR_CG_LINE_HEIGHT constant PKG_STD.TSTRING := 'lineHeight'; -- Атрибут для высоты строк + /* Константы - параметры условий отбора */ SCOND_FROM_POSTFIX constant PKG_STD.TSTRING := 'From'; -- Постфикс наименования нижней границы условия отбора SCOND_TO_POSTFIX constant PKG_STD.TSTRING := 'To'; -- Постфикс наименования верхней границы условия отбора @@ -2034,7 +2216,7 @@ text="Формат data_grid и gant как в chart" /* Cтатические атрибуты заголовка */ PKG_XFAST.ATTR(SNAME => SRESP_ATTR_TITLE, SVALUE => RGANTT.STITLE); PKG_XFAST.ATTR(SNAME => SRESP_ATTR_ZOOM, NVALUE => RGANTT.NZOOM); - PKG_XFAST.ATTR(SNAME => SRESP_ATTR_GANTT_ZOOM_BAR, BVALUE => RGANTT.BZOOM_BAR); + PKG_XFAST.ATTR(SNAME => SRESP_ATTR_ZOOM_BAR, BVALUE => RGANTT.BZOOM_BAR); PKG_XFAST.ATTR(SNAME => SRESP_ATTR_TASK_RO, BVALUE => RGANTT.BREAD_ONLY); PKG_XFAST.ATTR(SNAME => SRESP_ATTR_TASK_RO_DATES, BVALUE => RGANTT.BREAD_ONLY_DATES); PKG_XFAST.ATTR(SNAME => SRESP_ATTR_TASK_RO_PRGRS, BVALUE => RGANTT.BREAD_ONLY_PROGRESS); @@ -2382,5 +2564,517 @@ text="Формат data_grid и gant как в chart" P_EXCEPTION(0, PKG_STATE.SQL_ERRM()); end TCHART_TO_XML; + /* Формирование колонки циклограммы */ + function TCYCLOGRAM_COLUMN_MAKE + ( + SNAME in varchar2, -- Заголовок колонки + NSTART in number, -- Позиция начала колонки + NEND in number -- Позиция конца колонки + ) return TCYCLOGRAM_COLUMN -- Результат работы + is + RRES TCYCLOGRAM_COLUMN; -- Буфер для результата + begin + /* Формируем объект */ + RRES.SNAME := SNAME; + RRES.NSTART := NSTART; + RRES.NEND := NEND; + /* Возвращаем результат */ + return RRES; + end TCYCLOGRAM_COLUMN_MAKE; + + /* Добавление колонки циклограммы в коллекцию */ + procedure TCYCLOGRAM_COLUMNS_ADD + ( + RCOLUMNS in out nocopy TCYCLOGRAM_COLUMNS, -- Коллекция колонок циклограммы + SNAME in varchar2, -- Наименование колонки + NSTART in number, -- Позиция начала колонки + NEND in number, -- Позиция конца колонки + BCLEAR in boolean := false -- Флаг очистки коллекции колонок (false - не очищать, true - очистить коллекцию перед добавлением) + ) + is + begin + /* Инициализируем коллекцию если необходимо */ + if ((RCOLUMNS is null) or (BCLEAR)) then + RCOLUMNS := TCYCLOGRAM_COLUMNS(); + end if; + /* Добавляем элемент */ + RCOLUMNS.EXTEND(); + RCOLUMNS(RCOLUMNS.LAST) := TCYCLOGRAM_COLUMN_MAKE(SNAME => SNAME, NSTART => NSTART, NEND => NEND); + end TCYCLOGRAM_COLUMNS_ADD; + + /* Сериализация описания колонок циклограммы */ + procedure TCYCLOGRAM_COLUMNS_TO_XML + ( + RCYCLOGRAM_COLUMNS in TCYCLOGRAM_COLUMNS -- Описание колонок циклограммы + ) + is + begin + /* Обходим колонки из коллекции */ + if ((RCYCLOGRAM_COLUMNS is not null) and (RCYCLOGRAM_COLUMNS.COUNT > 0)) then + for I in RCYCLOGRAM_COLUMNS.FIRST .. RCYCLOGRAM_COLUMNS.LAST + loop + /* Открываем описание колонки */ + PKG_XFAST.DOWN_NODE(SNAME => SRESP_TAG_XCOLUMNS_DEF); + /* Атрибуты колонки */ + PKG_XFAST.ATTR(SNAME => SRESP_ATTR_NAME, SVALUE => RCYCLOGRAM_COLUMNS(I).SNAME); + PKG_XFAST.ATTR(SNAME => SRESP_ATTR_START, NVALUE => RCYCLOGRAM_COLUMNS(I).NSTART); + PKG_XFAST.ATTR(SNAME => SRESP_ATTR_END, NVALUE => RCYCLOGRAM_COLUMNS(I).NEND); + /* Закрываем описание колонки */ + PKG_XFAST.UP(); + end loop; + end if; + end TCYCLOGRAM_COLUMNS_TO_XML; + + /* Формирование группы циклограммы */ + function TCYCLOGRAM_GROUP_MAKE + ( + SNAME in varchar2, -- Имя группы + BHEADER_VISIBLE in boolean := true, -- Признак отображения заголовка группы + NHEADER_HEIGHT in number := NCYCLOGRAM_GROUP_DEF_HEIGHT, -- Высота заголовка группы + NHEADER_WIDTH in number := NCYCLOGRAM_GROUP_DEF_WIDTH, -- Ширина заголовка группы + SHIGHLIGHT_COLOR in varchar2 := null -- Цвет при наведении (null - использовать цвет по умолчанию из стилей, формат - HTML-цвет, #RRGGBBAA) + ) return TCYCLOGRAM_GROUP -- Результат работы + is + RRES TCYCLOGRAM_GROUP; -- Буфер для результата + begin + /* Формируем объект */ + RRES.SNAME := SNAME; + RRES.BHEADER_VISIBLE := BHEADER_VISIBLE; + RRES.NHEADER_HEIGHT := NHEADER_HEIGHT; + RRES.NHEADER_WIDTH := NHEADER_WIDTH; + RRES.SHIGHLIGHT_COLOR := SHIGHLIGHT_COLOR; + /* Возвращаем результат */ + return RRES; + end TCYCLOGRAM_GROUP_MAKE; + + /* Поиск группы циклограммы по наименованию */ + function TCYCLOGRAM_GROUP_FIND + ( + RGROUPS in TCYCLOGRAM_GROUPS, -- Описание групп циклограммы + SNAME in varchar2 -- Наименование + ) return TCYCLOGRAM_GROUP -- Найденное описание группы (null - если не нашли) + is + begin + /* Обходим группы из описания */ + if ((RGROUPS is not null) and (RGROUPS.COUNT > 0)) then + for I in RGROUPS.FIRST .. RGROUPS.LAST + loop + if (RGROUPS(I).SNAME = SNAME) then + return RGROUPS(I); + end if; + end loop; + end if; + /* Ничего не нашли */ + return null; + end TCYCLOGRAM_GROUP_FIND; + + /* Сериализация описания групп циклограммы */ + procedure TCYCLOGRAM_GROUPS_TO_XML + ( + RGROUPS in TCYCLOGRAM_GROUPS -- Коллекция групп циклограммы + ) + is + begin + /* Обходим группы из коллекции */ + if ((RGROUPS is not null) and (RGROUPS.COUNT > 0)) then + for I in RGROUPS.FIRST .. RGROUPS.LAST + loop + /* Открываем описание группы */ + PKG_XFAST.DOWN_NODE(SNAME => SRESP_ATTR_GROUPS); + /* Атрибуты группы */ + PKG_XFAST.ATTR(SNAME => SRESP_ATTR_NAME, SVALUE => RGROUPS(I).SNAME); + PKG_XFAST.ATTR(SNAME => SRESP_ATTR_VISIBLE, BVALUE => RGROUPS(I).BHEADER_VISIBLE); + PKG_XFAST.ATTR(SNAME => SRESP_ATTR_HEIGHT, NVALUE => RGROUPS(I).NHEADER_HEIGHT); + PKG_XFAST.ATTR(SNAME => SRESP_ATTR_WIDTH, NVALUE => RGROUPS(I).NHEADER_WIDTH); + if (RGROUPS(I).SHIGHLIGHT_COLOR is not null) then + PKG_XFAST.ATTR(SNAME => SRESP_ATTR_HL_COLOR, SVALUE => RGROUPS(I).SHIGHLIGHT_COLOR); + end if; + /* Закрываем описание группы */ + PKG_XFAST.UP(); + end loop; + end if; + end TCYCLOGRAM_GROUPS_TO_XML; + + /* Проверка наличия группы в циклограмме */ + function TCYCLOGRAM_TASK_GROUP_CHECK + ( + RGROUPS in TCYCLOGRAM_GROUPS, -- Описание групп циклограммы + SNAME in varchar2 -- Наименование + ) return TCYCLOGRAM_GROUP -- Найденное описание группы (null - если не нашли) + is + begin + /* Обходим группы из описания */ + if ((RGROUPS is not null) and (RGROUPS.COUNT > 0)) then + for I in RGROUPS.FIRST .. RGROUPS.LAST + loop + if (RGROUPS(I).SNAME = SNAME) then + return RGROUPS(I); + end if; + end loop; + end if; + /* Ничего не нашли */ + return null; + end TCYCLOGRAM_TASK_GROUP_CHECK; + + /* Формирование задачи циклограммы */ + function TCYCLOGRAM_TASK_MAKE + ( + NRN in number, -- Рег. номер записи + SCAPTION in varchar2, -- Заголовок + SNAME in varchar2, -- Наименование + NLINE_NUMB in number, -- Номер строки + NSTART in number, -- Позиция начала задачи + NEND in number, -- Позиция конца задачи + SGROUP in varchar2 := null, -- Наименование группы + SBG_COLOR in varchar2 := null, -- Цвет заливки задачи (null - использовать цвет по умолчанию из стилей, формат - HTML-цвет, #RRGGBBAA) + STEXT_COLOR in varchar2 := null, -- Цвет текста заголовка задачи (null - использовать цвет по умолчанию из стилей, формат - HTML-цвет, #RRGGBBAA) + SHIGHLIGHT_COLOR in varchar2 := null -- Цвет при наведении (null - использовать цвет по умолчанию из стилей, формат - HTML-цвет, #RRGGBBAA) + ) return TCYCLOGRAM_TASK -- Результат работы + is + RRES TCYCLOGRAM_TASK; -- Буфер для результата + begin + /* Формируем объект */ + RRES.NRN := NRN; + RRES.SCAPTION := SCAPTION; + RRES.SNAME := SNAME; + RRES.NLINE_NUMB := NLINE_NUMB; + RRES.NSTART := NSTART; + RRES.NEND := NEND; + RRES.SGROUP := SGROUP; + RRES.SBG_COLOR := SBG_COLOR; + RRES.STEXT_COLOR := STEXT_COLOR; + RRES.SHIGHLIGHT_COLOR := SHIGHLIGHT_COLOR; + /* Возвращаем результат */ + return RRES; + end TCYCLOGRAM_TASK_MAKE; + + /* Проверка корректности наименования дополнительного атрибута задачи циклограммы */ + procedure TCYCLOGRAM_TASK_ATTR_NAME_CH + ( + SNAME in varchar2 -- Наименование + ) + is + begin + if (SNAME in (SRESP_ATTR_ID, + SRESP_ATTR_RN, + SRESP_ATTR_CAPTION, + SRESP_ATTR_FULL_NAME, + SRESP_ATTR_START, + SRESP_ATTR_END, + SRESP_ATTR_CG_TASK_LINE, + SRESP_ATTR_GROUP_NAME, + SRESP_ATTR_TASK_BG_COLOR, + SRESP_ATTR_TASK_TEXT_COLOR, + SRESP_ATTR_HL_COLOR)) then + P_EXCEPTION(0, + 'Наименование атрибута "%s" является зарезервированным.', + SNAME); + end if; + end TCYCLOGRAM_TASK_ATTR_NAME_CH; + + /* Поиск атрибута задачи циклограммы по наименованию */ + function TCYCLOGRAM_TASK_ATTR_FIND + ( + RTASK_ATTRS in TCYCLOGRAM_TASK_ATTRS, -- Описание атрибутов задачи циклограммы + SNAME in varchar2 -- Наименование + ) return TCYCLOGRAM_TASK_ATTR -- Найденное описание (null - если не нашли) + is + begin + /* Обходим атрибуты из описания */ + if ((RTASK_ATTRS is not null) and (RTASK_ATTRS.COUNT > 0)) then + for I in RTASK_ATTRS.FIRST .. RTASK_ATTRS.LAST + loop + if (RTASK_ATTRS(I).SNAME = SNAME) then + return RTASK_ATTRS(I); + end if; + end loop; + end if; + /* Ничего не нашли */ + return null; + end TCYCLOGRAM_TASK_ATTR_FIND; + + /* Добавление значения атрибута к задаче циклограммы */ + procedure TCYCLOGRAM_TASK_ADD_ATTR_VAL + ( + RCYCLOGRAM in TCYCLOGRAM, -- Описание циклограммы + RTASK in out nocopy TCYCLOGRAM_TASK, -- Описание задачи + SNAME in varchar2, -- Наименование + SVALUE in varchar2, -- Значение + BCLEAR in boolean := false -- Флаг очистки коллекции значений атрибутов (false - не очищать, true - очистить коллекцию перед добавлением) + ) + is + begin + /* Проверим наименование */ + TCYCLOGRAM_TASK_ATTR_NAME_CH(SNAME => SNAME); + /* Проверим, что такой атрибут зарегистрирован */ + if (TCYCLOGRAM_TASK_ATTR_FIND(RTASK_ATTRS => RCYCLOGRAM.RTASK_ATTRS, SNAME => SNAME).SNAME is null) then + P_EXCEPTION(0, + 'Атрибут "%s" задачи циклограммы не зарегистрирован.', + SNAME); + end if; + /* Инициализируем коллекцию если необходимо */ + if ((RTASK.RATTR_VALS is null) or (BCLEAR)) then + RTASK.RATTR_VALS := TCYCLOGRAM_TASK_ATTR_VALS(); + end if; + /* Добавляем элемент */ + RTASK.RATTR_VALS.EXTEND(); + RTASK.RATTR_VALS(RTASK.RATTR_VALS.LAST).SNAME := SNAME; + RTASK.RATTR_VALS(RTASK.RATTR_VALS.LAST).SVALUE := SVALUE; + end TCYCLOGRAM_TASK_ADD_ATTR_VAL; + + /* Сериализация описания задач группы циклограммы */ + procedure TCYCLOGRAM_TASKS_TO_XML + ( + RTASKS in TCYCLOGRAM_TASKS -- Коллекция задач группы циклограммы + ) + is + begin + /* Обходим задачи из коллекции */ + if ((RTASKS is not null) and (RTASKS.COUNT > 0)) then + for I in RTASKS.FIRST .. RTASKS.LAST + loop + /* Открываем строку */ + PKG_XFAST.DOWN_NODE(SNAME => SRESP_ATTR_TASKS); + /* Статические тарибуты */ + PKG_XFAST.ATTR(SNAME => SRESP_ATTR_ID, SVALUE => 'taskId' || RTASKS(I).NRN); + PKG_XFAST.ATTR(SNAME => SRESP_ATTR_RN, NVALUE => RTASKS(I).NRN); + PKG_XFAST.ATTR(SNAME => SRESP_ATTR_NAME, SVALUE => RTASKS(I).SCAPTION); + PKG_XFAST.ATTR(SNAME => SRESP_ATTR_FULL_NAME, SVALUE => RTASKS(I).SNAME); + PKG_XFAST.ATTR(SNAME => SRESP_ATTR_CG_TASK_LINE, NVALUE => RTASKS(I).NLINE_NUMB); + PKG_XFAST.ATTR(SNAME => SRESP_ATTR_START, NVALUE => RTASKS(I).NSTART); + PKG_XFAST.ATTR(SNAME => SRESP_ATTR_END, NVALUE => RTASKS(I).NEND); + if (RTASKS(I).SGROUP is not null) then + PKG_XFAST.ATTR(SNAME => SRESP_ATTR_GROUP_NAME, SVALUE => RTASKS(I).SGROUP); + end if; + if (RTASKS(I).SBG_COLOR is not null) then + PKG_XFAST.ATTR(SNAME => SRESP_ATTR_TASK_BG_COLOR, SVALUE => RTASKS(I).SBG_COLOR); + end if; + if (RTASKS(I).STEXT_COLOR is not null) then + PKG_XFAST.ATTR(SNAME => SRESP_ATTR_TASK_TEXT_COLOR, SVALUE => RTASKS(I).STEXT_COLOR); + end if; + if (RTASKS(I).SHIGHLIGHT_COLOR is not null) then + PKG_XFAST.ATTR(SNAME => SRESP_ATTR_HL_COLOR, SVALUE => RTASKS(I).SHIGHLIGHT_COLOR); + end if; + /* Динамические атрибуты */ + if ((RTASKS(I).RATTR_VALS is not null) and (RTASKS(I).RATTR_VALS.COUNT > 0)) then + for J in RTASKS(I).RATTR_VALS.FIRST .. RTASKS(I).RATTR_VALS.LAST + loop + PKG_XFAST.ATTR(SNAME => RTASKS(I).RATTR_VALS(J).SNAME, SVALUE => RTASKS(I).RATTR_VALS(J).SVALUE); + end loop; + end if; + /* Закрываем задачу */ + PKG_XFAST.UP(); + end loop; + end if; + end TCYCLOGRAM_TASKS_TO_XML; + + /* Формирование циклограммы */ + function TCYCLOGRAM_MAKE + ( + STITLE in varchar2, -- Заголовок (null - не отображать) + NLINE_HEIGHT in number := NCYCLOGRAM_LINE_HEIGHT, -- Высота строк + NZOOM in number := NCYCLOGRAM_ZOOM_DEFAULT, -- Текущий масштаб (см. константы NCYCLOGRAM_ZOOM_*) + BZOOM_BAR in boolean := true -- Обображать панель масштабирования + ) return TCYCLOGRAM -- Результат работы + is + RRES TCYCLOGRAM; -- Буфер для результата + begin + /* Формируем объект */ + RRES.STITLE := STITLE; + RRES.NLINE_HEIGHT := NLINE_HEIGHT; + RRES.NZOOM := NZOOM; + RRES.BZOOM_BAR := BZOOM_BAR; + /* Возвращаем результат */ + return RRES; + end TCYCLOGRAM_MAKE; + + /* Добавление колонки в циклограмму */ + procedure TCYCLOGRAM_ADD_COLUMN + ( + RCYCLOGRAM in out nocopy TCYCLOGRAM, -- Описание циклограммы + SNAME in varchar2, -- Заголовок колонки + NSTART in number, -- Позиция начала колонки + NEND in number, -- Позиция конца колонки + BCLEAR in boolean := false -- Флаг очистки коллекции колонок (false - не очищать, true - очистить коллекцию перед добавлением) + ) + is + begin + /* Формируем описание и добавляем в коллекцию колонок */ + TCYCLOGRAM_COLUMNS_ADD(RCOLUMNS => RCYCLOGRAM.RCOLUMNS, + SNAME => SNAME, + NSTART => NSTART, + NEND => NEND, + BCLEAR => BCLEAR); + end TCYCLOGRAM_ADD_COLUMN; + + /* Добавление группы в циклограмму */ + procedure TCYCLOGRAM_ADD_GROUP + ( + RCYCLOGRAM in out nocopy TCYCLOGRAM, -- Описание циклограммы + SNAME in varchar2, -- Имя группы + BHEADER_VISIBLE in boolean := true, -- Признак отображения заголовка группы + NHEADER_HEIGHT in number := NCYCLOGRAM_GROUP_DEF_HEIGHT, -- Высота заголовка группы + NHEADER_WIDTH in number := NCYCLOGRAM_GROUP_DEF_WIDTH, -- Ширина заголовка группы + SHIGHLIGHT_COLOR in varchar2 := null, -- Цвет при наведении (null - использовать цвет по умолчанию из стилей, формат - HTML-цвет, #RRGGBBAA) + BCLEAR in boolean := false -- Флаг очистки коллекции групп (false - не очищать, true - очистить коллекцию перед добавлением) + ) + is + begin + /* Проверяем наличие группы в циклограмме */ + if (TCYCLOGRAM_GROUP_FIND(RGROUPS => RCYCLOGRAM.RGROUPS, SNAME => SNAME).SNAME is null) then + /* Инициализируем коллекцию если необходимо */ + if ((RCYCLOGRAM.RGROUPS is null) or (BCLEAR)) then + RCYCLOGRAM.RGROUPS := TCYCLOGRAM_GROUPS(); + end if; + /* Добавляем элемент */ + RCYCLOGRAM.RGROUPS.EXTEND(); + RCYCLOGRAM.RGROUPS(RCYCLOGRAM.RGROUPS.LAST) := TCYCLOGRAM_GROUP_MAKE(SNAME => SNAME, + BHEADER_VISIBLE => BHEADER_VISIBLE, + NHEADER_HEIGHT => NHEADER_HEIGHT, + NHEADER_WIDTH => NHEADER_WIDTH, + SHIGHLIGHT_COLOR => SHIGHLIGHT_COLOR); + end if; + end TCYCLOGRAM_ADD_GROUP; + + /* Добавление задачи в циклограммы */ + procedure TCYCLOGRAM_ADD_TASK + ( + RCYCLOGRAM in out nocopy TCYCLOGRAM, -- Описание циклограммы + RTASK in TCYCLOGRAM_TASK, -- Задача циклограммы + BCLEAR in boolean := false -- Флаг очистки коллекции задач (false - не очищать, true - очистить коллекцию перед добавлением) + ) + is + begin + /* Инициализируем коллекцию если необходимо */ + if ((RCYCLOGRAM.RTASKS is null) or (BCLEAR)) then + RCYCLOGRAM.RTASKS := TCYCLOGRAM_TASKS(); + end if; + /* Если у задачи указана группа */ + if (RTASK.SGROUP is not null) then + /* Проверяем наличие группы в циклограмме */ + if (TCYCLOGRAM_GROUP_FIND(RGROUPS => RCYCLOGRAM.RGROUPS, SNAME => RTASK.SGROUP).SNAME is null) then + P_EXCEPTION(0, 'Группа "%s" циклограммы не зарегистрирована.', RTASK.SGROUP); + end if; + end if; + /* Добавляем элемент */ + RCYCLOGRAM.RTASKS.EXTEND(); + RCYCLOGRAM.RTASKS(RCYCLOGRAM.RTASKS.LAST) := RTASK; + end TCYCLOGRAM_ADD_TASK; + + /* Добавление описания атрибута задачи циклограммы */ + procedure TCYCLOGRAM_ADD_TASK_ATTR + ( + RCYCLOGRAM in out nocopy TCYCLOGRAM, -- Описание циклограммы + SNAME in varchar2, -- Наименование + SCAPTION in varchar2, -- Заголовок + BVISIBLE boolean := true, -- Разрешить отображение + BCLEAR in boolean := false -- Флаг очистки коллекции атрибутов (false - не очищать, true - очистить коллекцию перед добавлением) + ) + is + begin + /* Проверим наименование */ + TCYCLOGRAM_TASK_ATTR_NAME_CH(SNAME => SNAME); + /* Проверим, что такого ещё нет */ + if (TCYCLOGRAM_TASK_ATTR_FIND(RTASK_ATTRS => RCYCLOGRAM.RTASK_ATTRS, SNAME => SNAME).SNAME is not null) then + P_EXCEPTION(0, + 'Атрибут "%s" задачи циклограммы уже зарегистрирован.', + SNAME); + end if; + /* Инициализируем коллекцию если необходимо */ + if ((RCYCLOGRAM.RTASK_ATTRS is null) or (BCLEAR)) then + RCYCLOGRAM.RTASK_ATTRS := TCYCLOGRAM_TASK_ATTRS(); + end if; + /* Добавляем элемент */ + RCYCLOGRAM.RTASK_ATTRS.EXTEND(); + RCYCLOGRAM.RTASK_ATTRS(RCYCLOGRAM.RTASK_ATTRS.LAST).SNAME := SNAME; + RCYCLOGRAM.RTASK_ATTRS(RCYCLOGRAM.RTASK_ATTRS.LAST).SCAPTION := SCAPTION; + RCYCLOGRAM.RTASK_ATTRS(RCYCLOGRAM.RTASK_ATTRS.LAST).BVISIBLE := BVISIBLE; + end TCYCLOGRAM_ADD_TASK_ATTR; + + /* Сериализация описания циклограммы */ + procedure TCYCLOGRAM_DEF_TO_XML + ( + RCYCLOGRAM in TCYCLOGRAM -- Описание циклограммы + ) + is + begin + /* Cтатические атрибуты заголовка */ + PKG_XFAST.ATTR(SNAME => SRESP_ATTR_TITLE, SVALUE => RCYCLOGRAM.STITLE); + PKG_XFAST.ATTR(SNAME => SRESP_ATTR_CG_LINE_HEIGHT, NVALUE => RCYCLOGRAM.NLINE_HEIGHT); + PKG_XFAST.ATTR(SNAME => SRESP_ATTR_ZOOM, NVALUE => RCYCLOGRAM.NZOOM); + PKG_XFAST.ATTR(SNAME => SRESP_ATTR_ZOOM_BAR, BVALUE => RCYCLOGRAM.BZOOM_BAR); + /* Если есть динамические атрибуты */ + if ((RCYCLOGRAM.RTASK_ATTRS is not null) and (RCYCLOGRAM.RTASK_ATTRS.COUNT > 0)) then + /* Обходим динамические атрибуты задачи */ + for I in RCYCLOGRAM.RTASK_ATTRS.FIRST .. RCYCLOGRAM.RTASK_ATTRS.LAST + loop + /* Открываем динамический атрибут задачи */ + PKG_XFAST.DOWN_NODE(SNAME => SRESP_ATTR_TASK_ATTRIBUTES); + /* Наполняем его атрибутами */ + PKG_XFAST.ATTR(SNAME => SRESP_ATTR_NAME, SVALUE => RCYCLOGRAM.RTASK_ATTRS(I).SNAME); + PKG_XFAST.ATTR(SNAME => SRESP_ATTR_CAPTION, SVALUE => RCYCLOGRAM.RTASK_ATTRS(I).SCAPTION); + PKG_XFAST.ATTR(SNAME => SRESP_ATTR_VISIBLE, BVALUE => RCYCLOGRAM.RTASK_ATTRS(I).BVISIBLE); + /* Закрываем динамический атрибут задачи */ + PKG_XFAST.UP(); + end loop; + end if; + /* Обходим колонки циклограммы */ + if ((RCYCLOGRAM.RCOLUMNS is not null) and (RCYCLOGRAM.RCOLUMNS.COUNT > 0)) then + for I in RCYCLOGRAM.RCOLUMNS.FIRST .. RCYCLOGRAM.RCOLUMNS.LAST + loop + /* Открываем описание колонки */ + PKG_XFAST.DOWN_NODE(SNAME => SRESP_ATTR_COLUMNS); + /* Атрибуты колонки */ + PKG_XFAST.ATTR(SNAME => SRESP_ATTR_NAME, SVALUE => RCYCLOGRAM.RCOLUMNS(I).SNAME); + PKG_XFAST.ATTR(SNAME => SRESP_ATTR_START, NVALUE => RCYCLOGRAM.RCOLUMNS(I).NSTART); + PKG_XFAST.ATTR(SNAME => SRESP_ATTR_END, NVALUE => RCYCLOGRAM.RCOLUMNS(I).NEND); + /* Закрываем описание колонки */ + PKG_XFAST.UP(); + end loop; + end if; + end TCYCLOGRAM_DEF_TO_XML; + + /* Сериализация циклограммы */ + function TCYCLOGRAM_TO_XML + ( + RCYCLOGRAM in TCYCLOGRAM, -- Описание циклограммы + NINCLUDE_DEF in number := 1 -- Включить описание колонок (0 - нет, 1 - да) + ) return clob -- XML-описание + is + CRES clob; -- Буфер для результата + begin + /* Начинаем формирование XML */ + PKG_XFAST.PROLOGUE(ITYPE => PKG_XFAST.CONTENT_); + /* Открываем корень */ + PKG_XFAST.DOWN_NODE(SNAME => SRESP_TAG_XDATA); + /* Открываем циклограмму */ + PKG_XFAST.DOWN_NODE(SNAME => SRESP_TAG_XCYCLOGRAM); + /* Если необходимо включить описание циклограммы */ + if (NINCLUDE_DEF = 1) then + TCYCLOGRAM_DEF_TO_XML(RCYCLOGRAM => RCYCLOGRAM); + end if; + /* Формируем описание групп циклограммы */ + TCYCLOGRAM_GROUPS_TO_XML(RGROUPS => RCYCLOGRAM.RGROUPS); + /* Описываем задачи */ + TCYCLOGRAM_TASKS_TO_XML(RTASKS => RCYCLOGRAM.RTASKS); + /* Закрываем циклограмму */ + PKG_XFAST.UP(); + /* Закрываем корень */ + PKG_XFAST.UP(); + /* Сериализуем */ + CRES := PKG_XFAST.SERIALIZE_TO_CLOB(); + /* Завершаем формирование XML */ + PKG_XFAST.EPILOGUE(); + /* Возвращаем полученное */ + return CRES; + exception + when others then + /* Завершаем формирование XML */ + PKG_XFAST.EPILOGUE(); + /* Вернем ошибку */ + PKG_STATE.DIAGNOSTICS_STACKED(); + P_EXCEPTION(0, PKG_STATE.SQL_ERRM()); + end TCYCLOGRAM_TO_XML; + end PKG_P8PANELS_VISUAL; / -- 2.34.1 From 607e5d9ddcd2b0dd3bee5b3b4e2a2d61bb9ae816 Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Wed, 20 Nov 2024 16:05:44 +0300 Subject: [PATCH 5/7] =?UTF-8?q?WEB=20APP:=20=D0=A1=D0=B2=D0=B5=D0=B6=D0=B0?= =?UTF-8?q?=D1=8F=20=D1=81=D0=B1=D0=BE=D1=80=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dist/p8-panels.js | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/dist/p8-panels.js b/dist/p8-panels.js index d323425..8c60a27 100644 --- a/dist/p8-panels.js +++ b/dist/p8-panels.js @@ -15,7 +15,7 @@ \***********************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { -eval("var map = {\n\t\"./dummy\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/dummy\": \"./app/panels/dummy/dummy.js\",\n\t\"./dummy/dummy.js\": \"./app/panels/dummy/dummy.js\",\n\t\"./dummy/index\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/index.js\": \"./app/panels/dummy/index.js\",\n\t\"./eqs_prfrm\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/eqs_prfrm\": \"./app/panels/eqs_prfrm/eqs_prfrm.js\",\n\t\"./eqs_prfrm/eqs_prfrm.js\": \"./app/panels/eqs_prfrm/eqs_prfrm.js\",\n\t\"./eqs_prfrm/filter\": \"./app/panels/eqs_prfrm/filter.js\",\n\t\"./eqs_prfrm/filter.js\": \"./app/panels/eqs_prfrm/filter.js\",\n\t\"./eqs_prfrm/filter_dialog\": \"./app/panels/eqs_prfrm/filter_dialog.js\",\n\t\"./eqs_prfrm/filter_dialog.js\": \"./app/panels/eqs_prfrm/filter_dialog.js\",\n\t\"./eqs_prfrm/filter_input_field\": \"./app/panels/eqs_prfrm/filter_input_field.js\",\n\t\"./eqs_prfrm/filter_input_field.js\": \"./app/panels/eqs_prfrm/filter_input_field.js\",\n\t\"./eqs_prfrm/hooks\": \"./app/panels/eqs_prfrm/hooks.js\",\n\t\"./eqs_prfrm/hooks.js\": \"./app/panels/eqs_prfrm/hooks.js\",\n\t\"./eqs_prfrm/index\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/index.js\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/layouts\": \"./app/panels/eqs_prfrm/layouts.js\",\n\t\"./eqs_prfrm/layouts.js\": \"./app/panels/eqs_prfrm/layouts.js\",\n\t\"./mech_rec_assembly_mon\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/components/plan_detail\": \"./app/panels/mech_rec_assembly_mon/components/plan_detail.js\",\n\t\"./mech_rec_assembly_mon/components/plan_detail.js\": \"./app/panels/mech_rec_assembly_mon/components/plan_detail.js\",\n\t\"./mech_rec_assembly_mon/components/plans_list\": \"./app/panels/mech_rec_assembly_mon/components/plans_list.js\",\n\t\"./mech_rec_assembly_mon/components/plans_list.js\": \"./app/panels/mech_rec_assembly_mon/components/plans_list.js\",\n\t\"./mech_rec_assembly_mon/components/plans_list_item\": \"./app/panels/mech_rec_assembly_mon/components/plans_list_item.js\",\n\t\"./mech_rec_assembly_mon/components/plans_list_item.js\": \"./app/panels/mech_rec_assembly_mon/components/plans_list_item.js\",\n\t\"./mech_rec_assembly_mon/components/progress_box\": \"./app/panels/mech_rec_assembly_mon/components/progress_box.js\",\n\t\"./mech_rec_assembly_mon/components/progress_box.js\": \"./app/panels/mech_rec_assembly_mon/components/progress_box.js\",\n\t\"./mech_rec_assembly_mon/hooks\": \"./app/panels/mech_rec_assembly_mon/hooks.js\",\n\t\"./mech_rec_assembly_mon/hooks.js\": \"./app/panels/mech_rec_assembly_mon/hooks.js\",\n\t\"./mech_rec_assembly_mon/index\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/index.js\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/mech_rec_assembly_mon\": \"./app/panels/mech_rec_assembly_mon/mech_rec_assembly_mon.js\",\n\t\"./mech_rec_assembly_mon/mech_rec_assembly_mon.js\": \"./app/panels/mech_rec_assembly_mon/mech_rec_assembly_mon.js\",\n\t\"./mech_rec_assembly_mon/styles/themes\": \"./app/panels/mech_rec_assembly_mon/styles/themes.js\",\n\t\"./mech_rec_assembly_mon/styles/themes.js\": \"./app/panels/mech_rec_assembly_mon/styles/themes.js\",\n\t\"./mech_rec_cost_jobs_manage\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/fcjobssp\": \"./app/panels/mech_rec_cost_jobs_manage/fcjobssp.js\",\n\t\"./mech_rec_cost_jobs_manage/fcjobssp.js\": \"./app/panels/mech_rec_cost_jobs_manage/fcjobssp.js\",\n\t\"./mech_rec_cost_jobs_manage/hooks\": \"./app/panels/mech_rec_cost_jobs_manage/hooks.js\",\n\t\"./mech_rec_cost_jobs_manage/hooks.js\": \"./app/panels/mech_rec_cost_jobs_manage/hooks.js\",\n\t\"./mech_rec_cost_jobs_manage/index\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/index.js\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage\": \"./app/panels/mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js\",\n\t\"./mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js\": \"./app/panels/mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js\",\n\t\"./mech_rec_cost_prod_plans\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/backend_dg\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/backend_dg.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/backend_dg.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/backend_dg.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcroutlst\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcroutlst.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcroutlst.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcroutlst.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/goodparties\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/goodparties.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/goodparties.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/goodparties.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/incomefromdeps\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\",\n\t\"./mech_rec_cost_prod_plans/hooks\": \"./app/panels/mech_rec_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_cost_prod_plans/hooks.js\": \"./app/panels/mech_rec_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_cost_prod_plans/index\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/index.js\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/mech_rec_cost_prod_plans\": \"./app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\",\n\t\"./mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\": \"./app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\",\n\t\"./mech_rec_dept_cost_jobs\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/components/filter\": \"./app/panels/mech_rec_dept_cost_jobs/components/filter.js\",\n\t\"./mech_rec_dept_cost_jobs/components/filter.js\": \"./app/panels/mech_rec_dept_cost_jobs/components/filter.js\",\n\t\"./mech_rec_dept_cost_jobs/components/ins_department_dg\": \"./app/panels/mech_rec_dept_cost_jobs/components/ins_department_dg.js\",\n\t\"./mech_rec_dept_cost_jobs/components/ins_department_dg.js\": \"./app/panels/mech_rec_dept_cost_jobs/components/ins_department_dg.js\",\n\t\"./mech_rec_dept_cost_jobs/hooks\": \"./app/panels/mech_rec_dept_cost_jobs/hooks.js\",\n\t\"./mech_rec_dept_cost_jobs/hooks.js\": \"./app/panels/mech_rec_dept_cost_jobs/hooks.js\",\n\t\"./mech_rec_dept_cost_jobs/index\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/index.js\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs\": \"./app/panels/mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js\",\n\t\"./mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js\": \"./app/panels/mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js\",\n\t\"./mech_rec_dept_cost_prod_plans\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlst\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlst.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlstsp\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlstsp.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlstsp.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlstsp.js\",\n\t\"./mech_rec_dept_cost_prod_plans/hooks\": \"./app/panels/mech_rec_dept_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_dept_cost_prod_plans/hooks.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_dept_cost_prod_plans/incomefromdeps\": \"./app/panels/mech_rec_dept_cost_prod_plans/incomefromdeps.js\",\n\t\"./mech_rec_dept_cost_prod_plans/incomefromdeps.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/incomefromdeps.js\",\n\t\"./mech_rec_dept_cost_prod_plans/index\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/index.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans\": \"./app/panels/mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js\",\n\t\"./mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js\",\n\t\"./mech_rec_help\": \"./app/panels/mech_rec_help/index.js\",\n\t\"./mech_rec_help/\": \"./app/panels/mech_rec_help/index.js\",\n\t\"./mech_rec_help/img/1_1.png\": \"./app/panels/mech_rec_help/img/1_1.png\",\n\t\"./mech_rec_help/img/1_2.png\": \"./app/panels/mech_rec_help/img/1_2.png\",\n\t\"./mech_rec_help/img/1_3.png\": \"./app/panels/mech_rec_help/img/1_3.png\",\n\t\"./mech_rec_help/img/1_4.png\": \"./app/panels/mech_rec_help/img/1_4.png\",\n\t\"./mech_rec_help/img/1_5.png\": \"./app/panels/mech_rec_help/img/1_5.png\",\n\t\"./mech_rec_help/img/21_1.png\": \"./app/panels/mech_rec_help/img/21_1.png\",\n\t\"./mech_rec_help/img/21_2.png\": \"./app/panels/mech_rec_help/img/21_2.png\",\n\t\"./mech_rec_help/img/21_3.png\": \"./app/panels/mech_rec_help/img/21_3.png\",\n\t\"./mech_rec_help/img/2_1.png\": \"./app/panels/mech_rec_help/img/2_1.png\",\n\t\"./mech_rec_help/img/2_2.png\": \"./app/panels/mech_rec_help/img/2_2.png\",\n\t\"./mech_rec_help/img/2_3.png\": \"./app/panels/mech_rec_help/img/2_3.png\",\n\t\"./mech_rec_help/img/2_4.png\": \"./app/panels/mech_rec_help/img/2_4.png\",\n\t\"./mech_rec_help/img/2_5.png\": \"./app/panels/mech_rec_help/img/2_5.png\",\n\t\"./mech_rec_help/img/31_1.png\": \"./app/panels/mech_rec_help/img/31_1.png\",\n\t\"./mech_rec_help/img/31_10.png\": \"./app/panels/mech_rec_help/img/31_10.png\",\n\t\"./mech_rec_help/img/31_2.png\": \"./app/panels/mech_rec_help/img/31_2.png\",\n\t\"./mech_rec_help/img/31_3.png\": \"./app/panels/mech_rec_help/img/31_3.png\",\n\t\"./mech_rec_help/img/31_4.png\": \"./app/panels/mech_rec_help/img/31_4.png\",\n\t\"./mech_rec_help/img/31_5.png\": \"./app/panels/mech_rec_help/img/31_5.png\",\n\t\"./mech_rec_help/img/31_6.png\": \"./app/panels/mech_rec_help/img/31_6.png\",\n\t\"./mech_rec_help/img/31_7.png\": \"./app/panels/mech_rec_help/img/31_7.png\",\n\t\"./mech_rec_help/img/31_8.png\": \"./app/panels/mech_rec_help/img/31_8.png\",\n\t\"./mech_rec_help/img/31_9.png\": \"./app/panels/mech_rec_help/img/31_9.png\",\n\t\"./mech_rec_help/img/32_1.png\": \"./app/panels/mech_rec_help/img/32_1.png\",\n\t\"./mech_rec_help/img/32_2.png\": \"./app/panels/mech_rec_help/img/32_2.png\",\n\t\"./mech_rec_help/img/32_3.png\": \"./app/panels/mech_rec_help/img/32_3.png\",\n\t\"./mech_rec_help/img/33_1.png\": \"./app/panels/mech_rec_help/img/33_1.png\",\n\t\"./mech_rec_help/img/33_2.png\": \"./app/panels/mech_rec_help/img/33_2.png\",\n\t\"./mech_rec_help/img/33_3.png\": \"./app/panels/mech_rec_help/img/33_3.png\",\n\t\"./mech_rec_help/img/33_4.png\": \"./app/panels/mech_rec_help/img/33_4.png\",\n\t\"./mech_rec_help/img/34_1.png\": \"./app/panels/mech_rec_help/img/34_1.png\",\n\t\"./mech_rec_help/img/34_2.png\": \"./app/panels/mech_rec_help/img/34_2.png\",\n\t\"./mech_rec_help/img/34_3.png\": \"./app/panels/mech_rec_help/img/34_3.png\",\n\t\"./mech_rec_help/img/34_4.png\": \"./app/panels/mech_rec_help/img/34_4.png\",\n\t\"./mech_rec_help/img/34_5.png\": \"./app/panels/mech_rec_help/img/34_5.png\",\n\t\"./mech_rec_help/img/34_6.png\": \"./app/panels/mech_rec_help/img/34_6.png\",\n\t\"./mech_rec_help/img/34_7.png\": \"./app/panels/mech_rec_help/img/34_7.png\",\n\t\"./mech_rec_help/img/34_8.png\": \"./app/panels/mech_rec_help/img/34_8.png\",\n\t\"./mech_rec_help/img/35_1.png\": \"./app/panels/mech_rec_help/img/35_1.png\",\n\t\"./mech_rec_help/img/3_1.png\": \"./app/panels/mech_rec_help/img/3_1.png\",\n\t\"./mech_rec_help/img/410_1.png\": \"./app/panels/mech_rec_help/img/410_1.png\",\n\t\"./mech_rec_help/img/410_2.png\": \"./app/panels/mech_rec_help/img/410_2.png\",\n\t\"./mech_rec_help/img/410_3.png\": \"./app/panels/mech_rec_help/img/410_3.png\",\n\t\"./mech_rec_help/img/410_4.png\": \"./app/panels/mech_rec_help/img/410_4.png\",\n\t\"./mech_rec_help/img/410_5.png\": \"./app/panels/mech_rec_help/img/410_5.png\",\n\t\"./mech_rec_help/img/410_6.png\": \"./app/panels/mech_rec_help/img/410_6.png\",\n\t\"./mech_rec_help/img/410_7.png\": \"./app/panels/mech_rec_help/img/410_7.png\",\n\t\"./mech_rec_help/img/411_1.png\": \"./app/panels/mech_rec_help/img/411_1.png\",\n\t\"./mech_rec_help/img/411_2.png\": \"./app/panels/mech_rec_help/img/411_2.png\",\n\t\"./mech_rec_help/img/411_3.png\": \"./app/panels/mech_rec_help/img/411_3.png\",\n\t\"./mech_rec_help/img/411_4.png\": \"./app/panels/mech_rec_help/img/411_4.png\",\n\t\"./mech_rec_help/img/412_1.png\": \"./app/panels/mech_rec_help/img/412_1.png\",\n\t\"./mech_rec_help/img/412_2.png\": \"./app/panels/mech_rec_help/img/412_2.png\",\n\t\"./mech_rec_help/img/412_3.png\": \"./app/panels/mech_rec_help/img/412_3.png\",\n\t\"./mech_rec_help/img/412_4.png\": \"./app/panels/mech_rec_help/img/412_4.png\",\n\t\"./mech_rec_help/img/413_1.png\": \"./app/panels/mech_rec_help/img/413_1.png\",\n\t\"./mech_rec_help/img/413_2.png\": \"./app/panels/mech_rec_help/img/413_2.png\",\n\t\"./mech_rec_help/img/413_3.png\": \"./app/panels/mech_rec_help/img/413_3.png\",\n\t\"./mech_rec_help/img/413_4.png\": \"./app/panels/mech_rec_help/img/413_4.png\",\n\t\"./mech_rec_help/img/413_5.png\": \"./app/panels/mech_rec_help/img/413_5.png\",\n\t\"./mech_rec_help/img/414_1.png\": \"./app/panels/mech_rec_help/img/414_1.png\",\n\t\"./mech_rec_help/img/414_2.png\": \"./app/panels/mech_rec_help/img/414_2.png\",\n\t\"./mech_rec_help/img/414_3.png\": \"./app/panels/mech_rec_help/img/414_3.png\",\n\t\"./mech_rec_help/img/41_1.png\": \"./app/panels/mech_rec_help/img/41_1.png\",\n\t\"./mech_rec_help/img/41_10.png\": \"./app/panels/mech_rec_help/img/41_10.png\",\n\t\"./mech_rec_help/img/41_11.png\": \"./app/panels/mech_rec_help/img/41_11.png\",\n\t\"./mech_rec_help/img/41_12.png\": \"./app/panels/mech_rec_help/img/41_12.png\",\n\t\"./mech_rec_help/img/41_2.png\": \"./app/panels/mech_rec_help/img/41_2.png\",\n\t\"./mech_rec_help/img/41_3.png\": \"./app/panels/mech_rec_help/img/41_3.png\",\n\t\"./mech_rec_help/img/41_4.png\": \"./app/panels/mech_rec_help/img/41_4.png\",\n\t\"./mech_rec_help/img/41_5.png\": \"./app/panels/mech_rec_help/img/41_5.png\",\n\t\"./mech_rec_help/img/41_6.png\": \"./app/panels/mech_rec_help/img/41_6.png\",\n\t\"./mech_rec_help/img/41_7.png\": \"./app/panels/mech_rec_help/img/41_7.png\",\n\t\"./mech_rec_help/img/41_8.png\": \"./app/panels/mech_rec_help/img/41_8.png\",\n\t\"./mech_rec_help/img/41_9.png\": \"./app/panels/mech_rec_help/img/41_9.png\",\n\t\"./mech_rec_help/img/42_1.png\": \"./app/panels/mech_rec_help/img/42_1.png\",\n\t\"./mech_rec_help/img/42_2.png\": \"./app/panels/mech_rec_help/img/42_2.png\",\n\t\"./mech_rec_help/img/42_3.png\": \"./app/panels/mech_rec_help/img/42_3.png\",\n\t\"./mech_rec_help/img/42_4.png\": \"./app/panels/mech_rec_help/img/42_4.png\",\n\t\"./mech_rec_help/img/43_1.png\": \"./app/panels/mech_rec_help/img/43_1.png\",\n\t\"./mech_rec_help/img/43_2.png\": \"./app/panels/mech_rec_help/img/43_2.png\",\n\t\"./mech_rec_help/img/43_3.png\": \"./app/panels/mech_rec_help/img/43_3.png\",\n\t\"./mech_rec_help/img/43_4.png\": \"./app/panels/mech_rec_help/img/43_4.png\",\n\t\"./mech_rec_help/img/43_5.png\": \"./app/panels/mech_rec_help/img/43_5.png\",\n\t\"./mech_rec_help/img/43_6.png\": \"./app/panels/mech_rec_help/img/43_6.png\",\n\t\"./mech_rec_help/img/43_7.png\": \"./app/panels/mech_rec_help/img/43_7.png\",\n\t\"./mech_rec_help/img/43_8.png\": \"./app/panels/mech_rec_help/img/43_8.png\",\n\t\"./mech_rec_help/img/44_1.png\": \"./app/panels/mech_rec_help/img/44_1.png\",\n\t\"./mech_rec_help/img/44_10.png\": \"./app/panels/mech_rec_help/img/44_10.png\",\n\t\"./mech_rec_help/img/44_2.png\": \"./app/panels/mech_rec_help/img/44_2.png\",\n\t\"./mech_rec_help/img/44_3.png\": \"./app/panels/mech_rec_help/img/44_3.png\",\n\t\"./mech_rec_help/img/44_4.png\": \"./app/panels/mech_rec_help/img/44_4.png\",\n\t\"./mech_rec_help/img/44_5.png\": \"./app/panels/mech_rec_help/img/44_5.png\",\n\t\"./mech_rec_help/img/44_6.png\": \"./app/panels/mech_rec_help/img/44_6.png\",\n\t\"./mech_rec_help/img/44_7.png\": \"./app/panels/mech_rec_help/img/44_7.png\",\n\t\"./mech_rec_help/img/44_8.png\": \"./app/panels/mech_rec_help/img/44_8.png\",\n\t\"./mech_rec_help/img/44_9.png\": \"./app/panels/mech_rec_help/img/44_9.png\",\n\t\"./mech_rec_help/img/45_1.png\": \"./app/panels/mech_rec_help/img/45_1.png\",\n\t\"./mech_rec_help/img/45_10.png\": \"./app/panels/mech_rec_help/img/45_10.png\",\n\t\"./mech_rec_help/img/45_2.png\": \"./app/panels/mech_rec_help/img/45_2.png\",\n\t\"./mech_rec_help/img/45_3.png\": \"./app/panels/mech_rec_help/img/45_3.png\",\n\t\"./mech_rec_help/img/45_4.png\": \"./app/panels/mech_rec_help/img/45_4.png\",\n\t\"./mech_rec_help/img/45_5.png\": \"./app/panels/mech_rec_help/img/45_5.png\",\n\t\"./mech_rec_help/img/45_6.png\": \"./app/panels/mech_rec_help/img/45_6.png\",\n\t\"./mech_rec_help/img/45_7.png\": \"./app/panels/mech_rec_help/img/45_7.png\",\n\t\"./mech_rec_help/img/45_8.png\": \"./app/panels/mech_rec_help/img/45_8.png\",\n\t\"./mech_rec_help/img/45_9.png\": \"./app/panels/mech_rec_help/img/45_9.png\",\n\t\"./mech_rec_help/img/46_1.png\": \"./app/panels/mech_rec_help/img/46_1.png\",\n\t\"./mech_rec_help/img/46_2.png\": \"./app/panels/mech_rec_help/img/46_2.png\",\n\t\"./mech_rec_help/img/46_3.png\": \"./app/panels/mech_rec_help/img/46_3.png\",\n\t\"./mech_rec_help/img/46_4.png\": \"./app/panels/mech_rec_help/img/46_4.png\",\n\t\"./mech_rec_help/img/46_5.png\": \"./app/panels/mech_rec_help/img/46_5.png\",\n\t\"./mech_rec_help/img/46_6.png\": \"./app/panels/mech_rec_help/img/46_6.png\",\n\t\"./mech_rec_help/img/47_1.png\": \"./app/panels/mech_rec_help/img/47_1.png\",\n\t\"./mech_rec_help/img/47_10.png\": \"./app/panels/mech_rec_help/img/47_10.png\",\n\t\"./mech_rec_help/img/47_11.png\": \"./app/panels/mech_rec_help/img/47_11.png\",\n\t\"./mech_rec_help/img/47_12.png\": \"./app/panels/mech_rec_help/img/47_12.png\",\n\t\"./mech_rec_help/img/47_2.png\": \"./app/panels/mech_rec_help/img/47_2.png\",\n\t\"./mech_rec_help/img/47_3.png\": \"./app/panels/mech_rec_help/img/47_3.png\",\n\t\"./mech_rec_help/img/47_4.png\": \"./app/panels/mech_rec_help/img/47_4.png\",\n\t\"./mech_rec_help/img/47_5.png\": \"./app/panels/mech_rec_help/img/47_5.png\",\n\t\"./mech_rec_help/img/47_6.png\": \"./app/panels/mech_rec_help/img/47_6.png\",\n\t\"./mech_rec_help/img/47_7.png\": \"./app/panels/mech_rec_help/img/47_7.png\",\n\t\"./mech_rec_help/img/47_8.png\": \"./app/panels/mech_rec_help/img/47_8.png\",\n\t\"./mech_rec_help/img/47_9.png\": \"./app/panels/mech_rec_help/img/47_9.png\",\n\t\"./mech_rec_help/img/48_1.png\": \"./app/panels/mech_rec_help/img/48_1.png\",\n\t\"./mech_rec_help/img/48_2.png\": \"./app/panels/mech_rec_help/img/48_2.png\",\n\t\"./mech_rec_help/img/48_3.png\": \"./app/panels/mech_rec_help/img/48_3.png\",\n\t\"./mech_rec_help/img/48_4.png\": \"./app/panels/mech_rec_help/img/48_4.png\",\n\t\"./mech_rec_help/img/49_1.png\": \"./app/panels/mech_rec_help/img/49_1.png\",\n\t\"./mech_rec_help/img/49_2.png\": \"./app/panels/mech_rec_help/img/49_2.png\",\n\t\"./mech_rec_help/img/49_3.png\": \"./app/panels/mech_rec_help/img/49_3.png\",\n\t\"./mech_rec_help/img/add1_1.png\": \"./app/panels/mech_rec_help/img/add1_1.png\",\n\t\"./mech_rec_help/img/add1_2.png\": \"./app/panels/mech_rec_help/img/add1_2.png\",\n\t\"./mech_rec_help/img/add1_3.png\": \"./app/panels/mech_rec_help/img/add1_3.png\",\n\t\"./mech_rec_help/img/add1_4.png\": \"./app/panels/mech_rec_help/img/add1_4.png\",\n\t\"./mech_rec_help/img/add1_5.png\": \"./app/panels/mech_rec_help/img/add1_5.png\",\n\t\"./mech_rec_help/img/add1_6.png\": \"./app/panels/mech_rec_help/img/add1_6.png\",\n\t\"./mech_rec_help/img/add1_7.png\": \"./app/panels/mech_rec_help/img/add1_7.png\",\n\t\"./mech_rec_help/img/add1_8.png\": \"./app/panels/mech_rec_help/img/add1_8.png\",\n\t\"./mech_rec_help/img/add1_9.png\": \"./app/panels/mech_rec_help/img/add1_9.png\",\n\t\"./mech_rec_help/index\": \"./app/panels/mech_rec_help/index.js\",\n\t\"./mech_rec_help/index.js\": \"./app/panels/mech_rec_help/index.js\",\n\t\"./mech_rec_help/mech_rec_help\": \"./app/panels/mech_rec_help/mech_rec_help.js\",\n\t\"./mech_rec_help/mech_rec_help.js\": \"./app/panels/mech_rec_help/mech_rec_help.js\",\n\t\"./prj_fin\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/index\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/index.js\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/layouts\": \"./app/panels/prj_fin/layouts.js\",\n\t\"./prj_fin/layouts.js\": \"./app/panels/prj_fin/layouts.js\",\n\t\"./prj_fin/prj_fin\": \"./app/panels/prj_fin/prj_fin.js\",\n\t\"./prj_fin/prj_fin.js\": \"./app/panels/prj_fin/prj_fin.js\",\n\t\"./prj_fin/projects\": \"./app/panels/prj_fin/projects.js\",\n\t\"./prj_fin/projects.js\": \"./app/panels/prj_fin/projects.js\",\n\t\"./prj_fin/stage_arts\": \"./app/panels/prj_fin/stage_arts.js\",\n\t\"./prj_fin/stage_arts.js\": \"./app/panels/prj_fin/stage_arts.js\",\n\t\"./prj_fin/stage_contracts\": \"./app/panels/prj_fin/stage_contracts.js\",\n\t\"./prj_fin/stage_contracts.js\": \"./app/panels/prj_fin/stage_contracts.js\",\n\t\"./prj_fin/stages\": \"./app/panels/prj_fin/stages.js\",\n\t\"./prj_fin/stages.js\": \"./app/panels/prj_fin/stages.js\",\n\t\"./prj_graph\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/index\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/index.js\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/layouts\": \"./app/panels/prj_graph/layouts.js\",\n\t\"./prj_graph/layouts.js\": \"./app/panels/prj_graph/layouts.js\",\n\t\"./prj_graph/prj_graph\": \"./app/panels/prj_graph/prj_graph.js\",\n\t\"./prj_graph/prj_graph.js\": \"./app/panels/prj_graph/prj_graph.js\",\n\t\"./prj_help\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/img/21_1.png\": \"./app/panels/prj_help/img/21_1.png\",\n\t\"./prj_help/img/21_2.png\": \"./app/panels/prj_help/img/21_2.png\",\n\t\"./prj_help/img/21_3.png\": \"./app/panels/prj_help/img/21_3.png\",\n\t\"./prj_help/img/21_4.png\": \"./app/panels/prj_help/img/21_4.png\",\n\t\"./prj_help/img/21_5.png\": \"./app/panels/prj_help/img/21_5.png\",\n\t\"./prj_help/img/22_1.png\": \"./app/panels/prj_help/img/22_1.png\",\n\t\"./prj_help/img/22_2.png\": \"./app/panels/prj_help/img/22_2.png\",\n\t\"./prj_help/img/22_3.png\": \"./app/panels/prj_help/img/22_3.png\",\n\t\"./prj_help/img/23_1.png\": \"./app/panels/prj_help/img/23_1.png\",\n\t\"./prj_help/img/23_2.png\": \"./app/panels/prj_help/img/23_2.png\",\n\t\"./prj_help/img/24_1.png\": \"./app/panels/prj_help/img/24_1.png\",\n\t\"./prj_help/img/24_2.png\": \"./app/panels/prj_help/img/24_2.png\",\n\t\"./prj_help/img/24_3.png\": \"./app/panels/prj_help/img/24_3.png\",\n\t\"./prj_help/img/24_4.png\": \"./app/panels/prj_help/img/24_4.png\",\n\t\"./prj_help/img/24_5.png\": \"./app/panels/prj_help/img/24_5.png\",\n\t\"./prj_help/img/3_1.png\": \"./app/panels/prj_help/img/3_1.png\",\n\t\"./prj_help/img/3_2.png\": \"./app/panels/prj_help/img/3_2.png\",\n\t\"./prj_help/img/3_3.png\": \"./app/panels/prj_help/img/3_3.png\",\n\t\"./prj_help/img/3_4.png\": \"./app/panels/prj_help/img/3_4.png\",\n\t\"./prj_help/img/3_5.png\": \"./app/panels/prj_help/img/3_5.png\",\n\t\"./prj_help/img/3_6.png\": \"./app/panels/prj_help/img/3_6.png\",\n\t\"./prj_help/img/41_1.png\": \"./app/panels/prj_help/img/41_1.png\",\n\t\"./prj_help/img/41_2.png\": \"./app/panels/prj_help/img/41_2.png\",\n\t\"./prj_help/img/42_1.png\": \"./app/panels/prj_help/img/42_1.png\",\n\t\"./prj_help/img/42_2.png\": \"./app/panels/prj_help/img/42_2.png\",\n\t\"./prj_help/img/43_1.png\": \"./app/panels/prj_help/img/43_1.png\",\n\t\"./prj_help/img/43_2.png\": \"./app/panels/prj_help/img/43_2.png\",\n\t\"./prj_help/img/43_3.png\": \"./app/panels/prj_help/img/43_3.png\",\n\t\"./prj_help/img/43_4.png\": \"./app/panels/prj_help/img/43_4.png\",\n\t\"./prj_help/img/44_1.png\": \"./app/panels/prj_help/img/44_1.png\",\n\t\"./prj_help/img/44_2.png\": \"./app/panels/prj_help/img/44_2.png\",\n\t\"./prj_help/img/44_3.png\": \"./app/panels/prj_help/img/44_3.png\",\n\t\"./prj_help/img/44_4.png\": \"./app/panels/prj_help/img/44_4.png\",\n\t\"./prj_help/img/45_1.png\": \"./app/panels/prj_help/img/45_1.png\",\n\t\"./prj_help/img/46_1.png\": \"./app/panels/prj_help/img/46_1.png\",\n\t\"./prj_help/img/47_1.png\": \"./app/panels/prj_help/img/47_1.png\",\n\t\"./prj_help/img/71_1.png\": \"./app/panels/prj_help/img/71_1.png\",\n\t\"./prj_help/img/72_1.png\": \"./app/panels/prj_help/img/72_1.png\",\n\t\"./prj_help/img/72_2.png\": \"./app/panels/prj_help/img/72_2.png\",\n\t\"./prj_help/img/72_3.png\": \"./app/panels/prj_help/img/72_3.png\",\n\t\"./prj_help/img/74_1.png\": \"./app/panels/prj_help/img/74_1.png\",\n\t\"./prj_help/index\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/index.js\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/prj_help\": \"./app/panels/prj_help/prj_help.js\",\n\t\"./prj_help/prj_help.js\": \"./app/panels/prj_help/prj_help.js\",\n\t\"./prj_jobs\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/index\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/index.js\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/lab_fact_rpt_dtl\": \"./app/panels/prj_jobs/lab_fact_rpt_dtl.js\",\n\t\"./prj_jobs/lab_fact_rpt_dtl.js\": \"./app/panels/prj_jobs/lab_fact_rpt_dtl.js\",\n\t\"./prj_jobs/lab_plan_fot_dtl\": \"./app/panels/prj_jobs/lab_plan_fot_dtl.js\",\n\t\"./prj_jobs/lab_plan_fot_dtl.js\": \"./app/panels/prj_jobs/lab_plan_fot_dtl.js\",\n\t\"./prj_jobs/lab_plan_jobs_dtl\": \"./app/panels/prj_jobs/lab_plan_jobs_dtl.js\",\n\t\"./prj_jobs/lab_plan_jobs_dtl.js\": \"./app/panels/prj_jobs/lab_plan_jobs_dtl.js\",\n\t\"./prj_jobs/layouts\": \"./app/panels/prj_jobs/layouts.js\",\n\t\"./prj_jobs/layouts.js\": \"./app/panels/prj_jobs/layouts.js\",\n\t\"./prj_jobs/prj_jobs\": \"./app/panels/prj_jobs/prj_jobs.js\",\n\t\"./prj_jobs/prj_jobs.js\": \"./app/panels/prj_jobs/prj_jobs.js\",\n\t\"./prj_jobs/res_mon\": \"./app/panels/prj_jobs/res_mon.js\",\n\t\"./prj_jobs/res_mon.js\": \"./app/panels/prj_jobs/res_mon.js\",\n\t\"./rrp_conf_editor\": \"./app/panels/rrp_conf_editor/index.js\",\n\t\"./rrp_conf_editor/\": \"./app/panels/rrp_conf_editor/index.js\",\n\t\"./rrp_conf_editor/IUD/iud_form_dialog\": \"./app/panels/rrp_conf_editor/IUD/iud_form_dialog.js\",\n\t\"./rrp_conf_editor/IUD/iud_form_dialog.js\": \"./app/panels/rrp_conf_editor/IUD/iud_form_dialog.js\",\n\t\"./rrp_conf_editor/IUD/iud_form_text_field\": \"./app/panels/rrp_conf_editor/IUD/iud_form_text_field.js\",\n\t\"./rrp_conf_editor/IUD/iud_form_text_field.js\": \"./app/panels/rrp_conf_editor/IUD/iud_form_text_field.js\",\n\t\"./rrp_conf_editor/components/layouts\": \"./app/panels/rrp_conf_editor/components/layouts.js\",\n\t\"./rrp_conf_editor/components/layouts.js\": \"./app/panels/rrp_conf_editor/components/layouts.js\",\n\t\"./rrp_conf_editor/components/rrp_section\": \"./app/panels/rrp_conf_editor/components/rrp_section.js\",\n\t\"./rrp_conf_editor/components/rrp_section.js\": \"./app/panels/rrp_conf_editor/components/rrp_section.js\",\n\t\"./rrp_conf_editor/components/section_tab_panel\": \"./app/panels/rrp_conf_editor/components/section_tab_panel.js\",\n\t\"./rrp_conf_editor/components/section_tab_panel.js\": \"./app/panels/rrp_conf_editor/components/section_tab_panel.js\",\n\t\"./rrp_conf_editor/hooks\": \"./app/panels/rrp_conf_editor/hooks.js\",\n\t\"./rrp_conf_editor/hooks.js\": \"./app/panels/rrp_conf_editor/hooks.js\",\n\t\"./rrp_conf_editor/index\": \"./app/panels/rrp_conf_editor/index.js\",\n\t\"./rrp_conf_editor/index.js\": \"./app/panels/rrp_conf_editor/index.js\",\n\t\"./rrp_conf_editor/rrp_conf_editor\": \"./app/panels/rrp_conf_editor/rrp_conf_editor.js\",\n\t\"./rrp_conf_editor/rrp_conf_editor.js\": \"./app/panels/rrp_conf_editor/rrp_conf_editor.js\",\n\t\"./samples\": \"./app/panels/samples/index.js\",\n\t\"./samples/\": \"./app/panels/samples/index.js\",\n\t\"./samples/chart\": \"./app/panels/samples/chart.js\",\n\t\"./samples/chart.js\": \"./app/panels/samples/chart.js\",\n\t\"./samples/data_grid\": \"./app/panels/samples/data_grid.js\",\n\t\"./samples/data_grid.js\": \"./app/panels/samples/data_grid.js\",\n\t\"./samples/gantt\": \"./app/panels/samples/gantt.js\",\n\t\"./samples/gantt.js\": \"./app/panels/samples/gantt.js\",\n\t\"./samples/index\": \"./app/panels/samples/index.js\",\n\t\"./samples/index.js\": \"./app/panels/samples/index.js\",\n\t\"./samples/loader\": \"./app/panels/samples/loader.js\",\n\t\"./samples/loader.js\": \"./app/panels/samples/loader.js\",\n\t\"./samples/messages\": \"./app/panels/samples/messages.js\",\n\t\"./samples/messages.js\": \"./app/panels/samples/messages.js\",\n\t\"./samples/mui\": \"./app/panels/samples/mui.js\",\n\t\"./samples/mui.js\": \"./app/panels/samples/mui.js\",\n\t\"./samples/p8online\": \"./app/panels/samples/p8online.js\",\n\t\"./samples/p8online.js\": \"./app/panels/samples/p8online.js\",\n\t\"./samples/samples\": \"./app/panels/samples/samples.js\",\n\t\"./samples/samples.js\": \"./app/panels/samples/samples.js\",\n\t\"./samples/svg\": \"./app/panels/samples/svg.js\",\n\t\"./samples/svg.js\": \"./app/panels/samples/svg.js\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./app/panels sync recursive ^\\\\.\\\\/.*$\";\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/_sync_^\\.\\/.*$?"); +eval("var map = {\n\t\"./dummy\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/dummy\": \"./app/panels/dummy/dummy.js\",\n\t\"./dummy/dummy.js\": \"./app/panels/dummy/dummy.js\",\n\t\"./dummy/index\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/index.js\": \"./app/panels/dummy/index.js\",\n\t\"./eqs_prfrm\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/eqs_prfrm\": \"./app/panels/eqs_prfrm/eqs_prfrm.js\",\n\t\"./eqs_prfrm/eqs_prfrm.js\": \"./app/panels/eqs_prfrm/eqs_prfrm.js\",\n\t\"./eqs_prfrm/filter\": \"./app/panels/eqs_prfrm/filter.js\",\n\t\"./eqs_prfrm/filter.js\": \"./app/panels/eqs_prfrm/filter.js\",\n\t\"./eqs_prfrm/filter_dialog\": \"./app/panels/eqs_prfrm/filter_dialog.js\",\n\t\"./eqs_prfrm/filter_dialog.js\": \"./app/panels/eqs_prfrm/filter_dialog.js\",\n\t\"./eqs_prfrm/filter_input_field\": \"./app/panels/eqs_prfrm/filter_input_field.js\",\n\t\"./eqs_prfrm/filter_input_field.js\": \"./app/panels/eqs_prfrm/filter_input_field.js\",\n\t\"./eqs_prfrm/hooks\": \"./app/panels/eqs_prfrm/hooks.js\",\n\t\"./eqs_prfrm/hooks.js\": \"./app/panels/eqs_prfrm/hooks.js\",\n\t\"./eqs_prfrm/index\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/index.js\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/layouts\": \"./app/panels/eqs_prfrm/layouts.js\",\n\t\"./eqs_prfrm/layouts.js\": \"./app/panels/eqs_prfrm/layouts.js\",\n\t\"./mech_rec_assembly_mon\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/components/plan_detail\": \"./app/panels/mech_rec_assembly_mon/components/plan_detail.js\",\n\t\"./mech_rec_assembly_mon/components/plan_detail.js\": \"./app/panels/mech_rec_assembly_mon/components/plan_detail.js\",\n\t\"./mech_rec_assembly_mon/components/plans_list\": \"./app/panels/mech_rec_assembly_mon/components/plans_list.js\",\n\t\"./mech_rec_assembly_mon/components/plans_list.js\": \"./app/panels/mech_rec_assembly_mon/components/plans_list.js\",\n\t\"./mech_rec_assembly_mon/components/plans_list_item\": \"./app/panels/mech_rec_assembly_mon/components/plans_list_item.js\",\n\t\"./mech_rec_assembly_mon/components/plans_list_item.js\": \"./app/panels/mech_rec_assembly_mon/components/plans_list_item.js\",\n\t\"./mech_rec_assembly_mon/components/progress_box\": \"./app/panels/mech_rec_assembly_mon/components/progress_box.js\",\n\t\"./mech_rec_assembly_mon/components/progress_box.js\": \"./app/panels/mech_rec_assembly_mon/components/progress_box.js\",\n\t\"./mech_rec_assembly_mon/hooks\": \"./app/panels/mech_rec_assembly_mon/hooks.js\",\n\t\"./mech_rec_assembly_mon/hooks.js\": \"./app/panels/mech_rec_assembly_mon/hooks.js\",\n\t\"./mech_rec_assembly_mon/index\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/index.js\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/mech_rec_assembly_mon\": \"./app/panels/mech_rec_assembly_mon/mech_rec_assembly_mon.js\",\n\t\"./mech_rec_assembly_mon/mech_rec_assembly_mon.js\": \"./app/panels/mech_rec_assembly_mon/mech_rec_assembly_mon.js\",\n\t\"./mech_rec_assembly_mon/styles/themes\": \"./app/panels/mech_rec_assembly_mon/styles/themes.js\",\n\t\"./mech_rec_assembly_mon/styles/themes.js\": \"./app/panels/mech_rec_assembly_mon/styles/themes.js\",\n\t\"./mech_rec_cost_jobs_manage\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/fcjobssp\": \"./app/panels/mech_rec_cost_jobs_manage/fcjobssp.js\",\n\t\"./mech_rec_cost_jobs_manage/fcjobssp.js\": \"./app/panels/mech_rec_cost_jobs_manage/fcjobssp.js\",\n\t\"./mech_rec_cost_jobs_manage/hooks\": \"./app/panels/mech_rec_cost_jobs_manage/hooks.js\",\n\t\"./mech_rec_cost_jobs_manage/hooks.js\": \"./app/panels/mech_rec_cost_jobs_manage/hooks.js\",\n\t\"./mech_rec_cost_jobs_manage/index\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/index.js\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage\": \"./app/panels/mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js\",\n\t\"./mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js\": \"./app/panels/mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js\",\n\t\"./mech_rec_cost_prod_plans\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/backend_dg\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/backend_dg.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/backend_dg.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/backend_dg.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcroutlst\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcroutlst.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcroutlst.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcroutlst.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/goodparties\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/goodparties.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/goodparties.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/goodparties.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/incomefromdeps\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\",\n\t\"./mech_rec_cost_prod_plans/hooks\": \"./app/panels/mech_rec_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_cost_prod_plans/hooks.js\": \"./app/panels/mech_rec_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_cost_prod_plans/index\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/index.js\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/mech_rec_cost_prod_plans\": \"./app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\",\n\t\"./mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\": \"./app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\",\n\t\"./mech_rec_dept_cost_jobs\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/components/filter\": \"./app/panels/mech_rec_dept_cost_jobs/components/filter.js\",\n\t\"./mech_rec_dept_cost_jobs/components/filter.js\": \"./app/panels/mech_rec_dept_cost_jobs/components/filter.js\",\n\t\"./mech_rec_dept_cost_jobs/components/ins_department_dg\": \"./app/panels/mech_rec_dept_cost_jobs/components/ins_department_dg.js\",\n\t\"./mech_rec_dept_cost_jobs/components/ins_department_dg.js\": \"./app/panels/mech_rec_dept_cost_jobs/components/ins_department_dg.js\",\n\t\"./mech_rec_dept_cost_jobs/hooks\": \"./app/panels/mech_rec_dept_cost_jobs/hooks.js\",\n\t\"./mech_rec_dept_cost_jobs/hooks.js\": \"./app/panels/mech_rec_dept_cost_jobs/hooks.js\",\n\t\"./mech_rec_dept_cost_jobs/index\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/index.js\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs\": \"./app/panels/mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js\",\n\t\"./mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js\": \"./app/panels/mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js\",\n\t\"./mech_rec_dept_cost_prod_plans\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlst\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlst.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlstsp\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlstsp.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlstsp.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlstsp.js\",\n\t\"./mech_rec_dept_cost_prod_plans/hooks\": \"./app/panels/mech_rec_dept_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_dept_cost_prod_plans/hooks.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_dept_cost_prod_plans/incomefromdeps\": \"./app/panels/mech_rec_dept_cost_prod_plans/incomefromdeps.js\",\n\t\"./mech_rec_dept_cost_prod_plans/incomefromdeps.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/incomefromdeps.js\",\n\t\"./mech_rec_dept_cost_prod_plans/index\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/index.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans\": \"./app/panels/mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js\",\n\t\"./mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js\",\n\t\"./mech_rec_help\": \"./app/panels/mech_rec_help/index.js\",\n\t\"./mech_rec_help/\": \"./app/panels/mech_rec_help/index.js\",\n\t\"./mech_rec_help/img/1_1.png\": \"./app/panels/mech_rec_help/img/1_1.png\",\n\t\"./mech_rec_help/img/1_2.png\": \"./app/panels/mech_rec_help/img/1_2.png\",\n\t\"./mech_rec_help/img/1_3.png\": \"./app/panels/mech_rec_help/img/1_3.png\",\n\t\"./mech_rec_help/img/1_4.png\": \"./app/panels/mech_rec_help/img/1_4.png\",\n\t\"./mech_rec_help/img/1_5.png\": \"./app/panels/mech_rec_help/img/1_5.png\",\n\t\"./mech_rec_help/img/21_1.png\": \"./app/panels/mech_rec_help/img/21_1.png\",\n\t\"./mech_rec_help/img/21_2.png\": \"./app/panels/mech_rec_help/img/21_2.png\",\n\t\"./mech_rec_help/img/21_3.png\": \"./app/panels/mech_rec_help/img/21_3.png\",\n\t\"./mech_rec_help/img/2_1.png\": \"./app/panels/mech_rec_help/img/2_1.png\",\n\t\"./mech_rec_help/img/2_2.png\": \"./app/panels/mech_rec_help/img/2_2.png\",\n\t\"./mech_rec_help/img/2_3.png\": \"./app/panels/mech_rec_help/img/2_3.png\",\n\t\"./mech_rec_help/img/2_4.png\": \"./app/panels/mech_rec_help/img/2_4.png\",\n\t\"./mech_rec_help/img/2_5.png\": \"./app/panels/mech_rec_help/img/2_5.png\",\n\t\"./mech_rec_help/img/31_1.png\": \"./app/panels/mech_rec_help/img/31_1.png\",\n\t\"./mech_rec_help/img/31_10.png\": \"./app/panels/mech_rec_help/img/31_10.png\",\n\t\"./mech_rec_help/img/31_2.png\": \"./app/panels/mech_rec_help/img/31_2.png\",\n\t\"./mech_rec_help/img/31_3.png\": \"./app/panels/mech_rec_help/img/31_3.png\",\n\t\"./mech_rec_help/img/31_4.png\": \"./app/panels/mech_rec_help/img/31_4.png\",\n\t\"./mech_rec_help/img/31_5.png\": \"./app/panels/mech_rec_help/img/31_5.png\",\n\t\"./mech_rec_help/img/31_6.png\": \"./app/panels/mech_rec_help/img/31_6.png\",\n\t\"./mech_rec_help/img/31_7.png\": \"./app/panels/mech_rec_help/img/31_7.png\",\n\t\"./mech_rec_help/img/31_8.png\": \"./app/panels/mech_rec_help/img/31_8.png\",\n\t\"./mech_rec_help/img/31_9.png\": \"./app/panels/mech_rec_help/img/31_9.png\",\n\t\"./mech_rec_help/img/32_1.png\": \"./app/panels/mech_rec_help/img/32_1.png\",\n\t\"./mech_rec_help/img/32_2.png\": \"./app/panels/mech_rec_help/img/32_2.png\",\n\t\"./mech_rec_help/img/32_3.png\": \"./app/panels/mech_rec_help/img/32_3.png\",\n\t\"./mech_rec_help/img/33_1.png\": \"./app/panels/mech_rec_help/img/33_1.png\",\n\t\"./mech_rec_help/img/33_2.png\": \"./app/panels/mech_rec_help/img/33_2.png\",\n\t\"./mech_rec_help/img/33_3.png\": \"./app/panels/mech_rec_help/img/33_3.png\",\n\t\"./mech_rec_help/img/33_4.png\": \"./app/panels/mech_rec_help/img/33_4.png\",\n\t\"./mech_rec_help/img/34_1.png\": \"./app/panels/mech_rec_help/img/34_1.png\",\n\t\"./mech_rec_help/img/34_2.png\": \"./app/panels/mech_rec_help/img/34_2.png\",\n\t\"./mech_rec_help/img/34_3.png\": \"./app/panels/mech_rec_help/img/34_3.png\",\n\t\"./mech_rec_help/img/34_4.png\": \"./app/panels/mech_rec_help/img/34_4.png\",\n\t\"./mech_rec_help/img/34_5.png\": \"./app/panels/mech_rec_help/img/34_5.png\",\n\t\"./mech_rec_help/img/34_6.png\": \"./app/panels/mech_rec_help/img/34_6.png\",\n\t\"./mech_rec_help/img/34_7.png\": \"./app/panels/mech_rec_help/img/34_7.png\",\n\t\"./mech_rec_help/img/34_8.png\": \"./app/panels/mech_rec_help/img/34_8.png\",\n\t\"./mech_rec_help/img/35_1.png\": \"./app/panels/mech_rec_help/img/35_1.png\",\n\t\"./mech_rec_help/img/3_1.png\": \"./app/panels/mech_rec_help/img/3_1.png\",\n\t\"./mech_rec_help/img/410_1.png\": \"./app/panels/mech_rec_help/img/410_1.png\",\n\t\"./mech_rec_help/img/410_2.png\": \"./app/panels/mech_rec_help/img/410_2.png\",\n\t\"./mech_rec_help/img/410_3.png\": \"./app/panels/mech_rec_help/img/410_3.png\",\n\t\"./mech_rec_help/img/410_4.png\": \"./app/panels/mech_rec_help/img/410_4.png\",\n\t\"./mech_rec_help/img/410_5.png\": \"./app/panels/mech_rec_help/img/410_5.png\",\n\t\"./mech_rec_help/img/410_6.png\": \"./app/panels/mech_rec_help/img/410_6.png\",\n\t\"./mech_rec_help/img/410_7.png\": \"./app/panels/mech_rec_help/img/410_7.png\",\n\t\"./mech_rec_help/img/411_1.png\": \"./app/panels/mech_rec_help/img/411_1.png\",\n\t\"./mech_rec_help/img/411_2.png\": \"./app/panels/mech_rec_help/img/411_2.png\",\n\t\"./mech_rec_help/img/411_3.png\": \"./app/panels/mech_rec_help/img/411_3.png\",\n\t\"./mech_rec_help/img/411_4.png\": \"./app/panels/mech_rec_help/img/411_4.png\",\n\t\"./mech_rec_help/img/412_1.png\": \"./app/panels/mech_rec_help/img/412_1.png\",\n\t\"./mech_rec_help/img/412_2.png\": \"./app/panels/mech_rec_help/img/412_2.png\",\n\t\"./mech_rec_help/img/412_3.png\": \"./app/panels/mech_rec_help/img/412_3.png\",\n\t\"./mech_rec_help/img/412_4.png\": \"./app/panels/mech_rec_help/img/412_4.png\",\n\t\"./mech_rec_help/img/413_1.png\": \"./app/panels/mech_rec_help/img/413_1.png\",\n\t\"./mech_rec_help/img/413_2.png\": \"./app/panels/mech_rec_help/img/413_2.png\",\n\t\"./mech_rec_help/img/413_3.png\": \"./app/panels/mech_rec_help/img/413_3.png\",\n\t\"./mech_rec_help/img/413_4.png\": \"./app/panels/mech_rec_help/img/413_4.png\",\n\t\"./mech_rec_help/img/413_5.png\": \"./app/panels/mech_rec_help/img/413_5.png\",\n\t\"./mech_rec_help/img/414_1.png\": \"./app/panels/mech_rec_help/img/414_1.png\",\n\t\"./mech_rec_help/img/414_2.png\": \"./app/panels/mech_rec_help/img/414_2.png\",\n\t\"./mech_rec_help/img/414_3.png\": \"./app/panels/mech_rec_help/img/414_3.png\",\n\t\"./mech_rec_help/img/41_1.png\": \"./app/panels/mech_rec_help/img/41_1.png\",\n\t\"./mech_rec_help/img/41_10.png\": \"./app/panels/mech_rec_help/img/41_10.png\",\n\t\"./mech_rec_help/img/41_11.png\": \"./app/panels/mech_rec_help/img/41_11.png\",\n\t\"./mech_rec_help/img/41_12.png\": \"./app/panels/mech_rec_help/img/41_12.png\",\n\t\"./mech_rec_help/img/41_2.png\": \"./app/panels/mech_rec_help/img/41_2.png\",\n\t\"./mech_rec_help/img/41_3.png\": \"./app/panels/mech_rec_help/img/41_3.png\",\n\t\"./mech_rec_help/img/41_4.png\": \"./app/panels/mech_rec_help/img/41_4.png\",\n\t\"./mech_rec_help/img/41_5.png\": \"./app/panels/mech_rec_help/img/41_5.png\",\n\t\"./mech_rec_help/img/41_6.png\": \"./app/panels/mech_rec_help/img/41_6.png\",\n\t\"./mech_rec_help/img/41_7.png\": \"./app/panels/mech_rec_help/img/41_7.png\",\n\t\"./mech_rec_help/img/41_8.png\": \"./app/panels/mech_rec_help/img/41_8.png\",\n\t\"./mech_rec_help/img/41_9.png\": \"./app/panels/mech_rec_help/img/41_9.png\",\n\t\"./mech_rec_help/img/42_1.png\": \"./app/panels/mech_rec_help/img/42_1.png\",\n\t\"./mech_rec_help/img/42_2.png\": \"./app/panels/mech_rec_help/img/42_2.png\",\n\t\"./mech_rec_help/img/42_3.png\": \"./app/panels/mech_rec_help/img/42_3.png\",\n\t\"./mech_rec_help/img/42_4.png\": \"./app/panels/mech_rec_help/img/42_4.png\",\n\t\"./mech_rec_help/img/43_1.png\": \"./app/panels/mech_rec_help/img/43_1.png\",\n\t\"./mech_rec_help/img/43_2.png\": \"./app/panels/mech_rec_help/img/43_2.png\",\n\t\"./mech_rec_help/img/43_3.png\": \"./app/panels/mech_rec_help/img/43_3.png\",\n\t\"./mech_rec_help/img/43_4.png\": \"./app/panels/mech_rec_help/img/43_4.png\",\n\t\"./mech_rec_help/img/43_5.png\": \"./app/panels/mech_rec_help/img/43_5.png\",\n\t\"./mech_rec_help/img/43_6.png\": \"./app/panels/mech_rec_help/img/43_6.png\",\n\t\"./mech_rec_help/img/43_7.png\": \"./app/panels/mech_rec_help/img/43_7.png\",\n\t\"./mech_rec_help/img/43_8.png\": \"./app/panels/mech_rec_help/img/43_8.png\",\n\t\"./mech_rec_help/img/44_1.png\": \"./app/panels/mech_rec_help/img/44_1.png\",\n\t\"./mech_rec_help/img/44_10.png\": \"./app/panels/mech_rec_help/img/44_10.png\",\n\t\"./mech_rec_help/img/44_2.png\": \"./app/panels/mech_rec_help/img/44_2.png\",\n\t\"./mech_rec_help/img/44_3.png\": \"./app/panels/mech_rec_help/img/44_3.png\",\n\t\"./mech_rec_help/img/44_4.png\": \"./app/panels/mech_rec_help/img/44_4.png\",\n\t\"./mech_rec_help/img/44_5.png\": \"./app/panels/mech_rec_help/img/44_5.png\",\n\t\"./mech_rec_help/img/44_6.png\": \"./app/panels/mech_rec_help/img/44_6.png\",\n\t\"./mech_rec_help/img/44_7.png\": \"./app/panels/mech_rec_help/img/44_7.png\",\n\t\"./mech_rec_help/img/44_8.png\": \"./app/panels/mech_rec_help/img/44_8.png\",\n\t\"./mech_rec_help/img/44_9.png\": \"./app/panels/mech_rec_help/img/44_9.png\",\n\t\"./mech_rec_help/img/45_1.png\": \"./app/panels/mech_rec_help/img/45_1.png\",\n\t\"./mech_rec_help/img/45_10.png\": \"./app/panels/mech_rec_help/img/45_10.png\",\n\t\"./mech_rec_help/img/45_2.png\": \"./app/panels/mech_rec_help/img/45_2.png\",\n\t\"./mech_rec_help/img/45_3.png\": \"./app/panels/mech_rec_help/img/45_3.png\",\n\t\"./mech_rec_help/img/45_4.png\": \"./app/panels/mech_rec_help/img/45_4.png\",\n\t\"./mech_rec_help/img/45_5.png\": \"./app/panels/mech_rec_help/img/45_5.png\",\n\t\"./mech_rec_help/img/45_6.png\": \"./app/panels/mech_rec_help/img/45_6.png\",\n\t\"./mech_rec_help/img/45_7.png\": \"./app/panels/mech_rec_help/img/45_7.png\",\n\t\"./mech_rec_help/img/45_8.png\": \"./app/panels/mech_rec_help/img/45_8.png\",\n\t\"./mech_rec_help/img/45_9.png\": \"./app/panels/mech_rec_help/img/45_9.png\",\n\t\"./mech_rec_help/img/46_1.png\": \"./app/panels/mech_rec_help/img/46_1.png\",\n\t\"./mech_rec_help/img/46_2.png\": \"./app/panels/mech_rec_help/img/46_2.png\",\n\t\"./mech_rec_help/img/46_3.png\": \"./app/panels/mech_rec_help/img/46_3.png\",\n\t\"./mech_rec_help/img/46_4.png\": \"./app/panels/mech_rec_help/img/46_4.png\",\n\t\"./mech_rec_help/img/46_5.png\": \"./app/panels/mech_rec_help/img/46_5.png\",\n\t\"./mech_rec_help/img/46_6.png\": \"./app/panels/mech_rec_help/img/46_6.png\",\n\t\"./mech_rec_help/img/47_1.png\": \"./app/panels/mech_rec_help/img/47_1.png\",\n\t\"./mech_rec_help/img/47_10.png\": \"./app/panels/mech_rec_help/img/47_10.png\",\n\t\"./mech_rec_help/img/47_11.png\": \"./app/panels/mech_rec_help/img/47_11.png\",\n\t\"./mech_rec_help/img/47_12.png\": \"./app/panels/mech_rec_help/img/47_12.png\",\n\t\"./mech_rec_help/img/47_2.png\": \"./app/panels/mech_rec_help/img/47_2.png\",\n\t\"./mech_rec_help/img/47_3.png\": \"./app/panels/mech_rec_help/img/47_3.png\",\n\t\"./mech_rec_help/img/47_4.png\": \"./app/panels/mech_rec_help/img/47_4.png\",\n\t\"./mech_rec_help/img/47_5.png\": \"./app/panels/mech_rec_help/img/47_5.png\",\n\t\"./mech_rec_help/img/47_6.png\": \"./app/panels/mech_rec_help/img/47_6.png\",\n\t\"./mech_rec_help/img/47_7.png\": \"./app/panels/mech_rec_help/img/47_7.png\",\n\t\"./mech_rec_help/img/47_8.png\": \"./app/panels/mech_rec_help/img/47_8.png\",\n\t\"./mech_rec_help/img/47_9.png\": \"./app/panels/mech_rec_help/img/47_9.png\",\n\t\"./mech_rec_help/img/48_1.png\": \"./app/panels/mech_rec_help/img/48_1.png\",\n\t\"./mech_rec_help/img/48_2.png\": \"./app/panels/mech_rec_help/img/48_2.png\",\n\t\"./mech_rec_help/img/48_3.png\": \"./app/panels/mech_rec_help/img/48_3.png\",\n\t\"./mech_rec_help/img/48_4.png\": \"./app/panels/mech_rec_help/img/48_4.png\",\n\t\"./mech_rec_help/img/49_1.png\": \"./app/panels/mech_rec_help/img/49_1.png\",\n\t\"./mech_rec_help/img/49_2.png\": \"./app/panels/mech_rec_help/img/49_2.png\",\n\t\"./mech_rec_help/img/49_3.png\": \"./app/panels/mech_rec_help/img/49_3.png\",\n\t\"./mech_rec_help/img/add1_1.png\": \"./app/panels/mech_rec_help/img/add1_1.png\",\n\t\"./mech_rec_help/img/add1_2.png\": \"./app/panels/mech_rec_help/img/add1_2.png\",\n\t\"./mech_rec_help/img/add1_3.png\": \"./app/panels/mech_rec_help/img/add1_3.png\",\n\t\"./mech_rec_help/img/add1_4.png\": \"./app/panels/mech_rec_help/img/add1_4.png\",\n\t\"./mech_rec_help/img/add1_5.png\": \"./app/panels/mech_rec_help/img/add1_5.png\",\n\t\"./mech_rec_help/img/add1_6.png\": \"./app/panels/mech_rec_help/img/add1_6.png\",\n\t\"./mech_rec_help/img/add1_7.png\": \"./app/panels/mech_rec_help/img/add1_7.png\",\n\t\"./mech_rec_help/img/add1_8.png\": \"./app/panels/mech_rec_help/img/add1_8.png\",\n\t\"./mech_rec_help/img/add1_9.png\": \"./app/panels/mech_rec_help/img/add1_9.png\",\n\t\"./mech_rec_help/index\": \"./app/panels/mech_rec_help/index.js\",\n\t\"./mech_rec_help/index.js\": \"./app/panels/mech_rec_help/index.js\",\n\t\"./mech_rec_help/mech_rec_help\": \"./app/panels/mech_rec_help/mech_rec_help.js\",\n\t\"./mech_rec_help/mech_rec_help.js\": \"./app/panels/mech_rec_help/mech_rec_help.js\",\n\t\"./prj_fin\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/index\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/index.js\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/layouts\": \"./app/panels/prj_fin/layouts.js\",\n\t\"./prj_fin/layouts.js\": \"./app/panels/prj_fin/layouts.js\",\n\t\"./prj_fin/prj_fin\": \"./app/panels/prj_fin/prj_fin.js\",\n\t\"./prj_fin/prj_fin.js\": \"./app/panels/prj_fin/prj_fin.js\",\n\t\"./prj_fin/projects\": \"./app/panels/prj_fin/projects.js\",\n\t\"./prj_fin/projects.js\": \"./app/panels/prj_fin/projects.js\",\n\t\"./prj_fin/stage_arts\": \"./app/panels/prj_fin/stage_arts.js\",\n\t\"./prj_fin/stage_arts.js\": \"./app/panels/prj_fin/stage_arts.js\",\n\t\"./prj_fin/stage_contracts\": \"./app/panels/prj_fin/stage_contracts.js\",\n\t\"./prj_fin/stage_contracts.js\": \"./app/panels/prj_fin/stage_contracts.js\",\n\t\"./prj_fin/stages\": \"./app/panels/prj_fin/stages.js\",\n\t\"./prj_fin/stages.js\": \"./app/panels/prj_fin/stages.js\",\n\t\"./prj_graph\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/index\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/index.js\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/layouts\": \"./app/panels/prj_graph/layouts.js\",\n\t\"./prj_graph/layouts.js\": \"./app/panels/prj_graph/layouts.js\",\n\t\"./prj_graph/prj_graph\": \"./app/panels/prj_graph/prj_graph.js\",\n\t\"./prj_graph/prj_graph.js\": \"./app/panels/prj_graph/prj_graph.js\",\n\t\"./prj_help\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/img/21_1.png\": \"./app/panels/prj_help/img/21_1.png\",\n\t\"./prj_help/img/21_2.png\": \"./app/panels/prj_help/img/21_2.png\",\n\t\"./prj_help/img/21_3.png\": \"./app/panels/prj_help/img/21_3.png\",\n\t\"./prj_help/img/21_4.png\": \"./app/panels/prj_help/img/21_4.png\",\n\t\"./prj_help/img/21_5.png\": \"./app/panels/prj_help/img/21_5.png\",\n\t\"./prj_help/img/22_1.png\": \"./app/panels/prj_help/img/22_1.png\",\n\t\"./prj_help/img/22_2.png\": \"./app/panels/prj_help/img/22_2.png\",\n\t\"./prj_help/img/22_3.png\": \"./app/panels/prj_help/img/22_3.png\",\n\t\"./prj_help/img/23_1.png\": \"./app/panels/prj_help/img/23_1.png\",\n\t\"./prj_help/img/23_2.png\": \"./app/panels/prj_help/img/23_2.png\",\n\t\"./prj_help/img/24_1.png\": \"./app/panels/prj_help/img/24_1.png\",\n\t\"./prj_help/img/24_2.png\": \"./app/panels/prj_help/img/24_2.png\",\n\t\"./prj_help/img/24_3.png\": \"./app/panels/prj_help/img/24_3.png\",\n\t\"./prj_help/img/24_4.png\": \"./app/panels/prj_help/img/24_4.png\",\n\t\"./prj_help/img/24_5.png\": \"./app/panels/prj_help/img/24_5.png\",\n\t\"./prj_help/img/3_1.png\": \"./app/panels/prj_help/img/3_1.png\",\n\t\"./prj_help/img/3_2.png\": \"./app/panels/prj_help/img/3_2.png\",\n\t\"./prj_help/img/3_3.png\": \"./app/panels/prj_help/img/3_3.png\",\n\t\"./prj_help/img/3_4.png\": \"./app/panels/prj_help/img/3_4.png\",\n\t\"./prj_help/img/3_5.png\": \"./app/panels/prj_help/img/3_5.png\",\n\t\"./prj_help/img/3_6.png\": \"./app/panels/prj_help/img/3_6.png\",\n\t\"./prj_help/img/41_1.png\": \"./app/panels/prj_help/img/41_1.png\",\n\t\"./prj_help/img/41_2.png\": \"./app/panels/prj_help/img/41_2.png\",\n\t\"./prj_help/img/42_1.png\": \"./app/panels/prj_help/img/42_1.png\",\n\t\"./prj_help/img/42_2.png\": \"./app/panels/prj_help/img/42_2.png\",\n\t\"./prj_help/img/43_1.png\": \"./app/panels/prj_help/img/43_1.png\",\n\t\"./prj_help/img/43_2.png\": \"./app/panels/prj_help/img/43_2.png\",\n\t\"./prj_help/img/43_3.png\": \"./app/panels/prj_help/img/43_3.png\",\n\t\"./prj_help/img/43_4.png\": \"./app/panels/prj_help/img/43_4.png\",\n\t\"./prj_help/img/44_1.png\": \"./app/panels/prj_help/img/44_1.png\",\n\t\"./prj_help/img/44_2.png\": \"./app/panels/prj_help/img/44_2.png\",\n\t\"./prj_help/img/44_3.png\": \"./app/panels/prj_help/img/44_3.png\",\n\t\"./prj_help/img/44_4.png\": \"./app/panels/prj_help/img/44_4.png\",\n\t\"./prj_help/img/45_1.png\": \"./app/panels/prj_help/img/45_1.png\",\n\t\"./prj_help/img/46_1.png\": \"./app/panels/prj_help/img/46_1.png\",\n\t\"./prj_help/img/47_1.png\": \"./app/panels/prj_help/img/47_1.png\",\n\t\"./prj_help/img/71_1.png\": \"./app/panels/prj_help/img/71_1.png\",\n\t\"./prj_help/img/72_1.png\": \"./app/panels/prj_help/img/72_1.png\",\n\t\"./prj_help/img/72_2.png\": \"./app/panels/prj_help/img/72_2.png\",\n\t\"./prj_help/img/72_3.png\": \"./app/panels/prj_help/img/72_3.png\",\n\t\"./prj_help/img/74_1.png\": \"./app/panels/prj_help/img/74_1.png\",\n\t\"./prj_help/index\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/index.js\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/prj_help\": \"./app/panels/prj_help/prj_help.js\",\n\t\"./prj_help/prj_help.js\": \"./app/panels/prj_help/prj_help.js\",\n\t\"./prj_jobs\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/index\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/index.js\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/lab_fact_rpt_dtl\": \"./app/panels/prj_jobs/lab_fact_rpt_dtl.js\",\n\t\"./prj_jobs/lab_fact_rpt_dtl.js\": \"./app/panels/prj_jobs/lab_fact_rpt_dtl.js\",\n\t\"./prj_jobs/lab_plan_fot_dtl\": \"./app/panels/prj_jobs/lab_plan_fot_dtl.js\",\n\t\"./prj_jobs/lab_plan_fot_dtl.js\": \"./app/panels/prj_jobs/lab_plan_fot_dtl.js\",\n\t\"./prj_jobs/lab_plan_jobs_dtl\": \"./app/panels/prj_jobs/lab_plan_jobs_dtl.js\",\n\t\"./prj_jobs/lab_plan_jobs_dtl.js\": \"./app/panels/prj_jobs/lab_plan_jobs_dtl.js\",\n\t\"./prj_jobs/layouts\": \"./app/panels/prj_jobs/layouts.js\",\n\t\"./prj_jobs/layouts.js\": \"./app/panels/prj_jobs/layouts.js\",\n\t\"./prj_jobs/prj_jobs\": \"./app/panels/prj_jobs/prj_jobs.js\",\n\t\"./prj_jobs/prj_jobs.js\": \"./app/panels/prj_jobs/prj_jobs.js\",\n\t\"./prj_jobs/res_mon\": \"./app/panels/prj_jobs/res_mon.js\",\n\t\"./prj_jobs/res_mon.js\": \"./app/panels/prj_jobs/res_mon.js\",\n\t\"./rrp_conf_editor\": \"./app/panels/rrp_conf_editor/index.js\",\n\t\"./rrp_conf_editor/\": \"./app/panels/rrp_conf_editor/index.js\",\n\t\"./rrp_conf_editor/IUD/iud_form_dialog\": \"./app/panels/rrp_conf_editor/IUD/iud_form_dialog.js\",\n\t\"./rrp_conf_editor/IUD/iud_form_dialog.js\": \"./app/panels/rrp_conf_editor/IUD/iud_form_dialog.js\",\n\t\"./rrp_conf_editor/IUD/iud_form_text_field\": \"./app/panels/rrp_conf_editor/IUD/iud_form_text_field.js\",\n\t\"./rrp_conf_editor/IUD/iud_form_text_field.js\": \"./app/panels/rrp_conf_editor/IUD/iud_form_text_field.js\",\n\t\"./rrp_conf_editor/components/layouts\": \"./app/panels/rrp_conf_editor/components/layouts.js\",\n\t\"./rrp_conf_editor/components/layouts.js\": \"./app/panels/rrp_conf_editor/components/layouts.js\",\n\t\"./rrp_conf_editor/components/rrp_section\": \"./app/panels/rrp_conf_editor/components/rrp_section.js\",\n\t\"./rrp_conf_editor/components/rrp_section.js\": \"./app/panels/rrp_conf_editor/components/rrp_section.js\",\n\t\"./rrp_conf_editor/components/section_tab_panel\": \"./app/panels/rrp_conf_editor/components/section_tab_panel.js\",\n\t\"./rrp_conf_editor/components/section_tab_panel.js\": \"./app/panels/rrp_conf_editor/components/section_tab_panel.js\",\n\t\"./rrp_conf_editor/hooks\": \"./app/panels/rrp_conf_editor/hooks.js\",\n\t\"./rrp_conf_editor/hooks.js\": \"./app/panels/rrp_conf_editor/hooks.js\",\n\t\"./rrp_conf_editor/index\": \"./app/panels/rrp_conf_editor/index.js\",\n\t\"./rrp_conf_editor/index.js\": \"./app/panels/rrp_conf_editor/index.js\",\n\t\"./rrp_conf_editor/rrp_conf_editor\": \"./app/panels/rrp_conf_editor/rrp_conf_editor.js\",\n\t\"./rrp_conf_editor/rrp_conf_editor.js\": \"./app/panels/rrp_conf_editor/rrp_conf_editor.js\",\n\t\"./samples\": \"./app/panels/samples/index.js\",\n\t\"./samples/\": \"./app/panels/samples/index.js\",\n\t\"./samples/chart\": \"./app/panels/samples/chart.js\",\n\t\"./samples/chart.js\": \"./app/panels/samples/chart.js\",\n\t\"./samples/cyclogram\": \"./app/panels/samples/cyclogram.js\",\n\t\"./samples/cyclogram.js\": \"./app/panels/samples/cyclogram.js\",\n\t\"./samples/data_grid\": \"./app/panels/samples/data_grid.js\",\n\t\"./samples/data_grid.js\": \"./app/panels/samples/data_grid.js\",\n\t\"./samples/gantt\": \"./app/panels/samples/gantt.js\",\n\t\"./samples/gantt.js\": \"./app/panels/samples/gantt.js\",\n\t\"./samples/index\": \"./app/panels/samples/index.js\",\n\t\"./samples/index.js\": \"./app/panels/samples/index.js\",\n\t\"./samples/loader\": \"./app/panels/samples/loader.js\",\n\t\"./samples/loader.js\": \"./app/panels/samples/loader.js\",\n\t\"./samples/messages\": \"./app/panels/samples/messages.js\",\n\t\"./samples/messages.js\": \"./app/panels/samples/messages.js\",\n\t\"./samples/mui\": \"./app/panels/samples/mui.js\",\n\t\"./samples/mui.js\": \"./app/panels/samples/mui.js\",\n\t\"./samples/p8online\": \"./app/panels/samples/p8online.js\",\n\t\"./samples/p8online.js\": \"./app/panels/samples/p8online.js\",\n\t\"./samples/samples\": \"./app/panels/samples/samples.js\",\n\t\"./samples/samples.js\": \"./app/panels/samples/samples.js\",\n\t\"./samples/svg\": \"./app/panels/samples/svg.js\",\n\t\"./samples/svg.js\": \"./app/panels/samples/svg.js\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./app/panels sync recursive ^\\\\.\\\\/.*$\";\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/_sync_^\\.\\/.*$?"); /***/ }), @@ -4540,6 +4540,17 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./app/components/p8p_cyclogram.js": +/*!*****************************************!*\ + !*** ./app/components/p8p_cyclogram.js ***! + \*****************************************/ +/***/ ((__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 */ P8PCyclogram: () => (/* binding */ P8PCyclogram)\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/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/List/List.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItem/ListItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemText/ListItemText.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Divider/Divider.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/Link/Link.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.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 _core_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../core/utils */ \"./app/core/utils.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 //Встраиваемое сообщение об ошибке\n //Вспомогательный функции\n\n//---------\n//Константы\n//---------\n\n//Уровни масштаба\nconst P8P_CYCLOGRAM_ZOOM = [0.2, 0.4, 0.7, 1, 1.5, 2, 2.5];\n\n//Параметры элементов циклограммы\nconst NDEFAULT_LINE_HEIGHT = 20;\nconst NDEFAULT_HEADER_HEIGHT = 35;\n\n//Высота заголовка\nconst TITLE_HEIGHT = \"44px\";\n\n//Высота панели масштабирования\nconst ZOOM_HEIGHT = \"56px\";\n\n//Стили\nconst STYLES = {\n CYCLOGRAM_TITLE: {\n height: TITLE_HEIGHT\n },\n CYCLOGRAM_ZOOM: {\n height: ZOOM_HEIGHT\n },\n HEADER_COLUMN: {\n fontSize: \"12px\",\n textOverflow: \"ellipsis\",\n overflow: \"hidden\",\n whiteSpace: \"pre\",\n textAlign: \"center\",\n lineHeight: \"3\",\n padding: \"0px 5px\"\n },\n CYCLOGRAM_BOX: (noData, title, zoomBar) => ({\n position: \"relative\",\n overflow: \"auto\",\n padding: \"0px 8px\",\n height: `calc(100% - ${zoomBar ? ZOOM_HEIGHT : \"0px\"} - ${title ? TITLE_HEIGHT : \"0px\"})`,\n display: noData ? \"none\" : \"\"\n }),\n GRID_ROW: index => index % 2 === 0 ? {\n backgroundColor: \"#ffffff\"\n } : {\n backgroundColor: \"#f5f5f5\"\n },\n GROUP_HEADER_BOX: {\n border: \"1px solid\",\n backgroundColor: \"#ebebeb\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\"\n },\n GROUP_HEADER: {\n fontSize: \"14px\",\n textAlign: \"center\",\n wordWrap: \"break-word\"\n },\n TASK_EDITOR_CONTENT: {\n minWidth: 400,\n overflowX: \"auto\"\n },\n TASK_EDITOR_LIST: {\n width: \"100%\",\n minWidth: 300,\n maxWidth: 700,\n bgcolor: \"background.paper\"\n },\n TASK_BOX: (lineHeight, bgColor, textColor, highlightColor) => ({\n display: \"flex\",\n alignItems: \"center\",\n backgroundColor: bgColor ? bgColor : \"#b4b9bf\",\n ...(textColor ? {\n color: textColor\n } : {}),\n height: lineHeight,\n \"&:hover\": {\n ...(highlightColor ? {\n backgroundColor: `${highlightColor} !important`,\n filter: \"brightness(1) !important\"\n } : {\n filter: \"brightness(1.25) !important\"\n }),\n cursor: \"pointer !important\"\n }\n }),\n TASK: lineHeight => {\n const availableLines = Math.floor(lineHeight / 18);\n return {\n width: \"100%\",\n fontSize: \"12px\",\n overflowWrap: \"break-word\",\n wordBreak: \"break-all\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n display: \"-webkit-box\",\n lineHeight: \"18px\",\n maxHeight: lineHeight,\n WebkitLineClamp: availableLines < 1 ? 1 : availableLines,\n WebkitBoxOrient: \"vertical\"\n };\n }\n};\n\n//Структура колонки\nconst P8P_CYCLOGRAM_COLUMN_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_3___default().shape({\n name: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n start: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number).isRequired,\n end: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number).isRequired\n});\n\n//Структура группы\nconst P8P_CYCLOGRAM_GROUP_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_3___default().shape({\n name: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n height: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number).isRequired,\n width: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number).isRequired,\n visible: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired\n});\n\n//Структура задачи\nconst P8P_CYCLOGRAM_TASK_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_3___default().shape({\n id: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n rn: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number).isRequired,\n name: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n fullName: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n lineNumb: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number).isRequired,\n start: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number).isRequired,\n end: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number).isRequired,\n group: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),\n bgColor: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),\n textColor: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),\n highlightColor: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string)\n});\n\n//Структура динамического атрибута задачи\nconst P8P_CYCLOGRAM_TASK_ATTRIBUTE_SHAPE = 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 visible: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired\n});\n\n//--------------------------------\n//Вспомогательные классы и функции\n//--------------------------------\n\n//Определение сдвига для максимальной ширины колонок\nconst getShift = (columns, currentColumnsMaxWidth, maxCyclogramWidth) => {\n //Определяем доступное пространство для расширения\n let maxWidthDiff = maxCyclogramWidth - currentColumnsMaxWidth;\n //Инициализируем значение сдвига\n let shift = 1;\n //Если доступно больше ширины и есть пространство для расширения\n if (maxCyclogramWidth > currentColumnsMaxWidth && maxCyclogramWidth - maxWidthDiff > columns.length) {\n //Определяем доступный сдвиг колонок\n shift = maxCyclogramWidth / currentColumnsMaxWidth;\n }\n //Возвращаем сдвиг\n return shift;\n};\n\n//Формирование стилей для группы\nconst getGroupStyles = (indexGrp, highlightColor) => {\n return `.main .TaskGrp${indexGrp}:hover .TaskGrp${indexGrp} {\n ${highlightColor ? `background: ${highlightColor};` : `filter: brightness(1.15);`}\n }\n .main:has(.TaskGrp${indexGrp}:hover) .TaskGrpHeader${indexGrp} {\n display: block;\n }\n `;\n //cursor: pointer;\n};\n\n//Фон строк таблицы\nconst P8PCyclogramRowsGrid = ({\n rows,\n maxWidth,\n lineHeight\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"g\", null, rows.map((el, index) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"foreignObject\", {\n x: \"0\",\n y: NDEFAULT_HEADER_HEIGHT + index * lineHeight,\n width: maxWidth,\n height: lineHeight,\n key: index\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n sx: STYLES.GRID_ROW(index),\n height: lineHeight\n }))));\n};\n\n//Контроль свойств - Фон строк таблицы\nP8PCyclogramRowsGrid.propTypes = {\n rows: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array).isRequired,\n maxWidth: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number).isRequired,\n lineHeight: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number).isRequired\n};\n\n//Линии строк таблицы\nconst P8PCyclogramRowsLines = ({\n rows,\n maxWidth,\n lineHeight\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"g\", null, rows.map((el, index) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"line\", {\n x1: \"0\",\n y1: NDEFAULT_HEADER_HEIGHT + lineHeight + index * lineHeight,\n x2: maxWidth,\n y2: NDEFAULT_HEADER_HEIGHT + lineHeight + index * lineHeight,\n key: index\n })));\n};\n\n//Контроль свойств - Линии строк таблицы\nP8PCyclogramRowsLines.propTypes = {\n rows: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array).isRequired,\n maxWidth: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number).isRequired,\n lineHeight: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number).isRequired\n};\n\n//Линии колонок таблицы\nconst P8PCyclogramColumnsLines = ({\n columns,\n shift,\n y1,\n y2\n}) => {\n //Инициализируем старт текущей колонки\n let prevColumnEnd = 0;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"g\", null, columns.map((column, index) => {\n //Аккумулируем окончание последней колонки с учетом сдвига\n prevColumnEnd = index !== 0 ? prevColumnEnd + (columns[index - 1].end - columns[index - 1].start) * shift : 0;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"line\", {\n x1: prevColumnEnd,\n y1: y1,\n x2: prevColumnEnd,\n y2: y2,\n stroke: \"#e0e0e0\",\n key: index\n });\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"line\", {\n x1: prevColumnEnd + (columns[columns.length - 1].end - columns[columns.length - 1].start) * shift,\n y1: y1,\n x2: prevColumnEnd + (columns[columns.length - 1].end - columns[columns.length - 1].start) * shift,\n y2: y2,\n stroke: \"#e0e0e0\"\n }));\n};\n\n//Контроль свойств - Линии колонок таблицы\nP8PCyclogramColumnsLines.propTypes = {\n columns: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array).isRequired,\n shift: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number).isRequired,\n y1: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number).isRequired,\n y2: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number).isRequired\n};\n\n//Фон таблицы циклограммы\nconst P8PCyclogramGrid = ({\n tasks,\n columns,\n shift,\n maxWidth,\n maxHeight,\n lineHeight\n}) => {\n //Формируем массив строк исходя из максимального значения строки задачи\n const rows = Array.from(Array(Math.max(...tasks.map(o => o.lineNumb)) + 1).keys());\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"g\", {\n className: \"grid\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"rect\", {\n x: \"0\",\n y: \"0\",\n width: maxWidth,\n height: maxHeight\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PCyclogramRowsGrid, {\n rows: rows,\n maxWidth: maxWidth,\n lineHeight: lineHeight\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PCyclogramRowsLines, {\n rows: rows,\n maxWidth: maxWidth,\n lineHeight: lineHeight\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PCyclogramColumnsLines, {\n columns: columns,\n shift: shift,\n y1: NDEFAULT_HEADER_HEIGHT,\n y2: maxHeight\n }));\n};\n\n//Контроль свойств - Фон таблицы циклограммы\nP8PCyclogramGrid.propTypes = {\n tasks: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array).isRequired,\n columns: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array).isRequired,\n shift: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number).isRequired,\n maxWidth: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number).isRequired,\n maxHeight: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number).isRequired,\n lineHeight: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number).isRequired\n};\n\n//Колонка заголовка циклограммы\nconst P8PCyclogramHeaderColumn = ({\n column,\n start,\n shift,\n columnRenderer\n}) => {\n //Рассчитываем ширину колонки\n const columnWidth = column.end - column.start;\n //Формируем собственное отображение, если требуется\n const customView = columnRenderer ? columnRenderer({\n column\n }) : null;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"foreignObject\", {\n x: start,\n y: \"0\",\n width: columnWidth * shift,\n height: NDEFAULT_HEADER_HEIGHT\n }, customView ? customView : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: {\n ...STYLES.HEADER_COLUMN,\n height: NDEFAULT_HEADER_HEIGHT\n },\n title: column.name\n }, column.name)));\n};\n\n//Контроль свойств - Колонка заголовка циклограммы\nP8PCyclogramHeaderColumn.propTypes = {\n column: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object).isRequired,\n start: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number).isRequired,\n shift: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number).isRequired,\n maxHeight: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number).isRequired,\n lastElement: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool),\n columnRenderer: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//Заголовок циклограммы\nconst P8PCyclogramHeader = ({\n columns,\n shift,\n maxWidth,\n maxHeight,\n columnRenderer,\n headerBlock\n}) => {\n //Инициализируем старт текущей колонки\n let prevColumnEnd = 0;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"g\", {\n className: \"header\",\n ref: headerBlock\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"rect\", {\n x: \"0\",\n y: \"0\",\n width: maxWidth,\n height: NDEFAULT_HEADER_HEIGHT,\n fill: \"#ffffff\",\n stroke: \"#e0e0e0\",\n strokeWidth: \"1.4\"\n }), columns.map((column, index) => {\n //Аккумулируем окончание последней колонки с учетом сдвига\n prevColumnEnd = index !== 0 ? prevColumnEnd + (columns[index - 1].end - columns[index - 1].start) * shift : 0;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PCyclogramHeaderColumn, {\n column: column,\n shift: shift,\n start: prevColumnEnd,\n maxHeight: maxHeight,\n lastElement: columns.length - 1 === index,\n columnRenderer: columnRenderer,\n key: index\n });\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"g\", {\n className: \"columnsDividers\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PCyclogramColumnsLines, {\n columns: columns,\n shift: shift,\n y1: 0,\n y2: NDEFAULT_HEADER_HEIGHT\n })));\n};\n\n//Контроль свойств - Заголовок циклограммы\nP8PCyclogramHeader.propTypes = {\n columns: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array).isRequired,\n shift: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number).isRequired,\n maxWidth: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number).isRequired,\n maxHeight: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number).isRequired,\n columnRenderer: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n headerBlock: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object)\n};\n\n//Задача циклограммы\nconst P8PCyclogramTask = ({\n task,\n indexGrp,\n shift,\n lineHeight,\n openTaskEditor,\n taskRenderer\n}) => {\n //Рассчитываем ширину задачи\n const width = task.end !== 0 ? (task.end - task.start) * shift : 0;\n //Формируем собственное отображение, если требуется\n const customView = taskRenderer ? taskRenderer({\n task,\n taskHeight: lineHeight,\n taskWidth: width\n }) || {} : {};\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"foreignObject\", {\n x: task.start !== 0 ? task.start * shift : 0,\n y: NDEFAULT_HEADER_HEIGHT + task.lineNumb * lineHeight,\n width: width,\n height: lineHeight\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], _extends({\n className: (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.hasValue)(indexGrp) ? `TaskGrp${indexGrp}` : null,\n sx: {\n ...STYLES.TASK_BOX(lineHeight, task.bgColor, task.textColor, task.highlightColor),\n ...customView.taskStyle\n }\n }, customView.taskProps, {\n onClick: () => openTaskEditor(task)\n }), customView.data ? customView.data : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.TASK(lineHeight),\n title: task.name\n }, task.name)));\n};\n\n//Контроль свойств - Группы циклограммы\nP8PCyclogramTask.propTypes = {\n task: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object).isRequired,\n indexGrp: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number),\n shift: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number).isRequired,\n lineHeight: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number).isRequired,\n openTaskEditor: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func).isRequired,\n taskRenderer: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//Основная информация циклограммы\nconst P8PCyclogramMain = ({\n columns,\n groups,\n tasks,\n shift,\n lineHeight,\n maxWidth,\n maxHeight,\n openTaskEditor,\n groupHeaderRenderer,\n taskRenderer,\n columnRenderer,\n headerBlock\n}) => {\n //Инициализируем коллекцию тасков с группами\n const tasksWithGroup = tasks.filter(task => (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.hasValue)(task.groupName));\n //Инициализируем коллекцию тасков без групп\n const tasksWithoutGroup = tasks.filter(task => !(0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.hasValue)(task.groupName));\n //Инициализируем коллекцию отображаемых групп\n const visibleGroups = groups ? groups.filter(group => group.visible) : [];\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"g\", {\n className: \"main\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"g\", {\n className: \"tasks\"\n }, visibleGroups.length !== 0 ? visibleGroups.map((grp, indexGrp) => {\n //Считываем задачи группы\n let groupTasks = tasksWithGroup.filter(task => task.groupName === grp.name);\n //Если по данной группе нет тасков - ничего не выводим\n if (groupTasks.length === 0) {\n return null;\n }\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"g\", {\n className: `TaskGrp${indexGrp}`,\n key: indexGrp\n }, groupTasks.map((task, index) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PCyclogramTask, {\n task: task,\n indexGrp: indexGrp,\n shift: shift,\n lineHeight: lineHeight,\n openTaskEditor: openTaskEditor,\n taskRenderer: taskRenderer,\n key: index\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"style\", null, getGroupStyles(indexGrp, grp.highlightColor)));\n }) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"g\", {\n className: `TasksWithoutGroups`\n }, tasksWithoutGroup.map((task, index) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PCyclogramTask, {\n task: task,\n shift: shift,\n lineHeight: lineHeight,\n openTaskEditor: openTaskEditor,\n taskRenderer: taskRenderer,\n key: index\n });\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PCyclogramHeader, {\n columns: columns,\n shift: shift,\n maxWidth: maxWidth,\n maxHeight: maxHeight,\n columnRenderer: columnRenderer,\n headerBlock: headerBlock\n }), visibleGroups.length !== 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"g\", {\n className: \"groups\"\n }, visibleGroups.map((grp, indexGrp) => {\n //Инициализируем параметры группы\n let defaultView = null;\n let customView = null;\n let groupHeaderX = 0;\n let groupHeaderY = 0;\n let groupTasks = tasksWithGroup.filter(task => task.groupName === grp.name);\n //Если по данной группе нет тасков - ничего не выводим\n if (groupTasks.length === 0) {\n return null;\n }\n //Если требуется отображать заголовок группы\n if (grp.visible) {\n //Формируем отображение по умолчанию\n defaultView = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n sx: {\n ...STYLES.GROUP_HEADER_BOX,\n height: grp.height\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: {\n ...STYLES.GROUP_HEADER,\n maxWidth: grp.width,\n maxHeight: grp.height\n }\n }, grp.name));\n //Формируем собственное отображение, если требуется\n customView = groupHeaderRenderer ? groupHeaderRenderer({\n group: grp\n }) : null;\n //Рассчитываем координаты заголовка группы\n groupHeaderX = Math.min(...groupTasks.map(o => o.start)) * shift;\n groupHeaderY = NDEFAULT_HEADER_HEIGHT + Math.min(...groupTasks.map(o => o.lineNumb)) * lineHeight - grp.height - 5;\n }\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"foreignObject\", {\n x: groupHeaderX,\n y: groupHeaderY,\n width: grp.width,\n height: grp.height,\n className: `TaskGrpHeader${indexGrp}`,\n display: \"none\",\n key: indexGrp\n }, customView ? customView : defaultView);\n })) : null);\n};\n\n//Контроль свойств - Основная информация циклограммы\nP8PCyclogramMain.propTypes = {\n columns: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array).isRequired,\n groups: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array),\n tasks: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array).isRequired,\n shift: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number).isRequired,\n lineHeight: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number).isRequired,\n maxWidth: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number).isRequired,\n maxHeight: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number).isRequired,\n openTaskEditor: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func).isRequired,\n groupHeaderRenderer: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n taskRenderer: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n columnRenderer: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n headerBlock: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object)\n};\n\n//Редактор задачи\nconst P8PCyclogramTaskEditor = ({\n task,\n taskAttributes,\n onOk,\n onCancel,\n taskAttributeRenderer,\n taskDialogRenderer,\n nameCaption,\n okBtnCaption,\n cancelBtnCaption\n}) => {\n //Собственное состояние\n const [state] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n start: task.start,\n end: task.end\n });\n\n //Отображаемые атрибуты\n const dispTaskAttributes = Array.isArray(taskAttributes) && taskAttributes.length > 0 ? taskAttributes.filter(attr => attr.visible && (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.hasValue)(task[attr.name])) : [];\n\n //При сохранении\n const handleOk = () => onOk && state.start && state.end ? onOk() : null;\n\n //При отмене\n const handleCancel = () => onCancel ? onCancel() : null;\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n open: true,\n onClose: handleCancel\n }, taskDialogRenderer ? taskDialogRenderer({\n task,\n taskAttributes,\n close: handleCancel\n }) : /*#__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_7__[\"default\"], {\n sx: STYLES.TASK_EDITOR_CONTENT\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n sx: STYLES.TASK_EDITOR_LIST\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n alignItems: \"flex-start\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n primary: nameCaption,\n secondary: task.fullName\n })), dispTaskAttributes.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n component: \"li\"\n }) : null, dispTaskAttributes.length > 0 ? dispTaskAttributes.map((attr, i) => {\n const defaultView = task[attr.name];\n const customView = taskAttributeRenderer ? taskAttributeRenderer({\n task,\n attribute: attr\n }) : null;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), {\n key: i\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n alignItems: \"flex-start\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n primary: attr.caption,\n secondaryTypographyProps: {\n component: \"span\"\n },\n secondary: customView ? customView : defaultView\n })), i < dispTaskAttributes.length - 1 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n component: \"li\"\n }) : null);\n }) : null)), /*#__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: handleOk\n }, okBtnCaption), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: handleCancel\n }, cancelBtnCaption))));\n};\n\n//Контроль свойств - Редактор задачи\nP8PCyclogramTaskEditor.propTypes = {\n task: P8P_CYCLOGRAM_TASK_SHAPE,\n taskAttributes: prop_types__WEBPACK_IMPORTED_MODULE_3___default().arrayOf(P8P_CYCLOGRAM_TASK_ATTRIBUTE_SHAPE),\n onOk: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onCancel: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n taskAttributeRenderer: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n taskDialogRenderer: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n nameCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n okBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n cancelBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired\n};\n\n//Циклограмма\nconst P8PCyclogram = ({\n containerStyle,\n lineHeight,\n title,\n titleStyle,\n onTitleClick,\n zoomBar,\n zoom,\n columns,\n columnRenderer,\n groups,\n groupHeaderRenderer,\n tasks,\n taskRenderer,\n taskAttributes,\n taskAttributeRenderer,\n taskDialogRenderer,\n noDataFoundText,\n nameTaskEditorCaption,\n okTaskEditorBtnCaption,\n cancelTaskEditorBtnCaption\n}) => {\n //Хук основного блока (для последующего определения доступной ширины)\n const mainBlock = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n //Хук для заголовка таблицы\n const headerBlock = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n //Собственное состояние\n const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n noData: true,\n loaded: false,\n lineHeight: NDEFAULT_LINE_HEIGHT,\n maxWidth: 0,\n maxHeight: 0,\n shift: 0,\n zoom: P8P_CYCLOGRAM_ZOOM.includes(zoom) ? zoom : 1,\n tasks: [],\n editTask: null\n });\n\n //Обновление масштаба циклограммы\n const handleZoomChange = direction => {\n //Считываем текущий индекс\n const currentIndex = P8P_CYCLOGRAM_ZOOM.indexOf(state.zoom);\n setState(pv => ({\n ...pv,\n zoom: currentIndex + direction !== P8P_CYCLOGRAM_ZOOM.length && currentIndex + direction !== -1 ? P8P_CYCLOGRAM_ZOOM[currentIndex + direction] : pv.zoom\n }));\n };\n\n //Открытие редактора задачи\n const openTaskEditor = task => setState(pv => ({\n ...pv,\n editTask: {\n ...task\n }\n }));\n\n //При сохранении задачи в редакторе\n const handleTaskEditorSave = () => {\n setState(pv => ({\n ...pv,\n editTask: null\n }));\n };\n\n //При закрытии редактора задачи без сохранения\n const handleTaskEditorCancel = () => setState(pv => ({\n ...pv,\n editTask: null\n }));\n\n //При скролле блока\n const handleScroll = e => {\n //Изменяем позицию заголовка таблицы относительно скролла\n headerBlock.current.setAttribute(\"transform\", \"translate(0,\" + e.currentTarget.scrollTop + \")\");\n };\n\n //При изменении данных\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если есть колонки и задачи\n if (Array.isArray(columns) && columns.length > 0 && Array.isArray(tasks) && tasks.length > 0) {\n //Определяем текущую максимальную ширину колонок\n let currentColumnsMaxWidth = Math.max(...columns.map(o => o.end));\n //Определяем доступный сдвиг для ширины колонок (16 - паддинг по бокам)\n let columnShift = getShift(columns, currentColumnsMaxWidth, mainBlock.current.offsetWidth - 16) * state.zoom;\n //Устанавливаем значения исходя из колонок/задач\n setState(pv => ({\n ...pv,\n loaded: true,\n lineHeight: lineHeight ? lineHeight : NDEFAULT_LINE_HEIGHT,\n maxWidth: columnShift !== 0 ? currentColumnsMaxWidth * columnShift : currentColumnsMaxWidth,\n maxHeight: NDEFAULT_HEADER_HEIGHT + (Math.max(...tasks.map(o => o.lineNumb)) + 1) * (lineHeight ? lineHeight : NDEFAULT_LINE_HEIGHT),\n shift: columnShift,\n tasks: tasks,\n noData: false\n }));\n } else {\n //Устанавливаем значения исходя из колонок/задач\n setState(pv => ({\n ...pv,\n noData: true\n }));\n }\n }, [columns, lineHeight, state.zoom, tasks]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n ref: mainBlock,\n style: {\n ...(containerStyle ? containerStyle : {})\n }\n }, state.noData ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_p8p_app_message__WEBPACK_IMPORTED_MODULE_1__.P8PAppInlineError, {\n text: noDataFoundText\n }) : null, state.loaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, title ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n p: 1,\n sx: {\n ...STYLES.CYCLOGRAM_TITLE,\n ...(titleStyle ? titleStyle : {})\n },\n align: \"center\",\n color: \"textSecondary\",\n variant: \"subtitle1\"\n }, onTitleClick ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n component: \"button\",\n variant: \"body2\",\n underline: \"hover\",\n onClick: () => onTitleClick()\n }, title) : title) : null, zoomBar ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n p: 1,\n sx: STYLES.CYCLOGRAM_ZOOM\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n onClick: () => handleZoomChange(1),\n disabled: state.zoom == P8P_CYCLOGRAM_ZOOM[P8P_CYCLOGRAM_ZOOM.length - 1]\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], null, \"zoom_in\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n onClick: () => handleZoomChange(-1),\n disabled: state.zoom == P8P_CYCLOGRAM_ZOOM[0]\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], null, \"zoom_out\"))) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n className: \"scroll\",\n sx: STYLES.CYCLOGRAM_BOX(state.noData, title, zoomBar),\n onScroll: handleScroll\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"svg\", {\n id: \"cyclogram\",\n width: state.maxWidth,\n height: state.maxHeight\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PCyclogramGrid, {\n tasks: state.tasks,\n columns: columns,\n shift: state.shift,\n maxWidth: state.maxWidth,\n maxHeight: state.maxHeight,\n lineHeight: state.lineHeight\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PCyclogramMain, {\n columns: columns,\n groups: groups,\n tasks: state.tasks,\n shift: state.shift,\n lineHeight: state.lineHeight,\n maxWidth: state.maxWidth,\n maxHeight: state.maxHeight,\n groupHeaderRenderer: groupHeaderRenderer,\n openTaskEditor: openTaskEditor,\n taskRenderer: taskRenderer,\n columnRenderer: columnRenderer,\n headerBlock: headerBlock\n })))) : null, state.editTask ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PCyclogramTaskEditor, {\n task: state.editTask,\n taskAttributes: taskAttributes,\n onOk: handleTaskEditorSave,\n onCancel: handleTaskEditorCancel,\n taskAttributeRenderer: taskAttributeRenderer,\n taskDialogRenderer: taskDialogRenderer,\n nameCaption: nameTaskEditorCaption,\n okBtnCaption: okTaskEditorBtnCaption,\n cancelBtnCaption: cancelTaskEditorBtnCaption\n }) : null));\n};\n\n//Контроль свойств - Циклограмма\nP8PCyclogram.propTypes = {\n containerStyle: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object),\n lineHeight: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number),\n title: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),\n titleStyle: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object),\n onTitleClick: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n zoomBar: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool),\n zoom: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number),\n columns: prop_types__WEBPACK_IMPORTED_MODULE_3___default().arrayOf(P8P_CYCLOGRAM_COLUMN_SHAPE).isRequired,\n columnRenderer: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n groups: prop_types__WEBPACK_IMPORTED_MODULE_3___default().arrayOf(P8P_CYCLOGRAM_GROUP_SHAPE),\n groupHeaderRenderer: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n tasks: prop_types__WEBPACK_IMPORTED_MODULE_3___default().arrayOf(P8P_CYCLOGRAM_TASK_SHAPE).isRequired,\n taskRenderer: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n taskAttributes: prop_types__WEBPACK_IMPORTED_MODULE_3___default().arrayOf(P8P_CYCLOGRAM_TASK_ATTRIBUTE_SHAPE),\n taskAttributeRenderer: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n taskDialogRenderer: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n noDataFoundText: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n nameTaskEditorCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n okTaskEditorBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n cancelTaskEditorBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_cyclogram.js?"); + +/***/ }), + /***/ "./app/components/p8p_data_grid.js": /*!*****************************************!*\ !*** ./app/components/p8p_data_grid.js ***! @@ -4624,7 +4635,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 */ ConfigWrapper: () => (/* binding */ ConfigWrapper),\n/* harmony export */ P8PAppWorkspaceConfigWrapped: () => (/* binding */ P8PAppWorkspaceConfigWrapped),\n/* harmony export */ P8PDataGridConfigWrapped: () => (/* binding */ P8PDataGridConfigWrapped),\n/* harmony export */ P8PGanttConfigWrapped: () => (/* binding */ P8PGanttConfigWrapped),\n/* harmony export */ P8PPanelsMenuGridConfigWrapped: () => (/* binding */ P8PPanelsMenuGridConfigWrapped),\n/* harmony export */ P8PTableConfigWrapped: () => (/* binding */ P8PTableConfigWrapped),\n/* harmony export */ P8P_APP_WORKSPACE_CONFIG_PROPS: () => (/* binding */ P8P_APP_WORKSPACE_CONFIG_PROPS),\n/* harmony export */ P8P_DATA_GRID_CONFIG_PROPS: () => (/* binding */ P8P_DATA_GRID_CONFIG_PROPS),\n/* harmony export */ P8P_DATA_GRID_DATA_TYPE: () => (/* reexport safe */ _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8P_DATA_GRID_DATA_TYPE),\n/* harmony export */ P8P_DATA_GRID_FILTER_SHAPE: () => (/* reexport safe */ _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8P_DATA_GRID_FILTER_SHAPE),\n/* harmony export */ P8P_DATA_GRID_SIZE: () => (/* reexport safe */ _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8P_DATA_GRID_SIZE),\n/* harmony export */ P8P_GANTT_CONFIG_PROPS: () => (/* binding */ P8P_GANTT_CONFIG_PROPS),\n/* harmony export */ P8P_GANTT_TASK_ATTRIBUTE_SHAPE: () => (/* reexport safe */ _components_p8p_gantt__WEBPACK_IMPORTED_MODULE_7__.P8P_GANTT_TASK_ATTRIBUTE_SHAPE),\n/* harmony export */ P8P_GANTT_TASK_COLOR_SHAPE: () => (/* reexport safe */ _components_p8p_gantt__WEBPACK_IMPORTED_MODULE_7__.P8P_GANTT_TASK_COLOR_SHAPE),\n/* harmony export */ P8P_GANTT_TASK_SHAPE: () => (/* reexport safe */ _components_p8p_gantt__WEBPACK_IMPORTED_MODULE_7__.P8P_GANTT_TASK_SHAPE),\n/* harmony export */ P8P_PANELS_MENU_GRID_CONFIG_PROPS: () => (/* binding */ P8P_PANELS_MENU_GRID_CONFIG_PROPS),\n/* harmony export */ P8P_PANELS_MENU_PANEL_SHAPE: () => (/* reexport safe */ _components_p8p_panels_menu__WEBPACK_IMPORTED_MODULE_3__.P8P_PANELS_MENU_PANEL_SHAPE),\n/* harmony export */ P8P_TABLE_CONFIG_PROPS: () => (/* binding */ P8P_TABLE_CONFIG_PROPS),\n/* harmony export */ P8P_TABLE_DATA_TYPE: () => (/* reexport safe */ _components_p8p_table__WEBPACK_IMPORTED_MODULE_5__.P8P_TABLE_DATA_TYPE),\n/* harmony export */ P8P_TABLE_FILTER_SHAPE: () => (/* reexport safe */ _components_p8p_table__WEBPACK_IMPORTED_MODULE_5__.P8P_TABLE_FILTER_SHAPE),\n/* harmony export */ P8P_TABLE_SIZE: () => (/* reexport safe */ _components_p8p_table__WEBPACK_IMPORTED_MODULE_5__.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 _core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../app.text */ \"./app.text.js\");\n/* harmony import */ var _components_p8p_panels_menu__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./components/p8p_panels_menu */ \"./app/components/p8p_panels_menu.js\");\n/* harmony import */ var _components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./components/p8p_app_workspace */ \"./app/components/p8p_app_workspace.js\");\n/* harmony import */ var _components_p8p_table__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./components/p8p_table */ \"./app/components/p8p_table.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _components_p8p_gantt__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./components/p8p_gantt */ \"./app/components/p8p_gantt.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 //Меню панелей\n //Рабочее пространство\n //Таблица данных\n //Таблица данных\n //Диаграмма Ганта\n\n//---------\n//Константы\n//---------\n\n//Конфигурируемые свойства \"Меню панелей (табличное)\" (P8PPanelsMenuGrid)\nconst P8P_PANELS_MENU_GRID_CONFIG_PROPS = {\n navigateCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.NAVIGATE,\n defaultGroupTytle: _app_text__WEBPACK_IMPORTED_MODULE_2__.TITLES.DEFAULT_PANELS_GROUP\n};\n\n//Конфигурируемые свойства \"Рабочего пространства\" (P8PAppWorkspace)\nconst P8P_APP_WORKSPACE_CONFIG_PROPS = {\n closeCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.CLOSE,\n homeCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.NAVIGATE_HOME\n};\n\n//Конфигурируемые свойства \"Таблицы\" (P8PTable)\nconst P8P_TABLE_CONFIG_PROPS = {\n orderAscMenuItemCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.ORDER_ASC,\n orderDescMenuItemCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.ORDER_DESC,\n filterMenuItemCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.FILTER,\n valueFilterCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.CAPTIONS.VALUE,\n valueFromFilterCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.CAPTIONS.VALUE_FROM,\n valueToFilterCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.CAPTIONS.VALUE_TO,\n okFilterBtnCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.OK,\n clearFilterBtnCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.CLEAR,\n cancelFilterBtnCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.CANCEL,\n morePagesBtnCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.MORE,\n noDataFoundText: _app_text__WEBPACK_IMPORTED_MODULE_2__.TEXTS.NO_DATA_FOUND\n};\n\n//Конфигурируемые свойства \"Таблицы данных\" (P8PDataGrid)\nconst P8P_DATA_GRID_CONFIG_PROPS = {\n orderAscMenuItemCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.ORDER_ASC,\n orderDescMenuItemCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.ORDER_DESC,\n filterMenuItemCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.FILTER,\n valueFilterCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.CAPTIONS.VALUE,\n valueFromFilterCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.CAPTIONS.VALUE_FROM,\n valueToFilterCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.CAPTIONS.VALUE_TO,\n okFilterBtnCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.OK,\n clearFilterBtnCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.CLEAR,\n cancelFilterBtnCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.CANCEL,\n morePagesBtnCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.MORE,\n noDataFoundText: _app_text__WEBPACK_IMPORTED_MODULE_2__.TEXTS.NO_DATA_FOUND,\n objectsCopier: _core_utils__WEBPACK_IMPORTED_MODULE_1__.deepCopyObject\n};\n\n//Конфигурируемые свойства \"Диаграммы Ганта\" (P8PGantt)\nconst P8P_GANTT_CONFIG_PROPS = {\n noDataFoundText: _app_text__WEBPACK_IMPORTED_MODULE_2__.TEXTS.NO_DATA_FOUND,\n numbTaskEditorCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.CAPTIONS.NUMB,\n nameTaskEditorCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.CAPTIONS.NAME,\n startTaskEditorCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.CAPTIONS.START,\n endTaskEditorCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.CAPTIONS.END,\n progressTaskEditorCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.CAPTIONS.PROGRESS,\n legendTaskEditorCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.CAPTIONS.LEGEND,\n okTaskEditorBtnCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.OK,\n cancelTaskEditorBtnCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.CANCEL\n};\n\n//-----------------------\n//Вспомогательные функции\n//-----------------------\n\n//Рекурсивное добавление свойств элемента, получаемых из конфигурационных файлов\nconst addConfigChildProps = children => react__WEBPACK_IMPORTED_MODULE_0___default().Children.map(children, child => {\n if (! /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().isValidElement(child)) return child;\n const {\n children,\n ...restProps\n } = child.props;\n let configProps = {};\n if (child.type.name === \"P8PPanelsMenuGrid\") configProps = P8P_PANELS_MENU_GRID_CONFIG_PROPS;\n if (child.type.name === \"P8PTable\") configProps = P8P_TABLE_CONFIG_PROPS;\n if (child.type.name === \"P8PDataGrid\") configProps = P8P_DATA_GRID_CONFIG_PROPS;\n if (child.type.name === \"P8PGantt\") configProps = P8P_GANTT_CONFIG_PROPS;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(child.type, {\n ...configProps,\n ...restProps\n }, addConfigChildProps(children));\n});\n\n//-----------\n//Тело модуля\n//-----------\n\n//Обёртка для компонента \"Меню панелей (табличное)\" (P8PPanelsMenuGrid)\nconst P8PPanelsMenuGridConfigWrapped = (props = {}) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_panels_menu__WEBPACK_IMPORTED_MODULE_3__.P8PPanelsMenuGrid, _extends({}, P8P_PANELS_MENU_GRID_CONFIG_PROPS, props));\n\n//Обёртка для компонента \"Рабочее пространство\" (P8PAppWorkspace)\nconst P8PAppWorkspaceConfigWrapped = (props = {}) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_4__.P8PAppWorkspace, _extends({}, P8P_APP_WORKSPACE_CONFIG_PROPS, props));\n\n//Обёртка для компонента \"Таблица\" (P8PTable)\nconst P8PTableConfigWrapped = (props = {}) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_table__WEBPACK_IMPORTED_MODULE_5__.P8PTable, _extends({}, P8P_TABLE_CONFIG_PROPS, props));\n\n//Обёртка для компонента \"Таблица данных\" (P8PDataGrid)\nconst P8PDataGridConfigWrapped = (props = {}) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8PDataGrid, _extends({}, P8P_DATA_GRID_CONFIG_PROPS, props));\n\n//Обёртка для компонента \"Диаграмма Ганта\" (P8PGantt)\nconst P8PGanttConfigWrapped = (props = {}) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_gantt__WEBPACK_IMPORTED_MODULE_7__.P8PGantt, _extends({}, P8P_GANTT_CONFIG_PROPS, props));\n\n//Универсальный элемент-обёртка в параметры конфигурации\nconst ConfigWrapper = ({\n children\n}) => addConfigChildProps(children);\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/config_wrapper.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ConfigWrapper: () => (/* binding */ ConfigWrapper),\n/* harmony export */ P8PAppWorkspaceConfigWrapped: () => (/* binding */ P8PAppWorkspaceConfigWrapped),\n/* harmony export */ P8PCyclogramConfigWrapped: () => (/* binding */ P8PCyclogramConfigWrapped),\n/* harmony export */ P8PDataGridConfigWrapped: () => (/* binding */ P8PDataGridConfigWrapped),\n/* harmony export */ P8PGanttConfigWrapped: () => (/* binding */ P8PGanttConfigWrapped),\n/* harmony export */ P8PPanelsMenuGridConfigWrapped: () => (/* binding */ P8PPanelsMenuGridConfigWrapped),\n/* harmony export */ P8PTableConfigWrapped: () => (/* binding */ P8PTableConfigWrapped),\n/* harmony export */ P8P_APP_WORKSPACE_CONFIG_PROPS: () => (/* binding */ P8P_APP_WORKSPACE_CONFIG_PROPS),\n/* harmony export */ P8P_CYCLOGRAM_CONFIG_PROPS: () => (/* binding */ P8P_CYCLOGRAM_CONFIG_PROPS),\n/* harmony export */ P8P_DATA_GRID_CONFIG_PROPS: () => (/* binding */ P8P_DATA_GRID_CONFIG_PROPS),\n/* harmony export */ P8P_DATA_GRID_DATA_TYPE: () => (/* reexport safe */ _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8P_DATA_GRID_DATA_TYPE),\n/* harmony export */ P8P_DATA_GRID_FILTER_SHAPE: () => (/* reexport safe */ _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8P_DATA_GRID_FILTER_SHAPE),\n/* harmony export */ P8P_DATA_GRID_SIZE: () => (/* reexport safe */ _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8P_DATA_GRID_SIZE),\n/* harmony export */ P8P_GANTT_CONFIG_PROPS: () => (/* binding */ P8P_GANTT_CONFIG_PROPS),\n/* harmony export */ P8P_GANTT_TASK_ATTRIBUTE_SHAPE: () => (/* reexport safe */ _components_p8p_gantt__WEBPACK_IMPORTED_MODULE_7__.P8P_GANTT_TASK_ATTRIBUTE_SHAPE),\n/* harmony export */ P8P_GANTT_TASK_COLOR_SHAPE: () => (/* reexport safe */ _components_p8p_gantt__WEBPACK_IMPORTED_MODULE_7__.P8P_GANTT_TASK_COLOR_SHAPE),\n/* harmony export */ P8P_GANTT_TASK_SHAPE: () => (/* reexport safe */ _components_p8p_gantt__WEBPACK_IMPORTED_MODULE_7__.P8P_GANTT_TASK_SHAPE),\n/* harmony export */ P8P_PANELS_MENU_GRID_CONFIG_PROPS: () => (/* binding */ P8P_PANELS_MENU_GRID_CONFIG_PROPS),\n/* harmony export */ P8P_PANELS_MENU_PANEL_SHAPE: () => (/* reexport safe */ _components_p8p_panels_menu__WEBPACK_IMPORTED_MODULE_3__.P8P_PANELS_MENU_PANEL_SHAPE),\n/* harmony export */ P8P_TABLE_CONFIG_PROPS: () => (/* binding */ P8P_TABLE_CONFIG_PROPS),\n/* harmony export */ P8P_TABLE_DATA_TYPE: () => (/* reexport safe */ _components_p8p_table__WEBPACK_IMPORTED_MODULE_5__.P8P_TABLE_DATA_TYPE),\n/* harmony export */ P8P_TABLE_FILTER_SHAPE: () => (/* reexport safe */ _components_p8p_table__WEBPACK_IMPORTED_MODULE_5__.P8P_TABLE_FILTER_SHAPE),\n/* harmony export */ P8P_TABLE_SIZE: () => (/* reexport safe */ _components_p8p_table__WEBPACK_IMPORTED_MODULE_5__.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 _core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../app.text */ \"./app.text.js\");\n/* harmony import */ var _components_p8p_panels_menu__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./components/p8p_panels_menu */ \"./app/components/p8p_panels_menu.js\");\n/* harmony import */ var _components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./components/p8p_app_workspace */ \"./app/components/p8p_app_workspace.js\");\n/* harmony import */ var _components_p8p_table__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./components/p8p_table */ \"./app/components/p8p_table.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _components_p8p_gantt__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./components/p8p_gantt */ \"./app/components/p8p_gantt.js\");\n/* harmony import */ var _components_p8p_cyclogram__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./components/p8p_cyclogram */ \"./app/components/p8p_cyclogram.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 //Меню панелей\n //Рабочее пространство\n //Таблица данных\n //Таблица данных\n //Диаграмма Ганта\n //Циклограмма\n\n//---------\n//Константы\n//---------\n\n//Конфигурируемые свойства \"Меню панелей (табличное)\" (P8PPanelsMenuGrid)\nconst P8P_PANELS_MENU_GRID_CONFIG_PROPS = {\n navigateCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.NAVIGATE,\n defaultGroupTytle: _app_text__WEBPACK_IMPORTED_MODULE_2__.TITLES.DEFAULT_PANELS_GROUP\n};\n\n//Конфигурируемые свойства \"Рабочего пространства\" (P8PAppWorkspace)\nconst P8P_APP_WORKSPACE_CONFIG_PROPS = {\n closeCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.CLOSE,\n homeCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.NAVIGATE_HOME\n};\n\n//Конфигурируемые свойства \"Таблицы\" (P8PTable)\nconst P8P_TABLE_CONFIG_PROPS = {\n orderAscMenuItemCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.ORDER_ASC,\n orderDescMenuItemCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.ORDER_DESC,\n filterMenuItemCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.FILTER,\n valueFilterCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.CAPTIONS.VALUE,\n valueFromFilterCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.CAPTIONS.VALUE_FROM,\n valueToFilterCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.CAPTIONS.VALUE_TO,\n okFilterBtnCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.OK,\n clearFilterBtnCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.CLEAR,\n cancelFilterBtnCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.CANCEL,\n morePagesBtnCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.MORE,\n noDataFoundText: _app_text__WEBPACK_IMPORTED_MODULE_2__.TEXTS.NO_DATA_FOUND\n};\n\n//Конфигурируемые свойства \"Таблицы данных\" (P8PDataGrid)\nconst P8P_DATA_GRID_CONFIG_PROPS = {\n orderAscMenuItemCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.ORDER_ASC,\n orderDescMenuItemCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.ORDER_DESC,\n filterMenuItemCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.FILTER,\n valueFilterCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.CAPTIONS.VALUE,\n valueFromFilterCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.CAPTIONS.VALUE_FROM,\n valueToFilterCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.CAPTIONS.VALUE_TO,\n okFilterBtnCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.OK,\n clearFilterBtnCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.CLEAR,\n cancelFilterBtnCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.CANCEL,\n morePagesBtnCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.MORE,\n noDataFoundText: _app_text__WEBPACK_IMPORTED_MODULE_2__.TEXTS.NO_DATA_FOUND,\n objectsCopier: _core_utils__WEBPACK_IMPORTED_MODULE_1__.deepCopyObject\n};\n\n//Конфигурируемые свойства \"Диаграммы Ганта\" (P8PGantt)\nconst P8P_GANTT_CONFIG_PROPS = {\n noDataFoundText: _app_text__WEBPACK_IMPORTED_MODULE_2__.TEXTS.NO_DATA_FOUND,\n numbTaskEditorCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.CAPTIONS.NUMB,\n nameTaskEditorCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.CAPTIONS.NAME,\n startTaskEditorCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.CAPTIONS.START,\n endTaskEditorCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.CAPTIONS.END,\n progressTaskEditorCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.CAPTIONS.PROGRESS,\n legendTaskEditorCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.CAPTIONS.LEGEND,\n okTaskEditorBtnCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.OK,\n cancelTaskEditorBtnCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.CANCEL\n};\n\n//Конфигурируемые свойства \"Циклограммы\" (P8PCyclogram)\nconst P8P_CYCLOGRAM_CONFIG_PROPS = {\n noDataFoundText: _app_text__WEBPACK_IMPORTED_MODULE_2__.TEXTS.NO_DATA_FOUND,\n nameTaskEditorCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.CAPTIONS.NAME,\n okTaskEditorBtnCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.OK,\n cancelTaskEditorBtnCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.CANCEL\n};\n\n//-----------------------\n//Вспомогательные функции\n//-----------------------\n\n//Рекурсивное добавление свойств элемента, получаемых из конфигурационных файлов\nconst addConfigChildProps = children => react__WEBPACK_IMPORTED_MODULE_0___default().Children.map(children, child => {\n if (! /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().isValidElement(child)) return child;\n const {\n children,\n ...restProps\n } = child.props;\n let configProps = {};\n if (child.type.name === \"P8PPanelsMenuGrid\") configProps = P8P_PANELS_MENU_GRID_CONFIG_PROPS;\n if (child.type.name === \"P8PTable\") configProps = P8P_TABLE_CONFIG_PROPS;\n if (child.type.name === \"P8PDataGrid\") configProps = P8P_DATA_GRID_CONFIG_PROPS;\n if (child.type.name === \"P8PGantt\") configProps = P8P_GANTT_CONFIG_PROPS;\n if (child.type.name === \"P8PCyclogram\") configProps = P8P_CYCLOGRAM_CONFIG_PROPS;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(child.type, {\n ...configProps,\n ...restProps\n }, addConfigChildProps(children));\n});\n\n//-----------\n//Тело модуля\n//-----------\n\n//Обёртка для компонента \"Меню панелей (табличное)\" (P8PPanelsMenuGrid)\nconst P8PPanelsMenuGridConfigWrapped = (props = {}) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_panels_menu__WEBPACK_IMPORTED_MODULE_3__.P8PPanelsMenuGrid, _extends({}, P8P_PANELS_MENU_GRID_CONFIG_PROPS, props));\n\n//Обёртка для компонента \"Рабочее пространство\" (P8PAppWorkspace)\nconst P8PAppWorkspaceConfigWrapped = (props = {}) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_4__.P8PAppWorkspace, _extends({}, P8P_APP_WORKSPACE_CONFIG_PROPS, props));\n\n//Обёртка для компонента \"Таблица\" (P8PTable)\nconst P8PTableConfigWrapped = (props = {}) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_table__WEBPACK_IMPORTED_MODULE_5__.P8PTable, _extends({}, P8P_TABLE_CONFIG_PROPS, props));\n\n//Обёртка для компонента \"Таблица данных\" (P8PDataGrid)\nconst P8PDataGridConfigWrapped = (props = {}) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8PDataGrid, _extends({}, P8P_DATA_GRID_CONFIG_PROPS, props));\n\n//Обёртка для компонента \"Диаграмма Ганта\" (P8PGantt)\nconst P8PGanttConfigWrapped = (props = {}) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_gantt__WEBPACK_IMPORTED_MODULE_7__.P8PGantt, _extends({}, P8P_GANTT_CONFIG_PROPS, props));\n\n//Обёртка для компонента \"Циклограмма\" (P8PCyclogram)\nconst P8PCyclogramConfigWrapped = (props = {}) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_cyclogram__WEBPACK_IMPORTED_MODULE_8__.P8PCyclogram, _extends({}, P8P_GANTT_CONFIG_PROPS, props));\n\n//Универсальный элемент-обёртка в параметры конфигурации\nconst ConfigWrapper = ({\n children\n}) => addConfigChildProps(children);\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/config_wrapper.js?"); /***/ }), @@ -5497,6 +5508,17 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./app/panels/samples/cyclogram.js": +/*!*****************************************!*\ + !*** ./app/panels/samples/cyclogram.js ***! + \*****************************************/ +/***/ ((__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 */ Cyclogram: () => (/* binding */ Cyclogram)\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_16__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_16___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_16__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/List/List.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItem/ListItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemText/ListItemText.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Divider/Divider.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.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_app_workspace__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../components/p8p_app_workspace */ \"./app/components/p8p_app_workspace.js\");\n/* harmony import */ var _components_p8p_cyclogram__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../components/p8p_cyclogram */ \"./app/components/p8p_cyclogram.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.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 Пример: Циклограмма \"P8PCyclogram\"\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Вспомогательные функции\n //Заголовок страницы\n //Циклограмма\n //Подключение компонентов к настройкам приложения\n //Контекст взаимодействия с сервером\n\n//---------\n//Константы\n//---------\n\n//Отступ контейнера страницы от заголовка\nconst CONTAINER_PADDING_TOP = \"20px\";\n\n//Высота заголовка страницы\nconst TITLE_HEIGHT = \"47px\";\n\n//Высота строк\nconst LINE_HEIGHT = 30;\n\n//Стили\nconst STYLES = {\n CONTAINER: {\n textAlign: \"center\",\n paddingTop: CONTAINER_PADDING_TOP\n },\n TITLE: {\n paddingBottom: \"15px\",\n height: TITLE_HEIGHT\n },\n CYCLOGRAM_CONTAINER: {\n height: `calc(100vh - ${_components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_2__.APP_BAR_HEIGHT} - ${TITLE_HEIGHT} - ${CONTAINER_PADDING_TOP})`,\n width: \"100vw\",\n paddingTop: \"5px\"\n },\n TASK_EDITOR_CONTENT: {\n minWidth: 400,\n overflowX: \"auto\"\n },\n TASK_EDITOR_LIST: {\n width: \"100%\",\n minWidth: 300,\n maxWidth: 700,\n bgcolor: \"background.paper\"\n },\n GROUP_HEADER: height => ({\n border: \"1px solid\",\n backgroundColor: \"#ecf8fb\",\n height: height,\n borderRadius: \"10px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-around\"\n })\n};\n\n//---------------------------------------------\n//Вспомогательные функции форматирования данных\n//---------------------------------------------\n\n//Диалог открытия задачи\nconst CustomTaskDialog = ({\n task,\n ident,\n handleReload,\n close\n}) => {\n //Собственное состояние\n const [taskDates, setTaskDates] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n start: task.ddate_start,\n end: task.ddate_end\n });\n\n //Тип проекта\n const textType = task.type === 0 ? \"Задачи проекта\" : task.type === 1 ? \"Этап проекта\" : \"Работа проекта\";\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_5__[\"BackEndСtx\"]);\n\n //Изменение дат задачи\n const changeDates = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n //Изменяем даты задачи\n await executeStored({\n stored: \"PKG_P8PANELS_SAMPLES.CYCLOGRAM_TASK_MODIFY\",\n args: {\n NIDENT: ident,\n NRN: task.rn,\n SDATE_FROM: (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.formatDateRF)(taskDates.start),\n SDATE_TO: (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.formatDateRF)(taskDates.end)\n }\n });\n handleReload();\n close();\n }, [close, executeStored, handleReload, ident, task.rn, taskDates.end, taskDates.start]);\n\n //При нажатии OK\n const handleOk = () => {\n //Изменяем даты задачи\n changeDates();\n };\n return /*#__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_6__[\"default\"], {\n sx: STYLES.TASK_EDITOR_CONTENT\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n sx: STYLES.TASK_EDITOR_LIST\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n alignItems: \"flex-start\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n primary: \"Наименование\",\n secondary: task.fullName\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n component: \"li\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n alignItems: \"flex-start\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n secondaryTypographyProps: {\n component: \"span\"\n },\n primary: \"Начало\",\n secondary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n error: !taskDates.start,\n disabled: task.type !== 2,\n name: \"start\",\n fullWidth: true,\n required: true,\n InputLabelProps: {\n shrink: true\n },\n type: \"date\",\n value: taskDates.start,\n onChange: e => setTaskDates(pv => ({\n ...pv,\n start: e.target.value\n })),\n variant: \"standard\",\n size: \"small\",\n margin: \"normal\"\n })\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n component: \"li\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n alignItems: \"flex-start\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n secondaryTypographyProps: {\n component: \"span\"\n },\n primary: \"Окончание\",\n secondary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n error: !taskDates.end,\n disabled: task.type !== 2,\n name: \"end\",\n fullWidth: true,\n required: true,\n InputLabelProps: {\n shrink: true\n },\n type: \"date\",\n value: taskDates.end,\n onChange: e => setTaskDates(pv => ({\n ...pv,\n end: e.target.value\n })),\n variant: \"standard\",\n size: \"small\",\n margin: \"normal\"\n })\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n component: \"li\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n alignItems: \"flex-start\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n primary: \"Тип\",\n secondaryTypographyProps: {\n component: \"span\"\n },\n secondary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n direction: \"row\",\n gap: 0.5\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n title: textType\n }, task.type === 0 ? \"description\" : task.type === 1 ? \"check\" : \"work_outline\"), textType)\n })))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n onClick: handleOk\n }, \"\\u041E\\u041A\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n onClick: close\n }, \"\\u041E\\u0442\\u043C\\u0435\\u043D\\u0430\")));\n};\n\n//Контроль свойств - Диалог открытия задачи\nCustomTaskDialog.propTypes = {\n task: (prop_types__WEBPACK_IMPORTED_MODULE_16___default().object).isRequired,\n ident: (prop_types__WEBPACK_IMPORTED_MODULE_16___default().number).isRequired,\n handleReload: (prop_types__WEBPACK_IMPORTED_MODULE_16___default().func).isRequired,\n close: (prop_types__WEBPACK_IMPORTED_MODULE_16___default().func).isRequired\n};\n\n//Заголовок группы\nconst CustomGroupHeader = ({\n group\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n sx: STYLES.GROUP_HEADER(group.height)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n variant: \"body2\"\n }, group.name));\n};\n\n//Контроль свойств - Заголовок группы\nCustomGroupHeader.propTypes = {\n group: (prop_types__WEBPACK_IMPORTED_MODULE_16___default().object).isRequired\n};\n\n//Отображение задачи\nconst taskRenderer = ({\n task\n}) => {\n //Если это задачи проекта\n if (task.type === 0) {\n return {\n taskStyle: {\n border: \"3px solid #ebe058\"\n }\n };\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Пример: Циклограмма \"P8PCyclogram\"\nconst Cyclogram = ({\n title\n}) => {\n //Собственное состояние\n const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n init: false,\n dataLoaded: false,\n reload: true,\n ident: null\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_5__[\"BackEndСtx\"]);\n\n //При необходимости перезагрузки\n const handleReload = () => {\n setState(pv => ({\n ...pv,\n reload: true\n }));\n };\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Загрузка данных циклограммы с сервера\n const loadData = async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_SAMPLES.CYCLOGRAM\",\n args: {\n NIDENT: state.ident\n },\n attributeValueProcessor: (name, val) => name === \"name\" ? undefined : [\"ddate_start\", \"ddate_end\"].includes(name) ? (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.formatDateJSONDateOnly)(val) : val,\n respArg: \"COUT\"\n });\n setState(pv => ({\n ...pv,\n dataLoaded: true,\n ...data.XCYCLOGRAM,\n reload: false\n }));\n };\n //Если указан идентификатор и требуется перезагрузить\n if (state.ident && state.reload) loadData();\n }, [state.ident, state.reload, executeStored]);\n\n //При подключении компонента к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Инициализация данных циклограммы\n const initData = async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_SAMPLES.CYCLOGRAM_INIT\",\n args: {\n NIDENT: state.ident\n }\n });\n setState(pv => ({\n ...pv,\n init: true,\n ident: data.NIDENT,\n reload: true\n }));\n };\n //Если требуется проинициализировать\n if (!state.init) {\n initData();\n }\n }, [executeStored, state.ident, state.init]);\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], null, /*#__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_18__[\"default\"], {\n sx: STYLES.TITLE,\n variant: \"h6\"\n }, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n container: true,\n direction: \"column\",\n alignItems: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n item: true,\n xs: 12\n }, state.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_cyclogram__WEBPACK_IMPORTED_MODULE_3__.P8PCyclogram, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_4__.P8P_CYCLOGRAM_CONFIG_PROPS, state, {\n containerStyle: STYLES.CYCLOGRAM_CONTAINER,\n lineHeight: LINE_HEIGHT,\n taskDialogRenderer: prms => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(CustomTaskDialog, {\n task: prms.task,\n ident: state.ident,\n handleReload: handleReload,\n close: prms.close\n }),\n taskRenderer: prms => taskRenderer(prms),\n groupHeaderRenderer: prms => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(CustomGroupHeader, {\n group: prms.group\n })\n })) : null))));\n};\n\n//Контроль свойств - Пример: Циклограмма \"P8PCyclogram\"\nCyclogram.propTypes = {\n title: (prop_types__WEBPACK_IMPORTED_MODULE_16___default().string).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/samples/cyclogram.js?"); + +/***/ }), + /***/ "./app/panels/samples/data_grid.js": /*!*****************************************!*\ !*** ./app/panels/samples/data_grid.js ***! @@ -5581,7 +5603,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 */ Samples: () => (/* binding */ Samples)\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 _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Fab/Fab.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.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 _app_text__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _p8online__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./p8online */ \"./app/panels/samples/p8online.js\");\n/* harmony import */ var _mui__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./mui */ \"./app/panels/samples/mui.js\");\n/* harmony import */ var _messages__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./messages */ \"./app/panels/samples/messages.js\");\n/* harmony import */ var _loader__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./loader */ \"./app/panels/samples/loader.js\");\n/* harmony import */ var _data_grid__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./data_grid */ \"./app/panels/samples/data_grid.js\");\n/* harmony import */ var _chart__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./chart */ \"./app/panels/samples/chart.js\");\n/* harmony import */ var _gantt__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./gantt */ \"./app/panels/samples/gantt.js\");\n/* harmony import */ var _svg__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./svg */ \"./app/panels/samples/svg.js\");\n/*\r\n Парус 8 - Панели мониторинга - Примеры для разработчиков\r\n Панель мониторинга: Примеры для разработчиков\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Интерфейсные элементы\n //Текстовые ресурсы и константы\n //Пример: API для взаимодействия с \"ПАРУС 8 Онлайн\"\n //Пример: Компоненты MUI\n //Пример: Сообщения\n //Пример: Индикатор процесса\n //Пример: Таблица данных \"P8PDataGrid\"\n //Пример: Графики \"P8PChart\"\n //Пример: Диаграмма Ганта \"P8PGantt\"\n //Пример: Интерактивные изображения \"P8PSVG\"\n\n//---------\n//Константы\n//---------\n\n//Режимы\nconst MODES = {\n P8ONLINE: {\n name: \"P8ONLINE\",\n caption: 'API для взаимодействия с \"ПАРУС 8 Онлайн\"',\n component: _p8online__WEBPACK_IMPORTED_MODULE_2__.P8Online\n },\n MUI: {\n name: \"MUI\",\n caption: \"Компоненты MUI\",\n component: _mui__WEBPACK_IMPORTED_MODULE_3__.Mui\n },\n MESSAGES: {\n name: \"MESSAGES\",\n caption: \"Сообщения\",\n component: _messages__WEBPACK_IMPORTED_MODULE_4__.Messages\n },\n LOADER: {\n name: \"LOADER\",\n caption: \"Индикатор процесса\",\n component: _loader__WEBPACK_IMPORTED_MODULE_5__.Loader\n },\n DATAGRID: {\n name: \"DATAGRID\",\n caption: 'Таблица данных \"P8PDataGrid\"',\n component: _data_grid__WEBPACK_IMPORTED_MODULE_6__.DataGrid\n },\n CHART: {\n name: \"CHART\",\n caption: 'Графики \"P8PChart\"',\n component: _chart__WEBPACK_IMPORTED_MODULE_7__.Chart\n },\n GANTT: {\n name: \"GANTT\",\n caption: 'Диаграмма Ганта \"P8PGantt\"',\n component: _gantt__WEBPACK_IMPORTED_MODULE_8__.Gantt\n },\n SVG: {\n name: \"SVG\",\n caption: 'Интерактивные изображения \"P8PSVG\"',\n component: _svg__WEBPACK_IMPORTED_MODULE_9__.Svg\n }\n};\n\n//Стили\nconst STYLES = {\n ROOT: {\n height: \"calc(100vh - 64px)\"\n },\n CONTAINER: {\n textAlign: \"center\",\n paddingTop: \"20px\"\n },\n BACK_BUTTON: {\n position: \"absolute\",\n left: \"20px\",\n marginTop: \"20px\"\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Примеры\nconst Samples = () => {\n //Собственное состояние\n const [mode, setMode] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(\"\");\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: STYLES.ROOT\n }, mode ? /*#__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_10__[\"default\"], {\n variant: \"extended\",\n sx: STYLES.BACK_BUTTON,\n onClick: () => setMode(\"\")\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, \"arrow_back_ios\"), _app_text__WEBPACK_IMPORTED_MODULE_1__.BUTTONS.NAVIGATE_BACK), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(MODES[mode]?.component || (() => {}), {\n title: MODES[mode]?.caption\n })) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: STYLES.CONTAINER\n }, Object.entries(MODES).map(m => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n key: m[0]\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n onClick: () => setMode(m[1].name)\n }, m[1].caption)))));\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/samples/samples.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Samples: () => (/* binding */ Samples)\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 _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Fab/Fab.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.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 _app_text__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _p8online__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./p8online */ \"./app/panels/samples/p8online.js\");\n/* harmony import */ var _mui__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./mui */ \"./app/panels/samples/mui.js\");\n/* harmony import */ var _messages__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./messages */ \"./app/panels/samples/messages.js\");\n/* harmony import */ var _loader__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./loader */ \"./app/panels/samples/loader.js\");\n/* harmony import */ var _data_grid__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./data_grid */ \"./app/panels/samples/data_grid.js\");\n/* harmony import */ var _chart__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./chart */ \"./app/panels/samples/chart.js\");\n/* harmony import */ var _gantt__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./gantt */ \"./app/panels/samples/gantt.js\");\n/* harmony import */ var _svg__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./svg */ \"./app/panels/samples/svg.js\");\n/* harmony import */ var _cyclogram__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./cyclogram */ \"./app/panels/samples/cyclogram.js\");\n/*\r\n Парус 8 - Панели мониторинга - Примеры для разработчиков\r\n Панель мониторинга: Примеры для разработчиков\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Интерфейсные элементы\n //Текстовые ресурсы и константы\n //Пример: API для взаимодействия с \"ПАРУС 8 Онлайн\"\n //Пример: Компоненты MUI\n //Пример: Сообщения\n //Пример: Индикатор процесса\n //Пример: Таблица данных \"P8PDataGrid\"\n //Пример: Графики \"P8PChart\"\n //Пример: Диаграмма Ганта \"P8PGantt\"\n //Пример: Интерактивные изображения \"P8PSVG\"\n //Пример: Циклограмма \"P8PCyclogram\"\n\n//---------\n//Константы\n//---------\n\n//Режимы\nconst MODES = {\n P8ONLINE: {\n name: \"P8ONLINE\",\n caption: 'API для взаимодействия с \"ПАРУС 8 Онлайн\"',\n component: _p8online__WEBPACK_IMPORTED_MODULE_2__.P8Online\n },\n MUI: {\n name: \"MUI\",\n caption: \"Компоненты MUI\",\n component: _mui__WEBPACK_IMPORTED_MODULE_3__.Mui\n },\n MESSAGES: {\n name: \"MESSAGES\",\n caption: \"Сообщения\",\n component: _messages__WEBPACK_IMPORTED_MODULE_4__.Messages\n },\n LOADER: {\n name: \"LOADER\",\n caption: \"Индикатор процесса\",\n component: _loader__WEBPACK_IMPORTED_MODULE_5__.Loader\n },\n DATAGRID: {\n name: \"DATAGRID\",\n caption: 'Таблица данных \"P8PDataGrid\"',\n component: _data_grid__WEBPACK_IMPORTED_MODULE_6__.DataGrid\n },\n CHART: {\n name: \"CHART\",\n caption: 'Графики \"P8PChart\"',\n component: _chart__WEBPACK_IMPORTED_MODULE_7__.Chart\n },\n GANTT: {\n name: \"GANTT\",\n caption: 'Диаграмма Ганта \"P8PGantt\"',\n component: _gantt__WEBPACK_IMPORTED_MODULE_8__.Gantt\n },\n SVG: {\n name: \"SVG\",\n caption: 'Интерактивные изображения \"P8PSVG\"',\n component: _svg__WEBPACK_IMPORTED_MODULE_9__.Svg\n },\n CYCLOGRAM: {\n name: \"CYCLOGRAM\",\n caption: 'Циклограмма \"P8PCyclogram\"',\n component: _cyclogram__WEBPACK_IMPORTED_MODULE_10__.Cyclogram\n }\n};\n\n//Стили\nconst STYLES = {\n ROOT: {\n height: \"calc(100vh - 64px)\"\n },\n CONTAINER: {\n textAlign: \"center\",\n paddingTop: \"20px\"\n },\n BACK_BUTTON: {\n position: \"absolute\",\n left: \"20px\",\n marginTop: \"20px\"\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Примеры\nconst Samples = () => {\n //Собственное состояние\n const [mode, setMode] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(\"\");\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: STYLES.ROOT\n }, mode ? /*#__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_11__[\"default\"], {\n variant: \"extended\",\n sx: STYLES.BACK_BUTTON,\n onClick: () => setMode(\"\")\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, \"arrow_back_ios\"), _app_text__WEBPACK_IMPORTED_MODULE_1__.BUTTONS.NAVIGATE_BACK), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(MODES[mode]?.component || (() => {}), {\n title: MODES[mode]?.caption\n })) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: STYLES.CONTAINER\n }, Object.entries(MODES).map(m => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n key: m[0]\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: () => setMode(m[1].name)\n }, m[1].caption)))));\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/samples/samples.js?"); /***/ }), -- 2.34.1 From 1d6007c4b7c052de727ddbc24628af472401fc35 Mon Sep 17 00:00:00 2001 From: davay-popozhe Date: Thu, 21 Nov 2024 14:52:36 +0300 Subject: [PATCH 6/7] =?UTF-8?q?=D0=A6=D0=98=D0=A2=D0=9A-928?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/PKG_P8PANELS_MECHREC.pck | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/db/PKG_P8PANELS_MECHREC.pck b/db/PKG_P8PANELS_MECHREC.pck index 1153fa3..d85e03f 100644 --- a/db/PKG_P8PANELS_MECHREC.pck +++ b/db/PKG_P8PANELS_MECHREC.pck @@ -2757,6 +2757,11 @@ create or replace package body PKG_P8PANELS_MECHREC as if (NTASK_CLASS = NCLASS_PART_DEFICIT) then /* Определяем пропорции прогресса */ NTASK_PROGRESS := ROUND(C.NREL_FACT / C.NMAIN_QUANT * 100); + /* Если значение прогресса задачи больше 100 */ + if (NTASK_PROGRESS > 100) then + /* Устанавливаем максимальное допустимое значение - 100 */ + NTASK_PROGRESS := 100; + end if; else /* Не требуется */ NTASK_PROGRESS := null; @@ -6190,11 +6195,11 @@ create or replace package body PKG_P8PANELS_MECHREC as /* Определяем детализацию по прогрессу */ case when (NPROGRESS >= 70) then - SRESULT := 'Основная сборка: Стыковка агрегатов выполнена'; + SRESULT := 'Основная сборка'; when (NPROGRESS >= 40) then - SRESULT := 'Изготовление агрегатов: Фюзеляж и ОЧК не переданы в цех ОС'; + SRESULT := 'Изготовление агрегатов'; when (NPROGRESS >= 10) then - SRESULT := 'Изготовление ДСЕ: Фюзеляж и ОЧК не укомлектованы ДСЕ'; + SRESULT := 'Изготовление ДСЕ'; else SRESULT := 'Изготовление ДСЕ не начато'; end case; -- 2.34.1 From 078550ad060386598910bf74ff0d032d4baf46e1 Mon Sep 17 00:00:00 2001 From: davay-popozhe Date: Thu, 21 Nov 2024 15:04:16 +0300 Subject: [PATCH 7/7] =?UTF-8?q?=D0=A6=D0=98=D0=A2=D0=9A-928?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/PKG_P8PANELS_MECHREC.pck | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/db/PKG_P8PANELS_MECHREC.pck b/db/PKG_P8PANELS_MECHREC.pck index d85e03f..49a5165 100644 --- a/db/PKG_P8PANELS_MECHREC.pck +++ b/db/PKG_P8PANELS_MECHREC.pck @@ -6195,11 +6195,11 @@ create or replace package body PKG_P8PANELS_MECHREC as /* Определяем детализацию по прогрессу */ case when (NPROGRESS >= 70) then - SRESULT := 'Основная сборка'; + SRESULT := 'Основная сборка: Стыковка агрегатов выполнена'; when (NPROGRESS >= 40) then - SRESULT := 'Изготовление агрегатов'; + SRESULT := 'Изготовление агрегатов: Фюзеляж и ОЧК не переданы в цех ОС'; when (NPROGRESS >= 10) then - SRESULT := 'Изготовление ДСЕ'; + SRESULT := 'Изготовление ДСЕ: Фюзеляж и ОЧК не укомлектованы ДСЕ'; else SRESULT := 'Изготовление ДСЕ не начато'; end case; -- 2.34.1