From 3e7b1d64daf51723fe67c1e12e1bd84ba2c9b1c0 Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Sat, 1 Nov 2025 18:59:52 +0300 Subject: [PATCH] =?UTF-8?q?WEBAPP:=20=D0=A1=D0=B2=D0=B5=D0=B6=D0=B0=D1=8F?= =?UTF-8?q?=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 | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/dist/p8-panels.js b/dist/p8-panels.js index a74a1e9..09d6c48 100644 --- a/dist/p8-panels.js +++ b/dist/p8-panels.js @@ -543,7 +543,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 */ TaskCard: () => (/* binding */ TaskCard)\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_14__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_14__);\n/* harmony import */ var react_beautiful_dnd__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! react-beautiful-dnd */ \"./node_modules/react-beautiful-dnd/dist/react-beautiful-dnd.esm.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.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/Menu/Menu.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/MenuItem/MenuItem.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_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Card/Card.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/CardHeader/CardHeader.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/CardContent/CardContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Avatar/Avatar.js\");\n/* harmony import */ var _task_dialog__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../task_dialog */ \"./app/panels/clnt_task_board/task_dialog.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../layouts */ \"./app/panels/clnt_task_board/layouts.js\");\n/* harmony import */ var _hooks_dict_hooks__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../hooks/dict_hooks */ \"./app/panels/clnt_task_board/hooks/dict_hooks.js\");\n/* harmony import */ var _hooks_tasks_hooks__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../hooks/tasks_hooks */ \"./app/panels/clnt_task_board/hooks/tasks_hooks.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 //Работа с drag&drop\n //Интерфейсные компоненты\n //Форма события\n //Контекст приложения\n //Контекст взаимодействия с сервером\n //Контекст сообщений\n //Дополнительная разметка и вёрстка клиентских элементов\n //Состояние открытия разделов\n //Состояние вспомогательных функций событий\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n MENU_ITEM_DELIMITER: {\n borderBottom: \"1px solid lightgrey\"\n },\n CARD: (indicatorClr, bgClr) => {\n const i = indicatorClr ? {\n borderLeft: `solid ${indicatorClr}`\n } : null;\n const bc = bgClr ? {\n backgroundColor: bgClr\n } : null;\n return {\n ...i,\n ...bc\n };\n },\n CARD_HEADER_TITLE: {\n padding: \"4px\",\n width: \"292px\",\n display: \"-webkit-box\",\n hyphens: \"auto\",\n WebkitBoxOrient: \"vertical\",\n WebkitLineClamp: 2,\n overflow: \"hidden\"\n },\n CARD_HEADER: {\n padding: 0,\n cursor: \"pointer\"\n },\n CARD_CONTENT: {\n padding: \"4px !important\"\n },\n CARD_CONTENT_BOX: {\n display: \"flex\",\n alignItems: \"center\"\n },\n STACK_SENDER: {\n alignItems: \"center\",\n marginLeft: \"auto\"\n },\n TYPOGRAPHY_SECONDARY: {\n color: \"text.secondary\",\n fontSize: 14\n },\n ICON_COLOR: linked => {\n return {\n color: theme => linked ? _layouts__WEBPACK_IMPORTED_MODULE_5__.TASK_COLORS.LINKED : theme.palette.grey[500]\n };\n }\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Действия карточки события\nconst CardActions = ({\n taskRn,\n menuItems,\n cardActions,\n onMethodsMenuButtonClick,\n onMethodsMenuClose,\n onTasksReload,\n pointSettings,\n onOpenNoteDialog\n}) => {\n //При нажатии на действие меню\n const handleActionClick = action => {\n //Выполняем действие\n action.func({\n nEvent: taskRn,\n onReload: action.tasksReload ? () => onTasksReload(action.needAccountsReload) : null,\n onNoteOpen: pointSettings.ADDNOTE_ONSEND ? onOpenNoteDialog : null\n });\n //Закрываем меню действий\n onMethodsMenuClose();\n };\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n sx: STYLES.BOX_ROW\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n id: `${taskRn}_menu_button`,\n \"aria-haspopup\": \"true\",\n onClick: onMethodsMenuButtonClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null, \"more_vert\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n id: `${taskRn}_menu`,\n anchorEl: cardActions.anchorMenuMethods,\n open: cardActions.openMethods,\n onClose: onMethodsMenuClose\n }, menuItems.map(action => {\n if (action.visible) return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n sx: action.delimiter ? STYLES.MENU_ITEM_DELIMITER : {},\n key: `${taskRn}_${action.method}`,\n onClick: () => handleActionClick(action)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null, action.icon), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n pl: 1\n }, action.name));\n })));\n};\n\n//Контроль свойств - Действия карточки события\nCardActions.propTypes = {\n taskRn: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().number).isRequired,\n menuItems: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().array).isRequired,\n cardActions: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().object).isRequired,\n onMethodsMenuButtonClick: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().func).isRequired,\n onMethodsMenuClose: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().func).isRequired,\n onTasksReload: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().func),\n pointSettings: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().object),\n onOpenNoteDialog: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().func)\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Карточка события\nconst TaskCard = ({\n task,\n index,\n onTasksReload,\n colorRule,\n pointSettings,\n onOpenNoteDialog\n}) => {\n //Состояние диалога события\n const [taskDialogOpen, setTaskDialogOpen] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Состояние действий события\n const [cardActions, setCardActions] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n anchorMenuMethods: null,\n openMethods: false\n });\n\n //Состояние списка действий меню\n const [menuItems, setMenuItems] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]);\n\n //Вспомогательные функции открытия раздела\n const {\n handleClientEventsOpen,\n handleClientEventsNotesOpen,\n handleFileLinksOpen\n } = (0,_hooks_dict_hooks__WEBPACK_IMPORTED_MODULE_6__.useDictionary)();\n\n //Состояние вспомогательных функций событий\n const {\n handleTaskStateChange,\n handleTaskSend\n } = (0,_hooks_tasks_hooks__WEBPACK_IMPORTED_MODULE_7__.useTasksFunctions)();\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_3__[\"BackEndСtx\"]);\n\n //Подключение к контексту сообщений\n const {\n showMsgWarn\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_4__[\"MessagingСtx\"]);\n\n //Подключение к контексту приложения\n const {\n pOnlineShowDocument\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_2__[\"ApplicationСtx\"]);\n\n //По нажатию на открытие меню действий\n const handleMethodsMenuButtonClick = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(event => {\n setCardActions(pv => ({\n ...pv,\n anchorMenuMethods: event.currentTarget,\n openMethods: true\n }));\n }, []);\n\n //При закрытии меню\n const handleMethodsMenuClose = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n setCardActions(pv => ({\n ...pv,\n anchorMenuMethods: null,\n openMethods: false\n }));\n }, []);\n\n //При удалении контрагента\n const handleTaskDelete = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ({\n nEvent,\n onReload\n }) => {\n await executeStored({\n stored: \"PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_DELETE\",\n args: {\n NCLNEVENTS: nEvent\n }\n });\n //Если требуется перезагрузить данные\n onReload ? onReload() : null;\n }, [executeStored]);\n\n //При возврате в предыдущую точку события\n const handleTaskReturn = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ({\n nEvent,\n onReload\n }) => {\n await executeStored({\n stored: \"PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_RETURN\",\n args: {\n NCLNEVENTS: nEvent\n }\n });\n //Если требуется перезагрузить данные\n onReload ? onReload() : null;\n }, [executeStored]);\n\n //По нажатию действия \"Направить\"\n const handleSendAction = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ({\n nEvent,\n onReload,\n onNoteOpen\n }) => {\n //Выполняем направление события\n handleTaskSend({\n nEvent,\n onReload,\n onNoteOpen\n });\n }, [handleTaskSend]);\n\n //По нажатия действия \"Редактировать\"\n const handleTaskEditAction = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n setTaskDialogOpen(true);\n }, []);\n\n //По нажатия действия \"Редактировать в разделе\"\n const handleTaskEditClientAction = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ({\n nEvent\n }) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_SELECT\",\n args: {\n NCLNEVENTS: nEvent\n }\n });\n if (data.NIDENT) {\n //Открываем раздел \"События\" с фильтром по записи\n handleClientEventsOpen({\n nIdent: data.NIDENT\n });\n }\n }, [executeStored, handleClientEventsOpen]);\n\n //По нажатию действия \"Удалить\"\n const handleTaskDeleteAction = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({\n nEvent,\n onReload\n }) => {\n showMsgWarn(\"Удалить событие?\", () => handleTaskDelete({\n nEvent,\n onReload\n }));\n }, [handleTaskDelete, showMsgWarn]);\n\n //По нажатию действия \"Выполнить возврат\"\n const handleTaskReturnAction = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({\n nEvent,\n onReload\n }) => {\n showMsgWarn(\"Выполнить возврат события в предыдущую точку?\", () => handleTaskReturn({\n nEvent,\n onReload\n }));\n }, [handleTaskReturn, showMsgWarn]);\n\n //По нажатию действия \"Примечания\"\n const handleEventNotesOpenAction = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({\n nEvent\n }) => {\n handleClientEventsNotesOpen({\n nPrn: nEvent\n });\n }, [handleClientEventsNotesOpen]);\n\n //По нажатию действия \"Присоединенные документы\"\n const handleTaskFileLinksOpenAction = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({\n nEvent\n }) => {\n handleFileLinksOpen({\n nPrn: nEvent,\n sUnitCode: \"ClientEvents\"\n });\n }, [handleFileLinksOpen]);\n\n //По нажатию действия \"Перейти\"\n const handleStateChangeAction = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ({\n nEvent,\n onReload,\n onNoteOpen\n }) => {\n //Выполняем изменения статуса события\n handleTaskStateChange({\n nEvent,\n onReload,\n onNoteOpen\n });\n }, [handleTaskStateChange]);\n\n //При изменении ссылок в меню действий (для того, чтобы ссылка на объект менялась при реальной необходимости)\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Устанавливаем список меню\n setMenuItems((0,_layouts__WEBPACK_IMPORTED_MODULE_5__.makeCardActionsArray)(handleTaskEditAction, handleTaskEditClientAction, handleTaskDeleteAction, handleStateChangeAction, handleTaskReturnAction, handleSendAction, handleEventNotesOpenAction, handleTaskFileLinksOpenAction));\n }, [handleEventNotesOpenAction, handleTaskFileLinksOpenAction, handleSendAction, handleStateChangeAction, handleTaskDeleteAction, handleTaskEditAction, handleTaskEditClientAction, handleTaskReturnAction]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], null, taskDialogOpen ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_task_dialog__WEBPACK_IMPORTED_MODULE_1__.TaskDialog, {\n taskRn: task.nRn,\n taskType: task.sType,\n editable: pointSettings.BAN_UPDATE ? false : true,\n onTasksReload: onTasksReload,\n onClose: () => {\n setTaskDialogOpen(false);\n }\n }) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_beautiful_dnd__WEBPACK_IMPORTED_MODULE_15__.Draggable, {\n draggableId: task.id.toString(),\n key: task.id,\n index: index\n }, provided => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], _extends({\n ref: provided.innerRef\n }, provided.draggableProps, provided.dragHandleProps, {\n sx: STYLES.CARD((0,_layouts__WEBPACK_IMPORTED_MODULE_5__.getTaskExpiredColor)(task), colorRule.SCOLOR ? (0,_layouts__WEBPACK_IMPORTED_MODULE_5__.getTaskBgColorByRule)(task, colorRule) : null)\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n title: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n className: \"task-info\",\n sx: STYLES.CARD_HEADER_TITLE,\n lang: \"ru\",\n onClick: () => {\n menuItems.find(action => action.method === \"EDIT\" ? action.func(task.nRn, action.tasksReload ? onTasksReload : null) : null);\n }\n }, task.sDescription),\n sx: STYLES.CARD_HEADER,\n action: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(CardActions, {\n taskRn: task.nRn,\n menuItems: menuItems,\n cardActions: cardActions,\n onMethodsMenuButtonClick: handleMethodsMenuButtonClick,\n onMethodsMenuClose: handleMethodsMenuClose,\n onTasksReload: onTasksReload,\n pointSettings: pointSettings,\n onOpenNoteDialog: onOpenNoteDialog\n })\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n sx: STYLES.CARD_CONTENT\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n sx: STYLES.CARD_CONTENT_BOX\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n title: task.nLinkedRn ? \"Событие получено по статусной модели\" : null,\n onClick: task.nLinkedRn ? () => pOnlineShowDocument({\n unitCode: task.sLinkedUnit,\n document: task.nLinkedRn\n }) : null,\n sx: STYLES.ICON_COLOR(task.nLinkedRn),\n disabled: !task.nLinkedRn\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null, \"assignment\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n sx: STYLES.TYPOGRAPHY_SECONDARY\n }, task.name), task.sSender ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n direction: \"row\",\n spacing: 0.5,\n sx: STYLES.STACK_SENDER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n sx: STYLES.TYPOGRAPHY_SECONDARY\n }, task.sSender), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n src: task.avatar ? `data:image/png;base64,${task.avatar}` : null\n })) : null)))));\n};\n\n//Контроль свойств - Карточка события\nTaskCard.propTypes = {\n task: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().object).isRequired,\n index: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().number).isRequired,\n onTasksReload: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().func),\n colorRule: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().object),\n pointSettings: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().object),\n onOpenNoteDialog: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/clnt_task_board/components/task_card.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TaskCard: () => (/* binding */ TaskCard)\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_14__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_14__);\n/* harmony import */ var react_beautiful_dnd__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! react-beautiful-dnd */ \"./node_modules/react-beautiful-dnd/dist/react-beautiful-dnd.esm.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.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/Menu/Menu.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/MenuItem/MenuItem.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_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Card/Card.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/CardHeader/CardHeader.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/CardContent/CardContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Avatar/Avatar.js\");\n/* harmony import */ var _task_dialog__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../task_dialog */ \"./app/panels/clnt_task_board/task_dialog.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../layouts */ \"./app/panels/clnt_task_board/layouts.js\");\n/* harmony import */ var _hooks_dict_hooks__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../hooks/dict_hooks */ \"./app/panels/clnt_task_board/hooks/dict_hooks.js\");\n/* harmony import */ var _hooks_tasks_hooks__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../hooks/tasks_hooks */ \"./app/panels/clnt_task_board/hooks/tasks_hooks.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 //Работа с drag&drop\n //Интерфейсные компоненты\n //Форма события\n //Контекст приложения\n //Контекст взаимодействия с сервером\n //Контекст сообщений\n //Дополнительная разметка и вёрстка клиентских элементов\n //Состояние открытия разделов\n //Состояние вспомогательных функций событий\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n MENU_ITEM_DELIMITER: {\n borderBottom: \"1px solid lightgrey\"\n },\n CARD: (task, colorRule) => {\n const expiredColor = (0,_layouts__WEBPACK_IMPORTED_MODULE_5__.getTaskExpiredColor)(task);\n const backgroundColor = task.nClosed ? \"#d3d3d3\" : colorRule.SCOLOR ? (0,_layouts__WEBPACK_IMPORTED_MODULE_5__.getTaskBgColorByRule)(task, colorRule) : null;\n return {\n ...(expiredColor ? {\n borderLeft: `solid ${expiredColor}`\n } : {}),\n ...(backgroundColor ? {\n backgroundColor: backgroundColor\n } : {})\n };\n },\n CARD_HEADER_TITLE: {\n padding: \"4px\",\n width: \"292px\",\n display: \"-webkit-box\",\n hyphens: \"auto\",\n WebkitBoxOrient: \"vertical\",\n WebkitLineClamp: 2,\n overflow: \"hidden\"\n },\n CARD_HEADER: {\n padding: 0,\n cursor: \"pointer\"\n },\n CARD_CONTENT: {\n padding: \"4px !important\"\n },\n CARD_CONTENT_BOX: {\n display: \"flex\",\n alignItems: \"center\",\n width: \"100%\"\n },\n STACK_SENDER: {\n alignItems: \"center\",\n marginLeft: \"auto\",\n width: \"50%\",\n justifyContent: \"flex-end\",\n paddingLeft: \"10px\",\n gap: \"5px\"\n },\n TYPOGRAPHY_TASK: {\n color: \"text.secondary\",\n fontSize: 14,\n width: \"40%\",\n overflow: \"hidden\"\n },\n TYPOGRAPHY_SENDER: {\n color: \"text.secondary\",\n fontSize: 14,\n width: \"80%\",\n overflow: \"hidden\",\n textAlign: \"end\"\n },\n ICON_COLOR: linked => {\n return {\n color: theme => linked ? _layouts__WEBPACK_IMPORTED_MODULE_5__.TASK_COLORS.LINKED : theme.palette.grey[500],\n width: \"10%\"\n };\n }\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Действия карточки события\nconst CardActions = ({\n taskRn,\n taskClosed,\n menuItems,\n cardActions,\n onMethodsMenuButtonClick,\n onMethodsMenuClose,\n onTasksReload,\n pointSettings,\n onOpenNoteDialog\n}) => {\n //При нажатии на действие меню\n const handleActionClick = action => {\n //Выполняем действие\n action.func({\n nEvent: taskRn,\n onReload: action.tasksReload ? () => onTasksReload(action.needAccountsReload) : null,\n onNoteOpen: pointSettings.ADDNOTE_ONSEND ? onOpenNoteDialog : null\n });\n //Закрываем меню действий\n onMethodsMenuClose();\n };\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n sx: STYLES.BOX_ROW\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n id: `${taskRn}_menu_button`,\n \"aria-haspopup\": \"true\",\n onClick: onMethodsMenuButtonClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null, \"more_vert\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n id: `${taskRn}_menu`,\n anchorEl: cardActions.anchorMenuMethods,\n open: cardActions.openMethods,\n onClose: onMethodsMenuClose\n }, menuItems.map(action => action.visible ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n sx: action.delimiter ? STYLES.MENU_ITEM_DELIMITER : {},\n key: `${taskRn}_${action.method}`,\n onClick: () => handleActionClick(action),\n disabled: taskClosed === 1 && action.disableClosed ? true : false\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null, action.icon), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n pl: 1\n }, action.name)) : null)));\n};\n\n//Контроль свойств - Действия карточки события\nCardActions.propTypes = {\n taskRn: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().number).isRequired,\n taskClosed: prop_types__WEBPACK_IMPORTED_MODULE_14___default().oneOf([0, 1]).isRequired,\n menuItems: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().array).isRequired,\n cardActions: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().object).isRequired,\n onMethodsMenuButtonClick: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().func).isRequired,\n onMethodsMenuClose: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().func).isRequired,\n onTasksReload: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().func),\n pointSettings: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().object),\n onOpenNoteDialog: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().func)\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Карточка события\nconst TaskCard = ({\n task,\n index,\n onTasksReload,\n colorRule,\n pointSettings,\n onOpenNoteDialog\n}) => {\n //Состояние диалога события\n const [taskDialogOpen, setTaskDialogOpen] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Состояние действий события\n const [cardActions, setCardActions] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n anchorMenuMethods: null,\n openMethods: false\n });\n\n //Состояние списка действий меню\n const [menuItems, setMenuItems] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]);\n\n //Вспомогательные функции открытия раздела\n const {\n handleClientEventsOpen,\n handleClientEventsNotesOpen,\n handleFileLinksOpen,\n handleCatalogTreeOpen\n } = (0,_hooks_dict_hooks__WEBPACK_IMPORTED_MODULE_6__.useDictionary)();\n\n //Состояние вспомогательных функций событий\n const {\n handleTaskStateChange,\n handleTaskSend\n } = (0,_hooks_tasks_hooks__WEBPACK_IMPORTED_MODULE_7__.useTasksFunctions)();\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_3__[\"BackEndСtx\"]);\n\n //Подключение к контексту сообщений\n const {\n showMsgWarn\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_4__[\"MessagingСtx\"]);\n\n //Подключение к контексту приложения\n const {\n pOnlineShowDocument\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_2__[\"ApplicationСtx\"]);\n\n //По нажатию на открытие меню действий\n const handleMethodsMenuButtonClick = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(event => {\n setCardActions(pv => ({\n ...pv,\n anchorMenuMethods: event.currentTarget,\n openMethods: true\n }));\n }, []);\n\n //При закрытии меню\n const handleMethodsMenuClose = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n setCardActions(pv => ({\n ...pv,\n anchorMenuMethods: null,\n openMethods: false\n }));\n }, []);\n\n //При удалении контрагента\n const handleTaskDelete = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ({\n nEvent,\n onReload\n }) => {\n await executeStored({\n stored: \"PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_DELETE\",\n args: {\n NCLNEVENTS: nEvent\n }\n });\n //Если требуется перезагрузить данные\n onReload ? onReload() : null;\n }, [executeStored]);\n\n //При возврате в предыдущую точку события\n const handleTaskReturn = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ({\n nEvent,\n onReload\n }) => {\n await executeStored({\n stored: \"PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_RETURN\",\n args: {\n NCLNEVENTS: nEvent\n }\n });\n //Если требуется перезагрузить данные\n onReload ? onReload() : null;\n }, [executeStored]);\n\n //При перемещении в каталог\n const handleTaskMove = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ({\n nEvent,\n nCrn,\n onReload\n }) => {\n await executeStored({\n stored: \"PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_MOVE\",\n args: {\n NCLNEVENTS: nEvent,\n NCRN: nCrn\n }\n });\n //Если требуется перезагрузить данные\n onReload ? onReload() : null;\n }, [executeStored]);\n\n //По нажатию действия \"Направить\"\n const handleTaskSendAction = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ({\n nEvent,\n onReload,\n onNoteOpen\n }) => {\n //Выполняем направление события\n handleTaskSend({\n nEvent,\n onReload,\n onNoteOpen\n });\n }, [handleTaskSend]);\n\n //По нажатия действия \"Редактировать\"\n const handleTaskEditAction = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n setTaskDialogOpen(true);\n }, []);\n\n //По нажатия действия \"Редактировать в разделе\"\n const handleTaskEditClientAction = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ({\n nEvent\n }) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_SELECT\",\n args: {\n NCLNEVENTS: nEvent\n }\n });\n if (data.NIDENT) {\n //Открываем раздел \"События\" с фильтром по записи\n handleClientEventsOpen({\n nIdent: data.NIDENT\n });\n }\n }, [executeStored, handleClientEventsOpen]);\n\n //По нажатию действия \"Удалить\"\n const handleTaskDeleteAction = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({\n nEvent,\n onReload\n }) => {\n showMsgWarn(\"Удалить событие?\", () => handleTaskDelete({\n nEvent,\n onReload\n }));\n }, [handleTaskDelete, showMsgWarn]);\n\n //По нажатию действия \"Выполнить возврат\"\n const handleTaskReturnAction = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({\n nEvent,\n onReload\n }) => {\n showMsgWarn(\"Выполнить возврат события в предыдущую точку?\", () => handleTaskReturn({\n nEvent,\n onReload\n }));\n }, [handleTaskReturn, showMsgWarn]);\n\n //По нажатию действия \"Примечания\"\n const handleEventNotesOpenAction = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({\n nEvent\n }) => {\n handleClientEventsNotesOpen({\n nPrn: nEvent\n });\n }, [handleClientEventsNotesOpen]);\n\n //По нажатию действия \"Присоединенные документы\"\n const handleTaskFileLinksOpenAction = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({\n nEvent\n }) => {\n handleFileLinksOpen({\n nPrn: nEvent,\n sUnitCode: \"ClientEvents\"\n });\n }, [handleFileLinksOpen]);\n\n //По нажатию действия \"Перейти\"\n const handleTaskStateChangeAction = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ({\n nEvent,\n onReload,\n onNoteOpen\n }) => {\n //Выполняем изменения статуса события\n handleTaskStateChange({\n nEvent,\n onReload,\n onNoteOpen\n });\n }, [handleTaskStateChange]);\n\n //По нажатию действия \"Переместить\"\n const handleTaskMoveAction = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ({\n nEvent,\n onReload\n }) => {\n //Открываем выбор записи из раздела \"Каталоги иерархии\"\n handleCatalogTreeOpen({\n sUnitName: \"ClientEvents\",\n nRn: task.nCrn,\n callBack: res => {\n //Выполняем перемещение события\n handleTaskMove({\n nEvent,\n nCrn: res.outParameters.out_RN,\n onReload\n });\n }\n });\n }, [handleCatalogTreeOpen, handleTaskMove, task.nCrn]);\n\n //При изменении ссылок в меню действий (для того, чтобы ссылка на объект менялась при реальной необходимости)\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Устанавливаем список меню\n setMenuItems((0,_layouts__WEBPACK_IMPORTED_MODULE_5__.makeCardActionsArray)(handleTaskEditAction, handleTaskEditClientAction, handleTaskDeleteAction, handleTaskStateChangeAction, handleTaskReturnAction, handleTaskSendAction, handleEventNotesOpenAction, handleTaskFileLinksOpenAction, handleTaskMoveAction));\n }, [handleEventNotesOpenAction, handleTaskFileLinksOpenAction, handleTaskSendAction, handleTaskStateChangeAction, handleTaskDeleteAction, handleTaskEditAction, handleTaskEditClientAction, handleTaskReturnAction, handleTaskMoveAction]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], null, taskDialogOpen ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_task_dialog__WEBPACK_IMPORTED_MODULE_1__.TaskDialog, {\n taskRn: task.nRn,\n taskType: task.sType,\n editable: pointSettings.BAN_UPDATE ? false : true,\n onTasksReload: onTasksReload,\n onClose: () => {\n setTaskDialogOpen(false);\n }\n }) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_beautiful_dnd__WEBPACK_IMPORTED_MODULE_15__.Draggable, {\n draggableId: task.id.toString(),\n key: task.id,\n index: index\n }, provided => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], _extends({\n ref: provided.innerRef\n }, provided.draggableProps, provided.dragHandleProps, {\n sx: STYLES.CARD(task, colorRule)\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n title: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n className: \"task-info\",\n sx: STYLES.CARD_HEADER_TITLE,\n lang: \"ru\",\n onClick: () => {\n menuItems.find(action => action.method === \"EDIT\" ? action.func(task.nRn, action.tasksReload ? onTasksReload : null) : null);\n },\n title: task.sDescription\n }, task.sDescription),\n sx: STYLES.CARD_HEADER,\n action: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(CardActions, {\n taskRn: task.nRn,\n taskClosed: task.nClosed,\n menuItems: menuItems,\n cardActions: cardActions,\n onMethodsMenuButtonClick: handleMethodsMenuButtonClick,\n onMethodsMenuClose: handleMethodsMenuClose,\n onTasksReload: onTasksReload,\n pointSettings: pointSettings,\n onOpenNoteDialog: onOpenNoteDialog\n })\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n sx: STYLES.CARD_CONTENT\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n sx: STYLES.CARD_CONTENT_BOX\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n title: task.nLinkedRn ? \"Событие получено по статусной модели\" : null,\n onClick: task.nLinkedRn ? () => pOnlineShowDocument({\n unitCode: task.sLinkedUnit,\n document: task.nLinkedRn\n }) : null,\n sx: STYLES.ICON_COLOR(task.nLinkedRn),\n disabled: !task.nLinkedRn\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null, \"assignment\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n sx: STYLES.TYPOGRAPHY_TASK,\n noWrap: true,\n title: task.name\n }, task.name), task.sSender ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n direction: \"row\",\n spacing: 0.5,\n sx: STYLES.STACK_SENDER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n sx: STYLES.TYPOGRAPHY_SENDER,\n title: task.sSender,\n noWrap: true\n }, task.sSender), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n src: task.avatar ? `data:image/png;base64,${task.avatar}` : null\n })) : null)))));\n};\n\n//Контроль свойств - Карточка события\nTaskCard.propTypes = {\n task: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().object).isRequired,\n index: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().number).isRequired,\n onTasksReload: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().func),\n colorRule: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().object),\n pointSettings: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().object),\n onOpenNoteDialog: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/clnt_task_board/components/task_card.js?"); /***/ }), @@ -554,7 +554,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 */ TaskForm: () => (/* binding */ TaskForm),\n/* harmony export */ getInputProps: () => (/* binding */ getInputProps)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/InputAdornment/InputAdornment.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.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/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Tabs/Tabs.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Tab/Tab.js\");\n/* harmony import */ var _task_form_tab_info__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./task_form_tab_info */ \"./app/panels/clnt_task_board/components/task_form_tab_info.js\");\n/* harmony import */ var _task_form_tab_executor__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./task_form_tab_executor */ \"./app/panels/clnt_task_board/components/task_form_tab_executor.js\");\n/* harmony import */ var _task_form_tab_props__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./task_form_tab_props */ \"./app/panels/clnt_task_board/components/task_form_tab_props.js\");\n/* harmony import */ var _hooks_task_dialog_hooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../hooks/task_dialog_hooks */ \"./app/panels/clnt_task_board/hooks/task_dialog_hooks.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_5__ = __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//Константы\n//---------\n\n//Стили\nconst STYLES = {\n CONTAINER: {\n margin: \"5px 0px\",\n textAlign: \"center\"\n }\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Свойства вкладки\nfunction a11yProps(index) {\n return {\n id: `simple-tab-${index}`,\n \"aria-controls\": `simple-tabpanel-${index}`\n };\n}\n\n//Вкладка информации\nfunction CustomTabPanel(props) {\n const {\n children,\n value,\n index,\n ...other\n } = props;\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], _extends({\n role: \"tabpanel\",\n hidden: value !== index,\n id: `simple-tabpanel-${index}`,\n \"aria-labelledby\": `simple-tab-${index}`\n }, other), value === index && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n pt: 1\n }, children));\n}\n\n//Контроль свойств - Вкладка информации\nCustomTabPanel.propTypes = {\n children: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().node),\n index: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().number).isRequired,\n value: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().number).isRequired\n};\n\n//Формирование кнопки для открытия раздела\nconst getInputProps = (onClick, disabled = false, icon = \"list\") => {\n //Генерация содержимого\n return {\n endAdornment: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n position: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n disabled: disabled,\n \"aria-label\": `select`,\n onClick: onClick,\n edge: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null, icon)))\n };\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Форма события\nconst TaskForm = ({\n task,\n taskType,\n onTaskChange,\n editable,\n onEventNextNumbGet,\n onDPReady\n}) => {\n //Состояние вкладки\n const [tab, setTab] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(0);\n\n //Состояние допустимых дополнительных свойств\n const [docProps] = (0,_hooks_task_dialog_hooks__WEBPACK_IMPORTED_MODULE_4__.useDocsProps)(taskType);\n\n //При изменении вкладки\n const handleTabChange = (e, newValue) => {\n setTab(newValue);\n };\n\n //При изменении поля\n const handleFieldEdit = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(e => {\n onTaskChange({\n [e.target.id]: e.target.value,\n //Связанные значения, если меняется одно, то необходимо обнулить другое\n ...(e.target.id === \"sClntClnperson\" ? {\n sClntClients: \"\"\n } : {}),\n ...(e.target.id === \"sClntClients\" ? {\n sClntClnperson: \"\"\n } : {})\n });\n }, [onTaskChange]);\n\n //При изменении доп. свойства\n const handlePropEdit = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((docProp, value) => {\n onTaskChange({\n docProps: {\n ...task.docProps,\n [docProp]: value\n }\n });\n }, [onTaskChange, task.docProps]);\n\n //Проверка заполненности всех обязательных доп. свойств\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Считываем количество незаполненных обязательных свойств\n let notFilled = docProps.props.filter(docProp => docProp.BREQUIRE === true && !(0,_core_utils__WEBPACK_IMPORTED_MODULE_5__.hasValue)(task.docProps[docProp.SFORMATTED_ID])).length;\n //Если доп. свойства загрузились и количество незаполненных = 0 - доп. свойства готовы, иначе не готовы\n docProps.loaded && notFilled === 0 ? onDPReady(true) : onDPReady(false);\n }, [docProps, onDPReady, task.docProps]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n pb: 1,\n variant: \"h6\"\n }, task.nRn ? \"Исправление события\" : \"Добавление события\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n value: tab,\n onChange: handleTabChange,\n \"aria-label\": \"tabs of values\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], _extends({\n label: \"\\u0421\\u043E\\u0431\\u044B\\u0442\\u0438\\u0435\"\n }, a11yProps(0))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], _extends({\n label: \"\\u0418\\u0441\\u043F\\u043E\\u043B\\u043D\\u0438\\u0442\\u0435\\u043B\\u044C\"\n }, a11yProps(1))), docProps.props.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], _extends({\n label: \"\\u0421\\u0432\\u043E\\u0439\\u0441\\u0442\\u0432\\u0430\"\n }, a11yProps(2))) : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(CustomTabPanel, {\n value: tab,\n index: 0\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_task_form_tab_info__WEBPACK_IMPORTED_MODULE_1__.TaskFormTabInfo, {\n task: task,\n editable: editable,\n onFieldEdit: handleFieldEdit,\n onEventNextNumbGet: onEventNextNumbGet\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(CustomTabPanel, {\n value: tab,\n index: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_task_form_tab_executor__WEBPACK_IMPORTED_MODULE_2__.TaskFormTabExecutor, {\n task: task,\n onFieldEdit: handleFieldEdit\n })), docProps.props.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(CustomTabPanel, {\n value: tab,\n index: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_task_form_tab_props__WEBPACK_IMPORTED_MODULE_3__.TaskFormTabProps, {\n task: task,\n taskType: taskType,\n docProps: docProps,\n onPropEdit: handlePropEdit\n })) : null);\n};\n\n//Контроль свойств - Форма события\nTaskForm.propTypes = {\n task: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().object).isRequired,\n taskType: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string).isRequired,\n onTaskChange: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func).isRequired,\n editable: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().bool).isRequired,\n onEventNextNumbGet: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func).isRequired,\n onDPReady: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/clnt_task_board/components/task_form.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TaskForm: () => (/* binding */ TaskForm),\n/* harmony export */ getInputProps: () => (/* binding */ getInputProps)\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_5__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_5__);\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_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/InputAdornment/InputAdornment.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Tabs/Tabs.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Tab/Tab.js\");\n/* harmony import */ var _task_form_tab_info__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./task_form_tab_info */ \"./app/panels/clnt_task_board/components/task_form_tab_info.js\");\n/* harmony import */ var _task_form_tab_executor__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./task_form_tab_executor */ \"./app/panels/clnt_task_board/components/task_form_tab_executor.js\");\n/* harmony import */ var _task_form_tab_props__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./task_form_tab_props */ \"./app/panels/clnt_task_board/components/task_form_tab_props.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//Стили\nconst STYLES = {\n CONTAINER: {\n margin: \"5px 0px\",\n textAlign: \"center\"\n }\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Свойства вкладки\nfunction a11yProps(index) {\n return {\n id: `simple-tab-${index}`,\n \"aria-controls\": `simple-tabpanel-${index}`\n };\n}\n\n//Вкладка информации\nfunction CustomTabPanel(props) {\n const {\n children,\n value,\n index,\n ...other\n } = props;\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], _extends({\n role: \"tabpanel\",\n hidden: value !== index,\n id: `simple-tabpanel-${index}`,\n \"aria-labelledby\": `simple-tab-${index}`\n }, other), value === index && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n pt: 1\n }, children));\n}\n\n//Контроль свойств - Вкладка информации\nCustomTabPanel.propTypes = {\n children: (prop_types__WEBPACK_IMPORTED_MODULE_5___default().node),\n index: (prop_types__WEBPACK_IMPORTED_MODULE_5___default().number).isRequired,\n value: (prop_types__WEBPACK_IMPORTED_MODULE_5___default().number).isRequired\n};\n\n//Формирование кнопки для открытия раздела\nconst getInputProps = (onClick, disabled = false, icon = \"list\") => {\n //Генерация содержимого\n return {\n endAdornment: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n position: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n disabled: disabled,\n \"aria-label\": `select`,\n onClick: onClick,\n edge: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], null, icon)))\n };\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Форма события\nconst TaskForm = ({\n task,\n taskType,\n editable,\n docProps,\n onTaskChange,\n onEventNextNumbGet\n}) => {\n //Состояние вкладки\n const [tab, setTab] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(0);\n\n //При изменении вкладки\n const handleTabChange = (e, newValue) => {\n setTab(newValue);\n };\n\n //При изменении поля\n const handleFieldEdit = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(e => {\n onTaskChange({\n [e.target.id]: e.target.value,\n //Связанные значения, если меняется одно, то необходимо обнулить другое\n ...(e.target.id === \"sClntClnperson\" ? {\n sClntClients: \"\"\n } : {}),\n ...(e.target.id === \"sClntClients\" ? {\n sClntClnperson: \"\"\n } : {})\n });\n }, [onTaskChange]);\n\n //При изменении доп. свойства\n const handlePropEdit = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((docProp, value) => {\n onTaskChange({\n docProps: {\n ...task.docProps,\n [docProp]: value\n }\n });\n }, [onTaskChange, task.docProps]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n sx: STYLES.CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n pb: 1,\n variant: \"h6\"\n }, task.nRn ? `Исправление события${task.nClosed ? \" (событые аннулировано)\" : \"\"}` : \"Добавление события\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n value: tab,\n onChange: handleTabChange,\n \"aria-label\": \"tabs of values\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], _extends({\n label: \"\\u0421\\u043E\\u0431\\u044B\\u0442\\u0438\\u0435\"\n }, a11yProps(0))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], _extends({\n label: \"\\u0418\\u0441\\u043F\\u043E\\u043B\\u043D\\u0438\\u0442\\u0435\\u043B\\u044C\"\n }, a11yProps(1))), docProps.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], _extends({\n label: \"\\u0421\\u0432\\u043E\\u0439\\u0441\\u0442\\u0432\\u0430\"\n }, a11yProps(2))) : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(CustomTabPanel, {\n value: tab,\n index: 0\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_task_form_tab_info__WEBPACK_IMPORTED_MODULE_1__.TaskFormTabInfo, {\n task: task,\n editable: editable,\n onFieldEdit: handleFieldEdit,\n onEventNextNumbGet: onEventNextNumbGet\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(CustomTabPanel, {\n value: tab,\n index: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_task_form_tab_executor__WEBPACK_IMPORTED_MODULE_2__.TaskFormTabExecutor, {\n task: task,\n onFieldEdit: handleFieldEdit\n })), docProps.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(CustomTabPanel, {\n value: tab,\n index: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_task_form_tab_props__WEBPACK_IMPORTED_MODULE_3__.TaskFormTabProps, {\n task: task,\n taskType: taskType,\n docProps: docProps,\n onPropEdit: handlePropEdit\n })) : null);\n};\n\n//Контроль свойств - Форма события\nTaskForm.propTypes = {\n task: (prop_types__WEBPACK_IMPORTED_MODULE_5___default().object).isRequired,\n taskType: (prop_types__WEBPACK_IMPORTED_MODULE_5___default().string).isRequired,\n editable: (prop_types__WEBPACK_IMPORTED_MODULE_5___default().bool).isRequired,\n docProps: (prop_types__WEBPACK_IMPORTED_MODULE_5___default().array),\n onTaskChange: (prop_types__WEBPACK_IMPORTED_MODULE_5___default().func).isRequired,\n onEventNextNumbGet: (prop_types__WEBPACK_IMPORTED_MODULE_5___default().func).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/clnt_task_board/components/task_form.js?"); /***/ }), @@ -576,7 +576,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 */ TaskFormTabInfo: () => (/* binding */ TaskFormTabInfo)\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_6__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_6__);\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/TextField/TextField.js\");\n/* harmony import */ var _task_form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./task_form */ \"./app/panels/clnt_task_board/components/task_form.js\");\n/* harmony import */ var _styles__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../styles */ \"./app/panels/clnt_task_board/styles.js\");\n/* harmony import */ var _hooks_dict_hooks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../hooks/dict_hooks */ \"./app/panels/clnt_task_board/hooks/dict_hooks.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//---------\n\n//Стили\nconst STYLES = {\n BOX_FEW_COLUMNS: {\n display: \"flex\",\n flexWrap: \"wrap\",\n justifyContent: \"space-between\"\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Вкладка основной информации\nconst TaskFormTabInfo = ({\n task,\n editable,\n onFieldEdit,\n onEventNextNumbGet\n}) => {\n //Вспомогательные функции открытия раздела\n const {\n handleClientPersonOpen,\n handleCatalogTreeOpen,\n handleClientClientsOpen\n } = (0,_hooks_dict_hooks__WEBPACK_IMPORTED_MODULE_3__.useDictionary)();\n\n //При изменении каталога\n const handleCrnChange = () => handleCatalogTreeOpen({\n sUnitName: \"ClientEvents\",\n sName: task.sCrn,\n callBack: res => {\n onFieldEdit({\n target: {\n id: \"sCrn\",\n value: res.outParameters.out_NAME\n }\n });\n }\n });\n\n //При изменении клиента-сотрудника\n const handleClntClnpersonChange = () => handleClientPersonOpen({\n sCode: task.sClntClnperson,\n callBack: res => {\n onFieldEdit({\n target: {\n id: \"sClntClnperson\",\n value: res.outParameters.out_CODE\n }\n });\n }\n });\n\n //При изменении клиента-организации\n const handleClntClientsChange = () => handleClientClientsOpen({\n sCode: task.sClntClients,\n callBack: res => {\n onFieldEdit({\n target: {\n id: \"sClntClients\",\n value: res.outParameters.out_CLIENT_CODE\n }\n });\n }\n });\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n sx: _styles__WEBPACK_IMPORTED_MODULE_2__.COMMON_STYLES.BOX_WITH_LEGEND,\n component: \"fieldset\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"legend\", {\n style: _styles__WEBPACK_IMPORTED_MODULE_2__.COMMON_STYLES.LEGEND\n }, \"\\u0421\\u043E\\u0431\\u044B\\u0442\\u0438\\u0435\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n sx: STYLES.BOX_FEW_COLUMNS\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: _styles__WEBPACK_IMPORTED_MODULE_2__.COMMON_STYLES.TASK_FORM_TEXT_FIELD(),\n id: \"sCrn\",\n label: \"\\u041A\\u0430\\u0442\\u0430\\u043B\\u043E\\u0433\",\n fullWidth: true,\n value: task.sCrn,\n variant: \"standard\",\n onChange: onFieldEdit,\n InputProps: (0,_task_form__WEBPACK_IMPORTED_MODULE_1__.getInputProps)(handleCrnChange),\n required: true,\n disabled: task.isUpdate\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: _styles__WEBPACK_IMPORTED_MODULE_2__.COMMON_STYLES.TASK_FORM_TEXT_FIELD(\"225px\"),\n id: \"sPrefix\",\n label: \"\\u041F\\u0440\\u0435\\u0444\\u0438\\u043A\\u0441\",\n value: task.sPrefix,\n variant: \"standard\",\n onChange: onFieldEdit,\n required: true,\n disabled: task.isUpdate\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: _styles__WEBPACK_IMPORTED_MODULE_2__.COMMON_STYLES.TASK_FORM_TEXT_FIELD(\"225px\"),\n id: \"sNumber\",\n label: \"\\u041D\\u043E\\u043C\\u0435\\u0440\",\n value: task.sNumber,\n variant: \"standard\",\n onChange: onFieldEdit,\n required: true,\n disabled: task.isUpdate,\n InputProps: (0,_task_form__WEBPACK_IMPORTED_MODULE_1__.getInputProps)(onEventNextNumbGet, !task.sPrefix || task.isUpdate, \"refresh\")\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: _styles__WEBPACK_IMPORTED_MODULE_2__.COMMON_STYLES.TASK_FORM_TEXT_FIELD(\"225px\", !task.isUpdate),\n id: \"sType\",\n label: \"\\u0422\\u0438\\u043F\",\n value: task.sType,\n variant: \"standard\",\n onChange: onFieldEdit,\n disabled: true,\n required: true\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: _styles__WEBPACK_IMPORTED_MODULE_2__.COMMON_STYLES.TASK_FORM_TEXT_FIELD(\"225px\", !task.isUpdate),\n id: \"sStatus\",\n label: \"\\u0421\\u0442\\u0430\\u0442\\u0443\\u0441\",\n value: task.sStatus,\n variant: \"standard\",\n disabled: true,\n required: true,\n onChange: onFieldEdit\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: _styles__WEBPACK_IMPORTED_MODULE_2__.COMMON_STYLES.TASK_FORM_TEXT_FIELD(),\n fullWidth: true,\n id: \"sDescription\",\n label: \"\\u041E\\u043F\\u0438\\u0441\\u0430\\u043D\\u0438\\u0435\",\n value: task.sDescription,\n variant: \"standard\",\n onChange: onFieldEdit,\n disabled: !task.sType || !editable,\n required: true,\n multiline: true,\n minRows: 7,\n maxRows: 7\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n sx: {\n ..._styles__WEBPACK_IMPORTED_MODULE_2__.COMMON_STYLES.BOX_WITH_LEGEND,\n ..._styles__WEBPACK_IMPORTED_MODULE_2__.COMMON_STYLES.BOX_SINGLE_COLUMN\n },\n component: \"fieldset\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"legend\", {\n style: _styles__WEBPACK_IMPORTED_MODULE_2__.COMMON_STYLES.LEGEND\n }, \"\\u041A\\u043B\\u0438\\u0435\\u043D\\u0442\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: _styles__WEBPACK_IMPORTED_MODULE_2__.COMMON_STYLES.TASK_FORM_TEXT_FIELD(),\n id: \"sClntClients\",\n label: \"\\u041E\\u0440\\u0433\\u0430\\u043D\\u0438\\u0437\\u0430\\u0446\\u0438\\u044F\",\n value: task.sClntClients,\n variant: \"standard\",\n onChange: onFieldEdit,\n disabled: !task.sType,\n InputProps: (0,_task_form__WEBPACK_IMPORTED_MODULE_1__.getInputProps)(() => handleClntClientsChange(), !task.sType)\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: _styles__WEBPACK_IMPORTED_MODULE_2__.COMMON_STYLES.TASK_FORM_TEXT_FIELD(),\n id: \"sClntClnperson\",\n label: \"\\u0421\\u043E\\u0442\\u0440\\u0443\\u0434\\u043D\\u0438\\u043A\",\n value: task.sClntClnperson,\n variant: \"standard\",\n onChange: onFieldEdit,\n disabled: !task.sType,\n InputProps: (0,_task_form__WEBPACK_IMPORTED_MODULE_1__.getInputProps)(() => handleClntClnpersonChange(), !task.sType)\n })));\n};\n\n//Контроль свойств - Вкладка основной информации\nTaskFormTabInfo.propTypes = {\n task: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().object).isRequired,\n editable: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().bool).isRequired,\n onFieldEdit: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().func).isRequired,\n onEventNextNumbGet: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().func).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/clnt_task_board/components/task_form_tab_info.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TaskFormTabInfo: () => (/* binding */ TaskFormTabInfo)\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_6__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_6__);\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/TextField/TextField.js\");\n/* harmony import */ var _task_form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./task_form */ \"./app/panels/clnt_task_board/components/task_form.js\");\n/* harmony import */ var _styles__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../styles */ \"./app/panels/clnt_task_board/styles.js\");\n/* harmony import */ var _hooks_dict_hooks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../hooks/dict_hooks */ \"./app/panels/clnt_task_board/hooks/dict_hooks.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//---------\n\n//Стили\nconst STYLES = {\n BOX_FEW_COLUMNS: {\n display: \"flex\",\n flexWrap: \"wrap\",\n justifyContent: \"space-between\"\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Вкладка основной информации\nconst TaskFormTabInfo = ({\n task,\n editable,\n onFieldEdit,\n onEventNextNumbGet\n}) => {\n //Вспомогательные функции открытия раздела\n const {\n handleClientPersonOpen,\n handleCatalogTreeOpen,\n handleClientClientsOpen\n } = (0,_hooks_dict_hooks__WEBPACK_IMPORTED_MODULE_3__.useDictionary)();\n\n //При изменении каталога\n const handleCrnChange = () => handleCatalogTreeOpen({\n sUnitName: \"ClientEvents\",\n sName: task.sCrn,\n callBack: res => {\n onFieldEdit({\n target: {\n id: \"sCrn\",\n value: res.outParameters.out_NAME\n }\n });\n }\n });\n\n //При изменении клиента-сотрудника\n const handleClntClnpersonChange = () => handleClientPersonOpen({\n sCode: task.sClntClnperson,\n callBack: res => {\n onFieldEdit({\n target: {\n id: \"sClntClnperson\",\n value: res.outParameters.out_CODE\n }\n });\n }\n });\n\n //При изменении клиента-организации\n const handleClntClientsChange = () => handleClientClientsOpen({\n sCode: task.sClntClients,\n callBack: res => {\n onFieldEdit({\n target: {\n id: \"sClntClients\",\n value: res.outParameters.out_CLIENT_CODE\n }\n });\n }\n });\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n sx: _styles__WEBPACK_IMPORTED_MODULE_2__.COMMON_STYLES.BOX_WITH_LEGEND,\n component: \"fieldset\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"legend\", {\n style: _styles__WEBPACK_IMPORTED_MODULE_2__.COMMON_STYLES.LEGEND\n }, \"\\u0421\\u043E\\u0431\\u044B\\u0442\\u0438\\u0435\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n sx: STYLES.BOX_FEW_COLUMNS\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: _styles__WEBPACK_IMPORTED_MODULE_2__.COMMON_STYLES.TASK_FORM_TEXT_FIELD(),\n id: \"sCrn\",\n label: \"\\u041A\\u0430\\u0442\\u0430\\u043B\\u043E\\u0433\",\n fullWidth: true,\n value: task.sCrn,\n variant: \"standard\",\n onChange: onFieldEdit,\n InputProps: (0,_task_form__WEBPACK_IMPORTED_MODULE_1__.getInputProps)(handleCrnChange, task.isUpdate || task.nClosed === 1),\n required: true,\n disabled: task.isUpdate\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: _styles__WEBPACK_IMPORTED_MODULE_2__.COMMON_STYLES.TASK_FORM_TEXT_FIELD(\"225px\"),\n id: \"sPrefix\",\n label: \"\\u041F\\u0440\\u0435\\u0444\\u0438\\u043A\\u0441\",\n value: task.sPrefix,\n variant: \"standard\",\n onChange: onFieldEdit,\n required: true,\n disabled: task.isUpdate\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: _styles__WEBPACK_IMPORTED_MODULE_2__.COMMON_STYLES.TASK_FORM_TEXT_FIELD(\"225px\"),\n id: \"sNumber\",\n label: \"\\u041D\\u043E\\u043C\\u0435\\u0440\",\n value: task.sNumber,\n variant: \"standard\",\n onChange: onFieldEdit,\n required: true,\n disabled: task.isUpdate,\n InputProps: (0,_task_form__WEBPACK_IMPORTED_MODULE_1__.getInputProps)(onEventNextNumbGet, !task.sPrefix || task.isUpdate, \"refresh\")\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: _styles__WEBPACK_IMPORTED_MODULE_2__.COMMON_STYLES.TASK_FORM_TEXT_FIELD(\"225px\", !task.isUpdate),\n id: \"sType\",\n label: \"\\u0422\\u0438\\u043F\",\n value: task.sType,\n variant: \"standard\",\n onChange: onFieldEdit,\n disabled: true,\n required: true\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: _styles__WEBPACK_IMPORTED_MODULE_2__.COMMON_STYLES.TASK_FORM_TEXT_FIELD(\"225px\", !task.isUpdate),\n id: \"sStatus\",\n label: \"\\u0421\\u0442\\u0430\\u0442\\u0443\\u0441\",\n value: task.sStatus,\n variant: \"standard\",\n disabled: true,\n required: true,\n onChange: onFieldEdit\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: _styles__WEBPACK_IMPORTED_MODULE_2__.COMMON_STYLES.TASK_FORM_TEXT_FIELD(),\n fullWidth: true,\n id: \"sDescription\",\n label: \"\\u041E\\u043F\\u0438\\u0441\\u0430\\u043D\\u0438\\u0435\",\n value: task.sDescription,\n variant: \"standard\",\n onChange: onFieldEdit,\n disabled: !task.sType || !editable,\n required: true,\n multiline: true,\n minRows: 7,\n maxRows: 7\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n sx: {\n ..._styles__WEBPACK_IMPORTED_MODULE_2__.COMMON_STYLES.BOX_WITH_LEGEND,\n ..._styles__WEBPACK_IMPORTED_MODULE_2__.COMMON_STYLES.BOX_SINGLE_COLUMN\n },\n component: \"fieldset\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"legend\", {\n style: _styles__WEBPACK_IMPORTED_MODULE_2__.COMMON_STYLES.LEGEND\n }, \"\\u041A\\u043B\\u0438\\u0435\\u043D\\u0442\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: _styles__WEBPACK_IMPORTED_MODULE_2__.COMMON_STYLES.TASK_FORM_TEXT_FIELD(),\n id: \"sClntClients\",\n label: \"\\u041E\\u0440\\u0433\\u0430\\u043D\\u0438\\u0437\\u0430\\u0446\\u0438\\u044F\",\n value: task.sClntClients,\n variant: \"standard\",\n onChange: onFieldEdit,\n disabled: !task.sType || task.nClosed === 1,\n InputProps: (0,_task_form__WEBPACK_IMPORTED_MODULE_1__.getInputProps)(() => handleClntClientsChange(), !task.sType || task.nClosed === 1)\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: _styles__WEBPACK_IMPORTED_MODULE_2__.COMMON_STYLES.TASK_FORM_TEXT_FIELD(),\n id: \"sClntClnperson\",\n label: \"\\u0421\\u043E\\u0442\\u0440\\u0443\\u0434\\u043D\\u0438\\u043A\",\n value: task.sClntClnperson,\n variant: \"standard\",\n onChange: onFieldEdit,\n disabled: !task.sType || task.nClosed === 1,\n InputProps: (0,_task_form__WEBPACK_IMPORTED_MODULE_1__.getInputProps)(() => handleClntClnpersonChange(), !task.sType || task.nClosed === 1)\n })));\n};\n\n//Контроль свойств - Вкладка основной информации\nTaskFormTabInfo.propTypes = {\n task: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().object).isRequired,\n editable: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().bool).isRequired,\n onFieldEdit: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().func).isRequired,\n onEventNextNumbGet: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().func).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/clnt_task_board/components/task_form_tab_info.js?"); /***/ }), @@ -587,7 +587,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 */ TaskFormTabProps: () => (/* binding */ TaskFormTabProps)\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_9__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _task_form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./task_form */ \"./app/panels/clnt_task_board/components/task_form.js\");\n/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! dayjs */ \"./node_modules/dayjs/dayjs.min.js\");\n/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(dayjs__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var dayjs_plugin_customParseFormat__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! dayjs/plugin/customParseFormat */ \"./node_modules/dayjs/plugin/customParseFormat.js\");\n/* harmony import */ var dayjs_plugin_customParseFormat__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(dayjs_plugin_customParseFormat__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../layouts */ \"./app/panels/clnt_task_board/layouts.js\");\n/* harmony import */ var _styles__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../styles */ \"./app/panels/clnt_task_board/styles.js\");\n/* harmony import */ var _hooks_dict_hooks__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../hooks/dict_hooks */ \"./app/panels/clnt_task_board/hooks/dict_hooks.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\n//---------\n//Константы\n//---------\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Подключение настройки пользовательского формата даты\ndayjs__WEBPACK_IMPORTED_MODULE_2___default().extend((dayjs_plugin_customParseFormat__WEBPACK_IMPORTED_MODULE_3___default()));\n\n//-----------\n//Тело модуля\n//-----------\n\n//Вкладка информации со свойствами\nconst TaskFormTabProps = ({\n task,\n docProps,\n onPropEdit\n}) => {\n //Вспомогательные функции открытия раздела\n const {\n handleExtraDictionariesOpen,\n handleUnitOpen\n } = (0,_hooks_dict_hooks__WEBPACK_IMPORTED_MODULE_6__.useDictionary)();\n\n //Выбор из словаря или дополнительного словаря\n const handleDictOpen = async (docProp, curValue = null) => {\n //Если способ выбора - словарь\n docProp.NENTRY_TYPE === 1 ? handleUnitOpen({\n sUnitCode: docProp.SUNITCODE,\n sShowMethod: docProp.SMETHOD_CODE,\n inputParameters: docProp.NPARAM_RN ? [{\n name: docProp.SPARAM_IN_CODE,\n value: curValue\n }] : null,\n callBack: res => {\n onPropEdit(docProp.SFORMATTED_ID, res.outParameters[docProp.SPARAM_OUT_CODE]);\n }\n }) :\n //Если способ выбора - доп. словарь\n handleExtraDictionariesOpen({\n nRn: docProp.NEXTRA_DICT_RN,\n sParamName: _layouts__WEBPACK_IMPORTED_MODULE_4__.DP_IN_VALUE[docProp.NFORMAT],\n paramValue: curValue,\n callBack: res => {\n onPropEdit(docProp.SFORMATTED_ID, res.outParameters[_layouts__WEBPACK_IMPORTED_MODULE_4__.DP_RETURN_VALUE[docProp.NFORMAT]]);\n }\n });\n };\n\n //Инициализация дополнительного свойства\n const initPropValue = prop => {\n //Считываем значение свойства из события\n const value = task.docProps[prop.SFORMATTED_ID];\n //Если есть значение свойства\n if (value) {\n //Строка или число\n if (prop.NFORMAT < 2) {\n return prop.NNUM_PRECISION ? String(value).replace(\".\", \",\") : value;\n }\n //Дата\n if (prop.NFORMAT === 2) {\n //Возвращаем значение исходя из подтипа даты\n switch (prop.NDATA_SUBTYPE) {\n //Дата без времени\n case 0:\n return dayjs__WEBPACK_IMPORTED_MODULE_2___default()(value).format(\"YYYY-MM-DD\");\n //Дата и время без секунд\n case 1:\n return dayjs__WEBPACK_IMPORTED_MODULE_2___default()(value).format(\"YYYY-MM-DD HH:mm\");\n //Дата и время с секундами\n default:\n return dayjs__WEBPACK_IMPORTED_MODULE_2___default()(value).format(\"YYYY-MM-DD HH:mm:ss\");\n }\n }\n //Если это ничего из вышестоящего - время\n return (0,_layouts__WEBPACK_IMPORTED_MODULE_4__.formatSqlDate)(value);\n }\n //Если нет значения, но это изменение события\n if (task.nRn) {\n //Возвращаем пустоту\n return \"\";\n }\n //Если нет значения и это добавление события - возвращаем значение по умолчанию\n return prop[_layouts__WEBPACK_IMPORTED_MODULE_4__.DP_DEFAULT_VALUE[prop.NFORMAT]];\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n sx: _styles__WEBPACK_IMPORTED_MODULE_5__.COMMON_STYLES.BOX_WITH_LEGEND,\n component: \"fieldset\"\n }, docProps.props.map((docProp, index) => {\n return docProp.BSHOW_IN_GRID ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n error: !(0,_layouts__WEBPACK_IMPORTED_MODULE_4__.validationError)(task.docProps[docProp.SFORMATTED_ID], docProp.NFORMAT, docProp.NNUM_WIDTH, docProp.NNUM_PRECISION, docProp.NSTR_WIDTH),\n key: index,\n sx: _styles__WEBPACK_IMPORTED_MODULE_5__.COMMON_STYLES.TASK_FORM_TEXT_FIELD(),\n id: docProp.SFORMATTED_ID,\n type: docProp.NFORMAT < 2 ? \"string\" : docProp.NFORMAT === 2 ? docProp.NDATA_SUBTYPE === 0 ? \"date\" : \"datetime-local\" : \"time\",\n label: docProp.SNAME,\n fullWidth: true,\n value: initPropValue(docProp),\n variant: \"standard\",\n onChange: e => onPropEdit(e.target.id, e.target.value),\n inputProps: docProp.NFORMAT === 2 && docProp.NDATA_SUBTYPE === 2 || docProp.NFORMAT === 3 && docProp.NDATA_SUBTYPE === 1 ? {\n step: 1\n } : {},\n InputProps: docProp.NENTRY_TYPE > 0 ? (0,_task_form__WEBPACK_IMPORTED_MODULE_1__.getInputProps)(() => handleDictOpen(docProp, task.docProps[docProp.SFORMATTED_ID])) : null,\n InputLabelProps: docProp.NFORMAT < 2 ? {} : {\n shrink: true\n },\n required: docProp.BREQUIRE,\n disabled: docProp.BREADONLY\n }) : null;\n })));\n};\n\n//Контроль свойств - Вкладка информации со свойствами\nTaskFormTabProps.propTypes = {\n task: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().object).isRequired,\n docProps: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().object).isRequired,\n onPropEdit: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().func).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/clnt_task_board/components/task_form_tab_props.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TaskFormTabProps: () => (/* binding */ TaskFormTabProps)\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_9__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _task_form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./task_form */ \"./app/panels/clnt_task_board/components/task_form.js\");\n/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! dayjs */ \"./node_modules/dayjs/dayjs.min.js\");\n/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(dayjs__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var dayjs_plugin_customParseFormat__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! dayjs/plugin/customParseFormat */ \"./node_modules/dayjs/plugin/customParseFormat.js\");\n/* harmony import */ var dayjs_plugin_customParseFormat__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(dayjs_plugin_customParseFormat__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../layouts */ \"./app/panels/clnt_task_board/layouts.js\");\n/* harmony import */ var _styles__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../styles */ \"./app/panels/clnt_task_board/styles.js\");\n/* harmony import */ var _hooks_dict_hooks__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../hooks/dict_hooks */ \"./app/panels/clnt_task_board/hooks/dict_hooks.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\n//---------\n//Константы\n//---------\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Подключение настройки пользовательского формата даты\ndayjs__WEBPACK_IMPORTED_MODULE_2___default().extend((dayjs_plugin_customParseFormat__WEBPACK_IMPORTED_MODULE_3___default()));\n\n//-----------\n//Тело модуля\n//-----------\n\n//Вкладка информации со свойствами\nconst TaskFormTabProps = ({\n task,\n docProps,\n onPropEdit\n}) => {\n //Вспомогательные функции открытия раздела\n const {\n handleExtraDictionariesOpen,\n handleUnitOpen\n } = (0,_hooks_dict_hooks__WEBPACK_IMPORTED_MODULE_6__.useDictionary)();\n\n //Выбор из словаря или дополнительного словаря\n const handleDictOpen = async (docProp, curValue = null) => {\n //Если способ выбора - словарь\n docProp.NENTRY_TYPE === 1 ? handleUnitOpen({\n sUnitCode: docProp.SUNITCODE,\n sShowMethod: docProp.SMETHOD_CODE,\n inputParameters: docProp.NPARAM_RN ? [{\n name: docProp.SPARAM_IN_CODE,\n value: curValue\n }] : null,\n callBack: res => {\n onPropEdit(docProp.SFORMATTED_ID, res.outParameters[docProp.SPARAM_OUT_CODE]);\n }\n }) :\n //Если способ выбора - доп. словарь\n handleExtraDictionariesOpen({\n nRn: docProp.NEXTRA_DICT_RN,\n sParamName: _layouts__WEBPACK_IMPORTED_MODULE_4__.DP_IN_VALUE[docProp.NFORMAT],\n paramValue: curValue,\n callBack: res => {\n onPropEdit(docProp.SFORMATTED_ID, res.outParameters[_layouts__WEBPACK_IMPORTED_MODULE_4__.DP_RETURN_VALUE[docProp.NFORMAT]]);\n }\n });\n };\n\n //Инициализация дополнительного свойства\n const initPropValue = prop => {\n //Считываем значение свойства из события\n const value = task.docProps[prop.SFORMATTED_ID];\n //Если есть значение свойства\n if (value) {\n //Строка или число\n if (prop.NFORMAT < 2) {\n return prop.NNUM_PRECISION ? String(value).replace(\".\", \",\") : value;\n }\n //Дата\n if (prop.NFORMAT === 2) {\n //Возвращаем значение исходя из подтипа даты\n switch (prop.NDATA_SUBTYPE) {\n //Дата без времени\n case 0:\n return dayjs__WEBPACK_IMPORTED_MODULE_2___default()(value).format(\"YYYY-MM-DD\");\n //Дата и время без секунд\n case 1:\n return dayjs__WEBPACK_IMPORTED_MODULE_2___default()(value).format(\"YYYY-MM-DD HH:mm\");\n //Дата и время с секундами\n default:\n return dayjs__WEBPACK_IMPORTED_MODULE_2___default()(value).format(\"YYYY-MM-DD HH:mm:ss\");\n }\n }\n //Если это ничего из вышестоящего - время\n return (0,_layouts__WEBPACK_IMPORTED_MODULE_4__.formatSqlDate)(value);\n }\n //Если нет значения, но это изменение события\n if (task.nRn) {\n //Возвращаем пустоту\n return \"\";\n }\n //Если нет значения и это добавление события - возвращаем значение по умолчанию\n return prop[_layouts__WEBPACK_IMPORTED_MODULE_4__.DP_DEFAULT_VALUE[prop.NFORMAT]];\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n sx: _styles__WEBPACK_IMPORTED_MODULE_5__.COMMON_STYLES.BOX_WITH_LEGEND,\n component: \"fieldset\"\n }, docProps.map((docProp, index) => {\n return docProp.BSHOW_IN_GRID ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n error: !(0,_layouts__WEBPACK_IMPORTED_MODULE_4__.validationError)(task.docProps[docProp.SFORMATTED_ID], docProp.NFORMAT, docProp.NNUM_WIDTH, docProp.NNUM_PRECISION, docProp.NSTR_WIDTH),\n key: index,\n sx: _styles__WEBPACK_IMPORTED_MODULE_5__.COMMON_STYLES.TASK_FORM_TEXT_FIELD(),\n id: docProp.SFORMATTED_ID,\n type: docProp.NFORMAT < 2 ? \"string\" : docProp.NFORMAT === 2 ? docProp.NDATA_SUBTYPE === 0 ? \"date\" : \"datetime-local\" : \"time\",\n label: docProp.SNAME,\n fullWidth: true,\n value: initPropValue(docProp),\n variant: \"standard\",\n onChange: e => onPropEdit(e.target.id, e.target.value),\n inputProps: docProp.NFORMAT === 2 && docProp.NDATA_SUBTYPE === 2 || docProp.NFORMAT === 3 && docProp.NDATA_SUBTYPE === 1 ? {\n step: 1\n } : {},\n InputProps: docProp.NENTRY_TYPE > 0 ? (0,_task_form__WEBPACK_IMPORTED_MODULE_1__.getInputProps)(() => handleDictOpen(docProp, task.docProps[docProp.SFORMATTED_ID])) : null,\n InputLabelProps: docProp.NFORMAT < 2 ? {} : {\n shrink: true\n },\n required: docProp.BREQUIRE,\n disabled: docProp.BREADONLY\n }) : null;\n })));\n};\n\n//Контроль свойств - Вкладка информации со свойствами\nTaskFormTabProps.propTypes = {\n task: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().object).isRequired,\n docProps: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().array).isRequired,\n onPropEdit: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().func).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/clnt_task_board/components/task_form_tab_props.js?"); /***/ }), @@ -609,7 +609,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 */ useDictionary: () => (/* binding */ useDictionary)\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 _context_application__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../context/application */ \"./app/context/application.js\");\n/*\r\n Парус 8 - Панели мониторинга - УДП - Доски задач\r\n Пользовательские хуки: Хуки открытия разделов\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контекст приложения\n\n//-----------\n//Тело модуля\n//-----------\n\n//Состояние открытия разделов\nconst useDictionary = () => {\n //Подключение к контексту приложения\n const {\n pOnlineShowDictionary\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_1__[\"ApplicationСtx\"]);\n\n //Отображение раздела \"Сотрудники\"\n const handleClientPersonOpen = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async prms => {\n pOnlineShowDictionary({\n unitCode: \"ClientPersons\",\n showMethod: \"main\",\n inputParameters: [{\n name: \"in_CODE\",\n value: prms.sCode\n }],\n callBack: res => {\n res.success ? prms.callBack(res) : null;\n }\n });\n }, [pOnlineShowDictionary]);\n\n //Отображение раздела \"Клиенты\"\n const handleClientClientsOpen = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async prms => {\n pOnlineShowDictionary({\n unitCode: \"ClientClients\",\n showMethod: \"main\",\n inputParameters: [{\n name: \"in_CLIENT_CODE\",\n value: prms.sCode\n }],\n callBack: res => {\n res.success ? prms.callBack(res) : null;\n }\n });\n }, [pOnlineShowDictionary]);\n\n //Отображение раздела \"Каталоги\"\n const handleCatalogTreeOpen = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async prms => {\n pOnlineShowDictionary({\n unitCode: \"CatalogTree\",\n showMethod: \"main\",\n inputParameters: [{\n name: \"in_DOCNAME\",\n value: prms.sUnitName\n }, {\n name: \"in_NAME\",\n value: prms.sName\n }],\n callBack: res => {\n res.success ? prms.callBack(res) : null;\n }\n });\n }, [pOnlineShowDictionary]);\n\n //Отображение раздела \"Типы событий\"\n const handleEventTypesOpen = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async prms => {\n pOnlineShowDictionary({\n unitCode: \"ClientEventTypes\",\n showMethod: \"dictionary\",\n inputParameters: [{\n name: \"pos_eventtypecode\",\n value: prms.sCode\n }],\n callBack: res => {\n res.success ? prms.callBack(res) : null;\n }\n });\n }, [pOnlineShowDictionary]);\n\n //Отображение раздела \"Контрагенты\"\n const handleAgnlistOpen = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async prms => {\n pOnlineShowDictionary({\n unitCode: \"AGNLIST\",\n showMethod: \"agents\",\n inputParameters: [{\n name: \"pos_agnmnemo\",\n value: prms.sMnemo\n }],\n callBack: res => {\n res.success ? prms.callBack(res) : null;\n }\n });\n }, [pOnlineShowDictionary]);\n\n //Отображение раздела \"Штатные подразделения\"\n const handleInsDepartmentOpen = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async prms => {\n pOnlineShowDictionary({\n unitCode: \"INS_DEPARTMENT\",\n inputParameters: [{\n name: \"in_CODE\",\n value: prms.sCode\n }],\n callBack: res => {\n res.success ? prms.callBack(res) : null;\n }\n });\n }, [pOnlineShowDictionary]);\n\n //Отображение раздела \"Нештатные структуры\"\n const handleCostStaffGroupsOpen = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async prms => {\n pOnlineShowDictionary({\n unitCode: \"CostStaffGroups\",\n inputParameters: [{\n name: \"in_CODE\",\n value: prms.sCode\n }],\n callBack: res => {\n res.success ? prms.callBack(res) : null;\n }\n });\n }, [pOnlineShowDictionary]);\n\n //Отображение раздела \"Дополнительные словари\"\n const handleExtraDictionariesOpen = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async prms => {\n pOnlineShowDictionary({\n unitCode: \"ExtraDictionaries\",\n showMethod: \"values\",\n inputParameters: [{\n name: \"pos_rn\",\n value: prms.nRn\n }, {\n name: prms.sParamName,\n value: prms.paramValue\n }],\n callBack: res => {\n res.success ? prms.callBack(res) : null;\n }\n });\n }, [pOnlineShowDictionary]);\n\n //Отображение раздела \"Маршруты событий (исполнители в точках)\"\n const handleEventRoutesPointExecutersOpen = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async prms => {\n pOnlineShowDictionary({\n unitCode: \"EventRoutesPointExecuters\",\n showMethod: \"executers\",\n inputParameters: prms.inputParameters,\n callBack: res => {\n res.success ? prms.callBack(res) : null;\n }\n });\n }, [pOnlineShowDictionary]);\n\n //Отображение раздела \"События\"\n const handleClientEventsOpen = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async prms => {\n pOnlineShowDictionary({\n unitCode: \"ClientEvents\",\n inputParameters: [{\n name: \"in_Ident\",\n value: prms.nIdent\n }]\n });\n }, [pOnlineShowDictionary]);\n\n //Отображение раздела \"События (примечания)\"\n const handleClientEventsNotesOpen = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async prms => {\n pOnlineShowDictionary({\n unitCode: \"ClientEventsNotes\",\n showMethod: \"main\",\n inputParameters: [{\n name: \"in_PRN\",\n value: prms.nPrn\n }]\n });\n }, [pOnlineShowDictionary]);\n\n //Отображение раздела \"Присоединенные документы\"\n const handleFileLinksOpen = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async prms => {\n pOnlineShowDictionary({\n unitCode: \"FileLinks\",\n showMethod: \"main_link\",\n inputParameters: [{\n name: \"in_PRN\",\n value: prms.nPrn\n }, {\n name: \"in_UNITCODE\",\n value: prms.sUnitCode\n }]\n });\n }, [pOnlineShowDictionary]);\n\n //Отображение раздела \"Маршруты событий (точки перехода)\"\n const handleEventRoutesPointsPassessOpen = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async prms => {\n pOnlineShowDictionary({\n unitCode: \"EventRoutesPointsPasses\",\n showMethod: \"main_passes\",\n inputParameters: [{\n name: \"in_ENVTYPE_CODE\",\n value: prms.sEventType\n }, {\n name: \"in_ENVSTAT_CODE\",\n value: prms.sEventStatus\n }, {\n name: \"in_POINT\",\n value: prms.nPoint\n }],\n callBack: res => {\n res.success ? prms.callBack(res) : null;\n }\n });\n }, [pOnlineShowDictionary]);\n\n //Универсальное отображение раздела\n const handleUnitOpen = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async prms => {\n pOnlineShowDictionary({\n unitCode: prms.sUnitCode,\n showMethod: prms.sShowMethod,\n inputParameters: prms.inputParameters,\n callBack: res => {\n res.success ? prms.callBack(res) : null;\n }\n });\n }, [pOnlineShowDictionary]);\n return {\n handleClientPersonOpen,\n handleClientClientsOpen,\n handleCatalogTreeOpen,\n handleEventTypesOpen,\n handleAgnlistOpen,\n handleInsDepartmentOpen,\n handleCostStaffGroupsOpen,\n handleExtraDictionariesOpen,\n handleEventRoutesPointExecutersOpen,\n handleClientEventsOpen,\n handleClientEventsNotesOpen,\n handleFileLinksOpen,\n handleEventRoutesPointsPassessOpen,\n handleUnitOpen\n };\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/clnt_task_board/hooks/dict_hooks.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useDictionary: () => (/* binding */ useDictionary)\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 _context_application__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../context/application */ \"./app/context/application.js\");\n/*\r\n Парус 8 - Панели мониторинга - УДП - Доски задач\r\n Пользовательские хуки: Хуки открытия разделов\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контекст приложения\n\n//-----------\n//Тело модуля\n//-----------\n\n//Состояние открытия разделов\nconst useDictionary = () => {\n //Подключение к контексту приложения\n const {\n pOnlineShowDictionary\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_1__[\"ApplicationСtx\"]);\n\n //Отображение раздела \"Сотрудники\"\n const handleClientPersonOpen = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async prms => {\n pOnlineShowDictionary({\n unitCode: \"ClientPersons\",\n showMethod: \"main\",\n inputParameters: [{\n name: \"in_CODE\",\n value: prms.sCode\n }],\n callBack: res => {\n res.success ? prms.callBack(res) : null;\n }\n });\n }, [pOnlineShowDictionary]);\n\n //Отображение раздела \"Клиенты\"\n const handleClientClientsOpen = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async prms => {\n pOnlineShowDictionary({\n unitCode: \"ClientClients\",\n showMethod: \"main\",\n inputParameters: [{\n name: \"in_CLIENT_CODE\",\n value: prms.sCode\n }],\n callBack: res => {\n res.success ? prms.callBack(res) : null;\n }\n });\n }, [pOnlineShowDictionary]);\n\n //Отображение раздела \"Каталоги\"\n const handleCatalogTreeOpen = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async prms => {\n pOnlineShowDictionary({\n unitCode: \"CatalogTree\",\n showMethod: \"main\",\n inputParameters: [{\n name: \"in_DOCNAME\",\n value: prms.sUnitName\n }, {\n name: \"in_NAME\",\n value: prms.sName\n }, {\n name: \"in_RN\",\n value: prms.nRn\n }],\n callBack: res => {\n res.success ? prms.callBack(res) : null;\n }\n });\n }, [pOnlineShowDictionary]);\n\n //Отображение раздела \"Типы событий\"\n const handleEventTypesOpen = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async prms => {\n pOnlineShowDictionary({\n unitCode: \"ClientEventTypes\",\n showMethod: \"dictionary\",\n inputParameters: [{\n name: \"pos_eventtypecode\",\n value: prms.sCode\n }],\n callBack: res => {\n res.success ? prms.callBack(res) : null;\n }\n });\n }, [pOnlineShowDictionary]);\n\n //Отображение раздела \"Контрагенты\"\n const handleAgnlistOpen = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async prms => {\n pOnlineShowDictionary({\n unitCode: \"AGNLIST\",\n showMethod: \"agents\",\n inputParameters: [{\n name: \"pos_agnmnemo\",\n value: prms.sMnemo\n }],\n callBack: res => {\n res.success ? prms.callBack(res) : null;\n }\n });\n }, [pOnlineShowDictionary]);\n\n //Отображение раздела \"Штатные подразделения\"\n const handleInsDepartmentOpen = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async prms => {\n pOnlineShowDictionary({\n unitCode: \"INS_DEPARTMENT\",\n inputParameters: [{\n name: \"in_CODE\",\n value: prms.sCode\n }],\n callBack: res => {\n res.success ? prms.callBack(res) : null;\n }\n });\n }, [pOnlineShowDictionary]);\n\n //Отображение раздела \"Нештатные структуры\"\n const handleCostStaffGroupsOpen = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async prms => {\n pOnlineShowDictionary({\n unitCode: \"CostStaffGroups\",\n inputParameters: [{\n name: \"in_CODE\",\n value: prms.sCode\n }],\n callBack: res => {\n res.success ? prms.callBack(res) : null;\n }\n });\n }, [pOnlineShowDictionary]);\n\n //Отображение раздела \"Дополнительные словари\"\n const handleExtraDictionariesOpen = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async prms => {\n pOnlineShowDictionary({\n unitCode: \"ExtraDictionaries\",\n showMethod: \"values\",\n inputParameters: [{\n name: \"pos_rn\",\n value: prms.nRn\n }, {\n name: prms.sParamName,\n value: prms.paramValue\n }],\n callBack: res => {\n res.success ? prms.callBack(res) : null;\n }\n });\n }, [pOnlineShowDictionary]);\n\n //Отображение раздела \"Маршруты событий (исполнители в точках)\"\n const handleEventRoutesPointExecutersOpen = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async prms => {\n pOnlineShowDictionary({\n unitCode: \"EventRoutesPointExecuters\",\n showMethod: \"executers\",\n inputParameters: prms.inputParameters,\n callBack: res => {\n res.success ? prms.callBack(res) : null;\n }\n });\n }, [pOnlineShowDictionary]);\n\n //Отображение раздела \"События\"\n const handleClientEventsOpen = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async prms => {\n pOnlineShowDictionary({\n unitCode: \"ClientEvents\",\n inputParameters: [{\n name: \"in_Ident\",\n value: prms.nIdent\n }]\n });\n }, [pOnlineShowDictionary]);\n\n //Отображение раздела \"События (примечания)\"\n const handleClientEventsNotesOpen = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async prms => {\n pOnlineShowDictionary({\n unitCode: \"ClientEventsNotes\",\n showMethod: \"main\",\n inputParameters: [{\n name: \"in_PRN\",\n value: prms.nPrn\n }]\n });\n }, [pOnlineShowDictionary]);\n\n //Отображение раздела \"Присоединенные документы\"\n const handleFileLinksOpen = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async prms => {\n pOnlineShowDictionary({\n unitCode: \"FileLinks\",\n showMethod: \"main_link\",\n inputParameters: [{\n name: \"in_PRN\",\n value: prms.nPrn\n }, {\n name: \"in_UNITCODE\",\n value: prms.sUnitCode\n }]\n });\n }, [pOnlineShowDictionary]);\n\n //Отображение раздела \"Маршруты событий (точки перехода)\"\n const handleEventRoutesPointsPassessOpen = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async prms => {\n pOnlineShowDictionary({\n unitCode: \"EventRoutesPointsPasses\",\n showMethod: \"main_passes\",\n inputParameters: [{\n name: \"in_ENVTYPE_CODE\",\n value: prms.sEventType\n }, {\n name: \"in_ENVSTAT_CODE\",\n value: prms.sEventStatus\n }, {\n name: \"in_POINT\",\n value: prms.nPoint\n }],\n callBack: res => {\n res.success ? prms.callBack(res) : null;\n }\n });\n }, [pOnlineShowDictionary]);\n\n //Универсальное отображение раздела\n const handleUnitOpen = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async prms => {\n pOnlineShowDictionary({\n unitCode: prms.sUnitCode,\n showMethod: prms.sShowMethod,\n inputParameters: prms.inputParameters,\n callBack: res => {\n res.success ? prms.callBack(res) : null;\n }\n });\n }, [pOnlineShowDictionary]);\n return {\n handleClientPersonOpen,\n handleClientClientsOpen,\n handleCatalogTreeOpen,\n handleEventTypesOpen,\n handleAgnlistOpen,\n handleInsDepartmentOpen,\n handleCostStaffGroupsOpen,\n handleExtraDictionariesOpen,\n handleEventRoutesPointExecutersOpen,\n handleClientEventsOpen,\n handleClientEventsNotesOpen,\n handleFileLinksOpen,\n handleEventRoutesPointsPassessOpen,\n handleUnitOpen\n };\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/clnt_task_board/hooks/dict_hooks.js?"); /***/ }), @@ -642,7 +642,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 */ useClientEvent: () => (/* binding */ useClientEvent),\n/* harmony export */ useDocsProps: () => (/* binding */ useDocsProps)\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 _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../context/backend */ \"./app/context/backend.js\");\n/*\r\n Парус 8 - Панели мониторинга - УДП - Доски задач\r\n Пользовательские хуки: Хуки диалога события\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контекст взаимодействия с сервером\n\n//-----------\n//Тело модуля\n//-----------\n\n//Хук для события\nconst useClientEvent = (taskRn, taskType = \"\") => {\n //Собственное состояние\n const [task, setTask] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n init: true,\n nRn: taskRn,\n sCrn: \"\",\n sPrefix: \"\",\n sNumber: \"\",\n sType: taskType,\n sStatus: \"\",\n sDescription: \"\",\n sClntClients: \"\",\n sClntClnperson: \"\",\n dStartDate: \"\",\n sInitClnperson: \"\",\n sInitUser: \"\",\n sInitReason: \"\",\n sToCompany: \"\",\n sToDepartment: \"\",\n sToClnpost: \"\",\n sToClnpsdep: \"\",\n sToClnperson: \"\",\n sToFcstaffgrp: \"\",\n sToUser: \"\",\n sToUsergrp: \"\",\n sCurrentUser: \"\",\n isUpdate: false,\n insertDisabled: true,\n updateDisabled: true,\n docProps: {}\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //При инициализации события\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если это инициализация\n if (task.init) {\n //Если указан рег. номер события\n if (taskRn) {\n //Считывание параметров события\n const readEvent = async () => {\n //Считываем информацию о событии по рег. номеру\n const data = await executeStored({\n stored: \"PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_GET\",\n args: {\n NCLNEVENTS: task.nRn\n },\n respArg: \"COUT\"\n });\n //Фильтруем доп. свойства\n let docProps = Object.keys(data.XEVENT).filter(key => key.includes(\"DP_\")).reduce((prev, key) => ({\n ...prev,\n [key]: data.XEVENT[key]\n }), {});\n //Устанавливаем информацию о событии\n setTask(pv => ({\n ...pv,\n sCrn: data.XEVENT.SCRN,\n sPrefix: data.XEVENT.SPREF,\n sNumber: data.XEVENT.SNUMB,\n sType: data.XEVENT.STYPE,\n sStatus: data.XEVENT.SSTATUS,\n sDescription: data.XEVENT.SDESCRIPTION,\n sClntClients: data.XEVENT.SCLIENT_CLIENT,\n sClntClnperson: data.XEVENT.SCLIENT_PERSON,\n dPlanDate: data.XEVENT.SPLAN_DATE,\n sInitClnperson: data.XEVENT.SINIT_PERSON,\n sInitUser: data.XEVENT.SINIT_AUTHID,\n sInitReason: data.XEVENT.SREASON,\n sToCompany: data.XEVENT.SSEND_CLIENT,\n sToDepartment: data.XEVENT.SSEND_DIVISION,\n sToClnpost: data.XEVENT.SSEND_POST,\n sToClnpsdep: data.XEVENT.SSEND_PERFORM,\n sToClnperson: data.XEVENT.SSEND_PERSON,\n sToFcstaffgrp: data.XEVENT.SSEND_STAFFGRP,\n sToUser: data.XEVENT.SSEND_USER_NAME,\n sToUsergrp: data.XEVENT.SSEND_USER_GROUP,\n sCurrentUser: data.XEVENT.SINIT_AUTHID,\n isUpdate: true,\n init: false,\n docProps: docProps\n }));\n };\n //Инициализация параметров события\n readEvent();\n } else {\n //Считывание изначальных параметров события\n const initEvent = async () => {\n //Инициализируем параметры события\n const data = await executeStored({\n stored: \"PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_INIT\",\n args: {\n SEVENT_TYPE: task.sType\n }\n });\n //Если есть данные\n if (data) {\n //Устанавливаем данные по событию\n setTask(pv => ({\n ...pv,\n sPrefix: data.SPREF,\n sNumber: data.SNUMB,\n sStatus: data.SSTATUS,\n sCurrentUser: data.SINIT_AUTHNAME,\n sInitClnperson: data.SINIT_PERSON,\n sInitUser: !data.SINIT_PERSON ? data.SINIT_AUTHNAME : \"\",\n init: false\n }));\n }\n };\n //Инициализация изначальных параметров события\n initEvent();\n }\n }\n if (!task.init) {\n setTask(pv => ({\n ...pv,\n sInitUser: !task.sInitClnperson ? task.sCurrentUser : \"\"\n }));\n }\n }, [executeStored, task.init, task.nRn, task.sType, task.sCurrentUser, task.sInitClnperson, taskRn]);\n\n //Проверка доступности действия\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n setTask(pv => ({\n ...pv,\n insertDisabled: !task.sCrn || !task.sPrefix || !task.sNumber || !task.sType || !task.sStatus || !task.sDescription || !task.sInitClnperson && !task.sInitUser,\n updateDisabled: !task.sDescription\n }));\n }, [task.sCrn, task.sDescription, task.sInitClnperson, task.sInitUser, task.sNumber, task.sPrefix, task.sStatus, task.sType]);\n return [task, setTask];\n};\n\n//Хук для получения свойств раздела \"События\"\nconst useDocsProps = taskType => {\n //Собственное состояние\n const [docProps, setDocsProps] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n loaded: false,\n props: []\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Загрузка доп. свойств\n let getDocsProps = async () => {\n //Считываема доп. свойства по типу события\n const data = await executeStored({\n stored: \"PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_PROPS_GET\",\n args: {\n SEVNTYPE_CODE: taskType\n },\n isArray: name => name === \"XPROPS\",\n respArg: \"COUT\"\n });\n //Устанавливаем доп. свойства\n setDocsProps({\n loaded: true,\n props: [...(data?.XPROPS || [])]\n });\n };\n //Если доп. свойства не загружены\n if (!docProps.loaded) {\n //Загружаем доп. свойства\n getDocsProps();\n }\n }, [docProps.loaded, executeStored, taskType]);\n return [docProps];\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/clnt_task_board/hooks/task_dialog_hooks.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useClientEvent: () => (/* binding */ useClientEvent),\n/* harmony export */ useDocsProps: () => (/* binding */ useDocsProps)\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 _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../context/backend */ \"./app/context/backend.js\");\n/*\r\n Парус 8 - Панели мониторинга - УДП - Доски задач\r\n Пользовательские хуки: Хуки диалога события\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контекст взаимодействия с сервером\n\n//-----------\n//Тело модуля\n//-----------\n\n//Хук для события\nconst useClientEvent = (taskRn, taskType = \"\") => {\n //Собственное состояние\n const [task, setTask] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n init: true,\n nRn: taskRn,\n sCrn: \"\",\n sPrefix: \"\",\n sNumber: \"\",\n sType: taskType,\n sStatus: \"\",\n sDescription: \"\",\n sClntClients: \"\",\n sClntClnperson: \"\",\n dStartDate: \"\",\n sInitClnperson: \"\",\n sInitUser: \"\",\n sInitReason: \"\",\n sToCompany: \"\",\n sToDepartment: \"\",\n sToClnpost: \"\",\n sToClnpsdep: \"\",\n sToClnperson: \"\",\n sToFcstaffgrp: \"\",\n sToUser: \"\",\n sToUsergrp: \"\",\n sCurrentUser: \"\",\n isUpdate: false,\n insertDisabled: true,\n updateDisabled: true,\n docProps: {}\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //При инициализации события\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если это инициализация\n if (task.init) {\n //Если указан рег. номер события\n if (taskRn) {\n //Считывание параметров события\n const readEvent = async () => {\n //Считываем информацию о событии по рег. номеру\n const data = await executeStored({\n stored: \"PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_GET\",\n args: {\n NCLNEVENTS: task.nRn\n },\n respArg: \"COUT\"\n });\n //Фильтруем доп. свойства\n let docProps = Object.keys(data.XEVENT).filter(key => key.includes(\"DP_\")).reduce((prev, key) => ({\n ...prev,\n [key]: data.XEVENT[key]\n }), {});\n //Устанавливаем информацию о событии\n setTask(pv => ({\n ...pv,\n sCrn: data.XEVENT.SCRN,\n nClosed: data.XEVENT.NCLOSED,\n sPrefix: data.XEVENT.SPREF,\n sNumber: data.XEVENT.SNUMB,\n sType: data.XEVENT.STYPE,\n sStatus: data.XEVENT.SSTATUS,\n sDescription: data.XEVENT.SDESCRIPTION,\n sClntClients: data.XEVENT.SCLIENT_CLIENT,\n sClntClnperson: data.XEVENT.SCLIENT_PERSON,\n dPlanDate: data.XEVENT.SPLAN_DATE,\n sInitClnperson: data.XEVENT.SINIT_PERSON,\n sInitUser: data.XEVENT.SINIT_AUTHID,\n sInitReason: data.XEVENT.SREASON,\n sToCompany: data.XEVENT.SSEND_CLIENT,\n sToDepartment: data.XEVENT.SSEND_DIVISION,\n sToClnpost: data.XEVENT.SSEND_POST,\n sToClnpsdep: data.XEVENT.SSEND_PERFORM,\n sToClnperson: data.XEVENT.SSEND_PERSON,\n sToFcstaffgrp: data.XEVENT.SSEND_STAFFGRP,\n sToUser: data.XEVENT.SSEND_USER_NAME,\n sToUsergrp: data.XEVENT.SSEND_USER_GROUP,\n sCurrentUser: data.XEVENT.SINIT_AUTHID,\n isUpdate: true,\n init: false,\n docProps: docProps\n }));\n };\n //Инициализация параметров события\n readEvent();\n } else {\n //Считывание изначальных параметров события\n const initEvent = async () => {\n //Инициализируем параметры события\n const data = await executeStored({\n stored: \"PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_INIT\",\n args: {\n SEVENT_TYPE: task.sType\n }\n });\n //Если есть данные\n if (data) {\n //Устанавливаем данные по событию\n setTask(pv => ({\n ...pv,\n sPrefix: data.SPREF,\n sNumber: data.SNUMB,\n sStatus: data.SSTATUS,\n sCurrentUser: data.SINIT_AUTHNAME,\n sInitClnperson: data.SINIT_PERSON,\n sInitUser: !data.SINIT_PERSON ? data.SINIT_AUTHNAME : \"\",\n init: false\n }));\n }\n };\n //Инициализация изначальных параметров события\n initEvent();\n }\n }\n if (!task.init) {\n setTask(pv => ({\n ...pv,\n sInitUser: !task.sInitClnperson ? task.sCurrentUser : \"\"\n }));\n }\n }, [executeStored, task.init, task.nRn, task.sType, task.sCurrentUser, task.sInitClnperson, taskRn]);\n\n //Проверка доступности действия\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n setTask(pv => ({\n ...pv,\n insertDisabled: !task.sCrn || !task.sPrefix || !task.sNumber || !task.sType || !task.sStatus || !task.sDescription || !task.sInitClnperson && !task.sInitUser,\n updateDisabled: !task.sDescription\n }));\n }, [task.sCrn, task.sDescription, task.sInitClnperson, task.sInitUser, task.sNumber, task.sPrefix, task.sStatus, task.sType]);\n return [task, setTask];\n};\n\n//Хук для получения свойств раздела \"События\"\nconst useDocsProps = taskType => {\n //Собственное состояние\n const [docProps, setDocsProps] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n loaded: false,\n props: []\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Загрузка доп. свойств\n let getDocsProps = async () => {\n //Считываема доп. свойства по типу события\n const data = await executeStored({\n stored: \"PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_PROPS_GET\",\n args: {\n SEVNTYPE_CODE: taskType\n },\n isArray: name => name === \"XPROPS\",\n respArg: \"COUT\"\n });\n //Устанавливаем доп. свойства\n setDocsProps({\n loaded: true,\n props: [...(data?.XPROPS || [])]\n });\n };\n //Если доп. свойства не загружены\n if (!docProps.loaded) {\n //Загружаем доп. свойства\n getDocsProps();\n }\n }, [docProps.loaded, executeStored, taskType]);\n return [docProps];\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/clnt_task_board/hooks/task_dialog_hooks.js?"); /***/ }), @@ -653,7 +653,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 */ useTasks: () => (/* binding */ useTasks),\n/* harmony export */ useTasksFunctions: () => (/* binding */ useTasksFunctions)\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 _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../layouts */ \"./app/panels/clnt_task_board/layouts.js\");\n/* harmony import */ var _dict_hooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./dict_hooks */ \"./app/panels/clnt_task_board/hooks/dict_hooks.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\n//Хук обработки перехода события\nconst useTasksFunctions = () => {\n //Состояние открытия раздела\n const {\n handleEventRoutesPointExecutersOpen,\n handleEventRoutesPointsPassessOpen\n } = (0,_dict_hooks__WEBPACK_IMPORTED_MODULE_4__.useDictionary)();\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Выполнение направления события\n const handleSendExec = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(\n //Выполняем финальное перенаправление события\n async ({\n mainArgs,\n onReload = null\n }) => {\n await executeStored({\n stored: \"PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_SEND\",\n args: {\n ...mainArgs\n }\n });\n //Если требуется перезагрузить данные\n onReload ? onReload() : null;\n }, [executeStored]);\n\n //При направлении события\n const handleSend = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ({\n mainArgs,\n onReload = null,\n onNoteOpen = null\n }) => {\n //Если требуется добавить примечание\n if (onNoteOpen) {\n //Открываем примечание с коллбэком на направление события\n onNoteOpen(async note => {\n //Выполняем изменение статуса\n handleSendExec({\n mainArgs: {\n ...mainArgs,\n SNOTE_HEADER: note.header,\n SNOTE: note.text\n },\n onReload\n });\n });\n } else {\n //Выполняем изменение статуса\n handleSendExec({\n mainArgs,\n onReload\n });\n }\n }, [handleSendExec]);\n\n //По нажатию действия \"Направить\"\n const handleTaskSend = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ({\n nEvent,\n onReload = null,\n onNoteOpen = null\n }) => {\n //Выполняем инициализацию параметров\n const firstStep = await executeStored({\n stored: \"PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_SEND\",\n args: {\n NSTEP: 1,\n NEVENT: nEvent\n }\n });\n if (firstStep) {\n //Открываем раздел \"Маршруты событий (исполнители в точках)\" для выбора исполнителя\n handleEventRoutesPointExecutersOpen({\n inputParameters: [{\n name: \"in_IDENT\",\n value: firstStep.NIDENT\n }, {\n name: \"in_EVENT\",\n value: nEvent\n }, {\n name: \"in_PERSON_CODE\",\n value: firstStep.SSEND_PERSON\n }, {\n name: \"in_USER_NAME\",\n value: firstStep.SSEND_USER_NAME\n }, {\n name: \"in_EVENT_TYPE\",\n value: firstStep.SEVENT_TYPE\n }, {\n name: \"in_EVENT_STAT\",\n value: firstStep.SEVENT_STAT\n }, {\n name: \"in_INIT_PERSON\",\n value: firstStep.SINIT_PERSON\n }, {\n name: \"in_INIT_AUTHNAME\",\n value: firstStep.SINIT_AUTHNAME\n }, {\n name: \"in_CLIENT_CLIENT\",\n value: firstStep.SCLIENT_CLIENT\n }, {\n name: \"in_CLIENT_PERSON\",\n value: firstStep.SCLIENT_PERSON\n }],\n callBack: sendPrms => {\n //Собираем основные параметры направления события\n const mainArgs = {\n NIDENT: firstStep.NIDENT,\n NSTEP: 2,\n NEVENT: nEvent,\n SSEND_CLIENT: sendPrms.outParameters.out_CLIENT_CODE,\n SSEND_DIVISION: sendPrms.outParameters.out_DIVISION_CODE,\n SSEND_POST: sendPrms.outParameters.out_POST_CODE,\n SSEND_PERFORM: sendPrms.outParameters.out_POST_IN_DIV_CODE,\n SSEND_PERSON: sendPrms.outParameters.out_PERSON_CODE,\n SSEND_STAFFGRP: sendPrms.outParameters.out_STAFFGRP_CODE,\n SSEND_USER_GROUP: sendPrms.outParameters.out_USER_GROUP_CODE,\n SSEND_USER_NAME: sendPrms.outParameters.out_USER_NAME,\n NSEND_PREDEFINED_EXEC: sendPrms.outParameters.out_PREDEFINED_EXEC,\n NSEND_PREDEFINED_PROC: sendPrms.outParameters.out_PREDEFINED_PROC\n };\n //Перенаправляем событие\n handleSend({\n nEvent,\n mainArgs,\n onReload,\n onNoteOpen\n });\n }\n });\n }\n }, [executeStored, handleEventRoutesPointExecutersOpen, handleSend]);\n\n //Выполнение изменения статуса события\n const handleStateChangeExec = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ({\n mainArgs,\n onReload = null\n }) => {\n await executeStored({\n stored: \"PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_STATE_CHANGE\",\n args: {\n ...mainArgs\n }\n });\n //Если требуется перезагрузить данные\n onReload ? onReload() : null;\n }, [executeStored]);\n\n //При изменении статуса события\n const handleStateChange = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ({\n mainArgs,\n onReload = null,\n onNoteOpen = null\n }) => {\n //Если необходимо добавить примечание\n if (onNoteOpen) {\n //Открываем примечание с коллбэком на изменение статуса\n onNoteOpen(async note => {\n //Выполняем изменение статуса\n handleStateChangeExec({\n mainArgs: {\n ...mainArgs,\n SNOTE_HEADER: note.header,\n SNOTE: note.text\n },\n onReload\n });\n });\n } else {\n //Выполняем изменение статуса\n handleStateChangeExec({\n mainArgs,\n onReload\n });\n }\n }, [handleStateChangeExec]);\n\n //При выборе исполнителя\n const handleExecuterSelect = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ({\n nEvent,\n pointInfo,\n onReload = null,\n onNoteOpen = null\n }) => {\n //Если требуется выбрать получателя\n if (pointInfo.NSELECT_EXEC === 1) {\n //Открываем раздел \"Маршруты событий (исполнители в точках)\" для выбора исполнителя\n handleEventRoutesPointExecutersOpen({\n inputParameters: [{\n name: \"in_IDENT\",\n value: pointInfo.NIDENT\n }, {\n name: \"in_EVENT\",\n value: nEvent\n }, {\n name: \"in_EVENT_TYPE\",\n value: pointInfo.SEVENT_TYPE\n }, {\n name: \"in_EVENT_STAT\",\n value: pointInfo.SEVENT_STAT\n }, {\n name: \"in_INIT_PERSON\",\n value: pointInfo.SINIT_PERSON\n }, {\n name: \"in_INIT_AUTHNAME\",\n value: pointInfo.SINIT_AUTHNAME\n }, {\n name: \"in_CLIENT_CLIENT\",\n value: pointInfo.SCLIENT_CLIENT\n }, {\n name: \"in_CLIENT_PERSON\",\n value: pointInfo.SCLIENT_PERSON\n }],\n callBack: sendPrms => {\n const mainArgs = {\n NIDENT: pointInfo.NIDENT,\n NSTEP: 4,\n NEVENT: nEvent,\n SEVENT_STAT: pointInfo.SEVENT_STAT,\n SSEND_CLIENT: sendPrms.outParameters.out_CLIENT_CODE,\n SSEND_DIVISION: sendPrms.outParameters.out_DIVISION_CODE,\n SSEND_POST: sendPrms.outParameters.out_POST_CODE,\n SSEND_PERFORM: sendPrms.outParameters.out_POST_IN_DIV_CODE,\n SSEND_PERSON: sendPrms.outParameters.out_PERSON_CODE,\n SSEND_STAFFGRP: sendPrms.outParameters.out_STAFFGRP_CODE,\n SSEND_USER_GROUP: sendPrms.outParameters.out_USER_GROUP_CODE,\n SSEND_USER_NAME: sendPrms.outParameters.out_USER_NAME,\n NSEND_PREDEFINED_EXEC: sendPrms.outParameters.out_PREDEFINED_EXEC,\n NSEND_PREDEFINED_PROC: sendPrms.outParameters.out_PREDEFINED_PROC\n };\n //Выполняем изменение статуса\n handleStateChange({\n mainArgs,\n onReload,\n onNoteOpen\n });\n }\n });\n } else {\n //Общие аргументы\n const mainArgs = {\n NIDENT: pointInfo.NIDENT,\n NSTEP: 4,\n NEVENT: nEvent,\n SEVENT_STAT: pointInfo.SEVENT_STAT\n };\n //Выполняем изменение статуса\n handleStateChange({\n mainArgs,\n onReload,\n onNoteOpen\n });\n }\n }, [handleEventRoutesPointExecutersOpen, handleStateChange]);\n\n //При выполнении третьего шага\n const handleMakeThirdStep = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ({\n nEvent,\n pointInfo,\n onReload = null,\n onNoteOpen = null\n }) => {\n //Выполняем переход на следующий шаг\n await executeStored({\n stored: \"PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_STATE_CHANGE\",\n args: {\n NIDENT: pointInfo.NIDENT,\n NSTEP: 3,\n NPASS: pointInfo.NPASS\n }\n });\n //Выполняем выбор исполнителя\n handleExecuterSelect({\n nEvent,\n pointInfo,\n onReload,\n onNoteOpen\n });\n }, [executeStored, handleExecuterSelect]);\n\n //При выполнении второго шага\n const handleMakeSecondStep = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ({\n nEvent,\n pointInfo,\n onReload = null,\n onNoteOpen = null\n }) => {\n //Состояние параметров текущего действия\n let currentPointInfo = {\n ...pointInfo\n };\n //Выполняем переход на следующий шаг\n const secondStep = await executeStored({\n stored: \"PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_STATE_CHANGE\",\n args: {\n NIDENT: currentPointInfo.NIDENT,\n NSTEP: 2,\n NPASS: currentPointInfo.NPASS\n }\n });\n //Устанавливаем признак необходимости выбора исполнителя\n currentPointInfo.NSELECT_EXEC = secondStep.NSELECT_EXEC;\n //Выполняем третий шаг\n handleMakeThirdStep({\n nEvent,\n pointInfo: currentPointInfo,\n onReload,\n onNoteOpen\n });\n }, [executeStored, handleMakeThirdStep]);\n\n //При выборе следующей точки события\n const handleNextPointSelect = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({\n nEvent,\n pointInfo,\n onReload = null,\n onNoteOpen = null\n }) => {\n //Состояние параметров текущего действия\n let currentPointInfo = {\n ...pointInfo\n };\n //Открываем раздел \"Маршруты событий (точки перехода)\" для выбора следующей точки\n handleEventRoutesPointsPassessOpen({\n sEventType: currentPointInfo.SEVENT_TYPE,\n sEventStatus: currentPointInfo.SEVENT_STAT,\n nPoint: currentPointInfo.NPOINT,\n callBack: async point => {\n //Устанавливаем полученную точку перехода\n currentPointInfo.NPASS = point.outParameters.out_RN;\n currentPointInfo.SEVENT_STAT = point.outParameters.out_NEXT_POINT;\n //Выполняем второй шаг\n handleMakeSecondStep({\n nEvent,\n pointInfo: currentPointInfo,\n onReload,\n onNoteOpen\n });\n }\n });\n }, [handleEventRoutesPointsPassessOpen, handleMakeSecondStep]);\n\n //По нажатию действия \"Перейти\"\n const handleTaskStateChange = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ({\n nEvent,\n sNextStat = null,\n onReload = null,\n onNoteOpen = null\n }) => {\n //Выполняем инициализацию параметров\n const eventInfo = await executeStored({\n stored: \"PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_STATE_CHANGE\",\n args: {\n NSTEP: 1,\n NEVENT: nEvent,\n SNEXT_STAT: sNextStat\n }\n });\n //Если информация о события проинициализирована\n if (eventInfo) {\n //Если следующий статус неопределен\n if (!sNextStat) {\n //Выполнение перехода с выбором точки\n handleNextPointSelect({\n nEvent,\n pointInfo: eventInfo,\n onReload,\n onNoteOpen\n });\n } else {\n //Выполняем второй шаг\n handleMakeSecondStep({\n nEvent,\n pointInfo: eventInfo,\n onReload,\n onNoteOpen\n });\n }\n }\n }, [executeStored, handleMakeSecondStep, handleNextPointSelect]);\n return {\n handleTaskStateChange,\n handleTaskSend\n };\n};\n\n//Хук получения событий\nconst useTasks = (filterValues, ordersValues) => {\n //Состояние событий\n const [tasks, setTasks] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n loaded: false,\n rows: [],\n reload: false,\n accountsReload: false,\n loadedAccounts: []\n });\n\n //Состояние вспомогательных функций событий\n const {\n handleTaskStateChange\n } = useTasksFunctions();\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Инициализация параметров события\n const initTask = (id, task, avatar = null) => {\n //Фильтруем доп. свойства\n let newDocProps = Object.keys(task).filter(key => key.includes(\"DP_\")).reduce((prev, key) => ({\n ...prev,\n [key]: task[key]\n }), {});\n //Возвращаем структуру события\n return {\n id: id,\n avatar: avatar,\n name: task.SPREF_NUMB,\n nRn: task.NRN,\n sCrn: \"\",\n sPrefix: task.SEVPREF,\n sNumber: task.SEVNUMB,\n sType: task.SEVTYPE_CODE,\n sStatus: task.SEVSTAT_NAME,\n sDescription: task.SEVDESCR,\n sClntClients: \"\",\n sClntClnperson: \"\",\n dchange_date: task.DCHANGE_DATE,\n dStartDate: task.DREG_DATE,\n dExpireDate: task.DEXPIRE_DATE,\n dPlanDate: task.DPLAN_DATE,\n sInitClnperson: task.SINIT_PERSON,\n sInitUser: \"\",\n sInitReason: \"\",\n sToCompany: \"\",\n sToDepartment: task.SSEND_DIVISION,\n sToClnpost: \"\",\n sToClnpsdep: \"\",\n sToClnperson: task.SSEND_PERSON,\n sToFcstaffgrp: \"\",\n sToUser: \"\",\n sToUsergrp: task.SSEND_USRGRP,\n sSender: task.SSENDER,\n sCurrentUser: \"\",\n sLinkedUnit: task.SLINKED_UNIT,\n nLinkedRn: task.NLINKED_RN,\n docProps: newDocProps\n };\n };\n\n //Взаимодействие с событием (через перенос)\n const onDragEnd = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({\n path,\n eventPoints,\n openNoteDialog,\n destCode\n }) => {\n //Определяем нужные параметры\n const {\n source,\n destination\n } = path;\n //Если путь не указан\n if (!destination) {\n return;\n }\n //Если происходит изменение статуса\n if (destination.droppableId !== source.droppableId) {\n //Конвертим ID переносимого события\n let nDraggableTaskId = parseInt(path.draggableId);\n //Считываем строку, у которой изменяется статус\n let task = tasks.rows.find(r => r.id === nDraggableTaskId);\n //Изменяем статус у события\n task.statusId = parseInt(path.destination.droppableId);\n //Получение настройки точки назначения\n const pointSettings = eventPoints.find(eventPoint => eventPoint.SEVPOINT === destCode);\n //Изменяем статус события с добавлением примечания\n handleTaskStateChange({\n nEvent: task.nRn,\n sNextStat: destCode,\n onReload: () => setTasks(pv => ({\n ...pv,\n reload: true,\n accountsReload: true\n })),\n onNoteOpen: pointSettings.ADDNOTE_ONCHST ? openNoteDialog : null\n });\n }\n }, [handleTaskStateChange, tasks.rows]);\n\n //При необходимости перезагрузки данных\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Считывание данных с учетом фильтрации\n let getTasks = async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_LOAD\",\n args: {\n CFILTERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.object2Base64XML)((0,_layouts__WEBPACK_IMPORTED_MODULE_3__.convertFilterValuesToArray)(filterValues), {\n arrayNodeName: \"filters\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.object2Base64XML)(ordersValues, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NINCLUDE_ACCOUNTS: tasks.accountsReload ? 1 : 0\n },\n isArray: name => name === \"XAGENTS\",\n respArg: \"COUT\"\n });\n //Считываем информацию о событиях\n let events = data.XCLNEVENTS.XDATA.XDATA_GRID;\n //Считываем иноформацию о контрагентах\n let accounts = tasks.accountsReload ? [...(data.XAGENTS_WITH_IMG.XAGENTS || [])] : tasks.loadedAccounts;\n //Инициализируем события\n let newRows = [];\n //Если есть события\n if (events.rows) {\n //Формируем структуру событий\n newRows = [...(events.rows || [])].reduce((prev, cur) => [...prev, initTask(prev.length, cur, accounts.find(agent => agent.SAGNABBR === cur.SSENDER)?.BIMAGE)], []);\n }\n //Возвращаем информацию\n return {\n rows: [...newRows],\n loadedAccounts: accounts\n };\n };\n //Считывание данных\n let getData = async () => {\n //Считываем информацию о задачах\n let eventTasks = await getTasks();\n //Загружаем данные\n setTasks(pv => ({\n ...pv,\n loaded: true,\n rows: eventTasks.rows,\n loadedAccounts: eventTasks.loadedAccounts,\n reload: false,\n accountsReload: false\n }));\n };\n //Если необходимо загрузить данные и указан тип событий и загружены все необходимые вспомогательные данные\n if (tasks.reload) {\n //Загружаем данные\n getData();\n }\n }, [SERV_DATA_TYPE_CLOB, executeStored, filterValues, ordersValues, tasks.accountsReload, tasks.loadedAccounts, tasks.reload]);\n return [tasks, setTasks, onDragEnd];\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/clnt_task_board/hooks/tasks_hooks.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useTasks: () => (/* binding */ useTasks),\n/* harmony export */ useTasksFunctions: () => (/* binding */ useTasksFunctions)\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 _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../layouts */ \"./app/panels/clnt_task_board/layouts.js\");\n/* harmony import */ var _dict_hooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./dict_hooks */ \"./app/panels/clnt_task_board/hooks/dict_hooks.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\n//Хук обработки перехода события\nconst useTasksFunctions = () => {\n //Состояние открытия раздела\n const {\n handleEventRoutesPointExecutersOpen,\n handleEventRoutesPointsPassessOpen\n } = (0,_dict_hooks__WEBPACK_IMPORTED_MODULE_4__.useDictionary)();\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Выполнение направления события\n const handleSendExec = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(\n //Выполняем финальное перенаправление события\n async ({\n mainArgs,\n onReload = null\n }) => {\n await executeStored({\n stored: \"PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_SEND\",\n args: {\n ...mainArgs\n }\n });\n //Если требуется перезагрузить данные\n onReload ? onReload() : null;\n }, [executeStored]);\n\n //При направлении события\n const handleSend = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ({\n mainArgs,\n onReload = null,\n onNoteOpen = null\n }) => {\n //Если требуется добавить примечание\n if (onNoteOpen) {\n //Открываем примечание с коллбэком на направление события\n onNoteOpen(async note => {\n //Выполняем изменение статуса\n handleSendExec({\n mainArgs: {\n ...mainArgs,\n SNOTE_HEADER: note.header,\n SNOTE: note.text\n },\n onReload\n });\n });\n } else {\n //Выполняем изменение статуса\n handleSendExec({\n mainArgs,\n onReload\n });\n }\n }, [handleSendExec]);\n\n //По нажатию действия \"Направить\"\n const handleTaskSend = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ({\n nEvent,\n onReload = null,\n onNoteOpen = null\n }) => {\n //Выполняем инициализацию параметров\n const firstStep = await executeStored({\n stored: \"PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_SEND\",\n args: {\n NSTEP: 1,\n NEVENT: nEvent\n }\n });\n if (firstStep) {\n //Открываем раздел \"Маршруты событий (исполнители в точках)\" для выбора исполнителя\n handleEventRoutesPointExecutersOpen({\n inputParameters: [{\n name: \"in_IDENT\",\n value: firstStep.NIDENT\n }, {\n name: \"in_EVENT\",\n value: nEvent\n }, {\n name: \"in_PERSON_CODE\",\n value: firstStep.SSEND_PERSON\n }, {\n name: \"in_USER_NAME\",\n value: firstStep.SSEND_USER_NAME\n }, {\n name: \"in_EVENT_TYPE\",\n value: firstStep.SEVENT_TYPE\n }, {\n name: \"in_EVENT_STAT\",\n value: firstStep.SEVENT_STAT\n }, {\n name: \"in_INIT_PERSON\",\n value: firstStep.SINIT_PERSON\n }, {\n name: \"in_INIT_AUTHNAME\",\n value: firstStep.SINIT_AUTHNAME\n }, {\n name: \"in_CLIENT_CLIENT\",\n value: firstStep.SCLIENT_CLIENT\n }, {\n name: \"in_CLIENT_PERSON\",\n value: firstStep.SCLIENT_PERSON\n }],\n callBack: sendPrms => {\n //Собираем основные параметры направления события\n const mainArgs = {\n NIDENT: firstStep.NIDENT,\n NSTEP: 2,\n NEVENT: nEvent,\n SSEND_CLIENT: sendPrms.outParameters.out_CLIENT_CODE,\n SSEND_DIVISION: sendPrms.outParameters.out_DIVISION_CODE,\n SSEND_POST: sendPrms.outParameters.out_POST_CODE,\n SSEND_PERFORM: sendPrms.outParameters.out_POST_IN_DIV_CODE,\n SSEND_PERSON: sendPrms.outParameters.out_PERSON_CODE,\n SSEND_STAFFGRP: sendPrms.outParameters.out_STAFFGRP_CODE,\n SSEND_USER_GROUP: sendPrms.outParameters.out_USER_GROUP_CODE,\n SSEND_USER_NAME: sendPrms.outParameters.out_USER_NAME,\n NSEND_PREDEFINED_EXEC: sendPrms.outParameters.out_PREDEFINED_EXEC,\n NSEND_PREDEFINED_PROC: sendPrms.outParameters.out_PREDEFINED_PROC\n };\n //Перенаправляем событие\n handleSend({\n nEvent,\n mainArgs,\n onReload,\n onNoteOpen\n });\n }\n });\n }\n }, [executeStored, handleEventRoutesPointExecutersOpen, handleSend]);\n\n //Выполнение изменения статуса события\n const handleStateChangeExec = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ({\n mainArgs,\n onReload = null\n }) => {\n await executeStored({\n stored: \"PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_STATE_CHANGE\",\n args: {\n ...mainArgs\n }\n });\n //Если требуется перезагрузить данные\n onReload ? onReload() : null;\n }, [executeStored]);\n\n //При изменении статуса события\n const handleStateChange = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ({\n mainArgs,\n onReload = null,\n onNoteOpen = null\n }) => {\n //Если необходимо добавить примечание\n if (onNoteOpen) {\n //Открываем примечание с коллбэком на изменение статуса\n onNoteOpen(async note => {\n //Выполняем изменение статуса\n handleStateChangeExec({\n mainArgs: {\n ...mainArgs,\n SNOTE_HEADER: note.header,\n SNOTE: note.text\n },\n onReload\n });\n });\n } else {\n //Выполняем изменение статуса\n handleStateChangeExec({\n mainArgs,\n onReload\n });\n }\n }, [handleStateChangeExec]);\n\n //При выборе исполнителя\n const handleExecuterSelect = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ({\n nEvent,\n pointInfo,\n onReload = null,\n onNoteOpen = null\n }) => {\n //Если требуется выбрать получателя\n if (pointInfo.NSELECT_EXEC === 1) {\n //Открываем раздел \"Маршруты событий (исполнители в точках)\" для выбора исполнителя\n handleEventRoutesPointExecutersOpen({\n inputParameters: [{\n name: \"in_IDENT\",\n value: pointInfo.NIDENT\n }, {\n name: \"in_EVENT\",\n value: nEvent\n }, {\n name: \"in_EVENT_TYPE\",\n value: pointInfo.SEVENT_TYPE\n }, {\n name: \"in_EVENT_STAT\",\n value: pointInfo.SEVENT_STAT\n }, {\n name: \"in_INIT_PERSON\",\n value: pointInfo.SINIT_PERSON\n }, {\n name: \"in_INIT_AUTHNAME\",\n value: pointInfo.SINIT_AUTHNAME\n }, {\n name: \"in_CLIENT_CLIENT\",\n value: pointInfo.SCLIENT_CLIENT\n }, {\n name: \"in_CLIENT_PERSON\",\n value: pointInfo.SCLIENT_PERSON\n }],\n callBack: sendPrms => {\n const mainArgs = {\n NIDENT: pointInfo.NIDENT,\n NSTEP: 4,\n NEVENT: nEvent,\n SEVENT_STAT: pointInfo.SEVENT_STAT,\n SSEND_CLIENT: sendPrms.outParameters.out_CLIENT_CODE,\n SSEND_DIVISION: sendPrms.outParameters.out_DIVISION_CODE,\n SSEND_POST: sendPrms.outParameters.out_POST_CODE,\n SSEND_PERFORM: sendPrms.outParameters.out_POST_IN_DIV_CODE,\n SSEND_PERSON: sendPrms.outParameters.out_PERSON_CODE,\n SSEND_STAFFGRP: sendPrms.outParameters.out_STAFFGRP_CODE,\n SSEND_USER_GROUP: sendPrms.outParameters.out_USER_GROUP_CODE,\n SSEND_USER_NAME: sendPrms.outParameters.out_USER_NAME,\n NSEND_PREDEFINED_EXEC: sendPrms.outParameters.out_PREDEFINED_EXEC,\n NSEND_PREDEFINED_PROC: sendPrms.outParameters.out_PREDEFINED_PROC\n };\n //Выполняем изменение статуса\n handleStateChange({\n mainArgs,\n onReload,\n onNoteOpen\n });\n }\n });\n } else {\n //Общие аргументы\n const mainArgs = {\n NIDENT: pointInfo.NIDENT,\n NSTEP: 4,\n NEVENT: nEvent,\n SEVENT_STAT: pointInfo.SEVENT_STAT\n };\n //Выполняем изменение статуса\n handleStateChange({\n mainArgs,\n onReload,\n onNoteOpen\n });\n }\n }, [handleEventRoutesPointExecutersOpen, handleStateChange]);\n\n //При выполнении третьего шага\n const handleMakeThirdStep = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ({\n nEvent,\n pointInfo,\n onReload = null,\n onNoteOpen = null\n }) => {\n //Выполняем переход на следующий шаг\n await executeStored({\n stored: \"PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_STATE_CHANGE\",\n args: {\n NIDENT: pointInfo.NIDENT,\n NSTEP: 3,\n NPASS: pointInfo.NPASS\n }\n });\n //Выполняем выбор исполнителя\n handleExecuterSelect({\n nEvent,\n pointInfo,\n onReload,\n onNoteOpen\n });\n }, [executeStored, handleExecuterSelect]);\n\n //При выполнении второго шага\n const handleMakeSecondStep = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ({\n nEvent,\n pointInfo,\n onReload = null,\n onNoteOpen = null\n }) => {\n //Состояние параметров текущего действия\n let currentPointInfo = {\n ...pointInfo\n };\n //Выполняем переход на следующий шаг\n const secondStep = await executeStored({\n stored: \"PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_STATE_CHANGE\",\n args: {\n NIDENT: currentPointInfo.NIDENT,\n NSTEP: 2,\n NPASS: currentPointInfo.NPASS\n }\n });\n //Устанавливаем признак необходимости выбора исполнителя\n currentPointInfo.NSELECT_EXEC = secondStep.NSELECT_EXEC;\n //Выполняем третий шаг\n handleMakeThirdStep({\n nEvent,\n pointInfo: currentPointInfo,\n onReload,\n onNoteOpen\n });\n }, [executeStored, handleMakeThirdStep]);\n\n //При выборе следующей точки события\n const handleNextPointSelect = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({\n nEvent,\n pointInfo,\n onReload = null,\n onNoteOpen = null\n }) => {\n //Состояние параметров текущего действия\n let currentPointInfo = {\n ...pointInfo\n };\n //Открываем раздел \"Маршруты событий (точки перехода)\" для выбора следующей точки\n handleEventRoutesPointsPassessOpen({\n sEventType: currentPointInfo.SEVENT_TYPE,\n sEventStatus: currentPointInfo.SEVENT_STAT,\n nPoint: currentPointInfo.NPOINT,\n callBack: async point => {\n //Устанавливаем полученную точку перехода\n currentPointInfo.NPASS = point.outParameters.out_RN;\n currentPointInfo.SEVENT_STAT = point.outParameters.out_NEXT_POINT;\n //Выполняем второй шаг\n handleMakeSecondStep({\n nEvent,\n pointInfo: currentPointInfo,\n onReload,\n onNoteOpen\n });\n }\n });\n }, [handleEventRoutesPointsPassessOpen, handleMakeSecondStep]);\n\n //По нажатию действия \"Перейти\"\n const handleTaskStateChange = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ({\n nEvent,\n sNextStat = null,\n onReload = null,\n onNoteOpen = null\n }) => {\n //Выполняем инициализацию параметров\n const eventInfo = await executeStored({\n stored: \"PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_STATE_CHANGE\",\n args: {\n NSTEP: 1,\n NEVENT: nEvent,\n SNEXT_STAT: sNextStat\n }\n });\n //Если информация о события проинициализирована\n if (eventInfo) {\n //Если следующий статус неопределен\n if (!sNextStat) {\n //Выполнение перехода с выбором точки\n handleNextPointSelect({\n nEvent,\n pointInfo: eventInfo,\n onReload,\n onNoteOpen\n });\n } else {\n //Выполняем второй шаг\n handleMakeSecondStep({\n nEvent,\n pointInfo: eventInfo,\n onReload,\n onNoteOpen\n });\n }\n }\n }, [executeStored, handleMakeSecondStep, handleNextPointSelect]);\n return {\n handleTaskStateChange,\n handleTaskSend\n };\n};\n\n//Хук получения событий\nconst useTasks = (filterValues, ordersValues) => {\n //Состояние событий\n const [tasks, setTasks] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n loaded: false,\n rows: [],\n reload: false,\n accountsReload: false,\n loadedAccounts: []\n });\n\n //Состояние вспомогательных функций событий\n const {\n handleTaskStateChange\n } = useTasksFunctions();\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Инициализация параметров события\n const initTask = (id, task, avatar = null) => {\n //Фильтруем доп. свойства\n let newDocProps = Object.keys(task).filter(key => key.includes(\"DP_\")).reduce((prev, key) => ({\n ...prev,\n [key]: task[key]\n }), {});\n //Возвращаем структуру события\n return {\n id: id,\n avatar: avatar,\n name: task.SPREF_NUMB,\n nRn: task.NRN,\n sCrn: \"\",\n nCrn: task.NCRN,\n nClosed: task.NCLOSED,\n sPrefix: task.SEVPREF,\n sNumber: task.SEVNUMB,\n sType: task.SEVTYPE_CODE,\n sStatus: task.SEVSTAT_NAME,\n sDescription: task.SEVDESCR,\n sClntClients: \"\",\n sClntClnperson: \"\",\n dchange_date: task.DCHANGE_DATE,\n dStartDate: task.DREG_DATE,\n dExpireDate: task.DEXPIRE_DATE,\n dPlanDate: task.DPLAN_DATE,\n sInitClnperson: task.SINIT_PERSON,\n sInitUser: \"\",\n sInitReason: \"\",\n sToCompany: \"\",\n sToDepartment: task.SSEND_DIVISION,\n sToClnpost: \"\",\n sToClnpsdep: \"\",\n sToClnperson: task.SSEND_PERSON,\n sToFcstaffgrp: \"\",\n sToUser: \"\",\n sToUsergrp: task.SSEND_USRGRP,\n sSender: task.SSENDER,\n sCurrentUser: \"\",\n sLinkedUnit: task.SLINKED_UNIT,\n nLinkedRn: task.NLINKED_RN,\n docProps: newDocProps\n };\n };\n\n //Взаимодействие с событием (через перенос)\n const onDragEnd = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({\n path,\n eventPoints,\n openNoteDialog,\n destCode\n }) => {\n //Определяем нужные параметры\n const {\n source,\n destination\n } = path;\n //Если путь не указан\n if (!destination) {\n return;\n }\n //Если происходит изменение статуса\n if (destination.droppableId !== source.droppableId) {\n //Конвертим ID переносимого события\n let nDraggableTaskId = parseInt(path.draggableId);\n //Считываем строку, у которой изменяется статус\n let task = tasks.rows.find(r => r.id === nDraggableTaskId);\n //Изменяем статус у события\n task.statusId = parseInt(path.destination.droppableId);\n //Получение настройки точки назначения\n const pointSettings = eventPoints.find(eventPoint => eventPoint.SEVPOINT === destCode);\n //Изменяем статус события с добавлением примечания\n handleTaskStateChange({\n nEvent: task.nRn,\n sNextStat: destCode,\n onReload: () => setTasks(pv => ({\n ...pv,\n reload: true,\n accountsReload: true\n })),\n onNoteOpen: pointSettings.ADDNOTE_ONCHST ? openNoteDialog : null\n });\n }\n }, [handleTaskStateChange, tasks.rows]);\n\n //При необходимости перезагрузки данных\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Считывание данных с учетом фильтрации\n let getTasks = async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_LOAD\",\n args: {\n CFILTERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.object2Base64XML)((0,_layouts__WEBPACK_IMPORTED_MODULE_3__.convertFilterValuesToArray)(filterValues), {\n arrayNodeName: \"filters\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.object2Base64XML)(ordersValues, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NINCLUDE_ACCOUNTS: tasks.accountsReload ? 1 : 0\n },\n isArray: name => name === \"XAGENTS\",\n respArg: \"COUT\"\n });\n //Считываем информацию о событиях\n let events = data.XCLNEVENTS.XDATA.XDATA_GRID;\n //Считываем иноформацию о контрагентах\n let accounts = tasks.accountsReload ? [...(data.XAGENTS_WITH_IMG.XAGENTS || [])] : tasks.loadedAccounts;\n //Инициализируем события\n let newRows = [];\n //Если есть события\n if (events.rows) {\n //Формируем структуру событий\n newRows = [...(events.rows || [])].reduce((prev, cur) => [...prev, initTask(prev.length, cur, accounts.find(agent => agent.SAGNABBR === cur.SSENDER)?.BIMAGE)], []);\n }\n //Возвращаем информацию\n return {\n rows: [...newRows],\n loadedAccounts: accounts\n };\n };\n //Считывание данных\n let getData = async () => {\n //Считываем информацию о задачах\n let eventTasks = await getTasks();\n //Загружаем данные\n setTasks(pv => ({\n ...pv,\n loaded: true,\n rows: eventTasks.rows,\n loadedAccounts: eventTasks.loadedAccounts,\n reload: false,\n accountsReload: false\n }));\n };\n //Если необходимо загрузить данные и указан тип событий и загружены все необходимые вспомогательные данные\n if (tasks.reload) {\n //Загружаем данные\n getData();\n }\n }, [SERV_DATA_TYPE_CLOB, executeStored, filterValues, ordersValues, tasks.accountsReload, tasks.loadedAccounts, tasks.reload]);\n return [tasks, setTasks, onDragEnd];\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/clnt_task_board/hooks/tasks_hooks.js?"); /***/ }), @@ -675,7 +675,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 */ COLORS: () => (/* binding */ COLORS),\n/* harmony export */ DP_DEFAULT_VALUE: () => (/* binding */ DP_DEFAULT_VALUE),\n/* harmony export */ DP_IN_VALUE: () => (/* binding */ DP_IN_VALUE),\n/* harmony export */ DP_RETURN_VALUE: () => (/* binding */ DP_RETURN_VALUE),\n/* harmony export */ DP_TYPE_PREFIX: () => (/* binding */ DP_TYPE_PREFIX),\n/* harmony export */ EVENT_STATES: () => (/* binding */ EVENT_STATES),\n/* harmony export */ TASK_COLORS: () => (/* binding */ TASK_COLORS),\n/* harmony export */ convertFilterValuesToArray: () => (/* binding */ convertFilterValuesToArray),\n/* harmony export */ formatSqlDate: () => (/* binding */ formatSqlDate),\n/* harmony export */ getLocalStorageValue: () => (/* binding */ getLocalStorageValue),\n/* harmony export */ getRandomColor: () => (/* binding */ getRandomColor),\n/* harmony export */ getTaskBgColorByRule: () => (/* binding */ getTaskBgColorByRule),\n/* harmony export */ getTaskExpiredColor: () => (/* binding */ getTaskExpiredColor),\n/* harmony export */ makeArray: () => (/* binding */ makeArray),\n/* harmony export */ makeCardActionsArray: () => (/* binding */ makeCardActionsArray),\n/* harmony export */ sortAttrs: () => (/* binding */ sortAttrs),\n/* harmony export */ sortDest: () => (/* binding */ sortDest),\n/* harmony export */ validationError: () => (/* binding */ validationError)\n/* harmony export */ });\n/*\r\n Парус 8 - Панели мониторинга - УДП - Доски задач\r\n Дополнительная разметка и вёрстка клиентских элементов\r\n*/\n\n//---------\n//Константы\n//---------\n\n//Перечисление \"Состояние события\"\nconst EVENT_STATES = Object.freeze({\n 0: \"Все\",\n 1: \"Не аннулированные\",\n 2: \"Аннулированные\"\n});\n\n//Допустимые значение поля сортировки\nconst sortAttrs = [{\n id: \"SEVNSTAT_CODE\",\n descr: \"Мнемокод статуса\"\n}, {\n id: \"SEVNSTAT_NAME\",\n descr: \"Наименование статуса\"\n}, {\n id: \"SEVPOINT_DESCR\",\n descr: \"Описание точки маршрута\"\n}];\n\n//Допустимые значения направления сортировки\nconst sortDest = [];\nsortDest[-1] = \"desc\";\nsortDest[1] = \"asc\";\n\n//Цвета статусов\nconst COLORS = [\"mediumSlateBlue\", \"lightSalmon\", \"fireBrick\", \"orange\", \"gold\", \"limeGreen\", \"yellowGreen\", \"mediumAquaMarine\", \"paleTurquoise\", \"steelBlue\", \"skyBlue\", \"tan\"];\n\n//Перечисление \"Цвет задачи\"\nconst TASK_COLORS = Object.freeze({\n EXPIRED: \"#ff0000\",\n EXPIRES_SOON: \"#ffdf00\",\n LINKED: \"#1e90ff\"\n});\n\n//Перечисление Доп. свойства \"Значение по умолчанию\"\nconst DP_DEFAULT_VALUE = Object.freeze({\n 0: \"SDEFAULT_STR\",\n 1: \"NDEFAULT_NUM\",\n 2: \"DDEFAULT_DATE\",\n 3: \"NDEFAULT_NUM\"\n});\n//Перечисление Доп. свойства \"Префикс формата данных\"\nconst DP_TYPE_PREFIX = Object.freeze({\n 0: \"S\",\n 1: \"N\",\n 2: \"D\",\n 3: \"N\"\n});\n//Перечисление Доп. свойства \"Входящее значение дополнительного словаря\"\nconst DP_IN_VALUE = Object.freeze({\n 0: \"pos_str_value\",\n 1: \"pos_num_value\",\n 2: \"pos_date_value\",\n 3: \"pos_num_value\"\n});\n//Перечисление Доп. свойства \"Исходящее значение дополнительного словаря\"\nconst DP_RETURN_VALUE = Object.freeze({\n 0: \"str_value\",\n 1: \"num_value\",\n 2: \"date_value\",\n 3: \"num_value\"\n});\n\n//-----------\n//Тело модуля\n//-----------\n\n//Формирование массива из 0, 1 и более элементов\nconst makeArray = arr => {\n return arr ? arr.length ? arr : [arr] : [];\n};\n\n//Конвертация формата HEX в формат RGB\nconst convertHexToRGB = hex => {\n let r = parseInt(hex.slice(1, 3), 16);\n let g = parseInt(hex.slice(3, 5), 16);\n let b = parseInt(hex.slice(5, 7), 16);\n let a = 0.5;\n r = Math.round((a * (r / 255) + a * (255 / 255)) * 255);\n g = Math.round((a * (g / 255) + a * (255 / 255)) * 255);\n b = Math.round((a * (b / 255) + a * (255 / 255)) * 255);\n return \"rgb(\" + r + \", \" + g + \", \" + b + \")\";\n};\n\n//Считывание заливки события по условию\nconst getTaskBgColorByRule = (task, colorRule) => {\n //Исходя из типа определяем наименование и возвращаем цвет заливки\n switch (colorRule.STYPE) {\n case \"number\":\n return (!colorRule.fromValue || Number(task.docProps[`N${colorRule.SFIELD}`]) >= Number(colorRule.fromValue)) && (!colorRule.toValue || Number(task.docProps[`N${colorRule.SFIELD}`]) <= Number(colorRule.toValue)) ? convertHexToRGB(colorRule.SCOLOR) : null;\n default:\n return task.docProps[`S${colorRule.SFIELD}`] == colorRule.fromValue ? convertHexToRGB(colorRule.SCOLOR) : null;\n }\n};\n\n//Индикация истечения срока отработки события\nconst getTaskExpiredColor = task => {\n //Определяем текущую дату\n let sysDate = new Date();\n //Определяем дату истечения срока события\n let expireDate = task.dExpireDate ? new Date(task.dExpireDate) : null;\n //Если дата истечения срока определена\n if (expireDate) {\n //Определяем разницу между датами\n let daysDiff = ((expireDate.getTime() - sysDate.getTime()) / (1000 * 60 * 60 * 24)).toFixed(2);\n //Если разница меньше 0 - срок истечен\n if (daysDiff < 0) return TASK_COLORS.EXPIRED;\n //Если разница меньше 4 - скоро истечет\n if (daysDiff < 4) return TASK_COLORS.EXPIRES_SOON;\n }\n return null;\n};\n\n//Цвет из hsl формата в rgba формат\nconst convertHslToRgba = (h, s, l) => {\n s /= 100;\n l /= 100;\n const k = n => (n + h / 30) % 12;\n const a = s * Math.min(l, 1 - l);\n const f = n => l - a * Math.max(-1, Math.min(k(n) - 3, Math.min(9 - k(n), 1)));\n return `rgba(${Math.floor(255 * f(0))},${Math.floor(255 * f(8))},${Math.floor(255 * f(4))},0.3)`;\n};\n\n//Формирование случайного цвета\nconst getRandomColor = index => {\n const hue = index * 137.508;\n return convertHslToRgba(hue, 50, 70);\n};\n\n//Формат дополнительного свойства типа число (длина, точность)\nconst formatRegExpNum = (width, precision) => new RegExp(\"^(\\\\d{1,\" + (width - precision) + \"}\" + (precision > 0 ? \"((\\\\.|,)\\\\d{1,\" + precision + \"})?\" : \"\") + \")?$\");\n\n//Формат дополнительного свойства типа строка (длина)\nconst formatRegExpStr = length => new RegExp(\"^.{0,\" + length + \"}$\");\n\n//Проверка валидности числа\nconst isValidNum = (width, precision, value) => {\n return formatRegExpNum(width, precision).test(value);\n};\n\n//Проверка валидности строки\nconst isValidStr = (length, value) => {\n return formatRegExpStr(length).test(value);\n};\n\n//Признак ошибки валидации\nconst validationError = (value = \"\", format, numWidth, numPrecision, strLength) => {\n //Исходим от формата\n switch (format) {\n //Проверка строки\n case 0:\n return isValidStr(strLength, value);\n //Проверка числа\n case 1:\n return isValidNum(numWidth, numPrecision, value);\n //Остальное не проверяем\n default:\n return true;\n }\n};\n\n//Конвертация времени в привычный формат\nconst formatSqlDate = timeStamp => {\n //Если есть разделитель\n if (timeStamp.indexOf(\".\") !== -1) {\n //Определяем секунды\n let seconds = 24 * 60 * 60 * timeStamp;\n //Определяем часы\n const hours = Math.trunc(seconds / (60 * 60));\n //Переопределяем секунды\n seconds = seconds % (60 * 60);\n //Определяем минуты\n const minutes = Math.trunc(seconds / 60);\n //Определяем остаток секунд\n seconds = Math.round(seconds % 60);\n //Форматируем\n const formattedTime = (\"0\" + hours).slice(-2) + \":\" + (\"0\" + minutes).slice(-2) + \":\" + (\"0\" + seconds).slice(-2);\n //Возвращаем результат\n return formattedTime;\n }\n return timeStamp;\n};\n\n//Считывание значений из локального хранилища\nconst getLocalStorageValue = (sName, defaultValue = null) => localStorage.getItem(sName) || defaultValue;\n\n//Форматирование фильтра в массив для отбора\nconst convertFilterValuesToArray = filterValues => {\n //Инициализируем значение \"с\" состояния (\"Все\", \"Не аннулированные\" - 0, \"Аннулированые\" - 1)\n let nClosedFrom = filterValues.sState ? [EVENT_STATES[0], EVENT_STATES[1]].includes(filterValues.sState) ? 0 : 1 : 0;\n //Инициализируем значение \"по\" состояния (\"Все\", \"Аннулированные\" - 1, \"Не аннулированные\" - 0)\n let nClosedTo = filterValues.sState ? [EVENT_STATES[0], EVENT_STATES[2]].includes(filterValues.sState) ? 1 : 0 : 0;\n //Формируем массив значений фильтра\n let filterValuesArray = [{\n name: \"NCLOSED\",\n from: nClosedFrom,\n to: nClosedTo\n }, {\n name: \"SEVTYPE_CODE\",\n from: filterValues.sType,\n to: null\n }, {\n name: \"NCRN\",\n from: filterValues.sCrnRnList,\n to: null\n }, {\n name: \"SSEND_PERSON\",\n from: filterValues.sSendPerson,\n to: null\n }, {\n name: \"SSEND_DIVISION\",\n from: filterValues.sSendDivision,\n to: null\n }, {\n name: \"SSEND_USRGRP\",\n from: filterValues.sSendUsrGrp,\n to: null\n }, {\n name: \"NLINKED_RN\",\n from: filterValues.sDocLink,\n to: null\n }];\n return filterValuesArray;\n};\n\n//Формирование массива действий карточки события\nconst makeCardActionsArray = (onEdit, onEditClient, onDelete, onStateChange, onReturn, onSend, onNotesOpen, onFileLinksOpen) => {\n //Формируем список действий карточки\n return [{\n method: \"EDIT\",\n name: \"Исправить\",\n icon: \"edit\",\n visible: false,\n delimiter: false,\n tasksReload: false,\n needAccountsReload: false,\n func: onEdit\n }, {\n method: \"EDIT_CLIENT\",\n name: \"Исправить в разделе\",\n icon: \"edit_note\",\n visible: true,\n delimiter: false,\n tasksReload: false,\n needAccountsReload: false,\n func: onEditClient\n }, {\n method: \"DELETE\",\n name: \"Удалить\",\n icon: \"delete\",\n visible: true,\n delimiter: true,\n tasksReload: true,\n needAccountsReload: false,\n func: onDelete\n }, {\n method: \"TASK_STATE_CHANGE\",\n name: \"Перейти\",\n icon: \"turn_right\",\n visible: true,\n delimiter: false,\n tasksReload: true,\n needAccountsReload: true,\n func: onStateChange\n }, {\n method: \"TASK_RETURN\",\n name: \"Выполнить возврат\",\n icon: \"turn_left\",\n visible: true,\n delimiter: false,\n tasksReload: true,\n needAccountsReload: true,\n func: onReturn\n }, {\n method: \"TASK_SEND\",\n name: \"Направить\",\n icon: \"send\",\n visible: true,\n delimiter: true,\n tasksReload: true,\n needAccountsReload: true,\n func: onSend\n }, {\n method: \"NOTES\",\n name: \"Примечания\",\n icon: \"event_note\",\n visible: true,\n delimiter: true,\n tasksReload: false,\n needAccountsReload: false,\n func: onNotesOpen\n }, {\n method: \"FILE_LINKS\",\n name: \"Присоединенные документы\",\n icon: \"attach_file\",\n visible: true,\n delimiter: false,\n tasksReload: false,\n needAccountsReload: false,\n func: onFileLinksOpen\n }];\n};\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/clnt_task_board/layouts.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ COLORS: () => (/* binding */ COLORS),\n/* harmony export */ DP_DEFAULT_VALUE: () => (/* binding */ DP_DEFAULT_VALUE),\n/* harmony export */ DP_IN_VALUE: () => (/* binding */ DP_IN_VALUE),\n/* harmony export */ DP_RETURN_VALUE: () => (/* binding */ DP_RETURN_VALUE),\n/* harmony export */ DP_TYPE_PREFIX: () => (/* binding */ DP_TYPE_PREFIX),\n/* harmony export */ EVENT_STATES: () => (/* binding */ EVENT_STATES),\n/* harmony export */ TASK_COLORS: () => (/* binding */ TASK_COLORS),\n/* harmony export */ convertFilterValuesToArray: () => (/* binding */ convertFilterValuesToArray),\n/* harmony export */ formatSqlDate: () => (/* binding */ formatSqlDate),\n/* harmony export */ getLocalStorageValue: () => (/* binding */ getLocalStorageValue),\n/* harmony export */ getRandomColor: () => (/* binding */ getRandomColor),\n/* harmony export */ getTaskBgColorByRule: () => (/* binding */ getTaskBgColorByRule),\n/* harmony export */ getTaskExpiredColor: () => (/* binding */ getTaskExpiredColor),\n/* harmony export */ makeArray: () => (/* binding */ makeArray),\n/* harmony export */ makeCardActionsArray: () => (/* binding */ makeCardActionsArray),\n/* harmony export */ sortAttrs: () => (/* binding */ sortAttrs),\n/* harmony export */ sortDest: () => (/* binding */ sortDest),\n/* harmony export */ validationError: () => (/* binding */ validationError)\n/* harmony export */ });\n/*\r\n Парус 8 - Панели мониторинга - УДП - Доски задач\r\n Дополнительная разметка и вёрстка клиентских элементов\r\n*/\n\n//---------\n//Константы\n//---------\n\n//Перечисление \"Состояние события\"\nconst EVENT_STATES = Object.freeze({\n 0: \"Все\",\n 1: \"Не аннулированные\",\n 2: \"Аннулированные\"\n});\n\n//Допустимые значение поля сортировки\nconst sortAttrs = [{\n id: \"SEVNSTAT_CODE\",\n descr: \"Мнемокод статуса\"\n}, {\n id: \"SEVNSTAT_NAME\",\n descr: \"Наименование статуса\"\n}, {\n id: \"SEVPOINT_DESCR\",\n descr: \"Описание точки маршрута\"\n}];\n\n//Допустимые значения направления сортировки\nconst sortDest = [];\nsortDest[-1] = \"desc\";\nsortDest[1] = \"asc\";\n\n//Цвета статусов\nconst COLORS = [\"mediumSlateBlue\", \"lightSalmon\", \"fireBrick\", \"orange\", \"gold\", \"limeGreen\", \"yellowGreen\", \"mediumAquaMarine\", \"paleTurquoise\", \"steelBlue\", \"skyBlue\", \"tan\"];\n\n//Перечисление \"Цвет задачи\"\nconst TASK_COLORS = Object.freeze({\n EXPIRED: \"#ff0000\",\n EXPIRES_SOON: \"#ffdf00\",\n LINKED: \"#1e90ff\"\n});\n\n//Перечисление Доп. свойства \"Значение по умолчанию\"\nconst DP_DEFAULT_VALUE = Object.freeze({\n 0: \"SDEFAULT_STR\",\n 1: \"NDEFAULT_NUM\",\n 2: \"DDEFAULT_DATE\",\n 3: \"NDEFAULT_NUM\"\n});\n//Перечисление Доп. свойства \"Префикс формата данных\"\nconst DP_TYPE_PREFIX = Object.freeze({\n 0: \"S\",\n 1: \"N\",\n 2: \"D\",\n 3: \"N\"\n});\n//Перечисление Доп. свойства \"Входящее значение дополнительного словаря\"\nconst DP_IN_VALUE = Object.freeze({\n 0: \"pos_str_value\",\n 1: \"pos_num_value\",\n 2: \"pos_date_value\",\n 3: \"pos_num_value\"\n});\n//Перечисление Доп. свойства \"Исходящее значение дополнительного словаря\"\nconst DP_RETURN_VALUE = Object.freeze({\n 0: \"str_value\",\n 1: \"num_value\",\n 2: \"date_value\",\n 3: \"num_value\"\n});\n\n//-----------\n//Тело модуля\n//-----------\n\n//Формирование массива из 0, 1 и более элементов\nconst makeArray = arr => {\n return arr ? arr.length ? arr : [arr] : [];\n};\n\n//Конвертация формата HEX в формат RGB\nconst convertHexToRGB = hex => {\n let r = parseInt(hex.slice(1, 3), 16);\n let g = parseInt(hex.slice(3, 5), 16);\n let b = parseInt(hex.slice(5, 7), 16);\n let a = 0.5;\n r = Math.round((a * (r / 255) + a * (255 / 255)) * 255);\n g = Math.round((a * (g / 255) + a * (255 / 255)) * 255);\n b = Math.round((a * (b / 255) + a * (255 / 255)) * 255);\n return \"rgb(\" + r + \", \" + g + \", \" + b + \")\";\n};\n\n//Считывание заливки события по условию\nconst getTaskBgColorByRule = (task, colorRule) => {\n //Исходя из типа определяем наименование и возвращаем цвет заливки\n switch (colorRule.STYPE) {\n case \"number\":\n return (!colorRule.fromValue || Number(task.docProps[`N${colorRule.SFIELD}`]) >= Number(colorRule.fromValue)) && (!colorRule.toValue || Number(task.docProps[`N${colorRule.SFIELD}`]) <= Number(colorRule.toValue)) ? convertHexToRGB(colorRule.SCOLOR) : null;\n default:\n return task.docProps[`S${colorRule.SFIELD}`] == colorRule.fromValue ? convertHexToRGB(colorRule.SCOLOR) : null;\n }\n};\n\n//Индикация истечения срока отработки события\nconst getTaskExpiredColor = task => {\n //Определяем текущую дату\n let sysDate = new Date();\n //Определяем дату истечения срока события\n let expireDate = task.dExpireDate ? new Date(task.dExpireDate) : null;\n //Если дата истечения срока определена\n if (expireDate) {\n //Определяем разницу между датами\n let daysDiff = ((expireDate.getTime() - sysDate.getTime()) / (1000 * 60 * 60 * 24)).toFixed(2);\n //Если разница меньше 0 - срок истечен\n if (daysDiff < 0) return TASK_COLORS.EXPIRED;\n //Если разница меньше 4 - скоро истечет\n if (daysDiff < 4) return TASK_COLORS.EXPIRES_SOON;\n }\n return null;\n};\n\n//Цвет из hsl формата в rgba формат\nconst convertHslToRgba = (h, s, l) => {\n s /= 100;\n l /= 100;\n const k = n => (n + h / 30) % 12;\n const a = s * Math.min(l, 1 - l);\n const f = n => l - a * Math.max(-1, Math.min(k(n) - 3, Math.min(9 - k(n), 1)));\n return `rgba(${Math.floor(255 * f(0))},${Math.floor(255 * f(8))},${Math.floor(255 * f(4))},0.3)`;\n};\n\n//Формирование случайного цвета\nconst getRandomColor = index => {\n const hue = index * 137.508;\n return convertHslToRgba(hue, 50, 70);\n};\n\n//Формат дополнительного свойства типа число (длина, точность)\nconst formatRegExpNum = (width, precision) => new RegExp(\"^(\\\\d{1,\" + (width - precision) + \"}\" + (precision > 0 ? \"((\\\\.|,)\\\\d{1,\" + precision + \"})?\" : \"\") + \")?$\");\n\n//Формат дополнительного свойства типа строка (длина)\nconst formatRegExpStr = length => new RegExp(\"^.{0,\" + length + \"}$\");\n\n//Проверка валидности числа\nconst isValidNum = (width, precision, value) => {\n return formatRegExpNum(width, precision).test(value);\n};\n\n//Проверка валидности строки\nconst isValidStr = (length, value) => {\n return formatRegExpStr(length).test(value);\n};\n\n//Признак ошибки валидации\nconst validationError = (value = \"\", format, numWidth, numPrecision, strLength) => {\n //Исходим от формата\n switch (format) {\n //Проверка строки\n case 0:\n return isValidStr(strLength, value);\n //Проверка числа\n case 1:\n return isValidNum(numWidth, numPrecision, value);\n //Остальное не проверяем\n default:\n return true;\n }\n};\n\n//Конвертация времени в привычный формат\nconst formatSqlDate = timeStamp => {\n //Если есть разделитель\n if (timeStamp.indexOf(\".\") !== -1) {\n //Определяем секунды\n let seconds = 24 * 60 * 60 * timeStamp;\n //Определяем часы\n const hours = Math.trunc(seconds / (60 * 60));\n //Переопределяем секунды\n seconds = seconds % (60 * 60);\n //Определяем минуты\n const minutes = Math.trunc(seconds / 60);\n //Определяем остаток секунд\n seconds = Math.round(seconds % 60);\n //Форматируем\n const formattedTime = (\"0\" + hours).slice(-2) + \":\" + (\"0\" + minutes).slice(-2) + \":\" + (\"0\" + seconds).slice(-2);\n //Возвращаем результат\n return formattedTime;\n }\n return timeStamp;\n};\n\n//Считывание значений из локального хранилища\nconst getLocalStorageValue = (sName, defaultValue = null) => localStorage.getItem(sName) || defaultValue;\n\n//Форматирование фильтра в массив для отбора\nconst convertFilterValuesToArray = filterValues => {\n //Инициализируем значение \"с\" состояния (\"Все\", \"Не аннулированные\" - 0, \"Аннулированые\" - 1)\n let nClosedFrom = filterValues.sState ? [EVENT_STATES[0], EVENT_STATES[1]].includes(filterValues.sState) ? 0 : 1 : 0;\n //Инициализируем значение \"по\" состояния (\"Все\", \"Аннулированные\" - 1, \"Не аннулированные\" - 0)\n let nClosedTo = filterValues.sState ? [EVENT_STATES[0], EVENT_STATES[2]].includes(filterValues.sState) ? 1 : 0 : 0;\n //Формируем массив значений фильтра\n let filterValuesArray = [{\n name: \"NCLOSED\",\n from: nClosedFrom,\n to: nClosedTo\n }, {\n name: \"SEVTYPE_CODE\",\n from: filterValues.sType,\n to: null\n }, {\n name: \"NCRN\",\n from: filterValues.sCrnRnList,\n to: null\n }, {\n name: \"SSEND_PERSON\",\n from: filterValues.sSendPerson,\n to: null\n }, {\n name: \"SSEND_DIVISION\",\n from: filterValues.sSendDivision,\n to: null\n }, {\n name: \"SSEND_USRGRP\",\n from: filterValues.sSendUsrGrp,\n to: null\n }, {\n name: \"NLINKED_RN\",\n from: filterValues.sDocLink,\n to: null\n }];\n return filterValuesArray;\n};\n\n//Формирование массива действий карточки события\nconst makeCardActionsArray = (onEdit, onEditClient, onDelete, onStateChange, onReturn, onSend, onNotesOpen, onFileLinksOpen, onMove) => {\n //Формируем список действий карточки\n return [{\n method: \"EDIT\",\n name: \"Исправить\",\n icon: \"edit\",\n visible: false,\n delimiter: false,\n tasksReload: false,\n needAccountsReload: false,\n disableClosed: false,\n func: onEdit\n }, {\n method: \"EDIT_CLIENT\",\n name: \"Исправить в разделе\",\n icon: \"edit_note\",\n visible: true,\n delimiter: false,\n tasksReload: false,\n needAccountsReload: false,\n disableClosed: false,\n func: onEditClient\n }, {\n method: \"MOVE\",\n name: \"Переместить\",\n icon: \"drive_file_move\",\n visible: true,\n delimiter: false,\n tasksReload: true,\n needAccountsReload: false,\n disableClosed: false,\n func: onMove\n }, {\n method: \"DELETE\",\n name: \"Удалить\",\n icon: \"delete\",\n visible: true,\n delimiter: true,\n tasksReload: true,\n needAccountsReload: false,\n disableClosed: false,\n func: onDelete\n }, {\n method: \"TASK_STATE_CHANGE\",\n name: \"Перейти\",\n icon: \"turn_right\",\n visible: true,\n delimiter: false,\n tasksReload: true,\n needAccountsReload: true,\n disableClosed: true,\n func: onStateChange\n }, {\n method: \"TASK_RETURN\",\n name: \"Выполнить возврат\",\n icon: \"turn_left\",\n visible: true,\n delimiter: false,\n tasksReload: true,\n needAccountsReload: true,\n disableClosed: true,\n func: onReturn\n }, {\n method: \"TASK_SEND\",\n name: \"Направить\",\n icon: \"send\",\n visible: true,\n delimiter: true,\n tasksReload: true,\n needAccountsReload: true,\n disableClosed: true,\n func: onSend\n }, {\n method: \"NOTES\",\n name: \"Примечания\",\n icon: \"event_note\",\n visible: true,\n delimiter: true,\n tasksReload: false,\n needAccountsReload: false,\n disableClosed: false,\n func: onNotesOpen\n }, {\n method: \"FILE_LINKS\",\n name: \"Присоединенные документы\",\n icon: \"attach_file\",\n visible: true,\n delimiter: false,\n tasksReload: false,\n needAccountsReload: false,\n disableClosed: false,\n func: onFileLinksOpen\n }];\n};\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/clnt_task_board/layouts.js?"); /***/ }), @@ -697,7 +697,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 */ TaskDialog: () => (/* binding */ TaskDialog)\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_10__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_10__);\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/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _hooks_task_dialog_hooks__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./hooks/task_dialog_hooks */ \"./app/panels/clnt_task_board/hooks/task_dialog_hooks.js\");\n/* harmony import */ var _components_task_form__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./components/task_form */ \"./app/panels/clnt_task_board/components/task_form.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _styles__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./styles */ \"./app/panels/clnt_task_board/styles.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//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n DIALOG_CONTENT: {\n paddingBottom: \"0px\",\n maxHeight: \"740px\",\n minHeight: \"740px\",\n ..._styles__WEBPACK_IMPORTED_MODULE_5__.COMMON_STYLES.SCROLL\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Диалог формы события\nconst TaskDialog = ({\n taskRn,\n taskType,\n editable,\n onTasksReload,\n onClose\n}) => {\n //Собственное состояние\n const [task, setTask] = (0,_hooks_task_dialog_hooks__WEBPACK_IMPORTED_MODULE_1__.useClientEvent)(taskRn, taskType);\n\n //Состояние заполненности всех обязательных свойств\n const [dpReady, setDPReady] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_3__[\"BackEndСtx\"]);\n\n //При изменении заполненности всех обязательных свойств\n const handleDPReady = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(v => setDPReady(v), []);\n\n //При изменении информации о задаче\n const handleTaskChange = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(newTaskValues => {\n setTask(pv => ({\n ...pv,\n ...newTaskValues\n }));\n }, [setTask]);\n\n //При добавлении события\n const handleInsertTask = async callBack => {\n await executeStored({\n stored: \"PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_INSERT\",\n args: {\n SCRN: task.sCrn,\n SPREF: task.sPrefix,\n SNUMB: task.sNumber,\n STYPE: task.sType,\n SSTATUS: task.sStatus,\n SPLAN_DATE: task.dPlanDate,\n SINIT_PERSON: task.sInitClnperson,\n SCLIENT_CLIENT: task.sClntClients,\n SCLIENT_PERSON: task.sClntClnperson,\n SDESCRIPTION: task.sDescription,\n SREASON: task.sInitReason,\n CPROPS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_4__.object2Base64XML)([Object.fromEntries(Object.entries(task.docProps)\n // eslint-disable-next-line no-unused-vars\n .filter(([_, v]) => v != ( false || \"\")))], {\n arrayNodeName: \"props\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n }\n }\n });\n callBack();\n };\n\n //При исправлении события\n const handleUpdateEvent = async callBack => {\n await executeStored({\n stored: \"PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_UPDATE\",\n args: {\n NCLNEVENTS: task.nRn,\n SCLIENT_CLIENT: task.sClntClients,\n SCLIENT_PERSON: task.sClntClnperson,\n SDESCRIPTION: task.sDescription,\n CPROPS: {\n // eslint-disable-next-line no-unused-vars\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_4__.object2Base64XML)([Object.fromEntries(Object.entries(task.docProps).filter(([_, v]) => v != ( false || \"\")))], {\n arrayNodeName: \"props\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n }\n }\n });\n callBack();\n };\n\n //При считывании следующего номера события\n const handleEventNextNumbGet = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n //Считываем данные\n const data = await executeStored({\n stored: \"PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_NEXTNUMB_GET\",\n args: {\n SPREFIX: task.sPrefix\n }\n });\n //Если данные есть\n if (data) {\n //Устанавливаем номер\n setTask(pv => ({\n ...pv,\n sNumber: data.SEVENT_NUMB\n }));\n }\n }, [executeStored, setTask, task.sPrefix]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n open: true,\n onClose: onClose ? onClose : null,\n fullWidth: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n sx: STYLES.DIALOG_CONTENT\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_task_form__WEBPACK_IMPORTED_MODULE_2__.TaskForm, {\n task: task,\n taskType: taskType,\n onTaskChange: handleTaskChange,\n editable: !taskRn || editable ? true : false,\n onEventNextNumbGet: handleEventNextNumbGet,\n onDPReady: handleDPReady\n })), onClose ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n sx: _styles__WEBPACK_IMPORTED_MODULE_5__.COMMON_STYLES.DIALOG_ACTIONS\n }, taskRn ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n onClick: () => handleUpdateEvent(onClose).then(onTasksReload),\n disabled: task.updateDisabled || !editable || !dpReady\n }, \"\\u0418\\u0441\\u043F\\u0440\\u0430\\u0432\\u0438\\u0442\\u044C\") : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n onClick: () => handleInsertTask(onClose).then(onTasksReload),\n disabled: task.insertDisabled || !dpReady\n }, \"\\u0414\\u043E\\u0431\\u0430\\u0432\\u0438\\u0442\\u044C\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n onClick: onClose\n }, \"\\u0417\\u0430\\u043A\\u0440\\u044B\\u0442\\u044C\")) : null);\n};\n\n//Контроль свойств - Диалог формы события\nTaskDialog.propTypes = {\n taskRn: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().number),\n taskType: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().string).isRequired,\n editable: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().bool),\n onTasksReload: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().func).isRequired,\n onClose: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().func).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/clnt_task_board/task_dialog.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TaskDialog: () => (/* binding */ TaskDialog)\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_10__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_10__);\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/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _hooks_task_dialog_hooks__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./hooks/task_dialog_hooks */ \"./app/panels/clnt_task_board/hooks/task_dialog_hooks.js\");\n/* harmony import */ var _components_task_form__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./components/task_form */ \"./app/panels/clnt_task_board/components/task_form.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _styles__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./styles */ \"./app/panels/clnt_task_board/styles.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 //Вспомогательные процедуры и функции\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n DIALOG_CONTENT: {\n paddingBottom: \"0px\",\n maxHeight: \"740px\",\n minHeight: \"740px\",\n ..._styles__WEBPACK_IMPORTED_MODULE_5__.COMMON_STYLES.SCROLL\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Диалог формы события\nconst TaskDialog = ({\n taskRn,\n taskType,\n editable,\n onTasksReload,\n onClose\n}) => {\n //Собственное состояние\n const [task, setTask] = (0,_hooks_task_dialog_hooks__WEBPACK_IMPORTED_MODULE_1__.useClientEvent)(taskRn, taskType);\n\n //Состояние допустимых дополнительных свойств\n const [docProps] = (0,_hooks_task_dialog_hooks__WEBPACK_IMPORTED_MODULE_1__.useDocsProps)(taskType);\n\n //Состояние заполненности всех обязательных доп. свойств\n const [docPropsReady, setDocPropsReady] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_3__[\"BackEndСtx\"]);\n\n //При изменении информации о задаче\n const handleTaskChange = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(newTaskValues => {\n setTask(pv => ({\n ...pv,\n ...newTaskValues\n }));\n }, [setTask]);\n\n //При добавлении события\n const handleInsertTask = async callBack => {\n await executeStored({\n stored: \"PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_INSERT\",\n args: {\n SCRN: task.sCrn,\n SPREF: task.sPrefix,\n SNUMB: task.sNumber,\n STYPE: task.sType,\n SSTATUS: task.sStatus,\n SPLAN_DATE: task.dPlanDate,\n SINIT_PERSON: task.sInitClnperson,\n SCLIENT_CLIENT: task.sClntClients,\n SCLIENT_PERSON: task.sClntClnperson,\n SDESCRIPTION: task.sDescription,\n SREASON: task.sInitReason,\n CPROPS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_4__.object2Base64XML)([Object.fromEntries(Object.entries(task.docProps)\n // eslint-disable-next-line no-unused-vars\n .filter(([_, v]) => v != ( false || \"\")))], {\n arrayNodeName: \"props\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n }\n }\n });\n callBack();\n };\n\n //При исправлении события\n const handleUpdateEvent = async callBack => {\n await executeStored({\n stored: \"PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_UPDATE\",\n args: {\n NCLNEVENTS: task.nRn,\n SCLIENT_CLIENT: task.sClntClients,\n SCLIENT_PERSON: task.sClntClnperson,\n SDESCRIPTION: task.sDescription,\n CPROPS: {\n // eslint-disable-next-line no-unused-vars\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_4__.object2Base64XML)([Object.fromEntries(Object.entries(task.docProps).filter(([_, v]) => v != ( false || \"\")))], {\n arrayNodeName: \"props\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n }\n }\n });\n callBack();\n };\n\n //При считывании следующего номера события\n const handleEventNextNumbGet = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n //Считываем данные\n const data = await executeStored({\n stored: \"PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_NEXTNUMB_GET\",\n args: {\n SPREFIX: task.sPrefix\n }\n });\n //Если данные есть\n if (data) {\n //Устанавливаем номер\n setTask(pv => ({\n ...pv,\n sNumber: data.SEVENT_NUMB\n }));\n }\n }, [executeStored, setTask, task.sPrefix]);\n\n //Проверка заполненности всех обязательных доп. свойств\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если доп. свойства загрузились\n if (docProps.loaded) {\n //Проверяем остались ли обязательные незаполненные свойства\n let notFilled = docProps.props.some(docProp => docProp.BREQUIRE === true && !(0,_core_utils__WEBPACK_IMPORTED_MODULE_4__.hasValue)(task.docProps[docProp.SFORMATTED_ID]));\n //Если незаполненных обязательных доп. свойств не осталось - доп. свойства готовы, иначе не готовы\n setDocPropsReady(!notFilled);\n } else {\n //Доп. свойства не готовы\n setDocPropsReady(false);\n }\n }, [docProps.loaded, docProps.props, task.docProps]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, !task.init && docProps.loaded && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n open: true,\n onClose: onClose ? onClose : null,\n fullWidth: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n sx: STYLES.DIALOG_CONTENT\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_task_form__WEBPACK_IMPORTED_MODULE_2__.TaskForm, {\n task: task,\n taskType: taskType,\n editable: !taskRn || editable ? true : false,\n docProps: docProps.props,\n onTaskChange: handleTaskChange,\n onEventNextNumbGet: handleEventNextNumbGet\n })), onClose ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n sx: _styles__WEBPACK_IMPORTED_MODULE_5__.COMMON_STYLES.DIALOG_ACTIONS\n }, taskRn ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n onClick: () => handleUpdateEvent(onClose).then(onTasksReload),\n disabled: task.updateDisabled || !editable || !docPropsReady\n }, \"\\u0418\\u0441\\u043F\\u0440\\u0430\\u0432\\u0438\\u0442\\u044C\") : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n onClick: () => handleInsertTask(onClose).then(onTasksReload),\n disabled: task.insertDisabled || !docPropsReady\n }, \"\\u0414\\u043E\\u0431\\u0430\\u0432\\u0438\\u0442\\u044C\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n onClick: onClose\n }, \"\\u0417\\u0430\\u043A\\u0440\\u044B\\u0442\\u044C\")) : null), \" \");\n};\n\n//Контроль свойств - Диалог формы события\nTaskDialog.propTypes = {\n taskRn: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().number),\n taskType: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().string).isRequired,\n editable: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().bool),\n onTasksReload: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().func).isRequired,\n onClose: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().func).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/clnt_task_board/task_dialog.js?"); /***/ }), @@ -4161,7 +4161,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 */ QueryEditor: () => (/* binding */ QueryEditor)\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/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.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_editors_p8p_editor_toolbar__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../components/editors/p8p_editor_toolbar */ \"./app/components/editors/p8p_editor_toolbar.js\");\n/* harmony import */ var _components_query_diagram_query_diagram__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./components/query_diagram/query_diagram */ \"./app/panels/query_editor/components/query_diagram/query_diagram.js\");\n/* harmony import */ var _components_inspector_inspector__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./components/inspector/inspector */ \"./app/panels/query_editor/components/inspector/inspector.js\");\n/* harmony import */ var _components_queries_manager_queries_manager__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./components/queries_manager/queries_manager */ \"./app/panels/query_editor/components/queries_manager/queries_manager.js\");\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./hooks */ \"./app/panels/query_editor/hooks.js\");\n/* harmony import */ var _components_inspector_query_rls_hooks__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./components/inspector_query_rls/hooks */ \"./app/panels/query_editor/components/inspector_query_rls/hooks.js\");\n/* harmony import */ var _components_inspector_query_ents_hooks__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./components/inspector_query_ents/hooks */ \"./app/panels/query_editor/components/inspector_query_ents/hooks.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 //Интерфейсные компоненты MUI\n //Контекст взаимодействия с приложением\n //Компоненты рабочего стола\n //Панель инструментов редактора\n //Диаграмма запроса\n //Инспектор свойств\n //Менеджер запросов\n //Хуки для работы с метаданными запроса на сервере\n //Хуки для работы со связями запроса на сервере\n //Хуки для работы с сущностями запроса на сервере\n\n//---------\n//Константы\n//---------\n\n//Заголовок панели по умолчанию\nconst APP_BAR_TITLE_DEFAULT = \"Редактор запросов\";\n\n//Стили\nconst STYLES = {\n CONTAINER: {\n display: \"flex\"\n },\n GRID_CONTAINER: {\n height: `calc(100vh - ${_components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_2__.APP_BAR_HEIGHT})`\n },\n GRID_ITEM_INSPECTOR: {\n backgroundColor: \"#e9ecef\"\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Корневой компонент редактора запросов\nconst QueryEditor = () => {\n //Текущий запрос\n const [query, setQuery] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(154598792);\n\n //Текущая сущность\n const [entity, setEntity] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Текущая связь\n const [relation, setRelation] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Отображения менеджера запросов\n const [openQueriesManager, setOpenQueriesManager] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Получение метаданных с описанием запроса\n const [queryDiagram, queryOption, querySQL, doRefresh] = (0,_hooks__WEBPACK_IMPORTED_MODULE_7__.useQuery)(query);\n\n //Работа с сущностями на сервере\n const {\n removeEnt,\n setEntPosition\n } = (0,_components_inspector_query_ents_hooks__WEBPACK_IMPORTED_MODULE_9__.useQueryEntities)(query);\n\n //Работа со связями на сервере\n const {\n addRl,\n removeRl\n } = (0,_components_inspector_query_rls_hooks__WEBPACK_IMPORTED_MODULE_8__.useQueryRelations)(query);\n\n //Подключение к контексту приложения\n const {\n setAppBarTitle\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_1__[\"ApplicationСtx\"]);\n\n //Выбор сущности\n const selectEntity = ent => {\n setRelation(null);\n const queryEnt = queryDiagram.entities.find(e => e.id === ent);\n if (queryEnt) setEntity({\n ...queryEnt\n });\n };\n\n //Выбор связи\n const selectRelation = rl => {\n setEntity(null);\n const queryRl = queryDiagram.relations.find(r => r.id === rl);\n if (queryRl) setRelation({\n ...queryRl\n });\n };\n\n //Сброс выбора связи и сущности\n const cleanupEnRlSelection = () => {\n setRelation(null);\n setEntity(null);\n };\n\n //Обработка изменения положения сущности на диаграмме\n const handleEntityPositionChange = (ent, position) => setEntPosition(ent, position.x, position.y);\n\n //Обработка удаления сущности из запроса\n const handleEntityRemove = async ent => {\n await removeEnt(ent);\n if (entity && entity?.id === ent) cleanupEnRlSelection();\n doRefresh();\n };\n\n //Обработка выделения сущности\n const handleEntityClick = ent => selectEntity(ent);\n\n //Обработка выделения тарибута сущности\n const handleEntityAttrClick = ent => selectEntity(ent);\n\n //Обработка выделения связи\n const handleRelationClick = rl => selectRelation(rl);\n\n //Обработка добавления отношения cущностей\n const handleRelationAdd = async (source, target) => {\n cleanupEnRlSelection();\n await addRl(source, target);\n doRefresh();\n };\n\n //Обработка удаления отношения cущностей\n const handleRelationRemove = async rl => {\n await removeRl(rl);\n if (relation && relation?.id === rl) cleanupEnRlSelection();\n doRefresh();\n };\n\n //При нажатии на панели (пустом месте) диаграммы запроса\n const handlePaneClick = () => cleanupEnRlSelection();\n\n //Открытие менеджера запросов\n const handleOpenQueriesManager = () => setOpenQueriesManager(true);\n\n //Закрытие менеджера запросов\n const handleCancelQueriesManager = () => setOpenQueriesManager(false);\n\n //Закрытие запроса\n const handleQueryClose = () => {\n setAppBarTitle(APP_BAR_TITLE_DEFAULT);\n cleanupEnRlSelection();\n setQuery(null);\n };\n\n //При выборе запроса\n const handleQuerySelect = ({\n rn,\n name\n }) => {\n setAppBarTitle(`Запрос [${name}]`);\n setQuery(rn);\n setOpenQueriesManager(false);\n cleanupEnRlSelection();\n };\n\n //При изменении свойств запроса\n const handleQueryOptionsChanged = () => {\n cleanupEnRlSelection();\n doRefresh();\n };\n\n //Панель инструмментов\n const toolBar = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_editors_p8p_editor_toolbar__WEBPACK_IMPORTED_MODULE_3__.P8PEditorToolBar, {\n items: [{\n icon: \"file_open\",\n title: \"Менеджер запросов\",\n onClick: handleOpenQueriesManager\n }, {\n icon: \"close\",\n title: \"Закрыть запрос\",\n onClick: handleQueryClose,\n disabled: !query\n }]\n });\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n sx: STYLES.CONTAINER\n }, openQueriesManager && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_queries_manager_queries_manager__WEBPACK_IMPORTED_MODULE_6__.QueriesManager, {\n current: query,\n onQuerySelect: handleQuerySelect,\n onCancel: handleCancelQueriesManager\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n container: true,\n sx: STYLES.GRID_CONTAINER,\n columns: 25\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n item: true,\n xs: 20\n }, queryDiagram && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_query_diagram_query_diagram__WEBPACK_IMPORTED_MODULE_4__.QueryDiagram, {\n nodes: queryDiagram?.nodes,\n edges: queryDiagram?.edges,\n onEntityClick: handleEntityClick,\n onEntityAttrClick: handleEntityAttrClick,\n onEntityPositionChange: handleEntityPositionChange,\n onEntityRemove: handleEntityRemove,\n onRelactionClick: handleRelationClick,\n onRelationAdd: handleRelationAdd,\n onRelationRemove: handleRelationRemove,\n onPaneClick: handlePaneClick\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n item: true,\n xs: 5,\n sx: STYLES.GRID_ITEM_INSPECTOR\n }, toolBar, query && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_inspector_inspector__WEBPACK_IMPORTED_MODULE_5__.Inspector, _extends({}, queryOption, querySQL, {\n query: query,\n entity: entity,\n relation: relation,\n entities: queryDiagram?.entities,\n onOptionsChanged: handleQueryOptionsChanged\n })))));\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/query_editor/query_editor.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ QueryEditor: () => (/* binding */ QueryEditor)\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/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.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_editors_p8p_editor_toolbar__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../components/editors/p8p_editor_toolbar */ \"./app/components/editors/p8p_editor_toolbar.js\");\n/* harmony import */ var _components_query_diagram_query_diagram__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./components/query_diagram/query_diagram */ \"./app/panels/query_editor/components/query_diagram/query_diagram.js\");\n/* harmony import */ var _components_inspector_inspector__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./components/inspector/inspector */ \"./app/panels/query_editor/components/inspector/inspector.js\");\n/* harmony import */ var _components_queries_manager_queries_manager__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./components/queries_manager/queries_manager */ \"./app/panels/query_editor/components/queries_manager/queries_manager.js\");\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./hooks */ \"./app/panels/query_editor/hooks.js\");\n/* harmony import */ var _components_inspector_query_rls_hooks__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./components/inspector_query_rls/hooks */ \"./app/panels/query_editor/components/inspector_query_rls/hooks.js\");\n/* harmony import */ var _components_inspector_query_ents_hooks__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./components/inspector_query_ents/hooks */ \"./app/panels/query_editor/components/inspector_query_ents/hooks.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 //Интерфейсные компоненты MUI\n //Контекст взаимодействия с приложением\n //Компоненты рабочего стола\n //Панель инструментов редактора\n //Диаграмма запроса\n //Инспектор свойств\n //Менеджер запросов\n //Хуки для работы с метаданными запроса на сервере\n //Хуки для работы со связями запроса на сервере\n //Хуки для работы с сущностями запроса на сервере\n\n//---------\n//Константы\n//---------\n\n//Заголовок панели по умолчанию\nconst APP_BAR_TITLE_DEFAULT = \"Редактор запросов\";\n\n//Стили\nconst STYLES = {\n CONTAINER: {\n display: \"flex\"\n },\n GRID_CONTAINER: {\n height: `calc(100vh - ${_components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_2__.APP_BAR_HEIGHT})`\n },\n GRID_ITEM_INSPECTOR: {\n backgroundColor: \"#e9ecef\"\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Корневой компонент редактора запросов\nconst QueryEditor = () => {\n //Текущий запрос\n const [query, setQuery] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Текущая сущность\n const [entity, setEntity] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Текущая связь\n const [relation, setRelation] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Отображения менеджера запросов\n const [openQueriesManager, setOpenQueriesManager] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true);\n\n //Получение метаданных с описанием запроса\n const [queryDiagram, queryOption, querySQL, doRefresh] = (0,_hooks__WEBPACK_IMPORTED_MODULE_7__.useQuery)(query);\n\n //Работа с сущностями на сервере\n const {\n removeEnt,\n setEntPosition\n } = (0,_components_inspector_query_ents_hooks__WEBPACK_IMPORTED_MODULE_9__.useQueryEntities)(query);\n\n //Работа со связями на сервере\n const {\n addRl,\n removeRl\n } = (0,_components_inspector_query_rls_hooks__WEBPACK_IMPORTED_MODULE_8__.useQueryRelations)(query);\n\n //Подключение к контексту приложения\n const {\n setAppBarTitle\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_1__[\"ApplicationСtx\"]);\n\n //Выбор сущности\n const selectEntity = ent => {\n setRelation(null);\n const queryEnt = queryDiagram.entities.find(e => e.id === ent);\n if (queryEnt) setEntity({\n ...queryEnt\n });\n };\n\n //Выбор связи\n const selectRelation = rl => {\n setEntity(null);\n const queryRl = queryDiagram.relations.find(r => r.id === rl);\n if (queryRl) setRelation({\n ...queryRl\n });\n };\n\n //Сброс выбора связи и сущности\n const cleanupEnRlSelection = () => {\n setRelation(null);\n setEntity(null);\n };\n\n //Обработка изменения положения сущности на диаграмме\n const handleEntityPositionChange = (ent, position) => setEntPosition(ent, position.x, position.y);\n\n //Обработка удаления сущности из запроса\n const handleEntityRemove = async ent => {\n await removeEnt(ent);\n if (entity && entity?.id === ent) cleanupEnRlSelection();\n doRefresh();\n };\n\n //Обработка выделения сущности\n const handleEntityClick = ent => selectEntity(ent);\n\n //Обработка выделения тарибута сущности\n const handleEntityAttrClick = ent => selectEntity(ent);\n\n //Обработка выделения связи\n const handleRelationClick = rl => selectRelation(rl);\n\n //Обработка добавления отношения cущностей\n const handleRelationAdd = async (source, target) => {\n cleanupEnRlSelection();\n await addRl(source, target);\n doRefresh();\n };\n\n //Обработка удаления отношения cущностей\n const handleRelationRemove = async rl => {\n await removeRl(rl);\n if (relation && relation?.id === rl) cleanupEnRlSelection();\n doRefresh();\n };\n\n //При нажатии на панели (пустом месте) диаграммы запроса\n const handlePaneClick = () => cleanupEnRlSelection();\n\n //Открытие менеджера запросов\n const handleOpenQueriesManager = () => setOpenQueriesManager(true);\n\n //Закрытие менеджера запросов\n const handleCancelQueriesManager = () => setOpenQueriesManager(false);\n\n //Закрытие запроса\n const handleQueryClose = () => {\n setAppBarTitle(APP_BAR_TITLE_DEFAULT);\n cleanupEnRlSelection();\n setQuery(null);\n };\n\n //При выборе запроса\n const handleQuerySelect = ({\n rn,\n name\n }) => {\n setAppBarTitle(`Запрос [${name}]`);\n setQuery(rn);\n setOpenQueriesManager(false);\n cleanupEnRlSelection();\n };\n\n //При изменении свойств запроса\n const handleQueryOptionsChanged = () => {\n cleanupEnRlSelection();\n doRefresh();\n };\n\n //Панель инструмментов\n const toolBar = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_editors_p8p_editor_toolbar__WEBPACK_IMPORTED_MODULE_3__.P8PEditorToolBar, {\n items: [{\n icon: \"file_open\",\n title: \"Менеджер запросов\",\n onClick: handleOpenQueriesManager\n }, {\n icon: \"close\",\n title: \"Закрыть запрос\",\n onClick: handleQueryClose,\n disabled: !query\n }]\n });\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n sx: STYLES.CONTAINER\n }, openQueriesManager && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_queries_manager_queries_manager__WEBPACK_IMPORTED_MODULE_6__.QueriesManager, {\n current: query,\n onQuerySelect: handleQuerySelect,\n onCancel: handleCancelQueriesManager\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n container: true,\n sx: STYLES.GRID_CONTAINER,\n columns: 25\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n item: true,\n xs: 20\n }, queryDiagram && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_query_diagram_query_diagram__WEBPACK_IMPORTED_MODULE_4__.QueryDiagram, {\n nodes: queryDiagram?.nodes,\n edges: queryDiagram?.edges,\n onEntityClick: handleEntityClick,\n onEntityAttrClick: handleEntityAttrClick,\n onEntityPositionChange: handleEntityPositionChange,\n onEntityRemove: handleEntityRemove,\n onRelactionClick: handleRelationClick,\n onRelationAdd: handleRelationAdd,\n onRelationRemove: handleRelationRemove,\n onPaneClick: handlePaneClick\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n item: true,\n xs: 5,\n sx: STYLES.GRID_ITEM_INSPECTOR\n }, toolBar, query && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_inspector_inspector__WEBPACK_IMPORTED_MODULE_5__.Inspector, _extends({}, queryOption, querySQL, {\n query: query,\n entity: entity,\n relation: relation,\n entities: queryDiagram?.entities,\n onOptionsChanged: handleQueryOptionsChanged\n })))));\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/query_editor/query_editor.js?"); /***/ }),