From 1c110a25d7709bd6e3377aa202dd134c1a4ea354 Mon Sep 17 00:00:00 2001 From: Mim Date: Wed, 15 Apr 2026 12:29:36 +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 | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/dist/p8-panels.js b/dist/p8-panels.js index d508a9b..d745312 100644 --- a/dist/p8-panels.js +++ b/dist/p8-panels.js @@ -401,7 +401,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 */ useP8PChart: () => (/* binding */ useP8PChart)\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 RESP_ARG_DEF = \"COUT\"; //Имя параметра, содержащего информацию о графике\nconst CHART_NODE_NAME_DEF = \"XCHART\"; //Наименование узла, содержащего информацию о графике\n\n//-----------\n//Тело модуля\n//-----------\n\n//Хук для P8PChart\nconst useP8PChart = ({\n stored,\n respArg = RESP_ARG_DEF,\n contentNodeName = CHART_NODE_NAME_DEF,\n storedArgs = {},\n executeStoredArgs = {},\n allowDataLoad = () => true\n}) => {\n //Собственное состояние - график\n const [chart, setChart] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n type: null,\n title: null,\n legendPosition: null,\n labels: [],\n datasets: []\n });\n\n //Собственное состояние - признак загрузки данных\n const [isDataLoaded, setIsDataLoaded] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Собственное состояние - флаг загрузки\n const [isLoading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Собственное состояние - необходимость обновления данных\n const [reload, setReload] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true);\n\n //Собственное состояние - дополнительные агрументы\n const refStoredArgs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(storedArgs);\n\n //Собственное состояние - дополнительные параметры вызова процедуры\n const refExecuteStoredArgs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(executeStoredArgs);\n\n //Признак допустимости обновления данных\n const isAllowDataLoad = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n return allowDataLoad();\n }, [allowDataLoad]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n isRespErr\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__.BackEndCtx);\n\n //Загрузка данных графика с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n try {\n setLoading(true);\n const data = await executeStored({\n stored,\n respArg,\n args: {\n ...refStoredArgs.current\n },\n ...refExecuteStoredArgs.current\n });\n setChart(pv => ({\n ...pv,\n ...data[contentNodeName]\n }));\n //Устанавливаем признак загрузки данных с учетом возможных ошибок\n setIsDataLoaded(!isRespErr(data));\n } catch (e) {\n //Если произошла ошибка - данные не загружены\n setIsDataLoaded(false);\n } finally {\n //Сбрасываем признаки загрузки и перезагрузки данных\n setLoading(false);\n setReload(false);\n }\n }, [contentNodeName, executeStored, isRespErr, respArg, stored]);\n\n //При необходимости обновления графика\n const doReload = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n setReload(true);\n }, []);\n\n //Проверка изменений параметров\n const isArgsChanged = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((currentArgs, args) => {\n //Если дополнительные параметры изменились (и сейчас не происходит загрузка данных с сервера)\n return !isLoading && JSON.stringify(currentArgs) != JSON.stringify(args);\n }, [isLoading]);\n\n //При изменение дополнительных параметров процедуры\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если параметры изменились\n if (isArgsChanged(refStoredArgs.current, storedArgs)) {\n //Устанавливаем новые дополнительные параметры\n refStoredArgs.current = storedArgs;\n //При изменении дополнительных параметров необходимо перезагрузить данные\n setReload(true);\n }\n }, [storedArgs, isArgsChanged]);\n\n //При изменение дополнительных параметров вызова процедуры\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если параметры изменились\n if (isArgsChanged(refExecuteStoredArgs.current, executeStoredArgs)) {\n //Устанавливаем новые дополнительные параметры\n refExecuteStoredArgs.current = executeStoredArgs;\n //При изменении дополнительных параметров необходимо перезагрузить данные\n setReload(true);\n }\n }, [executeStoredArgs, isArgsChanged]);\n\n //При необходимости обновить данные графика\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если необходимо перезагрузить данные и это допустимо\n if (isAllowDataLoad && reload) {\n loadData();\n }\n }, [isAllowDataLoad, reload, loadData]);\n\n //Возвращаем данные графика\n return {\n chart,\n isDataLoaded,\n isLoading,\n doReload\n };\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_chart_hooks.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useP8PChart: () => (/* binding */ useP8PChart)\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 RESP_ARG_DEF = \"COUT\"; //Имя параметра, содержащего информацию о графике\nconst CHART_NODE_NAME_DEF = \"XCHART\"; //Наименование узла, содержащего информацию о графике\n\n//-----------\n//Тело модуля\n//-----------\n\n//Хук для P8PChart\nconst useP8PChart = ({\n stored,\n respArg = RESP_ARG_DEF,\n contentNodeName = CHART_NODE_NAME_DEF,\n storedArgs = {},\n executeStoredArgs = {},\n allowDataLoad = () => true\n}) => {\n //Собственное состояние - график\n const [chart, setChart] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n type: null,\n title: null,\n legendPosition: null,\n labels: [],\n datasets: []\n });\n\n //Собственное состояние - признак загрузки данных\n const [isDataLoaded, setIsDataLoaded] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Собственное состояние - признак наличия бизнес-данных в загруженных\n const [isDataFound, setIsDataFound] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Собственное состояние - флаг загрузки\n const [isLoading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Собственное состояние - необходимость обновления данных\n const [reload, setReload] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true);\n\n //Собственное состояние - дополнительные агрументы\n const refStoredArgs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(storedArgs);\n\n //Собственное состояние - дополнительные параметры вызова процедуры\n const refExecuteStoredArgs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(executeStoredArgs);\n\n //Признак допустимости обновления данных\n const isAllowDataLoad = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n return allowDataLoad();\n }, [allowDataLoad]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n isRespErr\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__.BackEndCtx);\n\n //Загрузка данных графика с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n try {\n //Поднимаем флаг начала загрузки данных\n setLoading(true);\n //Получаем данные с сервера БД\n const data = await executeStored({\n stored,\n respArg,\n args: {\n ...refStoredArgs.current\n },\n ...refExecuteStoredArgs.current\n });\n //Устанавливаем флаг наличия бизнес-данных\n setIsDataFound(data[contentNodeName]?.datasets?.[0]?.data?.length > 0);\n //Устанавливаем бизнес-данные\n setChart(pv => ({\n ...pv,\n ...data[contentNodeName]\n }));\n //Устанавливаем признак загрузки данных с учетом возможных ошибок\n setIsDataLoaded(!isRespErr(data));\n } catch (e) {\n //Если произошла ошибка - данные не загружены\n setIsDataLoaded(false);\n } finally {\n //Сбрасываем признаки загрузки и перезагрузки данных\n setLoading(false);\n setReload(false);\n }\n }, [contentNodeName, executeStored, isRespErr, respArg, stored]);\n\n //При необходимости обновления графика\n const doReload = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n setReload(true);\n }, []);\n\n //Проверка изменений параметров\n const isArgsChanged = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((currentArgs, args) => {\n //Если дополнительные параметры изменились (и сейчас не происходит загрузка данных с сервера)\n return !isLoading && JSON.stringify(currentArgs) != JSON.stringify(args);\n }, [isLoading]);\n\n //При изменение дополнительных параметров процедуры\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если параметры изменились\n if (isArgsChanged(refStoredArgs.current, storedArgs)) {\n //Устанавливаем новые дополнительные параметры\n refStoredArgs.current = storedArgs;\n //При изменении дополнительных параметров необходимо перезагрузить данные\n setReload(true);\n }\n }, [storedArgs, isArgsChanged]);\n\n //При изменение дополнительных параметров вызова процедуры\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если параметры изменились\n if (isArgsChanged(refExecuteStoredArgs.current, executeStoredArgs)) {\n //Устанавливаем новые дополнительные параметры\n refExecuteStoredArgs.current = executeStoredArgs;\n //При изменении дополнительных параметров необходимо перезагрузить данные\n setReload(true);\n }\n }, [executeStoredArgs, isArgsChanged]);\n\n //При необходимости обновить данные графика\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если необходимо перезагрузить данные и это допустимо\n if (isAllowDataLoad && reload) {\n loadData();\n }\n }, [isAllowDataLoad, reload, loadData]);\n\n //Возвращаем данные графика\n return {\n chart,\n isDataLoaded,\n isDataFound,\n isLoading,\n doReload\n };\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_chart_hooks.js?"); /***/ }), @@ -423,7 +423,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 */ useP8PCyclogram: () => (/* binding */ useP8PCyclogram)\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/*\r\n Парус 8 - Панели мониторинга\r\n Хуки для циклограмм\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контекст взаимодействия с сервером\n //Вспомогательные функции\n\n//---------\n//Константы\n//---------\n\n//Константы - значения по умолчанию\nconst RESP_ARG_DEF = \"COUT\"; //Имя параметра, содержащего информацию о циклограмме\nconst CG_NODE_NAME_DEF = \"XCYCLOGRAM\"; //Наименование узла, содержащего информацию о циклограмме\n\n//-----------\n//Тело модуля\n//-----------\n\n//Хук для P8PCyclogram\nconst useP8PCyclogram = ({\n stored,\n respArg = RESP_ARG_DEF,\n contentNodeName = CG_NODE_NAME_DEF,\n storedArgs = {},\n executeStoredArgs = {},\n allowDataLoad = () => true\n}) => {\n //Собственное состояние - циклограмма\n const [cyclogram, setCyclogram] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n columns: [],\n groups: [],\n tasks: [],\n taskAttributes: [],\n title: null,\n lineHeight: 0,\n zoom: 1,\n zoomBar: true\n });\n\n //Собственное состояние - признак загрузки данных\n const [isDataLoaded, setIsDataLoaded] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Собственное состояние - флаг загрузки\n const [isLoading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Собственное состояние - необходимость обновления данных\n const [reload, setReload] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true);\n\n //Собственное состояние - дополнительные агрументы\n const refStoredArgs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(storedArgs);\n\n //Собственное состояние - дополнительные параметры вызова процедуры\n const refExecuteStoredArgs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(executeStoredArgs);\n\n //Признак допустимости обновления данных\n const isAllowDataLoad = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n return allowDataLoad();\n }, [allowDataLoad]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n isRespErr\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__.BackEndCtx);\n\n //Загрузка данных циклограммы с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n try {\n setLoading(true);\n const data = await executeStored({\n stored,\n args: {\n ...refStoredArgs.current\n },\n attributeValueProcessor: (name, val) => [\"ddate_start\", \"ddate_end\"].includes(name) ? (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.formatDateJSONDateOnly)(val) : val,\n respArg,\n ...refExecuteStoredArgs.current\n });\n setCyclogram(pv => ({\n ...pv,\n ...data[contentNodeName]\n }));\n //Устанавливаем признак загрузки данных с учетом возможных ошибок\n setIsDataLoaded(!isRespErr(data));\n } catch (e) {\n //Если произошла ошибка - данные не загружены\n setIsDataLoaded(false);\n } finally {\n //Сбрасываем признаки загрузки и перезагрузки данных\n setLoading(false);\n setReload(false);\n }\n }, [contentNodeName, executeStored, isRespErr, respArg, stored]);\n\n //При необходимости обновления циклограммы\n const doReload = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n setReload(true);\n }, []);\n\n //Проверка изменений параметров\n const isArgsChanged = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((currentArgs, args) => {\n //Если дополнительные параметры изменились (и сейчас не происходит загрузка данных с сервера)\n return !isLoading && JSON.stringify(currentArgs) != JSON.stringify(args);\n }, [isLoading]);\n\n //При изменение дополнительных параметров процедуры\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если параметры изменились\n if (isArgsChanged(refStoredArgs.current, storedArgs)) {\n //Устанавливаем новые дополнительные параметры\n refStoredArgs.current = storedArgs;\n //При изменении дополнительных параметров необходимо перезагрузить данные\n setReload(true);\n }\n }, [storedArgs, isArgsChanged]);\n\n //При изменение дополнительных параметров вызова процедуры\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если параметры изменились\n if (isArgsChanged(refExecuteStoredArgs.current, executeStoredArgs)) {\n //Устанавливаем новые дополнительные параметры\n refExecuteStoredArgs.current = executeStoredArgs;\n //При изменении дополнительных параметров необходимо перезагрузить данные\n setReload(true);\n }\n }, [executeStoredArgs, isArgsChanged]);\n\n //При необходимости обновить данные циклограммы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (isAllowDataLoad && reload) {\n loadData();\n }\n }, [isAllowDataLoad, reload, loadData]);\n\n //Возвращаем данные циклограммы\n return {\n cyclogram,\n isDataLoaded,\n isLoading,\n doReload\n };\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_cyclogram_hooks.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useP8PCyclogram: () => (/* binding */ useP8PCyclogram)\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/*\r\n Парус 8 - Панели мониторинга\r\n Хуки для циклограмм\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контекст взаимодействия с сервером\n //Вспомогательные функции\n\n//---------\n//Константы\n//---------\n\n//Константы - значения по умолчанию\nconst RESP_ARG_DEF = \"COUT\"; //Имя параметра, содержащего информацию о циклограмме\nconst CG_NODE_NAME_DEF = \"XCYCLOGRAM\"; //Наименование узла, содержащего информацию о циклограмме\n\n//-----------\n//Тело модуля\n//-----------\n\n//Хук для P8PCyclogram\nconst useP8PCyclogram = ({\n stored,\n respArg = RESP_ARG_DEF,\n contentNodeName = CG_NODE_NAME_DEF,\n storedArgs = {},\n executeStoredArgs = {},\n allowDataLoad = () => true\n}) => {\n //Собственное состояние - циклограмма\n const [cyclogram, setCyclogram] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n columns: [],\n groups: [],\n tasks: [],\n taskAttributes: [],\n title: null,\n lineHeight: 0,\n zoom: 1,\n zoomBar: true\n });\n\n //Собственное состояние - признак загрузки данных\n const [isDataLoaded, setIsDataLoaded] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Собственное состояние - признак наличия бизнес-данных в загруженных\n const [isDataFound, setIsDataFound] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Собственное состояние - флаг загрузки\n const [isLoading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Собственное состояние - необходимость обновления данных\n const [reload, setReload] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true);\n\n //Собственное состояние - дополнительные агрументы\n const refStoredArgs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(storedArgs);\n\n //Собственное состояние - дополнительные параметры вызова процедуры\n const refExecuteStoredArgs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(executeStoredArgs);\n\n //Признак допустимости обновления данных\n const isAllowDataLoad = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n return allowDataLoad();\n }, [allowDataLoad]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n isRespErr\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__.BackEndCtx);\n\n //Загрузка данных циклограммы с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n try {\n //Поднимаем флаг начала загрузки данных\n setLoading(true);\n //Получаем данные с сервера БД\n const data = await executeStored({\n stored,\n args: {\n ...refStoredArgs.current\n },\n attributeValueProcessor: (name, val) => [\"ddate_start\", \"ddate_end\"].includes(name) ? (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.formatDateJSONDateOnly)(val) : val,\n respArg,\n ...refExecuteStoredArgs.current\n });\n //Устанавливаем флаг наличия бизнес-данных\n setIsDataFound(data[contentNodeName]?.tasks?.length > 0);\n //Устанавливаем бизнес-данные\n setCyclogram(pv => ({\n ...pv,\n ...data[contentNodeName]\n }));\n //Устанавливаем признак загрузки данных с учетом возможных ошибок\n setIsDataLoaded(!isRespErr(data));\n } catch (e) {\n //Если произошла ошибка - данные не загружены\n setIsDataLoaded(false);\n } finally {\n //Сбрасываем признаки загрузки и перезагрузки данных\n setLoading(false);\n setReload(false);\n }\n }, [contentNodeName, executeStored, isRespErr, respArg, stored]);\n\n //При необходимости обновления циклограммы\n const doReload = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n setReload(true);\n }, []);\n\n //Проверка изменений параметров\n const isArgsChanged = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((currentArgs, args) => {\n //Если дополнительные параметры изменились (и сейчас не происходит загрузка данных с сервера)\n return !isLoading && JSON.stringify(currentArgs) != JSON.stringify(args);\n }, [isLoading]);\n\n //При изменение дополнительных параметров процедуры\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если параметры изменились\n if (isArgsChanged(refStoredArgs.current, storedArgs)) {\n //Устанавливаем новые дополнительные параметры\n refStoredArgs.current = storedArgs;\n //При изменении дополнительных параметров необходимо перезагрузить данные\n setReload(true);\n }\n }, [storedArgs, isArgsChanged]);\n\n //При изменение дополнительных параметров вызова процедуры\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если параметры изменились\n if (isArgsChanged(refExecuteStoredArgs.current, executeStoredArgs)) {\n //Устанавливаем новые дополнительные параметры\n refExecuteStoredArgs.current = executeStoredArgs;\n //При изменении дополнительных параметров необходимо перезагрузить данные\n setReload(true);\n }\n }, [executeStoredArgs, isArgsChanged]);\n\n //При необходимости обновить данные циклограммы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (isAllowDataLoad && reload) {\n loadData();\n }\n }, [isAllowDataLoad, reload, loadData]);\n\n //Возвращаем данные циклограммы\n return {\n cyclogram,\n isDataLoaded,\n isDataFound,\n isLoading,\n doReload\n };\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_cyclogram_hooks.js?"); /***/ }), @@ -445,7 +445,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 */ useP8PDataGrid: () => (/* binding */ useP8PDataGrid)\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 _p8p_data_grid_reducer__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./p8p_data_grid_reducer */ \"./app/components/p8p_data_grid_reducer.js\");\n/*\r\n Парус 8 - Панели мониторинга\r\n Хуки для таблиц данных\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контекст взаимодействия с сервером\n //Вспомогательные функции\n //Редьюсер состояния\n\n//---------\n//Константы\n//---------\n\n//Константы - значения по умолчанию\nconst DG_PAGE_SIZE_DEF = 10; //Размер страницы\nconst DG_NODE_NAME_DEF = \"XDATA_GRID\"; //Наименование узла, содержащего информацию о таблице\nconst FILTERS_NODE_NAME_DEF = \"filters\"; //Наименование узла отборов\nconst ORDERS_NODE_NAME_DEF = \"orders\"; //Наименование узла сортировок\nconst RESP_ARG_DEF = \"COUT\"; //Имя параметра, содержащего информацию о таблице\n\n//-----------\n//Тело модуля\n//-----------\n\n//Хук для P8PDataGrid\nconst useP8PDataGrid = ({\n stored,\n respArg = RESP_ARG_DEF,\n contentNodeName = DG_NODE_NAME_DEF,\n filtersNodeName = FILTERS_NODE_NAME_DEF,\n ordersNodeName = ORDERS_NODE_NAME_DEF,\n pageSize = DG_PAGE_SIZE_DEF,\n reloadDef = false,\n initFilters = [],\n initOrders = [],\n storedArgs = {},\n resetPageNumberOnStoredArgsChange = true,\n executeStoredArgs = {},\n resetPageNumberOnExecuteStoredArgsChange = true,\n allowDataLoad = () => true\n}) => {\n //Подключим редьюсер состояния\n const [state, dispatch] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useReducer)(_p8p_data_grid_reducer__WEBPACK_IMPORTED_MODULE_3__.dataGridReducer, (0,_p8p_data_grid_reducer__WEBPACK_IMPORTED_MODULE_3__.INITIAL_STATE)({\n initFilters,\n initOrders\n }));\n\n //Установка даных таблицы\n const setDataGrid = (dataGridData, pageSize, isError) => dispatch({\n type: _p8p_data_grid_reducer__WEBPACK_IMPORTED_MODULE_3__.DG_AT.SET_DATA_GRID,\n payload: {\n dataGridData,\n pageSize,\n isError\n }\n });\n\n //Установка фильтра таблицы\n const setDataGridFilter = filters => dispatch({\n type: _p8p_data_grid_reducer__WEBPACK_IMPORTED_MODULE_3__.DG_AT.SET_DATA_GRID_FILTER,\n payload: filters\n });\n\n //Установка сортировок таблицы\n const setDataGridOrder = orders => dispatch({\n type: _p8p_data_grid_reducer__WEBPACK_IMPORTED_MODULE_3__.DG_AT.SET_DATA_GRID_ORDER,\n payload: orders\n });\n\n //Установка страницы таблицы\n const setDataGridPageNumber = pageNumber => dispatch({\n type: _p8p_data_grid_reducer__WEBPACK_IMPORTED_MODULE_3__.DG_AT.SET_DATA_GRID_PAGE_NUMBER,\n payload: pageNumber\n });\n\n //Установка флага загруженности данных\n const setIsDataLoaded = isDataLoaded => dispatch({\n type: _p8p_data_grid_reducer__WEBPACK_IMPORTED_MODULE_3__.DG_AT.SET_IS_DATA_LOADED,\n payload: isDataLoaded\n });\n\n //Установка флага активности процесса загрузки данных\n const setIsLoading = isLoading => dispatch({\n type: _p8p_data_grid_reducer__WEBPACK_IMPORTED_MODULE_3__.DG_AT.SET_IS_LOADING,\n payload: isLoading\n });\n\n //Установка флага необходимости обновления данных\n const setReload = (reload, resetPageNumber = false) => dispatch({\n type: _p8p_data_grid_reducer__WEBPACK_IMPORTED_MODULE_3__.DG_AT.SET_RELOAD,\n payload: {\n reload,\n resetPageNumber\n }\n });\n\n //Ссылка на актуальные параметры хранимой процедуры\n const refStoredArgs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(storedArgs);\n\n //Ссылка на актуальные параметры исполнения хранимой процедуры\n const refExecuteStoredArgs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(executeStoredArgs);\n\n //Признак допустимости обновления данных\n const isAllowDataLoad = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n return allowDataLoad();\n }, [allowDataLoad]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB,\n isRespErr\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__.BackEndCtx);\n\n //Загрузка данных таблицы с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n try {\n //Начинаем загрузку\n setIsLoading(true);\n const data = await executeStored({\n stored,\n args: {\n CFILTERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.object2Base64XML)(state.dataGrid.filters, {\n arrayNodeName: filtersNodeName\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.object2Base64XML)(state.dataGrid.orders, {\n arrayNodeName: ordersNodeName\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: state.dataGrid.pageNumber,\n NPAGE_SIZE: pageSize,\n NINCLUDE_DEF: reloadDef ? 1 : state.isDataLoaded ? 0 : 1,\n ...refStoredArgs.current\n },\n respArg,\n ...refExecuteStoredArgs.current\n });\n //Устанавливаем полученные данные и признак загрузки данных с учетом возможных ошибок\n setDataGrid(data[contentNodeName], pageSize, isRespErr(data));\n } catch (e) {\n //Если произошла ошибка - данные не загружены\n setIsDataLoaded(false);\n } finally {\n //Сбрасываем признаки загрузки и перезагрузки данных\n setIsLoading(false);\n }\n }, [SERV_DATA_TYPE_CLOB, contentNodeName, state.isDataLoaded, state.dataGrid.filters, state.dataGrid.orders, state.dataGrid.pageNumber, executeStored, filtersNodeName, isRespErr, ordersNodeName, pageSize, reloadDef, respArg, stored]);\n\n //При изменении состояния фильтра\n const handleFilterChanged = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({\n filters\n }) => setDataGridFilter(filters), []);\n\n //При изменении состояния сортировки\n const handleOrderChanged = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({\n orders\n }) => setDataGridOrder(orders), []);\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => setDataGridPageNumber(state.dataGrid.pageNumber + 1), [state.dataGrid.pageNumber]);\n\n //При изменении страницы отображения\n const handlePageChange = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({\n page\n }) => setDataGridPageNumber(page), []);\n\n //При необходимости обновления таблицы\n const doReload = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({\n returnOnFirstPage = false\n }) => setReload(true, state.dataGrid.pagesCount <= 0 || returnOnFirstPage), [state.dataGrid.pagesCount]);\n\n //Проверка изменений параметров\n const isArgsChanged = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((currentArgs, args) => {\n //Если дополнительные параметры изменились (и сейчас не происходит загрузка данных с сервера)\n return !state.isLoading && JSON.stringify(currentArgs) != JSON.stringify(args);\n }, [state.isLoading]);\n\n //При изменение дополнительных параметров процедуры\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если параметры изменились\n if (isArgsChanged(refStoredArgs.current, storedArgs)) {\n //Устанавливаем новые дополнительные параметры\n refStoredArgs.current = storedArgs;\n //При изменении дополнительных параметров необходимо перезагрузить данные\n setReload(true, resetPageNumberOnStoredArgsChange);\n }\n }, [storedArgs, resetPageNumberOnStoredArgsChange, isArgsChanged]);\n\n //При изменение дополнительных параметров вызова процедуры\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если параметры изменились\n if (isArgsChanged(refExecuteStoredArgs.current, executeStoredArgs)) {\n //Устанавливаем новые дополнительные параметры\n refExecuteStoredArgs.current = executeStoredArgs;\n //При изменении дополнительных параметров необходимо перезагрузить данные\n setReload(true, resetPageNumberOnExecuteStoredArgsChange);\n }\n }, [executeStoredArgs, resetPageNumberOnExecuteStoredArgsChange, isArgsChanged]);\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (isAllowDataLoad && state.reload) {\n loadData();\n }\n }, [isAllowDataLoad, state.reload, loadData]);\n\n //Возвращаем данные таблицы\n return {\n dataGrid: state.dataGrid,\n isDataLoaded: state.isDataLoaded,\n isLoading: state.isLoading,\n handleFilterChanged,\n handleOrderChanged,\n handlePagesCountChanged,\n handlePageChange,\n doReload\n };\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_data_grid_hooks.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useP8PDataGrid: () => (/* binding */ useP8PDataGrid)\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 _app_config__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../app.config */ \"./app.config.js\");\n/* harmony import */ var _p8p_data_grid_reducer__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./p8p_data_grid_reducer */ \"./app/components/p8p_data_grid_reducer.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 DG_PAGE_SIZE_DEF = _app_config__WEBPACK_IMPORTED_MODULE_3__[\"default\"].SYSTEM.PAGE_SIZE; //Размер страницы\nconst DG_NODE_NAME_DEF = \"XDATA_GRID\"; //Наименование узла, содержащего информацию о таблице\nconst FILTERS_NODE_NAME_DEF = \"filters\"; //Наименование узла отборов\nconst ORDERS_NODE_NAME_DEF = \"orders\"; //Наименование узла сортировок\nconst RESP_ARG_DEF = \"COUT\"; //Имя параметра, содержащего информацию о таблице\n\n//-----------\n//Тело модуля\n//-----------\n\n//Хук для P8PDataGrid\nconst useP8PDataGrid = ({\n stored,\n respArg = RESP_ARG_DEF,\n contentNodeName = DG_NODE_NAME_DEF,\n filtersNodeName = FILTERS_NODE_NAME_DEF,\n ordersNodeName = ORDERS_NODE_NAME_DEF,\n pageSize = DG_PAGE_SIZE_DEF,\n reloadDef = false,\n initFilters = [],\n initOrders = [],\n storedArgs = {},\n resetPageNumberOnStoredArgsChange = true,\n executeStoredArgs = {},\n resetPageNumberOnExecuteStoredArgsChange = true,\n allowDataLoad = () => true\n}) => {\n //Подключим редьюсер состояния\n const [state, dispatch] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useReducer)(_p8p_data_grid_reducer__WEBPACK_IMPORTED_MODULE_4__.dataGridReducer, (0,_p8p_data_grid_reducer__WEBPACK_IMPORTED_MODULE_4__.INITIAL_STATE)({\n initFilters,\n initOrders\n }));\n\n //Установка даных таблицы\n const setDataGrid = (dataGridData, pageSize, isError) => dispatch({\n type: _p8p_data_grid_reducer__WEBPACK_IMPORTED_MODULE_4__.DG_AT.SET_DATA_GRID,\n payload: {\n dataGridData,\n pageSize,\n isError\n }\n });\n\n //Установка фильтра таблицы\n const setDataGridFilter = filters => dispatch({\n type: _p8p_data_grid_reducer__WEBPACK_IMPORTED_MODULE_4__.DG_AT.SET_DATA_GRID_FILTER,\n payload: filters\n });\n\n //Установка сортировок таблицы\n const setDataGridOrder = orders => dispatch({\n type: _p8p_data_grid_reducer__WEBPACK_IMPORTED_MODULE_4__.DG_AT.SET_DATA_GRID_ORDER,\n payload: orders\n });\n\n //Установка страницы таблицы\n const setDataGridPageNumber = pageNumber => dispatch({\n type: _p8p_data_grid_reducer__WEBPACK_IMPORTED_MODULE_4__.DG_AT.SET_DATA_GRID_PAGE_NUMBER,\n payload: pageNumber\n });\n\n //Установка флага загруженности данных\n const setIsDataLoaded = isDataLoaded => dispatch({\n type: _p8p_data_grid_reducer__WEBPACK_IMPORTED_MODULE_4__.DG_AT.SET_IS_DATA_LOADED,\n payload: isDataLoaded\n });\n\n //Установка флага активности процесса загрузки данных\n const setIsLoading = isLoading => dispatch({\n type: _p8p_data_grid_reducer__WEBPACK_IMPORTED_MODULE_4__.DG_AT.SET_IS_LOADING,\n payload: isLoading\n });\n\n //Установка флага необходимости обновления данных\n const setReload = (reload, resetPageNumber = false) => dispatch({\n type: _p8p_data_grid_reducer__WEBPACK_IMPORTED_MODULE_4__.DG_AT.SET_RELOAD,\n payload: {\n reload,\n resetPageNumber\n }\n });\n\n //Ссылка на актуальные параметры хранимой процедуры\n const refStoredArgs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(storedArgs);\n\n //Ссылка на актуальные параметры исполнения хранимой процедуры\n const refExecuteStoredArgs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(executeStoredArgs);\n\n //Признак допустимости обновления данных\n const isAllowDataLoad = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n return allowDataLoad();\n }, [allowDataLoad]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB,\n isRespErr\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__.BackEndCtx);\n\n //Загрузка данных таблицы с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n try {\n //Поднимаем флаг начала загрузки данных\n setIsLoading(true);\n //Получаем данные с сервера БД\n const data = await executeStored({\n stored,\n args: {\n CFILTERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.object2Base64XML)(state.dataGrid.filters, {\n arrayNodeName: filtersNodeName\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.object2Base64XML)(state.dataGrid.orders, {\n arrayNodeName: ordersNodeName\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: state.dataGrid.pageNumber,\n NPAGE_SIZE: pageSize,\n NINCLUDE_DEF: reloadDef ? 1 : state.isDataLoaded ? 0 : 1,\n ...refStoredArgs.current\n },\n respArg,\n ...refExecuteStoredArgs.current\n });\n //Устанавливаем полученные бизнес-данные, признак загрузки данных с учетом возможных ошибок, признак наличия бизнес-данных\n setDataGrid(data[contentNodeName], pageSize, isRespErr(data));\n } catch (e) {\n //Если произошла ошибка - данные не загружены\n setIsDataLoaded(false);\n } finally {\n //Сбрасываем признаки загрузки и перезагрузки данных\n setIsLoading(false);\n }\n }, [SERV_DATA_TYPE_CLOB, contentNodeName, state.isDataLoaded, state.dataGrid.filters, state.dataGrid.orders, state.dataGrid.pageNumber, executeStored, filtersNodeName, isRespErr, ordersNodeName, pageSize, reloadDef, respArg, stored]);\n\n //При изменении состояния фильтра\n const handleFilterChanged = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({\n filters\n }) => setDataGridFilter(filters), []);\n\n //При изменении состояния сортировки\n const handleOrderChanged = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({\n orders\n }) => setDataGridOrder(orders), []);\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => setDataGridPageNumber(state.dataGrid.pageNumber + 1), [state.dataGrid.pageNumber]);\n\n //При изменении страницы отображения\n const handlePageChange = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({\n page\n }) => setDataGridPageNumber(page), []);\n\n //При необходимости обновления таблицы\n const doReload = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({\n returnOnFirstPage = false\n }) => setReload(true, state.dataGrid.pagesCount <= 0 || returnOnFirstPage), [state.dataGrid.pagesCount]);\n\n //Проверка изменений параметров\n const isArgsChanged = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((currentArgs, args) => {\n //Если дополнительные параметры изменились (и сейчас не происходит загрузка данных с сервера)\n return !state.isLoading && JSON.stringify(currentArgs) != JSON.stringify(args);\n }, [state.isLoading]);\n\n //При изменение дополнительных параметров процедуры\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если параметры изменились\n if (isArgsChanged(refStoredArgs.current, storedArgs)) {\n //Устанавливаем новые дополнительные параметры\n refStoredArgs.current = storedArgs;\n //При изменении дополнительных параметров необходимо перезагрузить данные\n setReload(true, resetPageNumberOnStoredArgsChange);\n }\n }, [storedArgs, resetPageNumberOnStoredArgsChange, isArgsChanged]);\n\n //При изменение дополнительных параметров вызова процедуры\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если параметры изменились\n if (isArgsChanged(refExecuteStoredArgs.current, executeStoredArgs)) {\n //Устанавливаем новые дополнительные параметры\n refExecuteStoredArgs.current = executeStoredArgs;\n //При изменении дополнительных параметров необходимо перезагрузить данные\n setReload(true, resetPageNumberOnExecuteStoredArgsChange);\n }\n }, [executeStoredArgs, resetPageNumberOnExecuteStoredArgsChange, isArgsChanged]);\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (isAllowDataLoad && state.reload) {\n loadData();\n }\n }, [isAllowDataLoad, state.reload, loadData]);\n\n //Возвращаем данные таблицы\n return {\n dataGrid: state.dataGrid,\n isDataLoaded: state.isDataLoaded,\n isDataFound: state.isDataFound,\n isLoading: state.isLoading,\n handleFilterChanged,\n handleOrderChanged,\n handlePagesCountChanged,\n handlePageChange,\n doReload\n };\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_data_grid_hooks.js?"); /***/ }), @@ -456,7 +456,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 */ DG_AT: () => (/* binding */ DG_AT),\n/* harmony export */ INITIAL_STATE: () => (/* binding */ INITIAL_STATE),\n/* harmony export */ dataGridReducer: () => (/* binding */ dataGridReducer)\n/* harmony export */ });\n/*\r\n Парус 8 - Панели мониторинга\r\n Таблица данных - редьюсер состояния\r\n*/\n\n//---------\n//Константы\n//---------\n\n//Типы действий\nconst DG_AT = {\n SET_DATA_GRID: \"SET_DATA_GRID\",\n //Установка даных таблицы\n SET_DATA_GRID_FILTER: \"SET_DATA_GRID_FILTER\",\n //Установка фильтра таблицы\n SET_DATA_GRID_ORDER: \"SET_DATA_GRID_ORDER\",\n //Установка сортировок таблицы\n SET_DATA_GRID_PAGE_NUMBER: \"SET_DATA_GRID_PAGE_NUMBER\",\n //Установка страницы таблицы\n SET_IS_DATA_LOADED: \"SET_IS_DATA_LOADED\",\n //Установка флага загруженности данных\n SET_IS_LOADING: \"SET_IS_LOADING\",\n //Установка флага активности процесса загрузки данных\n SET_RELOAD: \"SET_RELOAD\" //Установка флага необходимости обновления данных\n};\n\n//Состояние приложения по умолчанию\nconst INITIAL_STATE = ({\n initFilters,\n initOrders\n}) => ({\n dataGrid: {\n columnsDef: [],\n groups: [],\n rows: [],\n filters: Array.isArray(initFilters) ? [...initFilters] : [],\n orders: Array.isArray(initOrders) ? [...initOrders] : [],\n pageNumber: 1,\n pagesAlign: null,\n pagesPosition: null,\n pagesCount: 0,\n fixedColumns: 0,\n fixedHeader: false,\n morePages: true\n },\n isDataLoaded: false,\n isLoading: false,\n reload: true\n});\n\n//-----------\n//Тело модуля\n//-----------\n\n//Обработчики действий\nconst handlers = {\n //Установка даных таблицы\n [DG_AT.SET_DATA_GRID]: (state, {\n payload\n }) => {\n const {\n dataGridData,\n pageSize,\n isError\n } = payload;\n return {\n ...state,\n dataGrid: {\n ...state.dataGrid,\n ...dataGridData,\n columnsDef: dataGridData.columnsDef ? [...dataGridData.columnsDef] : state.dataGrid.columnsDef || [],\n rows: dataGridData.pagesCount > 0 || state.dataGrid.pageNumber == 1 ? [...(dataGridData.rows || [])] : [...(state.dataGrid.rows || []), ...(dataGridData.rows || [])],\n groups: dataGridData.groups ? dataGridData.pagesCount > 0 || state.dataGrid.pageNumber == 1 ? [...(dataGridData.groups || [])] : [...(state.dataGrid.groups || []), ...dataGridData.groups.filter(g => !state.dataGrid.groups.find(pg => pg.name == g.name))] : [...(state.dataGrid.groups || [])],\n morePages: dataGridData.morePages && (dataGridData.rows || []).length >= pageSize\n },\n isDataLoaded: isError === true ? false : true\n };\n },\n //Установка фильтра таблицы\n [DG_AT.SET_DATA_GRID_FILTER]: (state, {\n payload\n }) => ({\n ...state,\n dataGrid: {\n ...state.dataGrid,\n filters: [...payload],\n pageNumber: 1\n },\n reload: true\n }),\n //Установка сортировок таблицы\n [DG_AT.SET_DATA_GRID_ORDER]: (state, {\n payload\n }) => ({\n ...state,\n dataGrid: {\n ...state.dataGrid,\n orders: [...payload],\n pageNumber: 1\n },\n reload: true\n }),\n //Установка страницы таблицы\n [DG_AT.SET_DATA_GRID_PAGE_NUMBER]: (state, {\n payload\n }) => ({\n ...state,\n dataGrid: {\n ...state.dataGrid,\n pageNumber: payload\n },\n reload: true\n }),\n //Установка флага загруженности данных\n [DG_AT.SET_IS_DATA_LOADED]: (state, {\n payload\n }) => ({\n ...state,\n isDataLoaded: payload\n }),\n //Установка флага активности процесса загрузки данных\n [DG_AT.SET_IS_LOADING]: (state, {\n payload\n }) => ({\n ...state,\n isLoading: payload,\n reload: payload === false ? false : state.reload\n }),\n //Установка флага необходимости обновления данных\n [DG_AT.SET_RELOAD]: (state, {\n payload\n }) => ({\n ...state,\n reload: payload.reload,\n ...(payload.resetPageNumber ? {\n dataGrid: {\n ...state.dataGrid,\n pageNumber: 1\n }\n } : {})\n }),\n //Обработчик по умолчанию\n DEFAULT: state => state\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n//Константы\n\n\n//Редьюсер состояния\nconst dataGridReducer = (state, action) => {\n //Подберём обработчик\n const handle = handlers[action.type] || handlers.DEFAULT;\n //Исполним его\n return handle(state, action);\n};\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_data_grid_reducer.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ DG_AT: () => (/* binding */ DG_AT),\n/* harmony export */ INITIAL_STATE: () => (/* binding */ INITIAL_STATE),\n/* harmony export */ dataGridReducer: () => (/* binding */ dataGridReducer)\n/* harmony export */ });\n/*\r\n Парус 8 - Панели мониторинга\r\n Таблица данных - редьюсер состояния\r\n*/\n\n//---------\n//Константы\n//---------\n\n//Типы действий\nconst DG_AT = {\n SET_DATA_GRID: \"SET_DATA_GRID\",\n //Установка даных таблицы\n SET_DATA_GRID_FILTER: \"SET_DATA_GRID_FILTER\",\n //Установка фильтра таблицы\n SET_DATA_GRID_ORDER: \"SET_DATA_GRID_ORDER\",\n //Установка сортировок таблицы\n SET_DATA_GRID_PAGE_NUMBER: \"SET_DATA_GRID_PAGE_NUMBER\",\n //Установка страницы таблицы\n SET_IS_DATA_LOADED: \"SET_IS_DATA_LOADED\",\n //Установка флага загруженности данных\n SET_IS_LOADING: \"SET_IS_LOADING\",\n //Установка флага активности процесса загрузки данных\n SET_RELOAD: \"SET_RELOAD\" //Установка флага необходимости обновления данных\n};\n\n//Состояние приложения по умолчанию\nconst INITIAL_STATE = ({\n initFilters,\n initOrders\n}) => ({\n dataGrid: {\n columnsDef: [],\n groups: [],\n rows: [],\n filters: Array.isArray(initFilters) ? [...initFilters] : [],\n orders: Array.isArray(initOrders) ? [...initOrders] : [],\n pageNumber: 1,\n pagesAlign: null,\n pagesPosition: null,\n pagesCount: 0,\n fixedColumns: 0,\n fixedHeader: false,\n morePages: false\n },\n isDataLoaded: false,\n isDataFound: false,\n isLoading: false,\n reload: true\n});\n\n//-----------\n//Тело модуля\n//-----------\n\n//Обработчики действий\nconst handlers = {\n //Установка даных таблицы\n [DG_AT.SET_DATA_GRID]: (state, {\n payload\n }) => {\n const {\n dataGridData,\n pageSize,\n isError\n } = payload;\n return {\n ...state,\n dataGrid: {\n ...state.dataGrid,\n ...dataGridData,\n columnsDef: dataGridData.columnsDef ? [...dataGridData.columnsDef] : state.dataGrid.columnsDef || [],\n rows: dataGridData.pagesCount > 0 || state.dataGrid.pageNumber == 1 ? [...(dataGridData.rows || [])] : [...(state.dataGrid.rows || []), ...(dataGridData.rows || [])],\n groups: dataGridData.groups ? dataGridData.pagesCount > 0 || state.dataGrid.pageNumber == 1 ? [...(dataGridData.groups || [])] : [...(state.dataGrid.groups || []), ...dataGridData.groups.filter(g => !state.dataGrid.groups.find(pg => pg.name == g.name))] : [...(state.dataGrid.groups || [])],\n morePages: dataGridData.morePages && (dataGridData.rows || []).length >= pageSize\n },\n isDataLoaded: isError === true ? false : true,\n isDataFound: state.dataGrid.pageNumber == 1 && dataGridData?.rows?.length > 0 || state.dataGrid.pageNumber != 1 && state.dataGrid.rows.length > 0\n };\n },\n //Установка фильтра таблицы\n [DG_AT.SET_DATA_GRID_FILTER]: (state, {\n payload\n }) => ({\n ...state,\n dataGrid: {\n ...state.dataGrid,\n filters: [...payload],\n pageNumber: 1\n },\n reload: true\n }),\n //Установка сортировок таблицы\n [DG_AT.SET_DATA_GRID_ORDER]: (state, {\n payload\n }) => ({\n ...state,\n dataGrid: {\n ...state.dataGrid,\n orders: [...payload],\n pageNumber: 1\n },\n reload: true\n }),\n //Установка страницы таблицы\n [DG_AT.SET_DATA_GRID_PAGE_NUMBER]: (state, {\n payload\n }) => ({\n ...state,\n dataGrid: {\n ...state.dataGrid,\n pageNumber: payload\n },\n reload: true\n }),\n //Установка флага загруженности данных\n [DG_AT.SET_IS_DATA_LOADED]: (state, {\n payload\n }) => ({\n ...state,\n isDataLoaded: payload\n }),\n //Установка флага активности процесса загрузки данных\n [DG_AT.SET_IS_LOADING]: (state, {\n payload\n }) => ({\n ...state,\n isLoading: payload,\n reload: payload === false ? false : state.reload\n }),\n //Установка флага необходимости обновления данных\n [DG_AT.SET_RELOAD]: (state, {\n payload\n }) => ({\n ...state,\n reload: payload.reload,\n ...(payload.resetPageNumber ? {\n dataGrid: {\n ...state.dataGrid,\n pageNumber: 1\n }\n } : {})\n }),\n //Обработчик по умолчанию\n DEFAULT: state => state\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n//Константы\n\n\n//Редьюсер состояния\nconst dataGridReducer = (state, action) => {\n //Подберём обработчик\n const handle = handlers[action.type] || handlers.DEFAULT;\n //Исполним его\n return handle(state, action);\n};\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_data_grid_reducer.js?"); /***/ }), @@ -500,7 +500,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 */ useP8PGantt: () => (/* binding */ useP8PGantt)\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/*\r\n Парус 8 - Панели мониторинга\r\n Хуки для диаграмм Ганта\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контекст взаимодействия с сервером\n //Вспомогательные функции\n\n//---------\n//Константы\n//---------\n\n//Константы - значения по умолчанию\nconst RESP_ARG_DEF = \"COUT\"; //Имя параметра, содержащего информацию о диаграмме ганта\nconst GANTT_NODE_NAME_DEF = \"XGANTT\"; //Наименование узла, содержащего информацию о диаграмме ганта\n\n//-----------\n//Тело модуля\n//-----------\n\n//Хук для P8PGantt\nconst useP8PGantt = ({\n stored,\n respArg = RESP_ARG_DEF,\n contentNodeName = GANTT_NODE_NAME_DEF,\n storedArgs = {},\n executeStoredArgs = {},\n allowDataLoad = () => true\n}) => {\n //Собственное состояние - диаграмма ганта\n const [gantt, setGantt] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n title: null,\n zoom: null,\n zoomBar: null,\n readOnly: false,\n readOnlyDates: false,\n readOnlyProgress: false,\n taskAttributes: [],\n tasks: [],\n taskColors: []\n });\n\n //Собственное состояние - признак загрузки данных\n const [isDataLoaded, setIsDataLoaded] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Собственное состояние - флаг загрузки\n const [isLoading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Собственное состояние - необходимость обновления данных\n const [reload, setReload] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true);\n\n //Собственное состояние - дополнительные агрументы\n const refStoredArgs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(storedArgs);\n\n //Собственное состояние - дополнительные параметры вызова процедуры\n const refExecuteStoredArgs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(executeStoredArgs);\n\n //Признак допустимости обновления данных\n const isAllowDataLoad = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n return allowDataLoad();\n }, [allowDataLoad]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n isRespErr\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__.BackEndCtx);\n\n //Загрузка данных диаграммы ганта с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n try {\n setLoading(true);\n const data = await executeStored({\n stored,\n args: {\n ...refStoredArgs.current\n },\n attributeValueProcessor: (name, val) => name == \"numb\" ? undefined : [\"start\", \"end\"].includes(name) ? (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.formatDateJSONDateOnly)(val) : val,\n respArg,\n ...refExecuteStoredArgs.current\n });\n setGantt(pv => ({\n ...pv,\n ...data[contentNodeName]\n }));\n //Устанавливаем признак загрузки данных с учетом возможных ошибок\n setIsDataLoaded(!isRespErr(data));\n } catch (e) {\n //Если произошла ошибка - данные не загружены\n setIsDataLoaded(false);\n } finally {\n //Сбрасываем признаки загрузки и перезагрузки данных\n setLoading(false);\n setReload(false);\n }\n }, [contentNodeName, executeStored, isRespErr, respArg, stored]);\n\n //При необходимости обновления диаграммы ганта\n const doReload = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n setReload(true);\n }, []);\n\n //Проверка изменений параметров\n const isArgsChanged = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((currentArgs, args) => {\n //Если дополнительные параметры изменились (и сейчас не происходит загрузка данных с сервера)\n return !isLoading && JSON.stringify(currentArgs) != JSON.stringify(args);\n }, [isLoading]);\n\n //При изменение дополнительных параметров процедуры\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если параметры изменились\n if (isArgsChanged(refStoredArgs.current, storedArgs)) {\n //Устанавливаем новые дополнительные параметры\n refStoredArgs.current = storedArgs;\n //При изменении дополнительных параметров необходимо перезагрузить данные\n setReload(true);\n }\n }, [storedArgs, isArgsChanged]);\n\n //При изменение дополнительных параметров вызова процедуры\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если параметры изменились\n if (isArgsChanged(refExecuteStoredArgs.current, executeStoredArgs)) {\n //Устанавливаем новые дополнительные параметры\n refExecuteStoredArgs.current = executeStoredArgs;\n //При изменении дополнительных параметров необходимо перезагрузить данные\n setReload(true);\n }\n }, [executeStoredArgs, isArgsChanged]);\n\n //При необходимости обновить данные диаграммы ганта\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если необходимо перезагрузить данные и это допустимо\n if (isAllowDataLoad && reload) {\n loadData();\n }\n }, [isAllowDataLoad, reload, loadData]);\n\n //Возвращаем данные диаграммы ганта\n return {\n gantt,\n isDataLoaded,\n isLoading,\n doReload\n };\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_gantt_hooks.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useP8PGantt: () => (/* binding */ useP8PGantt)\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/*\r\n Парус 8 - Панели мониторинга\r\n Хуки для диаграмм Ганта\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контекст взаимодействия с сервером\n //Вспомогательные функции\n\n//---------\n//Константы\n//---------\n\n//Константы - значения по умолчанию\nconst RESP_ARG_DEF = \"COUT\"; //Имя параметра, содержащего информацию о диаграмме ганта\nconst GANTT_NODE_NAME_DEF = \"XGANTT\"; //Наименование узла, содержащего информацию о диаграмме ганта\n\n//-----------\n//Тело модуля\n//-----------\n\n//Хук для P8PGantt\nconst useP8PGantt = ({\n stored,\n respArg = RESP_ARG_DEF,\n contentNodeName = GANTT_NODE_NAME_DEF,\n storedArgs = {},\n executeStoredArgs = {},\n allowDataLoad = () => true\n}) => {\n //Собственное состояние - диаграмма ганта\n const [gantt, setGantt] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n title: null,\n zoom: null,\n zoomBar: null,\n readOnly: false,\n readOnlyDates: false,\n readOnlyProgress: false,\n taskAttributes: [],\n tasks: [],\n taskColors: []\n });\n\n //Собственное состояние - признак загрузки данных\n const [isDataLoaded, setIsDataLoaded] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Собственное состояние - признак наличия бизнес-данных в загруженных\n const [isDataFound, setIsDataFound] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Собственное состояние - флаг загрузки\n const [isLoading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Собственное состояние - необходимость обновления данных\n const [reload, setReload] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true);\n\n //Собственное состояние - дополнительные агрументы\n const refStoredArgs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(storedArgs);\n\n //Собственное состояние - дополнительные параметры вызова процедуры\n const refExecuteStoredArgs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(executeStoredArgs);\n\n //Признак допустимости обновления данных\n const isAllowDataLoad = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n return allowDataLoad();\n }, [allowDataLoad]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n isRespErr\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__.BackEndCtx);\n\n //Загрузка данных диаграммы ганта с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n try {\n //Поднимаем флаг начала загрузки данных\n setLoading(true);\n //Получаем данные с сервера БД\n const data = await executeStored({\n stored,\n args: {\n ...refStoredArgs.current\n },\n attributeValueProcessor: (name, val) => name == \"numb\" ? undefined : [\"start\", \"end\"].includes(name) ? (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.formatDateJSONDateOnly)(val) : val,\n respArg,\n ...refExecuteStoredArgs.current\n });\n //Устанавливаем флаг наличия бизнес-данных\n setIsDataFound(data[contentNodeName]?.tasks?.length > 0);\n //Устанавливаем бизнес-данные\n setGantt(pv => ({\n ...pv,\n ...data[contentNodeName]\n }));\n //Устанавливаем признак загрузки данных с учетом возможных ошибок\n setIsDataLoaded(!isRespErr(data));\n } catch (e) {\n //Если произошла ошибка - данные не загружены\n setIsDataLoaded(false);\n } finally {\n //Сбрасываем признаки загрузки и перезагрузки данных\n setLoading(false);\n setReload(false);\n }\n }, [contentNodeName, executeStored, isRespErr, respArg, stored]);\n\n //При необходимости обновления диаграммы ганта\n const doReload = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n setReload(true);\n }, []);\n\n //Проверка изменений параметров\n const isArgsChanged = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((currentArgs, args) => {\n //Если дополнительные параметры изменились (и сейчас не происходит загрузка данных с сервера)\n return !isLoading && JSON.stringify(currentArgs) != JSON.stringify(args);\n }, [isLoading]);\n\n //При изменение дополнительных параметров процедуры\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если параметры изменились\n if (isArgsChanged(refStoredArgs.current, storedArgs)) {\n //Устанавливаем новые дополнительные параметры\n refStoredArgs.current = storedArgs;\n //При изменении дополнительных параметров необходимо перезагрузить данные\n setReload(true);\n }\n }, [storedArgs, isArgsChanged]);\n\n //При изменение дополнительных параметров вызова процедуры\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если параметры изменились\n if (isArgsChanged(refExecuteStoredArgs.current, executeStoredArgs)) {\n //Устанавливаем новые дополнительные параметры\n refExecuteStoredArgs.current = executeStoredArgs;\n //При изменении дополнительных параметров необходимо перезагрузить данные\n setReload(true);\n }\n }, [executeStoredArgs, isArgsChanged]);\n\n //При необходимости обновить данные диаграммы ганта\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если необходимо перезагрузить данные и это допустимо\n if (isAllowDataLoad && reload) {\n loadData();\n }\n }, [isAllowDataLoad, reload, loadData]);\n\n //Возвращаем данные диаграммы ганта\n return {\n gantt,\n isDataLoaded,\n isDataFound,\n isLoading,\n doReload\n };\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_gantt_hooks.js?"); /***/ }), @@ -522,7 +522,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 */ useP8PIndicator: () => (/* binding */ useP8PIndicator)\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 _p8p_indicator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./p8p_indicator */ \"./app/components/p8p_indicator.js\");\n/*\r\n Парус 8 - Панели мониторинга\r\n Хуки для индикаторов\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контекст взаимодействия с сервером\n\n\n//---------\n//Константы\n//---------\n\n//Константы - значения по умолчанию\nconst RESP_ARG_DEF = \"COUT\"; //Имя параметра, содержащего информацию об индикаторе\nconst INDICATOR_NODE_NAME_DEF = \"XINDICATOR\"; //Наименование узла, содержащего информацию об индикаторе\nconst ELEVATION_DEF = 3; //Высота парения\n\n//-----------\n//Тело модуля\n//-----------\n\n//Хук для P8PIndicator\nconst useP8PIndicator = ({\n stored,\n respArg = RESP_ARG_DEF,\n contentNodeName = INDICATOR_NODE_NAME_DEF,\n storedArgs = {},\n executeStoredArgs = {},\n allowDataLoad = () => true\n}) => {\n //Собственное состояние - индикатор\n const [indicator, setIndicator] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n caption: null,\n value: null,\n icon: null,\n state: _p8p_indicator__WEBPACK_IMPORTED_MODULE_2__.P8P_INDICATOR_STATE.UNDEFINED,\n square: false,\n elevation: ELEVATION_DEF,\n variant: _p8p_indicator__WEBPACK_IMPORTED_MODULE_2__.P8P_INDICATOR_VARIANT.ELEVATION,\n hint: null,\n backgroundColor: null,\n color: null\n });\n\n //Собственное состояние - признак загрузки данных\n const [isDataLoaded, setIsDataLoaded] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Собственное состояние - флаг загрузки\n const [isLoading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Собственное состояние - необходимость обновления данных\n const [reload, setReload] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true);\n\n //Собственное состояние - дополнительные агрументы\n const refStoredArgs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(storedArgs);\n\n //Собственное состояние - дополнительные параметры вызова процедуры\n const refExecuteStoredArgs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(executeStoredArgs);\n\n //Признак допустимости обновления данных\n const isAllowDataLoad = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n return allowDataLoad();\n }, [allowDataLoad]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n isRespErr\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__.BackEndCtx);\n\n //Загрузка данных индикатора с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n try {\n setLoading(true);\n const data = await executeStored({\n stored,\n respArg,\n args: {\n ...refStoredArgs.current\n },\n ...refExecuteStoredArgs.current\n });\n setIndicator(pv => ({\n ...pv,\n ...data[contentNodeName]\n }));\n //Устанавливаем признак загрузки данных с учетом возможных ошибок\n setIsDataLoaded(!isRespErr(data));\n } catch (e) {\n //Если произошла ошибка - данные не загружены\n setIsDataLoaded(false);\n } finally {\n //Сбрасываем признаки загрузки и перезагрузки данных\n setLoading(false);\n setReload(false);\n }\n }, [contentNodeName, executeStored, isRespErr, respArg, stored]);\n\n //При необходимости обновления индикатора\n const doReload = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n setReload(true);\n }, []);\n\n //Проверка изменений параметров\n const isArgsChanged = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((currentArgs, args) => {\n //Если дополнительные параметры изменились (и сейчас не происходит загрузка данных с сервера)\n return !isLoading && JSON.stringify(currentArgs) != JSON.stringify(args);\n }, [isLoading]);\n\n //При изменение дополнительных параметров процедуры\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если параметры изменились\n if (isArgsChanged(refStoredArgs.current, storedArgs)) {\n //Устанавливаем новые дополнительные параметры\n refStoredArgs.current = storedArgs;\n //При изменении дополнительных параметров необходимо перезагрузить данные\n setReload(true);\n }\n }, [storedArgs, isArgsChanged]);\n\n //При изменение дополнительных параметров вызова процедуры\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если параметры изменились\n if (isArgsChanged(refExecuteStoredArgs.current, executeStoredArgs)) {\n //Устанавливаем новые дополнительные параметры\n refExecuteStoredArgs.current = executeStoredArgs;\n //При изменении дополнительных параметров необходимо перезагрузить данные\n setReload(true);\n }\n }, [executeStoredArgs, isArgsChanged]);\n\n //При необходимости обновить данные индикатора\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если необходимо перезагрузить данные и это допустимо\n if (isAllowDataLoad && reload) {\n loadData();\n }\n }, [isAllowDataLoad, reload, loadData]);\n\n //Возвращаем данные индикатора\n return {\n indicator,\n isDataLoaded,\n isLoading,\n doReload\n };\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_indicator_hooks.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useP8PIndicator: () => (/* binding */ useP8PIndicator)\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 _p8p_indicator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./p8p_indicator */ \"./app/components/p8p_indicator.js\");\n/*\r\n Парус 8 - Панели мониторинга\r\n Хуки для индикаторов\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контекст взаимодействия с сервером\n\n\n//---------\n//Константы\n//---------\n\n//Константы - значения по умолчанию\nconst RESP_ARG_DEF = \"COUT\"; //Имя параметра, содержащего информацию об индикаторе\nconst INDICATOR_NODE_NAME_DEF = \"XINDICATOR\"; //Наименование узла, содержащего информацию об индикаторе\nconst ELEVATION_DEF = 3; //Высота парения\n\n//-----------\n//Тело модуля\n//-----------\n\n//Хук для P8PIndicator\nconst useP8PIndicator = ({\n stored,\n respArg = RESP_ARG_DEF,\n contentNodeName = INDICATOR_NODE_NAME_DEF,\n storedArgs = {},\n executeStoredArgs = {},\n allowDataLoad = () => true\n}) => {\n //Собственное состояние - индикатор\n const [indicator, setIndicator] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n caption: null,\n value: null,\n icon: null,\n state: _p8p_indicator__WEBPACK_IMPORTED_MODULE_2__.P8P_INDICATOR_STATE.UNDEFINED,\n square: false,\n elevation: ELEVATION_DEF,\n variant: _p8p_indicator__WEBPACK_IMPORTED_MODULE_2__.P8P_INDICATOR_VARIANT.ELEVATION,\n hint: null,\n backgroundColor: null,\n color: null\n });\n\n //Собственное состояние - признак загрузки данных\n const [isDataLoaded, setIsDataLoaded] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Собственное состояние - признак наличия бизнес-данных в загруженных\n const [isDataFound, setIsDataFound] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Собственное состояние - флаг загрузки\n const [isLoading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Собственное состояние - необходимость обновления данных\n const [reload, setReload] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true);\n\n //Собственное состояние - дополнительные агрументы\n const refStoredArgs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(storedArgs);\n\n //Собственное состояние - дополнительные параметры вызова процедуры\n const refExecuteStoredArgs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(executeStoredArgs);\n\n //Признак допустимости обновления данных\n const isAllowDataLoad = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n return allowDataLoad();\n }, [allowDataLoad]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n isRespErr\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__.BackEndCtx);\n\n //Загрузка данных индикатора с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n try {\n //Поднимаем флаг начала загрузки данных\n setLoading(true);\n //Получаем данные с сервера БД\n const data = await executeStored({\n stored,\n respArg,\n args: {\n ...refStoredArgs.current\n },\n ...refExecuteStoredArgs.current\n });\n //Устанавливаем флаг наличия бизнес-данных\n setIsDataFound(data[contentNodeName]?.caption && data[contentNodeName]?.value != undefined);\n //Устанавливаем бизнес-данные\n setIndicator(pv => ({\n ...pv,\n ...data[contentNodeName]\n }));\n //Устанавливаем признак загрузки данных с учетом возможных ошибок\n setIsDataLoaded(!isRespErr(data));\n } catch (e) {\n //Если произошла ошибка - данные не загружены\n setIsDataLoaded(false);\n } finally {\n //Сбрасываем признаки загрузки и перезагрузки данных\n setLoading(false);\n setReload(false);\n }\n }, [contentNodeName, executeStored, isRespErr, respArg, stored]);\n\n //При необходимости обновления индикатора\n const doReload = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n setReload(true);\n }, []);\n\n //Проверка изменений параметров\n const isArgsChanged = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((currentArgs, args) => {\n //Если дополнительные параметры изменились (и сейчас не происходит загрузка данных с сервера)\n return !isLoading && JSON.stringify(currentArgs) != JSON.stringify(args);\n }, [isLoading]);\n\n //При изменение дополнительных параметров процедуры\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если параметры изменились\n if (isArgsChanged(refStoredArgs.current, storedArgs)) {\n //Устанавливаем новые дополнительные параметры\n refStoredArgs.current = storedArgs;\n //При изменении дополнительных параметров необходимо перезагрузить данные\n setReload(true);\n }\n }, [storedArgs, isArgsChanged]);\n\n //При изменение дополнительных параметров вызова процедуры\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если параметры изменились\n if (isArgsChanged(refExecuteStoredArgs.current, executeStoredArgs)) {\n //Устанавливаем новые дополнительные параметры\n refExecuteStoredArgs.current = executeStoredArgs;\n //При изменении дополнительных параметров необходимо перезагрузить данные\n setReload(true);\n }\n }, [executeStoredArgs, isArgsChanged]);\n\n //При необходимости обновить данные индикатора\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если необходимо перезагрузить данные и это допустимо\n if (isAllowDataLoad && reload) {\n loadData();\n }\n }, [isAllowDataLoad, reload, loadData]);\n\n //Возвращаем данные индикатора\n return {\n indicator,\n isDataLoaded,\n isDataFound,\n isLoading,\n doReload\n };\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_indicator_hooks.js?"); /***/ }),