diff --git a/app/components/p8p_gantt.js b/app/components/p8p_gantt.js index 3f39842..83ce867 100644 --- a/app/components/p8p_gantt.js +++ b/app/components/p8p_gantt.js @@ -59,7 +59,8 @@ const P8P_GANTT_TASK_SHAPE = PropTypes.shape({ readOnlyDates: PropTypes.bool, readOnlyProgress: PropTypes.bool, bgColor: PropTypes.string, - textColor: PropTypes.string + textColor: PropTypes.string, + bgProgressColor: PropTypes.string }); //Структура динамического атрибута задачи @@ -72,6 +73,7 @@ const P8P_GANTT_TASK_ATTRIBUTE_SHAPE = PropTypes.shape({ const P8P_GANTT_TASK_COLOR_SHAPE = PropTypes.shape({ bgColor: PropTypes.string, textColor: PropTypes.string, + bgProgressColor: PropTypes.string, desc: PropTypes.string.isRequired }); @@ -126,14 +128,24 @@ const P8PGanttTaskEditor = ({ //Описание легенды для задачи let legend = null; if (Array.isArray(taskColors)) { - const colorDesc = taskColors.find(color => task.bgColor === color.bgColor && task.textColor === color.textColor); + const colorDesc = taskColors.find( + color => task.bgColor === color.bgColor && task.textColor === color.textColor && task.bgProgressColor === color.bgProgressColor + ); if (colorDesc) legend = ( { + const filteredPlans = React.useMemo(() => { + return plans.filter(project => project.SDOC_INFO.toLowerCase().includes(filter)); + }, [plans, filter]); + + return filteredPlans; +}; diff --git a/app/panels/mech_rec_cost_prod_plans/index.js b/app/panels/mech_rec_cost_prod_plans/index.js new file mode 100644 index 0000000..026a81c --- /dev/null +++ b/app/panels/mech_rec_cost_prod_plans/index.js @@ -0,0 +1,16 @@ +/* + Парус 8 - Панели мониторинга - ПУП - Производственная программа + Панель мониторинга: Точка входа +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import { MechRecCostProdPlans } from "./mech_rec_cost_prod_plans"; //Корневая панель производственной программы + +//---------------- +//Интерфейс модуля +//---------------- + +export const RootClass = MechRecCostProdPlans; diff --git a/app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js b/app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js new file mode 100644 index 0000000..025db4f --- /dev/null +++ b/app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js @@ -0,0 +1,332 @@ +/* + Парус 8 - Панели мониторинга - ПУП - Производственная программа + Панель мониторинга: Корневая панель производственной программы +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import React, { useContext, useState, useCallback, useEffect } from "react"; //Классы React +import PropTypes from "prop-types"; //Контроль свойств компонента +import { Drawer, Fab, Box, List, ListItemButton, ListItemText, Typography, Grid, TextField, Select, MenuItem, InputLabel } from "@mui/material"; //Интерфейсные элементы +import { BackEndСtx } from "../../context/backend"; //Контекст взаимодействия с сервером +import { MessagingСtx } from "../../context/messaging"; //Контекст сообщений +import { ApplicationСtx } from "../../context/application"; //Контекст приложения +import { P8P_GANTT_CONFIG_PROPS } from "../../config_wrapper"; //Подключение компонентов к настройкам приложения +import { P8PGantt } from "../../components/p8p_gantt"; //Диаграмма Ганта +import { formatDateJSONDateOnly } from "../../core/utils"; //Вспомогательные функции +import { useFilteredPlans } from "./hooks"; //Вспомогательные хуки +import { XMLParser } from "fast-xml-parser"; + +//--------- +//Константы +//--------- + +//Высота диаграммы Ганта +const GANTT_HEIGHT = "650px"; + +//Ширина диаграммы Ганта +const GANTT_WIDTH = "98vw"; + +//Стили +const STYLES = { + PROJECTS_FINDER: { marginTop: "10px", marginLeft: "10px", width: "93%" }, + PROJECTS_LIST_ITEM_PRIMARY: { wordWrap: "break-word" }, + PROJECTS_LIST_ITEM_SECONDARY: { wordWrap: "break-word", fontSize: "0.5rem", textTransform: "uppercase" }, + PROJECTS_LIST_ITEM_SECONDARY_NOJOBS: { color: "red" }, + PROJECTS_LIST_ITEM_SECONDARY_NOEDIT: { color: "gray" }, + PROJECTS_LIST_ITEM_SECONDARY_CHANGED: { color: "green" }, + PROJECTS_BUTTON: { position: "absolute" }, + PROJECTS_DRAWER: { + minWidth: "250px", + display: "inline-block", + flexShrink: 0, + [`& .MuiDrawer-paper`]: { minWidth: "250px", display: "inline-block", boxSizing: "border-box" } + }, + GANTT_CONTAINER: { height: GANTT_HEIGHT, width: GANTT_WIDTH }, + GANTT_TITLE: { paddingLeft: "100px", paddingRight: "120px" }, + PERIODS_BUTTON: { position: "absolute", right: "20px" }, + PERIODS_DRAWER: { width: "1000px", flexShrink: 0, [`& .MuiDrawer-paper`]: { width: "1000px", boxSizing: "border-box" } } +}; + +//Список проектов +const ProjectsList = ({ plans = [], selectedPlan, filter, setFilter, onClick } = {}) => { + //Генерация содержимого + return ( +
+ { + setFilter(event.target.value); + }} + > + + {plans.map(p => ( + (onClick ? onClick(p) : null)}> + {p.SDOC_INFO}} + secondary={ + + } + /> + + ))} + +
+ ); +}; + +//Контроль свойств - Список проектов +ProjectsList.propTypes = { + plans: PropTypes.array, + selectedPlan: PropTypes.number, + onClick: PropTypes.func, + filter: PropTypes.string, + setFilter: PropTypes.func +}; + +//----------- +//Тело модуля +//----------- + +//Разбор XML +const parseXML = (xmlDoc, attributeValueProcessor) => { + return new Promise((resolve, reject) => { + try { + let opts = { + ignoreDeclaration: true, + ignoreAttributes: false, + parseAttributeValue: true, + attributeNamePrefix: "" + }; + if (attributeValueProcessor) opts.attributeValueProcessor = attributeValueProcessor; + const parser = new XMLParser(opts); + const data = parser.parse(xmlDoc); + resolve(data.XDATA); + } catch (e) { + reject(e); + } + }); +}; + +//Корневая панель производственной программы +const MechRecCostProdPlans = () => { + //Собственное состояние + let [state, setState] = useState({ + init: false, + showPlanList: false, + plans: [], + plansLoaded: false, + selectedPlanSpecsLoaded: false, + selectedPlan: null, + selectedPlanMaxLevel: null, + selectedPlanLevel: null, + selectedPlanMenuItems: null, + selectedPlanGanttDef: {}, + selectedPlanSpecs: [] + }); + + const [filter, setFilter] = useState(""); + + const filteredPlans = useFilteredPlans(state.plans, filter); + + //Подключение к контексту приложения + const { pOnlineShowDocument } = useContext(ApplicationСtx); + + //Подключение к контексту сообщений + const { InlineMsgInfo } = useContext(MessagingСtx); + + //Подключение к контексту взаимодействия с сервером + const { executeStored } = useContext(BackEndСtx); + + // Инициализация планов + const initPlans = useCallback(async () => { + if (!state.init) { + const data = await executeStored({ + stored: "PKG_P8PANELS_MECHREC.PRODPLAN_INIT", + args: {}, + respArg: "COUT" + }); + setState(pv => ({ + ...pv, + init: true, + plans: [...(data?.XFCPRODPLANS || [])], + plansLoaded: true + })); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [state.init, executeStored]); + + //Выбор плана + const selectPlan = project => { + setState(pv => ({ + ...pv, + selectedPlan: project, + selectedPlanSpecsLoaded: false, + selectedPlanMaxLevel: null, + selectedPlanLevel: null, + selectedPlanMenuItems: null, + selectedPlanSpecs: [], + selectedPlanGanttDef: {}, + showPlanList: false + })); + }; + + //Сброс выбора плана + const unselectPlan = () => + setState(pv => ({ + ...pv, + selectedPlanSpecsLoaded: false, + selectedPlan: null, + selectedPlanMaxLevel: null, + selectedPlanLevel: null, + selectedPlanMenuItems: null, + selectedPlanSpecs: [], + selectedPlanGanttDef: {}, + showPlanList: false + })); + + //Загрузка списка спецификаций плана + const loadPlanSpecs = useCallback( + async (level = null) => { + const data = await executeStored({ + stored: "PKG_P8PANELS_MECHREC.FCPRODPLANSP_GET", + args: { NFCPRODPLAN: state.selectedPlan, NLEVEL: level } + }); + let doc = await parseXML(data.COUT, (name, val) => + name == "numb" ? undefined : ["start", "end"].includes(name) ? formatDateJSONDateOnly(val) : val + ); + console.log(doc.XGANTT_DEF); + console.log(doc.XGANTT_TASKS); + setState(pv => ({ + ...pv, + selectedPlanMaxLevel: data.NMAX_LEVEL, + selectedPlanLevel: level || level === 0 ? level : data.NMAX_LEVEL, + selectedPlanMenuItems: state.selectedPlanMenuItems + ? state.selectedPlanMenuItems + : [...Array(data.NMAX_LEVEL).keys()].map(el => el + 1), + selectedPlanSpecsLoaded: true, + selectedPlanGanttDef: doc.XGANTT_DEF ? { ...doc.XGANTT_DEF } : {}, + selectedPlanSpecs: [...(doc?.XGANTT_TASKS || [])] + })); + }, + // eslint-disable-next-line react-hooks/exhaustive-deps + [executeStored, state.ident, state.selectedPlan] + ); + + //Обработка нажатия на элемент в списке планов + const handleProjectClick = project => { + if (state.selectedPlan != project.NRN) selectPlan(project.NRN); + else unselectPlan(); + }; + + //Отработка нажатия на заголовок плана + const handleTitleClick = () => { + state.selectedPlan ? pOnlineShowDocument({ unitCode: "CostProductPlans", document: state.selectedPlan }) : null; + }; + + //При подключении компонента к странице + useEffect(() => { + initPlans(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + //При смене выбранного плана + useEffect(() => { + if (state.selectedPlan) loadPlanSpecs(); + }, [state.selectedPlan, loadPlanSpecs]); + + //Выбор уровня + const handleChangeSelectList = selectedLevel => { + loadPlanSpecs(selectedLevel); + setState(pv => ({ ...pv, selectedPlanLevel: selectedLevel })); + }; + //Генерация содержимого + return ( + + setState(pv => ({ ...pv, showPlanList: !pv.showPlanList }))}> + Планы + + setState(pv => ({ ...pv, showPlanList: false }))} + sx={STYLES.PROJECTS_DRAWER} + > + + + {state.init == true ? ( + + + {state.selectedPlanSpecsLoaded ? ( + state.selectedPlanSpecs.length === 0 ? ( + + ) : ( + + {state.selectedPlanMaxLevel ? ( + + Уровень + + + ) : null} + + + ) + ) : !state.selectedPlan ? ( + + ) : null} + + + ) : null} + + ); +}; + +//---------------- +//Интерфейс модуля +//---------------- + +export { MechRecCostProdPlans }; diff --git a/db/PKG_P8PANELS_MECHREC.pck b/db/PKG_P8PANELS_MECHREC.pck new file mode 100644 index 0000000..1e01d67 --- /dev/null +++ b/db/PKG_P8PANELS_MECHREC.pck @@ -0,0 +1,426 @@ +create or replace package PKG_P8PANELS_MECHREC as + + /* Получение списка спецификаций планов и отчетов производства изделий для диаграммы Ганта */ + procedure FCPRODPLANSP_GET + ( + NFCPRODPLAN in number, -- Рег. номер родителя + NLEVEL in number := null, -- Уровень отбора + COUT out clob, -- Список проектов + NMAX_LEVEL out number -- Максимальный уровень иерархии + ); + + /* Инициализация планов и отчетов производства изделий */ + procedure PRODPLAN_INIT + ( + COUT out clob -- Список планов и отчетов производства изделий + ); + +end PKG_P8PANELS_MECHREC; +/ +create or replace package body PKG_P8PANELS_MECHREC as + + /* Константы - цвета отображения */ + SBG_COLOR_RED constant PKG_STD.TSTRING := 'red'; -- Цвет заливки красный (Дефицит запуска != 0) + SBG_COLOR_YELLOW constant PKG_STD.TSTRING := '#e0db44'; -- Цвет заливки желтый (Дефицит» запуска = 0 и Выпуск факт = 0) + SBG_COLOR_GREEN constant PKG_STD.TSTRING := 'lightgreen'; -- Цвет заливки зеленый (Дефицит выпуска = 0) + SBG_COLOR_BLACK constant PKG_STD.TSTRING := 'black'; -- Цвет заливки черный (Нет дат и связей) + STEXT_COLOR_ORANGE constant PKG_STD.TSTRING := '#FF8C00'; -- Цвет текста для черной заливки (оранжевый) + + /* Константы - параметры отборов планов */ + NFCPRODPLAN_CATEGORY constant PKG_STD.TNUMBER := 1; -- Категория планов "Производственная программа" + NFCPRODPLAN_STATUS constant PKG_STD.TNUMBER := 2; -- Статус планов "Утвержден" + SFCPRODPLAN_TYPE constant PKG_STD.TSTRING := 'План'; -- Тип планов (мнемокод состояния) + + /* Константы - дополнительные атрибуты */ + STASK_ATTR_DEFRESLIZ constant PKG_STD.TSTRING := 'defresliz'; -- Дефицит запуска + STASK_ATTR_REL_FACT constant PKG_STD.TSTRING := 'rel_fact'; -- Выпуск факт + STASK_ATTR_DEFSTART constant PKG_STD.TSTRING := 'defstart'; -- Дефицит выпуска + STASK_ATTR_LEVEL constant PKG_STD.TSTRING := 'level'; -- Уровень + + /* Формирование характеристик спецификации в Ганте */ + procedure MAKE_GANT_ITEM + ( + NDEFRESLIZ in number, -- Дефицит запуска + NREL_FACT in number, -- Выпуск факт + NDEFSTART in number, -- Дефицит выпуска + STASK_BG_COLOR out varchar2, -- Цвет заливки спецификации + STASK_BG_PROGRESS_COLOR out varchar2, -- Цвет заливки прогресса спецификации + NTASK_PROGRESS out number -- Прогресс спецификации + ) + is + begin + /* Если дефицит запуска <> 0 */ + if (NDEFRESLIZ <> 0) then + /* Полностью красный */ + STASK_BG_COLOR := SBG_COLOR_RED; + STASK_BG_PROGRESS_COLOR := null; + NTASK_PROGRESS := null; + else + /* Если дефицит выпуска = 0 */ + if (NDEFSTART = 0) then + /* Полностью зеленый */ + STASK_BG_COLOR := SBG_COLOR_GREEN; + STASK_BG_PROGRESS_COLOR := null; + NTASK_PROGRESS := null; + else + /* Если дефицит запуска = 0 и выпуск факт = 0 */ + if ((NDEFRESLIZ = 0) and (NREL_FACT = 0)) then + /* Полностью жёлтый */ + STASK_BG_COLOR := SBG_COLOR_YELLOW; + STASK_BG_PROGRESS_COLOR := null; + NTASK_PROGRESS := null; + end if; + /* Если дефицит запуска = 0 и выпуск факт <> 0 */ + if ((NDEFRESLIZ = 0) and (NREL_FACT <> 0)) then + /* Частично зелёный, прогресс жёлтый */ + STASK_BG_COLOR := SBG_COLOR_GREEN; + STASK_BG_PROGRESS_COLOR := SBG_COLOR_YELLOW; + NTASK_PROGRESS := 50; + end if; + end if; + end if; + end MAKE_GANT_ITEM; + + /* Считывание заголовка документа */ + function TITLE_GET + ( + NRN in number -- Рег. номер плана и отчета производства изделий + ) return varchar2 -- Заголовок для отображения + is + SRESULT PKG_STD.TSTRING; -- Заголовок для отображения + SDOC_INFO PKG_STD.TSTRING; -- Информация о документе + SJURPERSONS_CODE PKG_STD.TSTRING; -- Мнемокод принадлежности + SINS_DEPARTMENT_CODE PKG_STD.TSTRING; -- Мнемокод подразделения + begin + /* Считываем информацию из плана */ + begin + select D.DOCCODE || ', ' || trim(T.PREFIX) || '/' || trim(T.NUMB) || ', от ' || TO_CHAR(T.DOCDATE, 'dd.mm.yyyy') DOC_INFO, + J.CODE, + SD.CODE + into SDOC_INFO, + SJURPERSONS_CODE, + SINS_DEPARTMENT_CODE + from FCPRODPLAN T, + DOCTYPES D, + JURPERSONS J, + INS_DEPARTMENT SD + where T.RN = NRN + and D.RN = T.DOCTYPE + and J.RN = T.JUR_PERS + and SD.RN = T.SUBDIV; + exception + when others then + return 'Нет информации.'; + end; + /* Формируем заголовок */ + SRESULT := 'План и отчет производства изделия "' || SDOC_INFO || '", принадлежность "' || SJURPERSONS_CODE || + '", подразделение "' || SINS_DEPARTMENT_CODE || '"'; + /* Возвращаем результат */ + return SRESULT; + end TITLE_GET; + + /* Считывание максимального уровня иерархии плана */ + function PRODPLAN_MAX_LEVEL_GET + ( + NPRODPLAN in number -- Рег. номер плана + ) return number -- Максимальный уровень иерархии + is + NRESULT PKG_STD.TNUMBER; -- Максимальный уровень иерархии + begin + /* Считываем максимальный уровень */ + begin + select max(level) + into NRESULT + from (select T.RN, + T.UP_LEVEL + from FCPRODPLANSP T + where T.PRN = NPRODPLAN) TMP + connect by prior TMP.RN = TMP.UP_LEVEL + start with TMP.UP_LEVEL is null; + exception + when others then + NRESULT := null; + end; + /* Возвращаем результат */ + return NRESULT; + end PRODPLAN_MAX_LEVEL_GET; + + /* Определение дат спецификации плана */ + procedure FCPRODPLANSP_DATES_GET + ( + DREP_DATE in date, -- Дата запуска спецификации + DREP_DATE_TO in date, -- Дата выпуска спецификации + DINCL_DATE in date, -- Дата включения в план спецификации + NHAVE_LINK in number := 0, -- Наличие связей с "Маршрутный лист" или "Приход из подразделения" + DDATE_FROM out date, -- Итоговая дата запуска спецификации + DDATE_TO out date, -- Итоговая дата выпуска спецификации + STASK_BG_COLOR out varchar2, -- Цвет элемента (черный, если даты не заданы и нет связи, иначе null) + STASK_TEXT_COLOR out varchar2, -- Цвет текста элемента (хаки, если даты не заданы и нет связи, иначе null) + NTASK_PROGRESS out number -- Прогресс элемента (проинициализирует null, если даты не заданы и нет связи) + ) + is + begin + /* Проициниализируем цвет и прогресс */ + STASK_BG_COLOR := null; + NTASK_PROGRESS := null; + STASK_TEXT_COLOR := null; + /* Если даты запуска и выпуска пусты */ + if ((DREP_DATE is null) and (DREP_DATE_TO is null)) then + /* Указываем дату включения в план */ + DDATE_FROM := DINCL_DATE; + DDATE_TO := DINCL_DATE; + else + /* Указываем даты исходя из дат запуска/выпуска */ + DDATE_FROM := COALESCE(DREP_DATE, DREP_DATE_TO); + DDATE_TO := COALESCE(DREP_DATE_TO, DREP_DATE); + end if; + /* Если одна из дат не указана */ + if ((DREP_DATE is null) or (DREP_DATE_TO is null)) then + /* Если спецификация также не имеет связей */ + if (NHAVE_LINK = 0) then + /* Закрашиваем в черный */ + STASK_BG_COLOR := SBG_COLOR_BLACK; + STASK_TEXT_COLOR := STEXT_COLOR_ORANGE; + NTASK_PROGRESS := null; + end if; + end if; + end FCPRODPLANSP_DATES_GET; + + /* Получение списка спецификаций планов и отчетов производства изделий для диаграммы Ганта */ + procedure FCPRODPLANSP_GET + ( + NFCPRODPLAN in number, -- Рег. номер родителя + NLEVEL in number := null, -- Уровень отбора + COUT out clob, -- Список проектов + NMAX_LEVEL out number -- Максимальный уровень иерархии + ) + is + /* Переменные */ + RG PKG_P8PANELS_VISUAL.TGANTT; -- Описание диаграммы Ганта + RGT PKG_P8PANELS_VISUAL.TGANTT_TASK; -- Описание задачи для диаграммы + BREAD_ONLY_DATES boolean := false; -- Флаг доступности дат проекта только для чтения + STASK_BG_COLOR PKG_STD.TSTRING; -- Цвет заливки задачи + STASK_TEXT_COLOR PKG_STD.TSTRING; -- Цвет текста задачи + STASK_BG_PROGRESS_COLOR PKG_STD.TSTRING; -- Цвет заливки прогресса задачи + NTASK_PROGRESS PKG_STD.TNUMBER; -- Прогресс выполнения задачи + DDATE_FROM PKG_STD.TLDATE; -- Дата запуска спецификации + DDATE_TO PKG_STD.TLDATE; -- Дата выпуска спецификации + begin + /* Инициализируем диаграмму Ганта */ + RG := PKG_P8PANELS_VISUAL.TGANTT_MAKE(STITLE => TITLE_GET(NRN => NFCPRODPLAN), + NZOOM => PKG_P8PANELS_VISUAL.NGANTT_ZOOM_DAY, + BREAD_ONLY_DATES => BREAD_ONLY_DATES, + BREAD_ONLY_PROGRESS => true); + /* Добавим динамические атрибуты к спецификациям */ + PKG_P8PANELS_VISUAL.TGANTT_ADD_TASK_ATTR(RGANTT => RG, + SNAME => STASK_ATTR_DEFRESLIZ, + SCAPTION => 'Дефицит запуска'); + PKG_P8PANELS_VISUAL.TGANTT_ADD_TASK_ATTR(RGANTT => RG, + SNAME => STASK_ATTR_REL_FACT, + SCAPTION => 'Выпуск факт'); + PKG_P8PANELS_VISUAL.TGANTT_ADD_TASK_ATTR(RGANTT => RG, + SNAME => STASK_ATTR_DEFSTART, + SCAPTION => 'Дефицит выпуска'); + PKG_P8PANELS_VISUAL.TGANTT_ADD_TASK_ATTR(RGANTT => RG, SNAME => STASK_ATTR_LEVEL, SCAPTION => 'Уровень'); + /* Добавим описание цветов */ + PKG_P8PANELS_VISUAL.TGANTT_ADD_TASK_COLOR(RGANTT => RG, + SBG_COLOR => SBG_COLOR_RED, + SDESC => 'Для спецификаций планов и отчетов производства изделий с «Дефицит запуска» != 0.'); + PKG_P8PANELS_VISUAL.TGANTT_ADD_TASK_COLOR(RGANTT => RG, + SBG_COLOR => SBG_COLOR_YELLOW, + SDESC => 'Для спецификаций планов и отчетов производства изделий с «Дефицит запуска» = 0 и «Выпуск факт» = 0.'); + PKG_P8PANELS_VISUAL.TGANTT_ADD_TASK_COLOR(RGANTT => RG, + SBG_COLOR => SBG_COLOR_GREEN, + SDESC => 'Для спецификаций планов и отчетов производства изделий с «Дефицит выпуска» = 0.'); + PKG_P8PANELS_VISUAL.TGANTT_ADD_TASK_COLOR(RGANTT => RG, + SBG_COLOR => SBG_COLOR_GREEN, + SBG_PROGRESS_COLOR => SBG_COLOR_YELLOW, + SDESC => 'Для спецификаций планов и отчетов производства изделий с «Дефицит запуска» = 0 и «Выпуск факт» != 0. '); + PKG_P8PANELS_VISUAL.TGANTT_ADD_TASK_COLOR(RGANTT => RG, + SBG_COLOR => SBG_COLOR_BLACK, + STEXT_COLOR => STEXT_COLOR_ORANGE, + SDESC => 'Для спецификаций планов и отчетов производства изделий с пустыми «Дата запуска» и «Дата выпуска» и не имеющих связей с разделами «Маршрутный лист» или «Приход из подразделения».'); + /* Определяем максимальный уровень иерархии */ + NMAX_LEVEL := PRODPLAN_MAX_LEVEL_GET(NPRODPLAN => NFCPRODPLAN); + /* Цикл по спецификации плана с учетом иерархии */ + for REC in (select TMP.*, + level + from (select T.RN, + T.REP_DATE, + T.REP_DATE_TO, + T.INCL_DATE, + T.ROUTE, + D.NOMEN_NAME, + (T.QUANT_REST - T.START_FACT) DEFRESLIZ, + T.REL_FACT, + (T.MAIN_QUANT - T.REL_FACT) DEFSTART, + (select 1 + from DUAL + where exists + (select null + from DOCLINKS L + where L.IN_DOCUMENT = T.RN + and L.IN_UNITCODE = 'CostProductPlansSpecs' + and (L.OUT_UNITCODE = 'CostRouteLists' or L.OUT_UNITCODE = 'IncomFromDeps') + and ROWNUM = 1)) HAVE_LINK, + T.UP_LEVEL + from FCPRODPLANSP T, + FCMATRESOURCE FM, + DICNOMNS D + where T.PRN = NFCPRODPLAN + and ((T.REP_DATE is not null) or (T.REP_DATE_TO is not null) or (T.INCL_DATE is not null)) + and FM.RN = T.MATRES + and D.RN = FM.NOMENCLATURE) TMP + where ((NLEVEL is null) or ((NLEVEL is not null) and (level <= NLEVEL))) + connect by prior TMP.RN = TMP.UP_LEVEL + start with TMP.UP_LEVEL is null) + loop + /* Инициализируем даты и цвет (если необходимо) */ + FCPRODPLANSP_DATES_GET(DREP_DATE => REC.REP_DATE, + DREP_DATE_TO => REC.REP_DATE_TO, + DINCL_DATE => REC.INCL_DATE, + NHAVE_LINK => COALESCE(REC.HAVE_LINK, 0), + DDATE_FROM => DDATE_FROM, + DDATE_TO => DDATE_TO, + STASK_BG_COLOR => STASK_BG_COLOR, + STASK_TEXT_COLOR => STASK_TEXT_COLOR, + NTASK_PROGRESS => NTASK_PROGRESS); + /* Если цвет изначально не указан и требуется анализирование */ + if (STASK_BG_COLOR is null) then + /* Формирование характеристик элемента ганта */ + MAKE_GANT_ITEM(NDEFRESLIZ => REC.DEFRESLIZ, + NREL_FACT => REC.REL_FACT, + NDEFSTART => REC.DEFSTART, + STASK_BG_COLOR => STASK_BG_COLOR, + STASK_BG_PROGRESS_COLOR => STASK_BG_PROGRESS_COLOR, + NTASK_PROGRESS => NTASK_PROGRESS); + end if; + /* Сформируем основную спецификацию */ + RGT := PKG_P8PANELS_VISUAL.TGANTT_TASK_MAKE(NRN => REC.RN, + SNUMB => COALESCE(REC.ROUTE, 'Отсутствует'), + SCAPTION => REC.NOMEN_NAME, + SNAME => REC.NOMEN_NAME, + DSTART => DDATE_FROM, + DEND => DDATE_TO, + NPROGRESS => NTASK_PROGRESS, + SBG_COLOR => STASK_BG_COLOR, + STEXT_COLOR => STASK_TEXT_COLOR, + SBG_PROGRESS_COLOR => STASK_BG_PROGRESS_COLOR, + BREAD_ONLY => true, + BREAD_ONLY_DATES => true, + BREAD_ONLY_PROGRESS => true); + /* Добавим доп. атрибуты */ + PKG_P8PANELS_VISUAL.TGANTT_TASK_ADD_ATTR_VAL(RGANTT => RG, + RTASK => RGT, + SNAME => STASK_ATTR_DEFRESLIZ, + SVALUE => TO_CHAR(REC.DEFRESLIZ), + BCLEAR => true); + PKG_P8PANELS_VISUAL.TGANTT_TASK_ADD_ATTR_VAL(RGANTT => RG, + RTASK => RGT, + SNAME => STASK_ATTR_REL_FACT, + SVALUE => TO_CHAR(REC.REL_FACT)); + PKG_P8PANELS_VISUAL.TGANTT_TASK_ADD_ATTR_VAL(RGANTT => RG, + RTASK => RGT, + SNAME => STASK_ATTR_DEFSTART, + SVALUE => TO_CHAR(REC.DEFSTART)); + PKG_P8PANELS_VISUAL.TGANTT_TASK_ADD_ATTR_VAL(RGANTT => RG, + RTASK => RGT, + SNAME => STASK_ATTR_LEVEL, + SVALUE => REC.LEVEL); + /* Собираем зависимости */ + for LINK in (select T.RN + from FCPRODPLANSP T + where T.PRN = NFCPRODPLAN + and T.UP_LEVEL = REC.RN + and ((NLEVEL is null) or ((NLEVEL is not null) and (NLEVEL >= REC.LEVEL + 1)))) + loop + /* Добавляем зависимости */ + PKG_P8PANELS_VISUAL.TGANTT_TASK_ADD_DEPENDENCY(RTASK => RGT, NDEPENDENCY => LINK.RN); + end loop; + /* Добавляем основную спецификацию в диаграмму */ + PKG_P8PANELS_VISUAL.TGANTT_ADD_TASK(RGANTT => RG, RTASK => RGT); + end loop; + /* Формируем список */ + COUT := PKG_P8PANELS_VISUAL.TGANTT_TO_XML(RGANTT => RG); + end FCPRODPLANSP_GET; + + /* Инициализация планов и отчетов производства изделий */ + procedure PRODPLAN_INIT + ( + COUT out clob -- Список планов и отчетов производства изделий + ) + is + begin + /* Начинаем формирование XML */ + PKG_XFAST.PROLOGUE(ITYPE => PKG_XFAST.CONTENT_); + /* Открываем корень */ + PKG_XFAST.DOWN_NODE(SNAME => 'XDATA'); + /* Цикл по планам и отчетам производства изделий */ + for REC in (select T.RN NRN, + D.DOCCODE || ', ' || trim(T.PREFIX) || '/' || trim(T.NUMB) || ', ' || + TO_CHAR(T.DOCDATE, 'dd.mm.yyyy') SDOC_INFO + from FCPRODPLAN T, + DOCTYPES D, + FINSTATE FS + where T.CATEGORY = NFCPRODPLAN_CATEGORY + and T.STATUS = NFCPRODPLAN_STATUS + and D.RN = T.DOCTYPE + and FS.RN = T.TYPE + and FS.CODE = SFCPRODPLAN_TYPE + and exists (select /*+ INDEX(UP I_USERPRIV_CATALOG_ROLEID) */ + null + from USERPRIV UP + where UP.CATALOG = T.CRN + and UP.ROLEID in (select /*+ INDEX(UR I_USERROLES_AUTHID_FK) */ + UR.ROLEID + from USERROLES UR + where UR.AUTHID = UTILIZER) + union all + select /*+ INDEX(UP I_USERPRIV_CATALOG_AUTHID) */ + null + from USERPRIV UP + where UP.CATALOG = T.CRN + and UP.AUTHID = UTILIZER) + and exists (select /*+ INDEX(UP I_USERPRIV_JUR_PERS_ROLEID) */ + null + from USERPRIV UP + where UP.JUR_PERS = T.JUR_PERS + and UP.UNITCODE = 'CostProductPlans' + and UP.ROLEID in (select /*+ INDEX(UR I_USERROLES_AUTHID_FK) */ + UR.ROLEID + from USERROLES UR + where UR.AUTHID = UTILIZER) + union all + select /*+ INDEX(UP I_USERPRIV_JUR_PERS_AUTHID) */ + null + from USERPRIV UP + where UP.JUR_PERS = T.JUR_PERS + and UP.UNITCODE = 'CostProductPlans' + and UP.AUTHID = UTILIZER) + order by T.DOCDATE desc) + loop + /* Открываем план */ + PKG_XFAST.DOWN_NODE(SNAME => 'XFCPRODPLANS'); + /* Описываем план */ + PKG_XFAST.ATTR(SNAME => 'NRN', NVALUE => REC.NRN); + PKG_XFAST.ATTR(SNAME => 'SDOC_INFO', SVALUE => REC.SDOC_INFO); + /* Закрываем план */ + PKG_XFAST.UP(); + end loop; + /* Закрываем корень */ + PKG_XFAST.UP(); + /* Сериализуем */ + COUT := PKG_XFAST.SERIALIZE_TO_CLOB(); + /* Завершаем формирование XML */ + PKG_XFAST.EPILOGUE(); + exception + when others then + /* Завершаем формирование XML */ + PKG_XFAST.EPILOGUE(); + /* Вернем ошибку */ + PKG_STATE.DIAGNOSTICS_STACKED(); + P_EXCEPTION(0, PKG_STATE.SQL_ERRM()); + end PRODPLAN_INIT; + +end PKG_P8PANELS_MECHREC; +/ diff --git a/db/PKG_P8PANELS_VISUAL.pck b/db/PKG_P8PANELS_VISUAL.pck index 4fdff3a..6be69c8 100644 --- a/db/PKG_P8PANELS_VISUAL.pck +++ b/db/PKG_P8PANELS_VISUAL.pck @@ -2019,6 +2019,9 @@ text="Формат data_grid и gant как в chart" if (RGANTT.RTASK_COLORS(I).STEXT_COLOR is not null) then PKG_XFAST.ATTR(SNAME => SRESP_ATTR_TASK_TEXT_COLOR, SVALUE => RGANTT.RTASK_COLORS(I).STEXT_COLOR); end if; + if (RGANTT.RTASK_COLORS(I).SBG_PROGRESS_COLOR is not null) then + PKG_XFAST.ATTR(SNAME => SRESP_ATTR_TASK_BG_PRG_COLOR, SVALUE => RGANTT.RTASK_COLORS(I).SBG_PROGRESS_COLOR); + end if; PKG_XFAST.ATTR(SNAME => SRESP_ATTR_DESC, SVALUE => RGANTT.RTASK_COLORS(I).SDESC); /* Закрываем описание цвета задачи */ PKG_XFAST.UP(); diff --git a/dist/p8-panels.js b/dist/p8-panels.js index 27c69d5..b30f64b 100644 --- a/dist/p8-panels.js +++ b/dist/p8-panels.js @@ -15,7 +15,7 @@ \***********************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { -eval("var map = {\n\t\"./dummy\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/dummy\": \"./app/panels/dummy/dummy.js\",\n\t\"./dummy/dummy.js\": \"./app/panels/dummy/dummy.js\",\n\t\"./dummy/index\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/index.js\": \"./app/panels/dummy/index.js\",\n\t\"./eqs_prfrm\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/eqs_prfrm\": \"./app/panels/eqs_prfrm/eqs_prfrm.js\",\n\t\"./eqs_prfrm/eqs_prfrm.js\": \"./app/panels/eqs_prfrm/eqs_prfrm.js\",\n\t\"./eqs_prfrm/index\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/index.js\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./prj_fin\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/index\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/index.js\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/layouts\": \"./app/panels/prj_fin/layouts.js\",\n\t\"./prj_fin/layouts.js\": \"./app/panels/prj_fin/layouts.js\",\n\t\"./prj_fin/prj_fin\": \"./app/panels/prj_fin/prj_fin.js\",\n\t\"./prj_fin/prj_fin.js\": \"./app/panels/prj_fin/prj_fin.js\",\n\t\"./prj_fin/projects\": \"./app/panels/prj_fin/projects.js\",\n\t\"./prj_fin/projects.js\": \"./app/panels/prj_fin/projects.js\",\n\t\"./prj_fin/stage_arts\": \"./app/panels/prj_fin/stage_arts.js\",\n\t\"./prj_fin/stage_arts.js\": \"./app/panels/prj_fin/stage_arts.js\",\n\t\"./prj_fin/stage_contracts\": \"./app/panels/prj_fin/stage_contracts.js\",\n\t\"./prj_fin/stage_contracts.js\": \"./app/panels/prj_fin/stage_contracts.js\",\n\t\"./prj_fin/stages\": \"./app/panels/prj_fin/stages.js\",\n\t\"./prj_fin/stages.js\": \"./app/panels/prj_fin/stages.js\",\n\t\"./prj_graph\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/index\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/index.js\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/layouts\": \"./app/panels/prj_graph/layouts.js\",\n\t\"./prj_graph/layouts.js\": \"./app/panels/prj_graph/layouts.js\",\n\t\"./prj_graph/prj_graph\": \"./app/panels/prj_graph/prj_graph.js\",\n\t\"./prj_graph/prj_graph.js\": \"./app/panels/prj_graph/prj_graph.js\",\n\t\"./prj_help\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/img/211.png\": \"./app/panels/prj_help/img/211.png\",\n\t\"./prj_help/img/212.png\": \"./app/panels/prj_help/img/212.png\",\n\t\"./prj_help/img/213.png\": \"./app/panels/prj_help/img/213.png\",\n\t\"./prj_help/img/214.png\": \"./app/panels/prj_help/img/214.png\",\n\t\"./prj_help/img/215.png\": \"./app/panels/prj_help/img/215.png\",\n\t\"./prj_help/img/221.png\": \"./app/panels/prj_help/img/221.png\",\n\t\"./prj_help/img/222.png\": \"./app/panels/prj_help/img/222.png\",\n\t\"./prj_help/img/223.png\": \"./app/panels/prj_help/img/223.png\",\n\t\"./prj_help/img/231.png\": \"./app/panels/prj_help/img/231.png\",\n\t\"./prj_help/img/232.png\": \"./app/panels/prj_help/img/232.png\",\n\t\"./prj_help/img/241.png\": \"./app/panels/prj_help/img/241.png\",\n\t\"./prj_help/img/242.png\": \"./app/panels/prj_help/img/242.png\",\n\t\"./prj_help/img/243.png\": \"./app/panels/prj_help/img/243.png\",\n\t\"./prj_help/img/244.png\": \"./app/panels/prj_help/img/244.png\",\n\t\"./prj_help/img/245.png\": \"./app/panels/prj_help/img/245.png\",\n\t\"./prj_help/img/31.png\": \"./app/panels/prj_help/img/31.png\",\n\t\"./prj_help/img/32.png\": \"./app/panels/prj_help/img/32.png\",\n\t\"./prj_help/img/33.png\": \"./app/panels/prj_help/img/33.png\",\n\t\"./prj_help/img/34.png\": \"./app/panels/prj_help/img/34.png\",\n\t\"./prj_help/img/35.png\": \"./app/panels/prj_help/img/35.png\",\n\t\"./prj_help/img/36.png\": \"./app/panels/prj_help/img/36.png\",\n\t\"./prj_help/img/411.png\": \"./app/panels/prj_help/img/411.png\",\n\t\"./prj_help/img/412.png\": \"./app/panels/prj_help/img/412.png\",\n\t\"./prj_help/img/421.png\": \"./app/panels/prj_help/img/421.png\",\n\t\"./prj_help/img/422.png\": \"./app/panels/prj_help/img/422.png\",\n\t\"./prj_help/img/431.png\": \"./app/panels/prj_help/img/431.png\",\n\t\"./prj_help/img/432.png\": \"./app/panels/prj_help/img/432.png\",\n\t\"./prj_help/img/433.png\": \"./app/panels/prj_help/img/433.png\",\n\t\"./prj_help/img/434.png\": \"./app/panels/prj_help/img/434.png\",\n\t\"./prj_help/img/441.png\": \"./app/panels/prj_help/img/441.png\",\n\t\"./prj_help/img/442.png\": \"./app/panels/prj_help/img/442.png\",\n\t\"./prj_help/img/443.png\": \"./app/panels/prj_help/img/443.png\",\n\t\"./prj_help/img/444.png\": \"./app/panels/prj_help/img/444.png\",\n\t\"./prj_help/img/451.png\": \"./app/panels/prj_help/img/451.png\",\n\t\"./prj_help/img/461.png\": \"./app/panels/prj_help/img/461.png\",\n\t\"./prj_help/img/471.png\": \"./app/panels/prj_help/img/471.png\",\n\t\"./prj_help/img/711.png\": \"./app/panels/prj_help/img/711.png\",\n\t\"./prj_help/img/721.png\": \"./app/panels/prj_help/img/721.png\",\n\t\"./prj_help/img/722.png\": \"./app/panels/prj_help/img/722.png\",\n\t\"./prj_help/img/723.png\": \"./app/panels/prj_help/img/723.png\",\n\t\"./prj_help/img/741.png\": \"./app/panels/prj_help/img/741.png\",\n\t\"./prj_help/index\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/index.js\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/prj_help\": \"./app/panels/prj_help/prj_help.js\",\n\t\"./prj_help/prj_help.js\": \"./app/panels/prj_help/prj_help.js\",\n\t\"./prj_jobs\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/index\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/index.js\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/lab_plan_fot_dtl\": \"./app/panels/prj_jobs/lab_plan_fot_dtl.js\",\n\t\"./prj_jobs/lab_plan_fot_dtl.js\": \"./app/panels/prj_jobs/lab_plan_fot_dtl.js\",\n\t\"./prj_jobs/lab_plan_jobs_dtl\": \"./app/panels/prj_jobs/lab_plan_jobs_dtl.js\",\n\t\"./prj_jobs/lab_plan_jobs_dtl.js\": \"./app/panels/prj_jobs/lab_plan_jobs_dtl.js\",\n\t\"./prj_jobs/prj_jobs\": \"./app/panels/prj_jobs/prj_jobs.js\",\n\t\"./prj_jobs/prj_jobs.js\": \"./app/panels/prj_jobs/prj_jobs.js\",\n\t\"./prj_jobs/res_mon\": \"./app/panels/prj_jobs/res_mon.js\",\n\t\"./prj_jobs/res_mon.js\": \"./app/panels/prj_jobs/res_mon.js\",\n\t\"./samples\": \"./app/panels/samples/index.js\",\n\t\"./samples/\": \"./app/panels/samples/index.js\",\n\t\"./samples/chart\": \"./app/panels/samples/chart.js\",\n\t\"./samples/chart.js\": \"./app/panels/samples/chart.js\",\n\t\"./samples/data_grid\": \"./app/panels/samples/data_grid.js\",\n\t\"./samples/data_grid.js\": \"./app/panels/samples/data_grid.js\",\n\t\"./samples/gantt\": \"./app/panels/samples/gantt.js\",\n\t\"./samples/gantt.js\": \"./app/panels/samples/gantt.js\",\n\t\"./samples/index\": \"./app/panels/samples/index.js\",\n\t\"./samples/index.js\": \"./app/panels/samples/index.js\",\n\t\"./samples/loader\": \"./app/panels/samples/loader.js\",\n\t\"./samples/loader.js\": \"./app/panels/samples/loader.js\",\n\t\"./samples/messages\": \"./app/panels/samples/messages.js\",\n\t\"./samples/messages.js\": \"./app/panels/samples/messages.js\",\n\t\"./samples/mui\": \"./app/panels/samples/mui.js\",\n\t\"./samples/mui.js\": \"./app/panels/samples/mui.js\",\n\t\"./samples/p8online\": \"./app/panels/samples/p8online.js\",\n\t\"./samples/p8online.js\": \"./app/panels/samples/p8online.js\",\n\t\"./samples/samples\": \"./app/panels/samples/samples.js\",\n\t\"./samples/samples.js\": \"./app/panels/samples/samples.js\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./app/panels sync recursive ^\\\\.\\\\/.*$\";\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/_sync_^\\.\\/.*$?"); +eval("var map = {\n\t\"./alex\": \"./app/panels/alex/index.js\",\n\t\"./alex/\": \"./app/panels/alex/index.js\",\n\t\"./alex/alex\": \"./app/panels/alex/alex.js\",\n\t\"./alex/alex.js\": \"./app/panels/alex/alex.js\",\n\t\"./alex/index\": \"./app/panels/alex/index.js\",\n\t\"./alex/index.js\": \"./app/panels/alex/index.js\",\n\t\"./dummy\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/dummy\": \"./app/panels/dummy/dummy.js\",\n\t\"./dummy/dummy.js\": \"./app/panels/dummy/dummy.js\",\n\t\"./dummy/index\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/index.js\": \"./app/panels/dummy/index.js\",\n\t\"./mech_rec_cost_prod_plans\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/hooks\": \"./app/panels/mech_rec_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_cost_prod_plans/hooks.js\": \"./app/panels/mech_rec_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_cost_prod_plans/index\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/index.js\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/mech_rec_cost_prod_plans\": \"./app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\",\n\t\"./mech_rec_cost_prod_plans/mech_rec_cost_prod_plans copy\": \"./app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans copy.js\",\n\t\"./mech_rec_cost_prod_plans/mech_rec_cost_prod_plans copy.js\": \"./app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans copy.js\",\n\t\"./mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\": \"./app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\",\n\t\"./prj_agn_info\": \"./app/panels/prj_agn_info/index.js\",\n\t\"./prj_agn_info/\": \"./app/panels/prj_agn_info/index.js\",\n\t\"./prj_agn_info/TabsElements/agentChart\": \"./app/panels/prj_agn_info/TabsElements/agentChart.js\",\n\t\"./prj_agn_info/TabsElements/agentChart.js\": \"./app/panels/prj_agn_info/TabsElements/agentChart.js\",\n\t\"./prj_agn_info/TabsElements/agentContracts\": \"./app/panels/prj_agn_info/TabsElements/agentContracts.js\",\n\t\"./prj_agn_info/TabsElements/agentContracts.js\": \"./app/panels/prj_agn_info/TabsElements/agentContracts.js\",\n\t\"./prj_agn_info/TabsElements/agentInfo\": \"./app/panels/prj_agn_info/TabsElements/agentInfo.js\",\n\t\"./prj_agn_info/TabsElements/agentInfo.js\": \"./app/panels/prj_agn_info/TabsElements/agentInfo.js\",\n\t\"./prj_agn_info/back\": \"./app/panels/prj_agn_info/back.js\",\n\t\"./prj_agn_info/back.js\": \"./app/panels/prj_agn_info/back.js\",\n\t\"./prj_agn_info/index\": \"./app/panels/prj_agn_info/index.js\",\n\t\"./prj_agn_info/index.js\": \"./app/panels/prj_agn_info/index.js\",\n\t\"./prj_agn_info/prj_agn_info\": \"./app/panels/prj_agn_info/prj_agn_info.js\",\n\t\"./prj_agn_info/prj_agn_info.js\": \"./app/panels/prj_agn_info/prj_agn_info.js\",\n\t\"./prj_agn_info/tabs\": \"./app/panels/prj_agn_info/tabs.js\",\n\t\"./prj_agn_info/tabs.js\": \"./app/panels/prj_agn_info/tabs.js\",\n\t\"./prj_agn_info/utils\": \"./app/panels/prj_agn_info/utils.js\",\n\t\"./prj_agn_info/utils.js\": \"./app/panels/prj_agn_info/utils.js\",\n\t\"./prj_fin\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/index\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/index.js\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/layouts\": \"./app/panels/prj_fin/layouts.js\",\n\t\"./prj_fin/layouts.js\": \"./app/panels/prj_fin/layouts.js\",\n\t\"./prj_fin/prj_fin\": \"./app/panels/prj_fin/prj_fin.js\",\n\t\"./prj_fin/prj_fin.js\": \"./app/panels/prj_fin/prj_fin.js\",\n\t\"./prj_fin/projects\": \"./app/panels/prj_fin/projects.js\",\n\t\"./prj_fin/projects.js\": \"./app/panels/prj_fin/projects.js\",\n\t\"./prj_fin/stage_arts\": \"./app/panels/prj_fin/stage_arts.js\",\n\t\"./prj_fin/stage_arts.js\": \"./app/panels/prj_fin/stage_arts.js\",\n\t\"./prj_fin/stage_contracts\": \"./app/panels/prj_fin/stage_contracts.js\",\n\t\"./prj_fin/stage_contracts.js\": \"./app/panels/prj_fin/stage_contracts.js\",\n\t\"./prj_fin/stages\": \"./app/panels/prj_fin/stages.js\",\n\t\"./prj_fin/stages.js\": \"./app/panels/prj_fin/stages.js\",\n\t\"./prj_help\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/img/211.png\": \"./app/panels/prj_help/img/211.png\",\n\t\"./prj_help/img/212.png\": \"./app/panels/prj_help/img/212.png\",\n\t\"./prj_help/img/213.png\": \"./app/panels/prj_help/img/213.png\",\n\t\"./prj_help/img/214.png\": \"./app/panels/prj_help/img/214.png\",\n\t\"./prj_help/img/215.png\": \"./app/panels/prj_help/img/215.png\",\n\t\"./prj_help/img/221.png\": \"./app/panels/prj_help/img/221.png\",\n\t\"./prj_help/img/222.png\": \"./app/panels/prj_help/img/222.png\",\n\t\"./prj_help/img/223.png\": \"./app/panels/prj_help/img/223.png\",\n\t\"./prj_help/img/231.png\": \"./app/panels/prj_help/img/231.png\",\n\t\"./prj_help/img/232.png\": \"./app/panels/prj_help/img/232.png\",\n\t\"./prj_help/img/241.png\": \"./app/panels/prj_help/img/241.png\",\n\t\"./prj_help/img/242.png\": \"./app/panels/prj_help/img/242.png\",\n\t\"./prj_help/img/243.png\": \"./app/panels/prj_help/img/243.png\",\n\t\"./prj_help/img/244.png\": \"./app/panels/prj_help/img/244.png\",\n\t\"./prj_help/img/245.png\": \"./app/panels/prj_help/img/245.png\",\n\t\"./prj_help/img/31.png\": \"./app/panels/prj_help/img/31.png\",\n\t\"./prj_help/img/32.png\": \"./app/panels/prj_help/img/32.png\",\n\t\"./prj_help/img/33.png\": \"./app/panels/prj_help/img/33.png\",\n\t\"./prj_help/img/34.png\": \"./app/panels/prj_help/img/34.png\",\n\t\"./prj_help/img/35.png\": \"./app/panels/prj_help/img/35.png\",\n\t\"./prj_help/img/36.png\": \"./app/panels/prj_help/img/36.png\",\n\t\"./prj_help/img/411.png\": \"./app/panels/prj_help/img/411.png\",\n\t\"./prj_help/img/412.png\": \"./app/panels/prj_help/img/412.png\",\n\t\"./prj_help/img/421.png\": \"./app/panels/prj_help/img/421.png\",\n\t\"./prj_help/img/422.png\": \"./app/panels/prj_help/img/422.png\",\n\t\"./prj_help/img/431.png\": \"./app/panels/prj_help/img/431.png\",\n\t\"./prj_help/img/432.png\": \"./app/panels/prj_help/img/432.png\",\n\t\"./prj_help/img/433.png\": \"./app/panels/prj_help/img/433.png\",\n\t\"./prj_help/img/434.png\": \"./app/panels/prj_help/img/434.png\",\n\t\"./prj_help/img/441.png\": \"./app/panels/prj_help/img/441.png\",\n\t\"./prj_help/img/442.png\": \"./app/panels/prj_help/img/442.png\",\n\t\"./prj_help/img/443.png\": \"./app/panels/prj_help/img/443.png\",\n\t\"./prj_help/img/444.png\": \"./app/panels/prj_help/img/444.png\",\n\t\"./prj_help/img/451.png\": \"./app/panels/prj_help/img/451.png\",\n\t\"./prj_help/img/461.png\": \"./app/panels/prj_help/img/461.png\",\n\t\"./prj_help/img/471.png\": \"./app/panels/prj_help/img/471.png\",\n\t\"./prj_help/img/711.png\": \"./app/panels/prj_help/img/711.png\",\n\t\"./prj_help/img/721.png\": \"./app/panels/prj_help/img/721.png\",\n\t\"./prj_help/img/722.png\": \"./app/panels/prj_help/img/722.png\",\n\t\"./prj_help/img/723.png\": \"./app/panels/prj_help/img/723.png\",\n\t\"./prj_help/img/741.png\": \"./app/panels/prj_help/img/741.png\",\n\t\"./prj_help/index\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/index.js\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/prj_help\": \"./app/panels/prj_help/prj_help.js\",\n\t\"./prj_help/prj_help.js\": \"./app/panels/prj_help/prj_help.js\",\n\t\"./prj_jobs\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/index\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/index.js\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/lab_plan_fot_dtl\": \"./app/panels/prj_jobs/lab_plan_fot_dtl.js\",\n\t\"./prj_jobs/lab_plan_fot_dtl.js\": \"./app/panels/prj_jobs/lab_plan_fot_dtl.js\",\n\t\"./prj_jobs/lab_plan_jobs_dtl\": \"./app/panels/prj_jobs/lab_plan_jobs_dtl.js\",\n\t\"./prj_jobs/lab_plan_jobs_dtl.js\": \"./app/panels/prj_jobs/lab_plan_jobs_dtl.js\",\n\t\"./prj_jobs/prj_jobs\": \"./app/panels/prj_jobs/prj_jobs.js\",\n\t\"./prj_jobs/prj_jobs.js\": \"./app/panels/prj_jobs/prj_jobs.js\",\n\t\"./prj_jobs/res_mon\": \"./app/panels/prj_jobs/res_mon.js\",\n\t\"./prj_jobs/res_mon.js\": \"./app/panels/prj_jobs/res_mon.js\",\n\t\"./samples\": \"./app/panels/samples/index.js\",\n\t\"./samples/\": \"./app/panels/samples/index.js\",\n\t\"./samples/chart\": \"./app/panels/samples/chart.js\",\n\t\"./samples/chart.js\": \"./app/panels/samples/chart.js\",\n\t\"./samples/data_grid\": \"./app/panels/samples/data_grid.js\",\n\t\"./samples/data_grid.js\": \"./app/panels/samples/data_grid.js\",\n\t\"./samples/gantt\": \"./app/panels/samples/gantt.js\",\n\t\"./samples/gantt.js\": \"./app/panels/samples/gantt.js\",\n\t\"./samples/index\": \"./app/panels/samples/index.js\",\n\t\"./samples/index.js\": \"./app/panels/samples/index.js\",\n\t\"./samples/loader\": \"./app/panels/samples/loader.js\",\n\t\"./samples/loader.js\": \"./app/panels/samples/loader.js\",\n\t\"./samples/messages\": \"./app/panels/samples/messages.js\",\n\t\"./samples/messages.js\": \"./app/panels/samples/messages.js\",\n\t\"./samples/mui\": \"./app/panels/samples/mui.js\",\n\t\"./samples/mui.js\": \"./app/panels/samples/mui.js\",\n\t\"./samples/p8online\": \"./app/panels/samples/p8online.js\",\n\t\"./samples/p8online.js\": \"./app/panels/samples/p8online.js\",\n\t\"./samples/samples\": \"./app/panels/samples/samples.js\",\n\t\"./samples/samples.js\": \"./app/panels/samples/samples.js\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./app/panels sync recursive ^\\\\.\\\\/.*$\";\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/_sync_^\\.\\/.*$?"); /***/ }), @@ -1603,6 +1603,50 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./node_modules/@mui/material/TabScrollButton/TabScrollButton.js": +/*!***********************************************************************!*\ + !*** ./node_modules/@mui/material/TabScrollButton/TabScrollButton.js ***! + \***********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutPropertiesLoose */ \"./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\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 clsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! clsx */ \"./node_modules/clsx/dist/clsx.mjs\");\n/* harmony import */ var _mui_base__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/base */ \"./node_modules/@mui/utils/esm/composeClasses/composeClasses.js\");\n/* harmony import */ var _mui_base__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/base */ \"./node_modules/@mui/base/utils/useSlotProps.js\");\n/* harmony import */ var _internal_svg_icons_KeyboardArrowLeft__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../internal/svg-icons/KeyboardArrowLeft */ \"./node_modules/@mui/material/internal/svg-icons/KeyboardArrowLeft.js\");\n/* harmony import */ var _internal_svg_icons_KeyboardArrowRight__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../internal/svg-icons/KeyboardArrowRight */ \"./node_modules/@mui/material/internal/svg-icons/KeyboardArrowRight.js\");\n/* harmony import */ var _ButtonBase__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../ButtonBase */ \"./node_modules/@mui/material/ButtonBase/ButtonBase.js\");\n/* harmony import */ var _styles_useTheme__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../styles/useTheme */ \"./node_modules/@mui/material/styles/useTheme.js\");\n/* harmony import */ var _styles_useThemeProps__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../styles/useThemeProps */ \"./node_modules/@mui/material/styles/useThemeProps.js\");\n/* harmony import */ var _styles_styled__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../styles/styled */ \"./node_modules/@mui/material/styles/styled.js\");\n/* harmony import */ var _tabScrollButtonClasses__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./tabScrollButtonClasses */ \"./node_modules/@mui/material/TabScrollButton/tabScrollButtonClasses.js\");\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\n'use client';\n\n/* eslint-disable jsx-a11y/aria-role */\n\n\nconst _excluded = [\"className\", \"slots\", \"slotProps\", \"direction\", \"orientation\", \"disabled\"];\n\n\n\n\n\n\n\n\n\n\n\n\nconst useUtilityClasses = ownerState => {\n const {\n classes,\n orientation,\n disabled\n } = ownerState;\n const slots = {\n root: ['root', orientation, disabled && 'disabled']\n };\n return (0,_mui_base__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(slots, _tabScrollButtonClasses__WEBPACK_IMPORTED_MODULE_6__.getTabScrollButtonUtilityClass, classes);\n};\nconst TabScrollButtonRoot = (0,_styles_styled__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(_ButtonBase__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n name: 'MuiTabScrollButton',\n slot: 'Root',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.root, ownerState.orientation && styles[ownerState.orientation]];\n }\n})(({\n ownerState\n}) => (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n width: 40,\n flexShrink: 0,\n opacity: 0.8,\n [`&.${_tabScrollButtonClasses__WEBPACK_IMPORTED_MODULE_6__[\"default\"].disabled}`]: {\n opacity: 0\n }\n}, ownerState.orientation === 'vertical' && {\n width: '100%',\n height: 40,\n '& svg': {\n transform: `rotate(${ownerState.isRtl ? -90 : 90}deg)`\n }\n}));\nconst TabScrollButton = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.forwardRef(function TabScrollButton(inProps, ref) {\n var _slots$StartScrollBut, _slots$EndScrollButto;\n const props = (0,_styles_useThemeProps__WEBPACK_IMPORTED_MODULE_9__[\"default\"])({\n props: inProps,\n name: 'MuiTabScrollButton'\n });\n const {\n className,\n slots = {},\n slotProps = {},\n direction\n } = props,\n other = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(props, _excluded);\n const theme = (0,_styles_useTheme__WEBPACK_IMPORTED_MODULE_10__[\"default\"])();\n const isRtl = theme.direction === 'rtl';\n const ownerState = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n isRtl\n }, props);\n const classes = useUtilityClasses(ownerState);\n const StartButtonIcon = (_slots$StartScrollBut = slots.StartScrollButtonIcon) != null ? _slots$StartScrollBut : _internal_svg_icons_KeyboardArrowLeft__WEBPACK_IMPORTED_MODULE_11__[\"default\"];\n const EndButtonIcon = (_slots$EndScrollButto = slots.EndScrollButtonIcon) != null ? _slots$EndScrollButto : _internal_svg_icons_KeyboardArrowRight__WEBPACK_IMPORTED_MODULE_12__[\"default\"];\n const startButtonIconProps = (0,_mui_base__WEBPACK_IMPORTED_MODULE_13__.useSlotProps)({\n elementType: StartButtonIcon,\n externalSlotProps: slotProps.startScrollButtonIcon,\n additionalProps: {\n fontSize: 'small'\n },\n ownerState\n });\n const endButtonIconProps = (0,_mui_base__WEBPACK_IMPORTED_MODULE_13__.useSlotProps)({\n elementType: EndButtonIcon,\n externalSlotProps: slotProps.endScrollButtonIcon,\n additionalProps: {\n fontSize: 'small'\n },\n ownerState\n });\n return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(TabScrollButtonRoot, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n component: \"div\",\n className: (0,clsx__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(classes.root, className),\n ref: ref,\n role: null,\n ownerState: ownerState,\n tabIndex: null\n }, other, {\n children: direction === 'left' ? /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(StartButtonIcon, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, startButtonIconProps)) : /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(EndButtonIcon, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, endButtonIconProps))\n }));\n});\n true ? TabScrollButton.propTypes /* remove-proptypes */ = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n /**\n * The content of the component.\n */\n children: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().node),\n /**\n * Override or extend the styles applied to the component.\n */\n classes: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().object),\n /**\n * @ignore\n */\n className: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().string),\n /**\n * The direction the button should indicate.\n */\n direction: prop_types__WEBPACK_IMPORTED_MODULE_14___default().oneOf(['left', 'right']).isRequired,\n /**\n * If `true`, the component is disabled.\n * @default false\n */\n disabled: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().bool),\n /**\n * The component orientation (layout flow direction).\n */\n orientation: prop_types__WEBPACK_IMPORTED_MODULE_14___default().oneOf(['horizontal', 'vertical']).isRequired,\n /**\n * The extra props for the slot components.\n * You can override the existing props or add new ones.\n * @default {}\n */\n slotProps: prop_types__WEBPACK_IMPORTED_MODULE_14___default().shape({\n endScrollButtonIcon: prop_types__WEBPACK_IMPORTED_MODULE_14___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_14___default().func), (prop_types__WEBPACK_IMPORTED_MODULE_14___default().object)]),\n startScrollButtonIcon: prop_types__WEBPACK_IMPORTED_MODULE_14___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_14___default().func), (prop_types__WEBPACK_IMPORTED_MODULE_14___default().object)])\n }),\n /**\n * The components used for each slot inside.\n * @default {}\n */\n slots: prop_types__WEBPACK_IMPORTED_MODULE_14___default().shape({\n EndScrollButtonIcon: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().elementType),\n StartScrollButtonIcon: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().elementType)\n }),\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: prop_types__WEBPACK_IMPORTED_MODULE_14___default().oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_14___default().arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_14___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_14___default().func), (prop_types__WEBPACK_IMPORTED_MODULE_14___default().object), (prop_types__WEBPACK_IMPORTED_MODULE_14___default().bool)])), (prop_types__WEBPACK_IMPORTED_MODULE_14___default().func), (prop_types__WEBPACK_IMPORTED_MODULE_14___default().object)])\n} : 0;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (TabScrollButton);\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@mui/material/TabScrollButton/TabScrollButton.js?"); + +/***/ }), + +/***/ "./node_modules/@mui/material/TabScrollButton/tabScrollButtonClasses.js": +/*!******************************************************************************!*\ + !*** ./node_modules/@mui/material/TabScrollButton/tabScrollButtonClasses.js ***! + \******************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ getTabScrollButtonUtilityClass: () => (/* binding */ getTabScrollButtonUtilityClass)\n/* harmony export */ });\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/generateUtilityClasses/generateUtilityClasses.js\");\n/* harmony import */ var _generateUtilityClass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../generateUtilityClass */ \"./node_modules/@mui/utils/esm/generateUtilityClass/generateUtilityClass.js\");\n\n\nfunction getTabScrollButtonUtilityClass(slot) {\n return (0,_generateUtilityClass__WEBPACK_IMPORTED_MODULE_0__[\"default\"])('MuiTabScrollButton', slot);\n}\nconst tabScrollButtonClasses = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"])('MuiTabScrollButton', ['root', 'vertical', 'horizontal', 'disabled']);\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (tabScrollButtonClasses);\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@mui/material/TabScrollButton/tabScrollButtonClasses.js?"); + +/***/ }), + +/***/ "./node_modules/@mui/material/Tab/Tab.js": +/*!***********************************************!*\ + !*** ./node_modules/@mui/material/Tab/Tab.js ***! + \***********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutPropertiesLoose */ \"./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_12__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! clsx */ \"./node_modules/clsx/dist/clsx.mjs\");\n/* harmony import */ var _mui_base_composeClasses__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/base/composeClasses */ \"./node_modules/@mui/utils/esm/composeClasses/composeClasses.js\");\n/* harmony import */ var _ButtonBase__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../ButtonBase */ \"./node_modules/@mui/material/ButtonBase/ButtonBase.js\");\n/* harmony import */ var _utils_capitalize__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/capitalize */ \"./node_modules/@mui/material/utils/capitalize.js\");\n/* harmony import */ var _styles_useThemeProps__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../styles/useThemeProps */ \"./node_modules/@mui/material/styles/useThemeProps.js\");\n/* harmony import */ var _styles_styled__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../styles/styled */ \"./node_modules/@mui/material/styles/styled.js\");\n/* harmony import */ var _utils_unsupportedProp__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../utils/unsupportedProp */ \"./node_modules/@mui/material/utils/unsupportedProp.js\");\n/* harmony import */ var _tabClasses__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./tabClasses */ \"./node_modules/@mui/material/Tab/tabClasses.js\");\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\n'use client';\n\n\n\nconst _excluded = [\"className\", \"disabled\", \"disableFocusRipple\", \"fullWidth\", \"icon\", \"iconPosition\", \"indicator\", \"label\", \"onChange\", \"onClick\", \"onFocus\", \"selected\", \"selectionFollowsFocus\", \"textColor\", \"value\", \"wrapped\"];\n\n\n\n\n\n\n\n\n\n\n\nconst useUtilityClasses = ownerState => {\n const {\n classes,\n textColor,\n fullWidth,\n wrapped,\n icon,\n label,\n selected,\n disabled\n } = ownerState;\n const slots = {\n root: ['root', icon && label && 'labelIcon', `textColor${(0,_utils_capitalize__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(textColor)}`, fullWidth && 'fullWidth', wrapped && 'wrapped', selected && 'selected', disabled && 'disabled'],\n iconWrapper: ['iconWrapper']\n };\n return (0,_mui_base_composeClasses__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(slots, _tabClasses__WEBPACK_IMPORTED_MODULE_7__.getTabUtilityClass, classes);\n};\nconst TabRoot = (0,_styles_styled__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(_ButtonBase__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n name: 'MuiTab',\n slot: 'Root',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.root, ownerState.label && ownerState.icon && styles.labelIcon, styles[`textColor${(0,_utils_capitalize__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(ownerState.textColor)}`], ownerState.fullWidth && styles.fullWidth, ownerState.wrapped && styles.wrapped];\n }\n})(({\n theme,\n ownerState\n}) => (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, theme.typography.button, {\n maxWidth: 360,\n minWidth: 90,\n position: 'relative',\n minHeight: 48,\n flexShrink: 0,\n padding: '12px 16px',\n overflow: 'hidden',\n whiteSpace: 'normal',\n textAlign: 'center'\n}, ownerState.label && {\n flexDirection: ownerState.iconPosition === 'top' || ownerState.iconPosition === 'bottom' ? 'column' : 'row'\n}, {\n lineHeight: 1.25\n}, ownerState.icon && ownerState.label && {\n minHeight: 72,\n paddingTop: 9,\n paddingBottom: 9,\n [`& > .${_tabClasses__WEBPACK_IMPORTED_MODULE_7__[\"default\"].iconWrapper}`]: (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, ownerState.iconPosition === 'top' && {\n marginBottom: 6\n }, ownerState.iconPosition === 'bottom' && {\n marginTop: 6\n }, ownerState.iconPosition === 'start' && {\n marginRight: theme.spacing(1)\n }, ownerState.iconPosition === 'end' && {\n marginLeft: theme.spacing(1)\n })\n}, ownerState.textColor === 'inherit' && {\n color: 'inherit',\n opacity: 0.6,\n // same opacity as theme.palette.text.secondary\n [`&.${_tabClasses__WEBPACK_IMPORTED_MODULE_7__[\"default\"].selected}`]: {\n opacity: 1\n },\n [`&.${_tabClasses__WEBPACK_IMPORTED_MODULE_7__[\"default\"].disabled}`]: {\n opacity: (theme.vars || theme).palette.action.disabledOpacity\n }\n}, ownerState.textColor === 'primary' && {\n color: (theme.vars || theme).palette.text.secondary,\n [`&.${_tabClasses__WEBPACK_IMPORTED_MODULE_7__[\"default\"].selected}`]: {\n color: (theme.vars || theme).palette.primary.main\n },\n [`&.${_tabClasses__WEBPACK_IMPORTED_MODULE_7__[\"default\"].disabled}`]: {\n color: (theme.vars || theme).palette.text.disabled\n }\n}, ownerState.textColor === 'secondary' && {\n color: (theme.vars || theme).palette.text.secondary,\n [`&.${_tabClasses__WEBPACK_IMPORTED_MODULE_7__[\"default\"].selected}`]: {\n color: (theme.vars || theme).palette.secondary.main\n },\n [`&.${_tabClasses__WEBPACK_IMPORTED_MODULE_7__[\"default\"].disabled}`]: {\n color: (theme.vars || theme).palette.text.disabled\n }\n}, ownerState.fullWidth && {\n flexShrink: 1,\n flexGrow: 1,\n flexBasis: 0,\n maxWidth: 'none'\n}, ownerState.wrapped && {\n fontSize: theme.typography.pxToRem(12)\n}));\nconst Tab = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.forwardRef(function Tab(inProps, ref) {\n const props = (0,_styles_useThemeProps__WEBPACK_IMPORTED_MODULE_10__[\"default\"])({\n props: inProps,\n name: 'MuiTab'\n });\n const {\n className,\n disabled = false,\n disableFocusRipple = false,\n // eslint-disable-next-line react/prop-types\n fullWidth,\n icon: iconProp,\n iconPosition = 'top',\n // eslint-disable-next-line react/prop-types\n indicator,\n label,\n onChange,\n onClick,\n onFocus,\n // eslint-disable-next-line react/prop-types\n selected,\n // eslint-disable-next-line react/prop-types\n selectionFollowsFocus,\n // eslint-disable-next-line react/prop-types\n textColor = 'inherit',\n value,\n wrapped = false\n } = props,\n other = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(props, _excluded);\n const ownerState = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, props, {\n disabled,\n disableFocusRipple,\n selected,\n icon: !!iconProp,\n iconPosition,\n label: !!label,\n fullWidth,\n textColor,\n wrapped\n });\n const classes = useUtilityClasses(ownerState);\n const icon = iconProp && label && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.isValidElement(iconProp) ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.cloneElement(iconProp, {\n className: (0,clsx__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(classes.iconWrapper, iconProp.props.className)\n }) : iconProp;\n const handleClick = event => {\n if (!selected && onChange) {\n onChange(event, value);\n }\n if (onClick) {\n onClick(event);\n }\n };\n const handleFocus = event => {\n if (selectionFollowsFocus && !selected && onChange) {\n onChange(event, value);\n }\n if (onFocus) {\n onFocus(event);\n }\n };\n return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(TabRoot, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n focusRipple: !disableFocusRipple,\n className: (0,clsx__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(classes.root, className),\n ref: ref,\n role: \"tab\",\n \"aria-selected\": selected,\n disabled: disabled,\n onClick: handleClick,\n onFocus: handleFocus,\n ownerState: ownerState,\n tabIndex: selected ? 0 : -1\n }, other, {\n children: [iconPosition === 'top' || iconPosition === 'start' ? /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(react__WEBPACK_IMPORTED_MODULE_2__.Fragment, {\n children: [icon, label]\n }) : /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(react__WEBPACK_IMPORTED_MODULE_2__.Fragment, {\n children: [label, icon]\n }), indicator]\n }));\n});\n true ? Tab.propTypes /* remove-proptypes */ = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n /**\n * This prop isn't supported.\n * Use the `component` prop if you need to change the children structure.\n */\n children: _utils_unsupportedProp__WEBPACK_IMPORTED_MODULE_11__[\"default\"],\n /**\n * Override or extend the styles applied to the component.\n */\n classes: (prop_types__WEBPACK_IMPORTED_MODULE_12___default().object),\n /**\n * @ignore\n */\n className: (prop_types__WEBPACK_IMPORTED_MODULE_12___default().string),\n /**\n * If `true`, the component is disabled.\n * @default false\n */\n disabled: (prop_types__WEBPACK_IMPORTED_MODULE_12___default().bool),\n /**\n * If `true`, the keyboard focus ripple is disabled.\n * @default false\n */\n disableFocusRipple: (prop_types__WEBPACK_IMPORTED_MODULE_12___default().bool),\n /**\n * If `true`, the ripple effect is disabled.\n *\n * ⚠️ Without a ripple there is no styling for :focus-visible by default. Be sure\n * to highlight the element by applying separate styles with the `.Mui-focusVisible` class.\n * @default false\n */\n disableRipple: (prop_types__WEBPACK_IMPORTED_MODULE_12___default().bool),\n /**\n * The icon to display.\n */\n icon: prop_types__WEBPACK_IMPORTED_MODULE_12___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_12___default().element), (prop_types__WEBPACK_IMPORTED_MODULE_12___default().string)]),\n /**\n * The position of the icon relative to the label.\n * @default 'top'\n */\n iconPosition: prop_types__WEBPACK_IMPORTED_MODULE_12___default().oneOf(['bottom', 'end', 'start', 'top']),\n /**\n * The label element.\n */\n label: (prop_types__WEBPACK_IMPORTED_MODULE_12___default().node),\n /**\n * @ignore\n */\n onChange: (prop_types__WEBPACK_IMPORTED_MODULE_12___default().func),\n /**\n * @ignore\n */\n onClick: (prop_types__WEBPACK_IMPORTED_MODULE_12___default().func),\n /**\n * @ignore\n */\n onFocus: (prop_types__WEBPACK_IMPORTED_MODULE_12___default().func),\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: prop_types__WEBPACK_IMPORTED_MODULE_12___default().oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_12___default().arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_12___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_12___default().func), (prop_types__WEBPACK_IMPORTED_MODULE_12___default().object), (prop_types__WEBPACK_IMPORTED_MODULE_12___default().bool)])), (prop_types__WEBPACK_IMPORTED_MODULE_12___default().func), (prop_types__WEBPACK_IMPORTED_MODULE_12___default().object)]),\n /**\n * You can provide your own value. Otherwise, we fallback to the child position index.\n */\n value: (prop_types__WEBPACK_IMPORTED_MODULE_12___default().any),\n /**\n * Tab labels appear in a single row.\n * They can use a second line if needed.\n * @default false\n */\n wrapped: (prop_types__WEBPACK_IMPORTED_MODULE_12___default().bool)\n} : 0;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Tab);\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@mui/material/Tab/Tab.js?"); + +/***/ }), + +/***/ "./node_modules/@mui/material/Tab/tabClasses.js": +/*!******************************************************!*\ + !*** ./node_modules/@mui/material/Tab/tabClasses.js ***! + \******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ getTabUtilityClass: () => (/* binding */ getTabUtilityClass)\n/* harmony export */ });\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/generateUtilityClasses/generateUtilityClasses.js\");\n/* harmony import */ var _generateUtilityClass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../generateUtilityClass */ \"./node_modules/@mui/utils/esm/generateUtilityClass/generateUtilityClass.js\");\n\n\nfunction getTabUtilityClass(slot) {\n return (0,_generateUtilityClass__WEBPACK_IMPORTED_MODULE_0__[\"default\"])('MuiTab', slot);\n}\nconst tabClasses = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"])('MuiTab', ['root', 'labelIcon', 'textColorInherit', 'textColorPrimary', 'textColorSecondary', 'selected', 'disabled', 'fullWidth', 'wrapped', 'iconWrapper']);\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (tabClasses);\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@mui/material/Tab/tabClasses.js?"); + +/***/ }), + /***/ "./node_modules/@mui/material/TableBody/TableBody.js": /*!***********************************************************!*\ !*** ./node_modules/@mui/material/TableBody/TableBody.js ***! @@ -1757,6 +1801,39 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./node_modules/@mui/material/Tabs/ScrollbarSize.js": +/*!**********************************************************!*\ + !*** ./node_modules/@mui/material/Tabs/ScrollbarSize.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ ScrollbarSize)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutPropertiesLoose */ \"./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\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 _utils_debounce__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/debounce */ \"./node_modules/@mui/material/utils/debounce.js\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils */ \"./node_modules/@mui/material/utils/useEnhancedEffect.js\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils */ \"./node_modules/@mui/material/utils/ownerWindow.js\");\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\n'use client';\n\n\n\nconst _excluded = [\"onChange\"];\n\n\n\n\n\nconst styles = {\n width: 99,\n height: 99,\n position: 'absolute',\n top: -9999,\n overflow: 'scroll'\n};\n\n/**\n * @ignore - internal component.\n * The component originates from https://github.com/STORIS/react-scrollbar-size.\n * It has been moved into the core in order to minimize the bundle size.\n */\nfunction ScrollbarSize(props) {\n const {\n onChange\n } = props,\n other = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, _excluded);\n const scrollbarHeight = react__WEBPACK_IMPORTED_MODULE_2__.useRef();\n const nodeRef = react__WEBPACK_IMPORTED_MODULE_2__.useRef(null);\n const setMeasurements = () => {\n scrollbarHeight.current = nodeRef.current.offsetHeight - nodeRef.current.clientHeight;\n };\n (0,_utils__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(() => {\n const handleResize = (0,_utils_debounce__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(() => {\n const prevHeight = scrollbarHeight.current;\n setMeasurements();\n if (prevHeight !== scrollbarHeight.current) {\n onChange(scrollbarHeight.current);\n }\n });\n const containerWindow = (0,_utils__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(nodeRef.current);\n containerWindow.addEventListener('resize', handleResize);\n return () => {\n handleResize.clear();\n containerWindow.removeEventListener('resize', handleResize);\n };\n }, [onChange]);\n react__WEBPACK_IMPORTED_MODULE_2__.useEffect(() => {\n setMeasurements();\n onChange(scrollbarHeight.current);\n }, [onChange]);\n return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n style: styles,\n ref: nodeRef\n }, other));\n}\n true ? ScrollbarSize.propTypes = {\n onChange: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func).isRequired\n} : 0;\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@mui/material/Tabs/ScrollbarSize.js?"); + +/***/ }), + +/***/ "./node_modules/@mui/material/Tabs/Tabs.js": +/*!*************************************************!*\ + !*** ./node_modules/@mui/material/Tabs/Tabs.js ***! + \*************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutPropertiesLoose */ \"./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var react_is__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-is */ \"./node_modules/@mui/material/node_modules/react-is/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_21___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_21__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clsx */ \"./node_modules/clsx/dist/clsx.mjs\");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/refType.js\");\n/* harmony import */ var _mui_base__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/base */ \"./node_modules/@mui/utils/esm/composeClasses/composeClasses.js\");\n/* harmony import */ var _mui_base__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/base */ \"./node_modules/@mui/base/utils/useSlotProps.js\");\n/* harmony import */ var _styles_styled__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../styles/styled */ \"./node_modules/@mui/material/styles/styled.js\");\n/* harmony import */ var _styles_useThemeProps__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../styles/useThemeProps */ \"./node_modules/@mui/material/styles/useThemeProps.js\");\n/* harmony import */ var _styles_useTheme__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../styles/useTheme */ \"./node_modules/@mui/material/styles/useTheme.js\");\n/* harmony import */ var _utils_debounce__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../utils/debounce */ \"./node_modules/@mui/material/utils/debounce.js\");\n/* harmony import */ var _utils_scrollLeft__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../utils/scrollLeft */ \"./node_modules/@mui/utils/esm/scrollLeft.js\");\n/* harmony import */ var _internal_animate__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../internal/animate */ \"./node_modules/@mui/material/internal/animate.js\");\n/* harmony import */ var _ScrollbarSize__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./ScrollbarSize */ \"./node_modules/@mui/material/Tabs/ScrollbarSize.js\");\n/* harmony import */ var _TabScrollButton__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../TabScrollButton */ \"./node_modules/@mui/material/TabScrollButton/TabScrollButton.js\");\n/* harmony import */ var _utils_useEventCallback__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../utils/useEventCallback */ \"./node_modules/@mui/material/utils/useEventCallback.js\");\n/* harmony import */ var _tabsClasses__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./tabsClasses */ \"./node_modules/@mui/material/Tabs/tabsClasses.js\");\n/* harmony import */ var _utils_ownerDocument__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../utils/ownerDocument */ \"./node_modules/@mui/material/utils/ownerDocument.js\");\n/* harmony import */ var _utils_ownerWindow__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../utils/ownerWindow */ \"./node_modules/@mui/material/utils/ownerWindow.js\");\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\n'use client';\n\n\n\nconst _excluded = [\"aria-label\", \"aria-labelledby\", \"action\", \"centered\", \"children\", \"className\", \"component\", \"allowScrollButtonsMobile\", \"indicatorColor\", \"onChange\", \"orientation\", \"ScrollButtonComponent\", \"scrollButtons\", \"selectionFollowsFocus\", \"slots\", \"slotProps\", \"TabIndicatorProps\", \"TabScrollButtonProps\", \"textColor\", \"value\", \"variant\", \"visibleScrollbar\"];\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst nextItem = (list, item) => {\n if (list === item) {\n return list.firstChild;\n }\n if (item && item.nextElementSibling) {\n return item.nextElementSibling;\n }\n return list.firstChild;\n};\nconst previousItem = (list, item) => {\n if (list === item) {\n return list.lastChild;\n }\n if (item && item.previousElementSibling) {\n return item.previousElementSibling;\n }\n return list.lastChild;\n};\nconst moveFocus = (list, currentFocus, traversalFunction) => {\n let wrappedOnce = false;\n let nextFocus = traversalFunction(list, currentFocus);\n while (nextFocus) {\n // Prevent infinite loop.\n if (nextFocus === list.firstChild) {\n if (wrappedOnce) {\n return;\n }\n wrappedOnce = true;\n }\n\n // Same logic as useAutocomplete.js\n const nextFocusDisabled = nextFocus.disabled || nextFocus.getAttribute('aria-disabled') === 'true';\n if (!nextFocus.hasAttribute('tabindex') || nextFocusDisabled) {\n // Move to the next element.\n nextFocus = traversalFunction(list, nextFocus);\n } else {\n nextFocus.focus();\n return;\n }\n }\n};\nconst useUtilityClasses = ownerState => {\n const {\n vertical,\n fixed,\n hideScrollbar,\n scrollableX,\n scrollableY,\n centered,\n scrollButtonsHideMobile,\n classes\n } = ownerState;\n const slots = {\n root: ['root', vertical && 'vertical'],\n scroller: ['scroller', fixed && 'fixed', hideScrollbar && 'hideScrollbar', scrollableX && 'scrollableX', scrollableY && 'scrollableY'],\n flexContainer: ['flexContainer', vertical && 'flexContainerVertical', centered && 'centered'],\n indicator: ['indicator'],\n scrollButtons: ['scrollButtons', scrollButtonsHideMobile && 'scrollButtonsHideMobile'],\n scrollableX: [scrollableX && 'scrollableX'],\n hideScrollbar: [hideScrollbar && 'hideScrollbar']\n };\n return (0,_mui_base__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(slots, _tabsClasses__WEBPACK_IMPORTED_MODULE_7__.getTabsUtilityClass, classes);\n};\nconst TabsRoot = (0,_styles_styled__WEBPACK_IMPORTED_MODULE_8__[\"default\"])('div', {\n name: 'MuiTabs',\n slot: 'Root',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [{\n [`& .${_tabsClasses__WEBPACK_IMPORTED_MODULE_7__[\"default\"].scrollButtons}`]: styles.scrollButtons\n }, {\n [`& .${_tabsClasses__WEBPACK_IMPORTED_MODULE_7__[\"default\"].scrollButtons}`]: ownerState.scrollButtonsHideMobile && styles.scrollButtonsHideMobile\n }, styles.root, ownerState.vertical && styles.vertical];\n }\n})(({\n ownerState,\n theme\n}) => (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n overflow: 'hidden',\n minHeight: 48,\n // Add iOS momentum scrolling for iOS < 13.0\n WebkitOverflowScrolling: 'touch',\n display: 'flex'\n}, ownerState.vertical && {\n flexDirection: 'column'\n}, ownerState.scrollButtonsHideMobile && {\n [`& .${_tabsClasses__WEBPACK_IMPORTED_MODULE_7__[\"default\"].scrollButtons}`]: {\n [theme.breakpoints.down('sm')]: {\n display: 'none'\n }\n }\n}));\nconst TabsScroller = (0,_styles_styled__WEBPACK_IMPORTED_MODULE_8__[\"default\"])('div', {\n name: 'MuiTabs',\n slot: 'Scroller',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.scroller, ownerState.fixed && styles.fixed, ownerState.hideScrollbar && styles.hideScrollbar, ownerState.scrollableX && styles.scrollableX, ownerState.scrollableY && styles.scrollableY];\n }\n})(({\n ownerState\n}) => (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n position: 'relative',\n display: 'inline-block',\n flex: '1 1 auto',\n whiteSpace: 'nowrap'\n}, ownerState.fixed && {\n overflowX: 'hidden',\n width: '100%'\n}, ownerState.hideScrollbar && {\n // Hide dimensionless scrollbar on macOS\n scrollbarWidth: 'none',\n // Firefox\n '&::-webkit-scrollbar': {\n display: 'none' // Safari + Chrome\n }\n}, ownerState.scrollableX && {\n overflowX: 'auto',\n overflowY: 'hidden'\n}, ownerState.scrollableY && {\n overflowY: 'auto',\n overflowX: 'hidden'\n}));\nconst FlexContainer = (0,_styles_styled__WEBPACK_IMPORTED_MODULE_8__[\"default\"])('div', {\n name: 'MuiTabs',\n slot: 'FlexContainer',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.flexContainer, ownerState.vertical && styles.flexContainerVertical, ownerState.centered && styles.centered];\n }\n})(({\n ownerState\n}) => (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n display: 'flex'\n}, ownerState.vertical && {\n flexDirection: 'column'\n}, ownerState.centered && {\n justifyContent: 'center'\n}));\nconst TabsIndicator = (0,_styles_styled__WEBPACK_IMPORTED_MODULE_8__[\"default\"])('span', {\n name: 'MuiTabs',\n slot: 'Indicator',\n overridesResolver: (props, styles) => styles.indicator\n})(({\n ownerState,\n theme\n}) => (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n position: 'absolute',\n height: 2,\n bottom: 0,\n width: '100%',\n transition: theme.transitions.create()\n}, ownerState.indicatorColor === 'primary' && {\n backgroundColor: (theme.vars || theme).palette.primary.main\n}, ownerState.indicatorColor === 'secondary' && {\n backgroundColor: (theme.vars || theme).palette.secondary.main\n}, ownerState.vertical && {\n height: '100%',\n width: 2,\n right: 0\n}));\nconst TabsScrollbarSize = (0,_styles_styled__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(_ScrollbarSize__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n name: 'MuiTabs',\n slot: 'ScrollbarSize'\n})({\n overflowX: 'auto',\n overflowY: 'hidden',\n // Hide dimensionless scrollbar on macOS\n scrollbarWidth: 'none',\n // Firefox\n '&::-webkit-scrollbar': {\n display: 'none' // Safari + Chrome\n }\n});\n\nconst defaultIndicatorStyle = {};\nlet warnedOnceTabPresent = false;\nconst Tabs = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.forwardRef(function Tabs(inProps, ref) {\n const props = (0,_styles_useThemeProps__WEBPACK_IMPORTED_MODULE_10__[\"default\"])({\n props: inProps,\n name: 'MuiTabs'\n });\n const theme = (0,_styles_useTheme__WEBPACK_IMPORTED_MODULE_11__[\"default\"])();\n const isRtl = theme.direction === 'rtl';\n const {\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n action,\n centered = false,\n children: childrenProp,\n className,\n component = 'div',\n allowScrollButtonsMobile = false,\n indicatorColor = 'primary',\n onChange,\n orientation = 'horizontal',\n ScrollButtonComponent = _TabScrollButton__WEBPACK_IMPORTED_MODULE_12__[\"default\"],\n scrollButtons = 'auto',\n selectionFollowsFocus,\n slots = {},\n slotProps = {},\n TabIndicatorProps = {},\n TabScrollButtonProps = {},\n textColor = 'primary',\n value,\n variant = 'standard',\n visibleScrollbar = false\n } = props,\n other = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(props, _excluded);\n const scrollable = variant === 'scrollable';\n const vertical = orientation === 'vertical';\n const scrollStart = vertical ? 'scrollTop' : 'scrollLeft';\n const start = vertical ? 'top' : 'left';\n const end = vertical ? 'bottom' : 'right';\n const clientSize = vertical ? 'clientHeight' : 'clientWidth';\n const size = vertical ? 'height' : 'width';\n const ownerState = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, props, {\n component,\n allowScrollButtonsMobile,\n indicatorColor,\n orientation,\n vertical,\n scrollButtons,\n textColor,\n variant,\n visibleScrollbar,\n fixed: !scrollable,\n hideScrollbar: scrollable && !visibleScrollbar,\n scrollableX: scrollable && !vertical,\n scrollableY: scrollable && vertical,\n centered: centered && !scrollable,\n scrollButtonsHideMobile: !allowScrollButtonsMobile\n });\n const classes = useUtilityClasses(ownerState);\n const startScrollButtonIconProps = (0,_mui_base__WEBPACK_IMPORTED_MODULE_13__.useSlotProps)({\n elementType: slots.StartScrollButtonIcon,\n externalSlotProps: slotProps.startScrollButtonIcon,\n ownerState\n });\n const endScrollButtonIconProps = (0,_mui_base__WEBPACK_IMPORTED_MODULE_13__.useSlotProps)({\n elementType: slots.EndScrollButtonIcon,\n externalSlotProps: slotProps.endScrollButtonIcon,\n ownerState\n });\n if (true) {\n if (centered && scrollable) {\n console.error('MUI: You can not use the `centered={true}` and `variant=\"scrollable\"` properties ' + 'at the same time on a `Tabs` component.');\n }\n }\n const [mounted, setMounted] = react__WEBPACK_IMPORTED_MODULE_2__.useState(false);\n const [indicatorStyle, setIndicatorStyle] = react__WEBPACK_IMPORTED_MODULE_2__.useState(defaultIndicatorStyle);\n const [displayStartScroll, setDisplayStartScroll] = react__WEBPACK_IMPORTED_MODULE_2__.useState(false);\n const [displayEndScroll, setDisplayEndScroll] = react__WEBPACK_IMPORTED_MODULE_2__.useState(false);\n const [updateScrollObserver, setUpdateScrollObserver] = react__WEBPACK_IMPORTED_MODULE_2__.useState(false);\n const [scrollerStyle, setScrollerStyle] = react__WEBPACK_IMPORTED_MODULE_2__.useState({\n overflow: 'hidden',\n scrollbarWidth: 0\n });\n const valueToIndex = new Map();\n const tabsRef = react__WEBPACK_IMPORTED_MODULE_2__.useRef(null);\n const tabListRef = react__WEBPACK_IMPORTED_MODULE_2__.useRef(null);\n const getTabsMeta = () => {\n const tabsNode = tabsRef.current;\n let tabsMeta;\n if (tabsNode) {\n const rect = tabsNode.getBoundingClientRect();\n // create a new object with ClientRect class props + scrollLeft\n tabsMeta = {\n clientWidth: tabsNode.clientWidth,\n scrollLeft: tabsNode.scrollLeft,\n scrollTop: tabsNode.scrollTop,\n scrollLeftNormalized: (0,_utils_scrollLeft__WEBPACK_IMPORTED_MODULE_14__.getNormalizedScrollLeft)(tabsNode, theme.direction),\n scrollWidth: tabsNode.scrollWidth,\n top: rect.top,\n bottom: rect.bottom,\n left: rect.left,\n right: rect.right\n };\n }\n let tabMeta;\n if (tabsNode && value !== false) {\n const children = tabListRef.current.children;\n if (children.length > 0) {\n const tab = children[valueToIndex.get(value)];\n if (true) {\n if (!tab) {\n console.error([`MUI: The \\`value\\` provided to the Tabs component is invalid.`, `None of the Tabs' children match with \"${value}\".`, valueToIndex.keys ? `You can provide one of the following values: ${Array.from(valueToIndex.keys()).join(', ')}.` : null].join('\\n'));\n }\n }\n tabMeta = tab ? tab.getBoundingClientRect() : null;\n if (true) {\n if ( true && !warnedOnceTabPresent && tabMeta && tabMeta.width === 0 && tabMeta.height === 0 &&\n // if the whole Tabs component is hidden, don't warn\n tabsMeta.clientWidth !== 0) {\n tabsMeta = null;\n console.error(['MUI: The `value` provided to the Tabs component is invalid.', `The Tab with this \\`value\\` (\"${value}\") is not part of the document layout.`, \"Make sure the tab item is present in the document or that it's not `display: none`.\"].join('\\n'));\n warnedOnceTabPresent = true;\n }\n }\n }\n }\n return {\n tabsMeta,\n tabMeta\n };\n };\n const updateIndicatorState = (0,_utils_useEventCallback__WEBPACK_IMPORTED_MODULE_15__[\"default\"])(() => {\n const {\n tabsMeta,\n tabMeta\n } = getTabsMeta();\n let startValue = 0;\n let startIndicator;\n if (vertical) {\n startIndicator = 'top';\n if (tabMeta && tabsMeta) {\n startValue = tabMeta.top - tabsMeta.top + tabsMeta.scrollTop;\n }\n } else {\n startIndicator = isRtl ? 'right' : 'left';\n if (tabMeta && tabsMeta) {\n const correction = isRtl ? tabsMeta.scrollLeftNormalized + tabsMeta.clientWidth - tabsMeta.scrollWidth : tabsMeta.scrollLeft;\n startValue = (isRtl ? -1 : 1) * (tabMeta[startIndicator] - tabsMeta[startIndicator] + correction);\n }\n }\n const newIndicatorStyle = {\n [startIndicator]: startValue,\n // May be wrong until the font is loaded.\n [size]: tabMeta ? tabMeta[size] : 0\n };\n\n // IE11 support, replace with Number.isNaN\n // eslint-disable-next-line no-restricted-globals\n if (isNaN(indicatorStyle[startIndicator]) || isNaN(indicatorStyle[size])) {\n setIndicatorStyle(newIndicatorStyle);\n } else {\n const dStart = Math.abs(indicatorStyle[startIndicator] - newIndicatorStyle[startIndicator]);\n const dSize = Math.abs(indicatorStyle[size] - newIndicatorStyle[size]);\n if (dStart >= 1 || dSize >= 1) {\n setIndicatorStyle(newIndicatorStyle);\n }\n }\n });\n const scroll = (scrollValue, {\n animation = true\n } = {}) => {\n if (animation) {\n (0,_internal_animate__WEBPACK_IMPORTED_MODULE_16__[\"default\"])(scrollStart, tabsRef.current, scrollValue, {\n duration: theme.transitions.duration.standard\n });\n } else {\n tabsRef.current[scrollStart] = scrollValue;\n }\n };\n const moveTabsScroll = delta => {\n let scrollValue = tabsRef.current[scrollStart];\n if (vertical) {\n scrollValue += delta;\n } else {\n scrollValue += delta * (isRtl ? -1 : 1);\n // Fix for Edge\n scrollValue *= isRtl && (0,_utils_scrollLeft__WEBPACK_IMPORTED_MODULE_14__.detectScrollType)() === 'reverse' ? -1 : 1;\n }\n scroll(scrollValue);\n };\n const getScrollSize = () => {\n const containerSize = tabsRef.current[clientSize];\n let totalSize = 0;\n const children = Array.from(tabListRef.current.children);\n for (let i = 0; i < children.length; i += 1) {\n const tab = children[i];\n if (totalSize + tab[clientSize] > containerSize) {\n // If the first item is longer than the container size, then only scroll\n // by the container size.\n if (i === 0) {\n totalSize = containerSize;\n }\n break;\n }\n totalSize += tab[clientSize];\n }\n return totalSize;\n };\n const handleStartScrollClick = () => {\n moveTabsScroll(-1 * getScrollSize());\n };\n const handleEndScrollClick = () => {\n moveTabsScroll(getScrollSize());\n };\n\n // TODO Remove as browser support for hiding the scrollbar\n // with CSS improves.\n const handleScrollbarSizeChange = react__WEBPACK_IMPORTED_MODULE_2__.useCallback(scrollbarWidth => {\n setScrollerStyle({\n overflow: null,\n scrollbarWidth\n });\n }, []);\n const getConditionalElements = () => {\n const conditionalElements = {};\n conditionalElements.scrollbarSizeListener = scrollable ? /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(TabsScrollbarSize, {\n onChange: handleScrollbarSizeChange,\n className: (0,clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.scrollableX, classes.hideScrollbar)\n }) : null;\n const scrollButtonsActive = displayStartScroll || displayEndScroll;\n const showScrollButtons = scrollable && (scrollButtons === 'auto' && scrollButtonsActive || scrollButtons === true);\n conditionalElements.scrollButtonStart = showScrollButtons ? /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(ScrollButtonComponent, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n slots: {\n StartScrollButtonIcon: slots.StartScrollButtonIcon\n },\n slotProps: {\n startScrollButtonIcon: startScrollButtonIconProps\n },\n orientation: orientation,\n direction: isRtl ? 'right' : 'left',\n onClick: handleStartScrollClick,\n disabled: !displayStartScroll\n }, TabScrollButtonProps, {\n className: (0,clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.scrollButtons, TabScrollButtonProps.className)\n })) : null;\n conditionalElements.scrollButtonEnd = showScrollButtons ? /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(ScrollButtonComponent, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n slots: {\n EndScrollButtonIcon: slots.EndScrollButtonIcon\n },\n slotProps: {\n endScrollButtonIcon: endScrollButtonIconProps\n },\n orientation: orientation,\n direction: isRtl ? 'left' : 'right',\n onClick: handleEndScrollClick,\n disabled: !displayEndScroll\n }, TabScrollButtonProps, {\n className: (0,clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.scrollButtons, TabScrollButtonProps.className)\n })) : null;\n return conditionalElements;\n };\n const scrollSelectedIntoView = (0,_utils_useEventCallback__WEBPACK_IMPORTED_MODULE_15__[\"default\"])(animation => {\n const {\n tabsMeta,\n tabMeta\n } = getTabsMeta();\n if (!tabMeta || !tabsMeta) {\n return;\n }\n if (tabMeta[start] < tabsMeta[start]) {\n // left side of button is out of view\n const nextScrollStart = tabsMeta[scrollStart] + (tabMeta[start] - tabsMeta[start]);\n scroll(nextScrollStart, {\n animation\n });\n } else if (tabMeta[end] > tabsMeta[end]) {\n // right side of button is out of view\n const nextScrollStart = tabsMeta[scrollStart] + (tabMeta[end] - tabsMeta[end]);\n scroll(nextScrollStart, {\n animation\n });\n }\n });\n const updateScrollButtonState = (0,_utils_useEventCallback__WEBPACK_IMPORTED_MODULE_15__[\"default\"])(() => {\n if (scrollable && scrollButtons !== false) {\n setUpdateScrollObserver(!updateScrollObserver);\n }\n });\n react__WEBPACK_IMPORTED_MODULE_2__.useEffect(() => {\n const handleResize = (0,_utils_debounce__WEBPACK_IMPORTED_MODULE_17__[\"default\"])(() => {\n // If the Tabs component is replaced by Suspense with a fallback, the last\n // ResizeObserver's handler that runs because of the change in the layout is trying to\n // access a dom node that is no longer there (as the fallback component is being shown instead).\n // See https://github.com/mui/material-ui/issues/33276\n // TODO: Add tests that will ensure the component is not failing when\n // replaced by Suspense with a fallback, once React is updated to version 18\n if (tabsRef.current) {\n updateIndicatorState();\n }\n });\n const win = (0,_utils_ownerWindow__WEBPACK_IMPORTED_MODULE_18__[\"default\"])(tabsRef.current);\n win.addEventListener('resize', handleResize);\n let resizeObserver;\n if (typeof ResizeObserver !== 'undefined') {\n resizeObserver = new ResizeObserver(handleResize);\n Array.from(tabListRef.current.children).forEach(child => {\n resizeObserver.observe(child);\n });\n }\n return () => {\n handleResize.clear();\n win.removeEventListener('resize', handleResize);\n if (resizeObserver) {\n resizeObserver.disconnect();\n }\n };\n }, [updateIndicatorState]);\n\n /**\n * Toggle visibility of start and end scroll buttons\n * Using IntersectionObserver on first and last Tabs.\n */\n react__WEBPACK_IMPORTED_MODULE_2__.useEffect(() => {\n const tabListChildren = Array.from(tabListRef.current.children);\n const length = tabListChildren.length;\n if (typeof IntersectionObserver !== 'undefined' && length > 0 && scrollable && scrollButtons !== false) {\n const firstTab = tabListChildren[0];\n const lastTab = tabListChildren[length - 1];\n const observerOptions = {\n root: tabsRef.current,\n threshold: 0.99\n };\n const handleScrollButtonStart = entries => {\n setDisplayStartScroll(!entries[0].isIntersecting);\n };\n const firstObserver = new IntersectionObserver(handleScrollButtonStart, observerOptions);\n firstObserver.observe(firstTab);\n const handleScrollButtonEnd = entries => {\n setDisplayEndScroll(!entries[0].isIntersecting);\n };\n const lastObserver = new IntersectionObserver(handleScrollButtonEnd, observerOptions);\n lastObserver.observe(lastTab);\n return () => {\n firstObserver.disconnect();\n lastObserver.disconnect();\n };\n }\n return undefined;\n }, [scrollable, scrollButtons, updateScrollObserver, childrenProp == null ? void 0 : childrenProp.length]);\n react__WEBPACK_IMPORTED_MODULE_2__.useEffect(() => {\n setMounted(true);\n }, []);\n react__WEBPACK_IMPORTED_MODULE_2__.useEffect(() => {\n updateIndicatorState();\n });\n react__WEBPACK_IMPORTED_MODULE_2__.useEffect(() => {\n // Don't animate on the first render.\n scrollSelectedIntoView(defaultIndicatorStyle !== indicatorStyle);\n }, [scrollSelectedIntoView, indicatorStyle]);\n react__WEBPACK_IMPORTED_MODULE_2__.useImperativeHandle(action, () => ({\n updateIndicator: updateIndicatorState,\n updateScrollButtons: updateScrollButtonState\n }), [updateIndicatorState, updateScrollButtonState]);\n const indicator = /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(TabsIndicator, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, TabIndicatorProps, {\n className: (0,clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.indicator, TabIndicatorProps.className),\n ownerState: ownerState,\n style: (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, indicatorStyle, TabIndicatorProps.style)\n }));\n let childIndex = 0;\n const children = react__WEBPACK_IMPORTED_MODULE_2__.Children.map(childrenProp, child => {\n if (! /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.isValidElement(child)) {\n return null;\n }\n if (true) {\n if ((0,react_is__WEBPACK_IMPORTED_MODULE_3__.isFragment)(child)) {\n console.error([\"MUI: The Tabs component doesn't accept a Fragment as a child.\", 'Consider providing an array instead.'].join('\\n'));\n }\n }\n const childValue = child.props.value === undefined ? childIndex : child.props.value;\n valueToIndex.set(childValue, childIndex);\n const selected = childValue === value;\n childIndex += 1;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.cloneElement(child, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n fullWidth: variant === 'fullWidth',\n indicator: selected && !mounted && indicator,\n selected,\n selectionFollowsFocus,\n onChange,\n textColor,\n value: childValue\n }, childIndex === 1 && value === false && !child.props.tabIndex ? {\n tabIndex: 0\n } : {}));\n });\n const handleKeyDown = event => {\n const list = tabListRef.current;\n const currentFocus = (0,_utils_ownerDocument__WEBPACK_IMPORTED_MODULE_19__[\"default\"])(list).activeElement;\n // Keyboard navigation assumes that [role=\"tab\"] are siblings\n // though we might warn in the future about nested, interactive elements\n // as a a11y violation\n const role = currentFocus.getAttribute('role');\n if (role !== 'tab') {\n return;\n }\n let previousItemKey = orientation === 'horizontal' ? 'ArrowLeft' : 'ArrowUp';\n let nextItemKey = orientation === 'horizontal' ? 'ArrowRight' : 'ArrowDown';\n if (orientation === 'horizontal' && isRtl) {\n // swap previousItemKey with nextItemKey\n previousItemKey = 'ArrowRight';\n nextItemKey = 'ArrowLeft';\n }\n switch (event.key) {\n case previousItemKey:\n event.preventDefault();\n moveFocus(list, currentFocus, previousItem);\n break;\n case nextItemKey:\n event.preventDefault();\n moveFocus(list, currentFocus, nextItem);\n break;\n case 'Home':\n event.preventDefault();\n moveFocus(list, null, nextItem);\n break;\n case 'End':\n event.preventDefault();\n moveFocus(list, null, previousItem);\n break;\n default:\n break;\n }\n };\n const conditionalElements = getConditionalElements();\n return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(TabsRoot, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n className: (0,clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(classes.root, className),\n ownerState: ownerState,\n ref: ref,\n as: component\n }, other, {\n children: [conditionalElements.scrollButtonStart, conditionalElements.scrollbarSizeListener, /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(TabsScroller, {\n className: classes.scroller,\n ownerState: ownerState,\n style: {\n overflow: scrollerStyle.overflow,\n [vertical ? `margin${isRtl ? 'Left' : 'Right'}` : 'marginBottom']: visibleScrollbar ? undefined : -scrollerStyle.scrollbarWidth\n },\n ref: tabsRef,\n children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(FlexContainer, {\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-orientation\": orientation === 'vertical' ? 'vertical' : null,\n className: classes.flexContainer,\n ownerState: ownerState,\n onKeyDown: handleKeyDown,\n ref: tabListRef,\n role: \"tablist\",\n children: children\n }), mounted && indicator]\n }), conditionalElements.scrollButtonEnd]\n }));\n});\n true ? Tabs.propTypes /* remove-proptypes */ = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n /**\n * Callback fired when the component mounts.\n * This is useful when you want to trigger an action programmatically.\n * It supports two actions: `updateIndicator()` and `updateScrollButtons()`\n *\n * @param {object} actions This object contains all possible actions\n * that can be triggered programmatically.\n */\n action: _mui_utils__WEBPACK_IMPORTED_MODULE_20__[\"default\"],\n /**\n * If `true`, the scroll buttons aren't forced hidden on mobile.\n * By default the scroll buttons are hidden on mobile and takes precedence over `scrollButtons`.\n * @default false\n */\n allowScrollButtonsMobile: (prop_types__WEBPACK_IMPORTED_MODULE_21___default().bool),\n /**\n * The label for the Tabs as a string.\n */\n 'aria-label': (prop_types__WEBPACK_IMPORTED_MODULE_21___default().string),\n /**\n * An id or list of ids separated by a space that label the Tabs.\n */\n 'aria-labelledby': (prop_types__WEBPACK_IMPORTED_MODULE_21___default().string),\n /**\n * If `true`, the tabs are centered.\n * This prop is intended for large views.\n * @default false\n */\n centered: (prop_types__WEBPACK_IMPORTED_MODULE_21___default().bool),\n /**\n * The content of the component.\n */\n children: (prop_types__WEBPACK_IMPORTED_MODULE_21___default().node),\n /**\n * Override or extend the styles applied to the component.\n */\n classes: (prop_types__WEBPACK_IMPORTED_MODULE_21___default().object),\n /**\n * @ignore\n */\n className: (prop_types__WEBPACK_IMPORTED_MODULE_21___default().string),\n /**\n * The component used for the root node.\n * Either a string to use a HTML element or a component.\n */\n component: (prop_types__WEBPACK_IMPORTED_MODULE_21___default().elementType),\n /**\n * Determines the color of the indicator.\n * @default 'primary'\n */\n indicatorColor: prop_types__WEBPACK_IMPORTED_MODULE_21___default().oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_21___default().oneOf(['primary', 'secondary']), (prop_types__WEBPACK_IMPORTED_MODULE_21___default().string)]),\n /**\n * Callback fired when the value changes.\n *\n * @param {React.SyntheticEvent} event The event source of the callback. **Warning**: This is a generic event not a change event.\n * @param {any} value We default to the index of the child (number)\n */\n onChange: (prop_types__WEBPACK_IMPORTED_MODULE_21___default().func),\n /**\n * The component orientation (layout flow direction).\n * @default 'horizontal'\n */\n orientation: prop_types__WEBPACK_IMPORTED_MODULE_21___default().oneOf(['horizontal', 'vertical']),\n /**\n * The component used to render the scroll buttons.\n * @default TabScrollButton\n */\n ScrollButtonComponent: (prop_types__WEBPACK_IMPORTED_MODULE_21___default().elementType),\n /**\n * Determine behavior of scroll buttons when tabs are set to scroll:\n *\n * - `auto` will only present them when not all the items are visible.\n * - `true` will always present them.\n * - `false` will never present them.\n *\n * By default the scroll buttons are hidden on mobile.\n * This behavior can be disabled with `allowScrollButtonsMobile`.\n * @default 'auto'\n */\n scrollButtons: prop_types__WEBPACK_IMPORTED_MODULE_21___default().oneOf(['auto', false, true]),\n /**\n * If `true` the selected tab changes on focus. Otherwise it only\n * changes on activation.\n */\n selectionFollowsFocus: (prop_types__WEBPACK_IMPORTED_MODULE_21___default().bool),\n /**\n * The extra props for the slot components.\n * You can override the existing props or add new ones.\n * @default {}\n */\n slotProps: prop_types__WEBPACK_IMPORTED_MODULE_21___default().shape({\n endScrollButtonIcon: prop_types__WEBPACK_IMPORTED_MODULE_21___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_21___default().func), (prop_types__WEBPACK_IMPORTED_MODULE_21___default().object)]),\n startScrollButtonIcon: prop_types__WEBPACK_IMPORTED_MODULE_21___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_21___default().func), (prop_types__WEBPACK_IMPORTED_MODULE_21___default().object)])\n }),\n /**\n * The components used for each slot inside.\n * @default {}\n */\n slots: prop_types__WEBPACK_IMPORTED_MODULE_21___default().shape({\n EndScrollButtonIcon: (prop_types__WEBPACK_IMPORTED_MODULE_21___default().elementType),\n StartScrollButtonIcon: (prop_types__WEBPACK_IMPORTED_MODULE_21___default().elementType)\n }),\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: prop_types__WEBPACK_IMPORTED_MODULE_21___default().oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_21___default().arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_21___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_21___default().func), (prop_types__WEBPACK_IMPORTED_MODULE_21___default().object), (prop_types__WEBPACK_IMPORTED_MODULE_21___default().bool)])), (prop_types__WEBPACK_IMPORTED_MODULE_21___default().func), (prop_types__WEBPACK_IMPORTED_MODULE_21___default().object)]),\n /**\n * Props applied to the tab indicator element.\n * @default {}\n */\n TabIndicatorProps: (prop_types__WEBPACK_IMPORTED_MODULE_21___default().object),\n /**\n * Props applied to the [`TabScrollButton`](/material-ui/api/tab-scroll-button/) element.\n * @default {}\n */\n TabScrollButtonProps: (prop_types__WEBPACK_IMPORTED_MODULE_21___default().object),\n /**\n * Determines the color of the `Tab`.\n * @default 'primary'\n */\n textColor: prop_types__WEBPACK_IMPORTED_MODULE_21___default().oneOf(['inherit', 'primary', 'secondary']),\n /**\n * The value of the currently selected `Tab`.\n * If you don't want any selected `Tab`, you can set this prop to `false`.\n */\n value: (prop_types__WEBPACK_IMPORTED_MODULE_21___default().any),\n /**\n * Determines additional display behavior of the tabs:\n *\n * - `scrollable` will invoke scrolling properties and allow for horizontally\n * scrolling (or swiping) of the tab bar.\n * -`fullWidth` will make the tabs grow to use all the available space,\n * which should be used for small views, like on mobile.\n * - `standard` will render the default state.\n * @default 'standard'\n */\n variant: prop_types__WEBPACK_IMPORTED_MODULE_21___default().oneOf(['fullWidth', 'scrollable', 'standard']),\n /**\n * If `true`, the scrollbar is visible. It can be useful when displaying\n * a long vertical list of tabs.\n * @default false\n */\n visibleScrollbar: (prop_types__WEBPACK_IMPORTED_MODULE_21___default().bool)\n} : 0;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Tabs);\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@mui/material/Tabs/Tabs.js?"); + +/***/ }), + +/***/ "./node_modules/@mui/material/Tabs/tabsClasses.js": +/*!********************************************************!*\ + !*** ./node_modules/@mui/material/Tabs/tabsClasses.js ***! + \********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ getTabsUtilityClass: () => (/* binding */ getTabsUtilityClass)\n/* harmony export */ });\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/generateUtilityClasses/generateUtilityClasses.js\");\n/* harmony import */ var _generateUtilityClass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../generateUtilityClass */ \"./node_modules/@mui/utils/esm/generateUtilityClass/generateUtilityClass.js\");\n\n\nfunction getTabsUtilityClass(slot) {\n return (0,_generateUtilityClass__WEBPACK_IMPORTED_MODULE_0__[\"default\"])('MuiTabs', slot);\n}\nconst tabsClasses = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"])('MuiTabs', ['root', 'vertical', 'flexContainer', 'flexContainerVertical', 'centered', 'scroller', 'fixed', 'scrollableX', 'scrollableY', 'hideScrollbar', 'scrollButtons', 'scrollButtonsHideMobile', 'indicator']);\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (tabsClasses);\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@mui/material/Tabs/tabsClasses.js?"); + +/***/ }), + /***/ "./node_modules/@mui/material/TextField/TextField.js": /*!***********************************************************!*\ !*** ./node_modules/@mui/material/TextField/TextField.js ***! @@ -1911,6 +1988,17 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./node_modules/@mui/material/internal/animate.js": +/*!********************************************************!*\ + !*** ./node_modules/@mui/material/internal/animate.js ***! + \********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ animate)\n/* harmony export */ });\nfunction easeInOutSin(time) {\n return (1 + Math.sin(Math.PI * time - Math.PI / 2)) / 2;\n}\nfunction animate(property, element, to, options = {}, cb = () => {}) {\n const {\n ease = easeInOutSin,\n duration = 300 // standard\n } = options;\n let start = null;\n const from = element[property];\n let cancelled = false;\n const cancel = () => {\n cancelled = true;\n };\n const step = timestamp => {\n if (cancelled) {\n cb(new Error('Animation cancelled'));\n return;\n }\n if (start === null) {\n start = timestamp;\n }\n const time = Math.min(1, (timestamp - start) / duration);\n element[property] = ease(time) * (to - from) + from;\n if (time >= 1) {\n requestAnimationFrame(() => {\n cb(null);\n });\n return;\n }\n requestAnimationFrame(step);\n };\n if (from === to) {\n cb(new Error('Element already at target position'));\n return cancel;\n }\n requestAnimationFrame(step);\n return cancel;\n}\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@mui/material/internal/animate.js?"); + +/***/ }), + /***/ "./node_modules/@mui/material/internal/svg-icons/ArrowDropDown.js": /*!************************************************************************!*\ !*** ./node_modules/@mui/material/internal/svg-icons/ArrowDropDown.js ***! @@ -1933,6 +2021,28 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./node_modules/@mui/material/internal/svg-icons/KeyboardArrowLeft.js": +/*!****************************************************************************!*\ + !*** ./node_modules/@mui/material/internal/svg-icons/KeyboardArrowLeft.js ***! + \****************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\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 _utils_createSvgIcon__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../utils/createSvgIcon */ \"./node_modules/@mui/material/utils/createSvgIcon.js\");\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\n'use client';\n\n\n\n\n/**\n * @ignore - internal component.\n */\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_utils_createSvgIcon__WEBPACK_IMPORTED_MODULE_2__[\"default\"])( /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(\"path\", {\n d: \"M15.41 16.09l-4.58-4.59 4.58-4.59L14 5.5l-6 6 6 6z\"\n}), 'KeyboardArrowLeft'));\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@mui/material/internal/svg-icons/KeyboardArrowLeft.js?"); + +/***/ }), + +/***/ "./node_modules/@mui/material/internal/svg-icons/KeyboardArrowRight.js": +/*!*****************************************************************************!*\ + !*** ./node_modules/@mui/material/internal/svg-icons/KeyboardArrowRight.js ***! + \*****************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\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 _utils_createSvgIcon__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../utils/createSvgIcon */ \"./node_modules/@mui/material/utils/createSvgIcon.js\");\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\n'use client';\n\n\n\n\n/**\n * @ignore - internal component.\n */\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_utils_createSvgIcon__WEBPACK_IMPORTED_MODULE_2__[\"default\"])( /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(\"path\", {\n d: \"M8.59 16.34l4.58-4.59-4.58-4.59L10 5.75l6 6-6 6z\"\n}), 'KeyboardArrowRight'));\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@mui/material/internal/svg-icons/KeyboardArrowRight.js?"); + +/***/ }), + /***/ "./node_modules/@mui/material/node_modules/react-is/cjs/react-is.development.js": /*!**************************************************************************************!*\ !*** ./node_modules/@mui/material/node_modules/react-is/cjs/react-is.development.js ***! @@ -2879,6 +2989,17 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./node_modules/@mui/utils/esm/scrollLeft.js": +/*!***************************************************!*\ + !*** ./node_modules/@mui/utils/esm/scrollLeft.js ***! + \***************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ detectScrollType: () => (/* binding */ detectScrollType),\n/* harmony export */ getNormalizedScrollLeft: () => (/* binding */ getNormalizedScrollLeft)\n/* harmony export */ });\n// Source from https://github.com/alitaheri/normalize-scroll-left\nlet cachedType;\n\n/**\n * Based on the jquery plugin https://github.com/othree/jquery.rtl-scroll-type\n *\n * Types of scrollLeft, assuming scrollWidth=100 and direction is rtl.\n *\n * Type | <- Most Left | Most Right -> | Initial\n * ---------------- | ------------ | ------------- | -------\n * default | 0 | 100 | 100\n * negative (spec*) | -100 | 0 | 0\n * reverse | 100 | 0 | 0\n *\n * Edge 85: default\n * Safari 14: negative\n * Chrome 85: negative\n * Firefox 81: negative\n * IE11: reverse\n *\n * spec* https://drafts.csswg.org/cssom-view/#dom-window-scroll\n */\nfunction detectScrollType() {\n if (cachedType) {\n return cachedType;\n }\n const dummy = document.createElement('div');\n const container = document.createElement('div');\n container.style.width = '10px';\n container.style.height = '1px';\n dummy.appendChild(container);\n dummy.dir = 'rtl';\n dummy.style.fontSize = '14px';\n dummy.style.width = '4px';\n dummy.style.height = '1px';\n dummy.style.position = 'absolute';\n dummy.style.top = '-1000px';\n dummy.style.overflow = 'scroll';\n document.body.appendChild(dummy);\n cachedType = 'reverse';\n if (dummy.scrollLeft > 0) {\n cachedType = 'default';\n } else {\n dummy.scrollLeft = 1;\n if (dummy.scrollLeft === 0) {\n cachedType = 'negative';\n }\n }\n document.body.removeChild(dummy);\n return cachedType;\n}\n\n// Based on https://stackoverflow.com/a/24394376\nfunction getNormalizedScrollLeft(element, direction) {\n const scrollLeft = element.scrollLeft;\n\n // Perform the calculations only when direction is rtl to avoid messing up the ltr behavior\n if (direction !== 'rtl') {\n return scrollLeft;\n }\n const type = detectScrollType();\n switch (type) {\n case 'negative':\n return element.scrollWidth - element.clientWidth + scrollLeft;\n case 'reverse':\n return element.scrollWidth - element.clientWidth - scrollLeft;\n default:\n return scrollLeft;\n }\n}\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@mui/utils/esm/scrollLeft.js?"); + +/***/ }), + /***/ "./node_modules/@mui/utils/esm/setRef.js": /*!***********************************************!*\ !*** ./node_modules/@mui/utils/esm/setRef.js ***! @@ -3040,7 +3161,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 */ App: () => (/* binding */ App)\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 react_router_dom__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! react-router-dom */ \"./node_modules/react-router/dist/index.js\");\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! react-router-dom */ \"./node_modules/react-router-dom/dist/index.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./context/application */ \"./app/context/application.js\");\n/* harmony import */ var _context_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./context/navigation */ \"./app/context/navigation.js\");\n/* harmony import */ var _components_p8p_app_error_page__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./components/p8p_app_error_page */ \"./app/components/p8p_app_error_page.js\");\n/* harmony import */ var _components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./components/p8p_app_workspace */ \"./app/components/p8p_app_workspace.js\");\n/* harmony import */ var _components_p8p_panels_menu__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./components/p8p_panels_menu */ \"./app/components/p8p_panels_menu.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../app.text */ \"./app.text.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./config_wrapper */ \"./app/config_wrapper.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга\r\n Приложение\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Роутер\n //Контекст приложения\n //Контекст навигации\n //Страница с ошибкой\n //Рабочее пространство панели\n //Меню панелей\n //Текстовые ресурсы и константы\n //Подключение компонентов к настройкам приложения\n\n//--------------------------\n//Вспомогательные компоненты\n//--------------------------\n\n//Обработка ошибок роутинга\nconst RouterError = ({\n homePath\n}) => {\n //Подключение к контексту навигации\n const {\n navigateTo\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_navigation__WEBPACK_IMPORTED_MODULE_2__.NavigationCtx);\n\n //Извлечем ошибку роутинга\n const routeError = (0,react_router_dom__WEBPACK_IMPORTED_MODULE_8__.useRouteError)();\n\n //Отработка нажатия на кнопку навигации\n const handleNavigate = () => navigateTo({\n path: `${homePath.startsWith(\"/\") ? \"\" : \"/\"}${homePath}`\n });\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_app_error_page__WEBPACK_IMPORTED_MODULE_3__.P8PAppErrorPage, {\n errorMessage: _app_text__WEBPACK_IMPORTED_MODULE_6__.ERRORS_HTTP[routeError.status] ? _app_text__WEBPACK_IMPORTED_MODULE_6__.ERRORS_HTTP[routeError.status] : _app_text__WEBPACK_IMPORTED_MODULE_6__.ERRORS.DEFAULT,\n onNavigate: handleNavigate,\n navigateCaption: _app_text__WEBPACK_IMPORTED_MODULE_6__.BUTTONS.NAVIGATE_HOME\n });\n};\n\n//Контроль свойств - обработка ошибок роутинга\nRouterError.propTypes = {\n homePath: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().string).isRequired\n};\n\n//Главное меню приложения\nconst MainMenu = ({\n panels = []\n} = {}) => {\n //Подключение к контексту навигации\n const {\n navigatePanel,\n isNavigationSearch,\n getNavigationSearch\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_navigation__WEBPACK_IMPORTED_MODULE_2__.NavigationCtx);\n\n //Подключение к контексту приложения\n const {\n configUrlBase,\n pOnlineShowTab\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_1__[\"ApplicationСtx\"]);\n\n //Получим параметры запроса из адресной строки\n const qS = isNavigationSearch() ? getNavigationSearch() : null;\n\n //Отработка действия навигации элемента меню\n const handleItemNavigate = (panel, newTab) => newTab ? pOnlineShowTab({\n id: panel.name,\n url: `${configUrlBase}${panel.url}`,\n caption: panel.caption\n }) : navigatePanel(panel);\n\n //Генерация содержимого\n return qS?.mode === \"DESKTOP\" ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_panels_menu__WEBPACK_IMPORTED_MODULE_5__.P8PPanelsMenuDesktop, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_7__.P8P_PANELS_MENU_GRID_CONFIG_PROPS, {\n group: qS?.group,\n panels: panels,\n onItemNavigate: panel => handleItemNavigate(panel, true)\n })) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_panels_menu__WEBPACK_IMPORTED_MODULE_5__.P8PPanelsMenuGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_7__.P8P_PANELS_MENU_GRID_CONFIG_PROPS, {\n panels: panels,\n onItemNavigate: panel => handleItemNavigate(panel, false)\n }));\n};\n\n//Контроль свойств - главное меню приложения\nMainMenu.propTypes = {\n panels: prop_types__WEBPACK_IMPORTED_MODULE_9___default().arrayOf(_components_p8p_panels_menu__WEBPACK_IMPORTED_MODULE_5__.P8P_PANELS_MENU_PANEL_SHAPE).isRequired\n};\n\n//Рабочее пространство панели\nconst Workspace = ({\n panels = [],\n selectedPanel,\n children\n} = {}) => {\n //Подключение к контексту навигации\n const {\n navigateRoot,\n navigatePanel\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_navigation__WEBPACK_IMPORTED_MODULE_2__.NavigationCtx);\n\n //Отработка действия навигации домой\n const handleHomeNavigate = () => navigateRoot();\n\n //Отработка действия навигации элемента меню\n const handleItemNavigate = panel => navigatePanel(panel);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_4__.P8PAppWorkspace, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_7__.P8P_APP_WORKSPACE_CONFIG_PROPS, {\n panels: panels,\n selectedPanel: selectedPanel,\n onHomeNavigate: handleHomeNavigate,\n onItemNavigate: handleItemNavigate\n }), children);\n};\n\n//Контроль свойств - главное меню приложения\nWorkspace.propTypes = {\n panels: prop_types__WEBPACK_IMPORTED_MODULE_9___default().arrayOf(_components_p8p_panels_menu__WEBPACK_IMPORTED_MODULE_5__.P8P_PANELS_MENU_PANEL_SHAPE).isRequired,\n selectedPanel: _components_p8p_panels_menu__WEBPACK_IMPORTED_MODULE_5__.P8P_PANELS_MENU_PANEL_SHAPE,\n children: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().element)\n};\n\n//Обёртывание элемента в контекст навигации\nconst wrapNavigationContext = children => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_context_navigation__WEBPACK_IMPORTED_MODULE_2__.NavigationContext, null, children);\n\n//-----------\n//Тело модуля\n//-----------\n\n//Приложение\nconst App = () => {\n //Собственное состояние\n const [routes, setRoutes] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]);\n\n //Подключение к контексту приложения\n const {\n appState\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_1__[\"ApplicationСtx\"]);\n\n //Инициализация роутера\n const content = routes.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_8__.RouterProvider, {\n router: (0,react_router_dom__WEBPACK_IMPORTED_MODULE_10__.createHashRouter)(routes)\n }) : null;\n\n //При изменении состояния загрузки панелей\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (appState.panelsLoaded) {\n //Сборка \"веток\" для панелей\n let routes = [{\n path: (0,_context_navigation__WEBPACK_IMPORTED_MODULE_2__.getRootLocation)(),\n element: wrapNavigationContext( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(MainMenu, {\n panels: appState.panels\n })),\n errorElement: wrapNavigationContext( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(RouterError, {\n homePath: (0,_context_navigation__WEBPACK_IMPORTED_MODULE_2__.getRootLocation)()\n }))\n }];\n for (const panel of appState.panels) {\n // eslint-disable-next-line no-undef\n const p = __webpack_require__(\"./app/panels sync recursive ^\\\\.\\\\/.*$\")(`./${panel.path}`);\n routes.push({\n path: `${panel.url}/*`,\n element: wrapNavigationContext( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(Workspace, {\n panels: appState.panels,\n selectedPanel: panel\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(p.RootClass, null))),\n errorElement: wrapNavigationContext( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(RouterError, {\n homePath: panel.url\n }))\n });\n }\n setRoutes(routes);\n }\n }, [appState.panels, appState.panelsLoaded]);\n\n //Генерация содержимого\n return content;\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/app.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ App: () => (/* binding */ App)\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 react_router_dom__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! react-router-dom */ \"./node_modules/react-router/dist/index.js\");\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! react-router-dom */ \"./node_modules/react-router-dom/dist/index.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./context/application */ \"./app/context/application.js\");\n/* harmony import */ var _context_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./context/navigation */ \"./app/context/navigation.js\");\n/* harmony import */ var _components_p8p_app_error_page__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./components/p8p_app_error_page */ \"./app/components/p8p_app_error_page.js\");\n/* harmony import */ var _components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./components/p8p_app_workspace */ \"./app/components/p8p_app_workspace.js\");\n/* harmony import */ var _components_p8p_panels_menu__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./components/p8p_panels_menu */ \"./app/components/p8p_panels_menu.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../app.text */ \"./app.text.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./config_wrapper */ \"./app/config_wrapper.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\n Парус 8 - Панели мониторинга\n Приложение\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Роутер\n //Контекст приложения\n //Контекст навигации\n //Страница с ошибкой\n //Рабочее пространство панели\n //Меню панелей\n //Текстовые ресурсы и константы\n //Подключение компонентов к настройкам приложения\n\n//--------------------------\n//Вспомогательные компоненты\n//--------------------------\n\n//Обработка ошибок роутинга\nconst RouterError = ({\n homePath\n}) => {\n //Подключение к контексту навигации\n const {\n navigateTo\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_navigation__WEBPACK_IMPORTED_MODULE_2__.NavigationCtx);\n\n //Извлечем ошибку роутинга\n const routeError = (0,react_router_dom__WEBPACK_IMPORTED_MODULE_8__.useRouteError)();\n\n //Отработка нажатия на кнопку навигации\n const handleNavigate = () => navigateTo({\n path: `${homePath.startsWith(\"/\") ? \"\" : \"/\"}${homePath}`\n });\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_app_error_page__WEBPACK_IMPORTED_MODULE_3__.P8PAppErrorPage, {\n errorMessage: _app_text__WEBPACK_IMPORTED_MODULE_6__.ERRORS_HTTP[routeError.status] ? _app_text__WEBPACK_IMPORTED_MODULE_6__.ERRORS_HTTP[routeError.status] : _app_text__WEBPACK_IMPORTED_MODULE_6__.ERRORS.DEFAULT,\n onNavigate: handleNavigate,\n navigateCaption: _app_text__WEBPACK_IMPORTED_MODULE_6__.BUTTONS.NAVIGATE_HOME\n });\n};\n\n//Контроль свойств - обработка ошибок роутинга\nRouterError.propTypes = {\n homePath: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().string).isRequired\n};\n\n//Главное меню приложения\nconst MainMenu = ({\n panels = []\n} = {}) => {\n //Подключение к контексту навигации\n const {\n navigatePanel,\n isNavigationSearch,\n getNavigationSearch\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_navigation__WEBPACK_IMPORTED_MODULE_2__.NavigationCtx);\n\n //Подключение к контексту приложения\n const {\n configUrlBase,\n pOnlineShowTab\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_1__[\"ApplicationСtx\"]);\n\n //Получим параметры запроса из адресной строки\n const qS = isNavigationSearch() ? getNavigationSearch() : null;\n\n //Отработка действия навигации элемента меню\n const handleItemNavigate = (panel, newTab) => newTab ? pOnlineShowTab({\n id: panel.name,\n url: `${configUrlBase}${panel.url}`,\n caption: panel.caption\n }) : navigatePanel(panel);\n\n //Генерация содержимого\n return qS?.mode === \"DESKTOP\" ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_panels_menu__WEBPACK_IMPORTED_MODULE_5__.P8PPanelsMenuDesktop, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_7__.P8P_PANELS_MENU_GRID_CONFIG_PROPS, {\n group: qS?.group,\n panels: panels,\n onItemNavigate: panel => handleItemNavigate(panel, true)\n })) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_panels_menu__WEBPACK_IMPORTED_MODULE_5__.P8PPanelsMenuGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_7__.P8P_PANELS_MENU_GRID_CONFIG_PROPS, {\n panels: panels,\n onItemNavigate: panel => handleItemNavigate(panel, false)\n }));\n};\n\n//Контроль свойств - главное меню приложения\nMainMenu.propTypes = {\n panels: prop_types__WEBPACK_IMPORTED_MODULE_9___default().arrayOf(_components_p8p_panels_menu__WEBPACK_IMPORTED_MODULE_5__.P8P_PANELS_MENU_PANEL_SHAPE).isRequired\n};\n\n//Рабочее пространство панели\nconst Workspace = ({\n panels = [],\n selectedPanel,\n children\n} = {}) => {\n //Подключение к контексту навигации\n const {\n navigateRoot,\n navigatePanel\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_navigation__WEBPACK_IMPORTED_MODULE_2__.NavigationCtx);\n\n //Отработка действия навигации домой\n const handleHomeNavigate = () => navigateRoot();\n\n //Отработка действия навигации элемента меню\n const handleItemNavigate = panel => navigatePanel(panel);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_4__.P8PAppWorkspace, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_7__.P8P_APP_WORKSPACE_CONFIG_PROPS, {\n panels: panels,\n selectedPanel: selectedPanel,\n onHomeNavigate: handleHomeNavigate,\n onItemNavigate: handleItemNavigate\n }), children);\n};\n\n//Контроль свойств - главное меню приложения\nWorkspace.propTypes = {\n panels: prop_types__WEBPACK_IMPORTED_MODULE_9___default().arrayOf(_components_p8p_panels_menu__WEBPACK_IMPORTED_MODULE_5__.P8P_PANELS_MENU_PANEL_SHAPE).isRequired,\n selectedPanel: _components_p8p_panels_menu__WEBPACK_IMPORTED_MODULE_5__.P8P_PANELS_MENU_PANEL_SHAPE,\n children: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().element)\n};\n\n//Обёртывание элемента в контекст навигации\nconst wrapNavigationContext = children => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_context_navigation__WEBPACK_IMPORTED_MODULE_2__.NavigationContext, null, children);\n\n//-----------\n//Тело модуля\n//-----------\n\n//Приложение\nconst App = () => {\n //Собственное состояние\n const [routes, setRoutes] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]);\n\n //Подключение к контексту приложения\n const {\n appState\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_1__[\"ApplicationСtx\"]);\n\n //Инициализация роутера\n const content = routes.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_8__.RouterProvider, {\n router: (0,react_router_dom__WEBPACK_IMPORTED_MODULE_10__.createHashRouter)(routes)\n }) : null;\n\n //При изменении состояния загрузки панелей\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (appState.panelsLoaded) {\n //Сборка \"веток\" для панелей\n let routes = [{\n path: (0,_context_navigation__WEBPACK_IMPORTED_MODULE_2__.getRootLocation)(),\n element: wrapNavigationContext( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(MainMenu, {\n panels: appState.panels\n })),\n errorElement: wrapNavigationContext( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(RouterError, {\n homePath: (0,_context_navigation__WEBPACK_IMPORTED_MODULE_2__.getRootLocation)()\n }))\n }];\n for (const panel of appState.panels) {\n // eslint-disable-next-line no-undef\n const p = __webpack_require__(\"./app/panels sync recursive ^\\\\.\\\\/.*$\")(`./${panel.path}`);\n routes.push({\n path: `${panel.url}/*`,\n element: wrapNavigationContext( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(Workspace, {\n panels: appState.panels,\n selectedPanel: panel\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(p.RootClass, null))),\n errorElement: wrapNavigationContext( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(RouterError, {\n homePath: panel.url\n }))\n });\n }\n setRoutes(routes);\n }\n }, [appState.panels, appState.panelsLoaded]);\n\n //Генерация содержимого\n return content;\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/app.js?"); /***/ }), @@ -3051,7 +3172,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 */ P8PAppErrorPage: () => (/* binding */ P8PAppErrorPage)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _p8p_app_message__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./p8p_app_message */ \"./app/components/p8p_app_message.js\");\n/*\r\n Парус 8 - Панели мониторинга\r\n Компонент: Страница ошибки\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Контейнер\n //Сообщения\n\n//-----------\n//Тело модуля\n//-----------\n\n//Страница ошибки\nconst P8PAppErrorPage = ({\n errorMessage,\n onNavigate,\n navigateCaption\n}) => {\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n minHeight: \"100vh\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_p8p_app_message__WEBPACK_IMPORTED_MODULE_1__.P8PAppInlineError, {\n text: errorMessage,\n okBtn: onNavigate ? true : false,\n onOk: onNavigate,\n okBtnCaption: navigateCaption\n })));\n};\n\n//Контроль свойств - Страница ошибки\nP8PAppErrorPage.propTypes = {\n errorMessage: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n onNavigate: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n navigateCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_app_error_page.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ P8PAppErrorPage: () => (/* binding */ P8PAppErrorPage)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _p8p_app_message__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./p8p_app_message */ \"./app/components/p8p_app_message.js\");\n/*\n Парус 8 - Панели мониторинга\n Компонент: Страница ошибки\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Контейнер\n //Сообщения\n\n//-----------\n//Тело модуля\n//-----------\n\n//Страница ошибки\nconst P8PAppErrorPage = ({\n errorMessage,\n onNavigate,\n navigateCaption\n}) => {\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n minHeight: \"100vh\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_p8p_app_message__WEBPACK_IMPORTED_MODULE_1__.P8PAppInlineError, {\n text: errorMessage,\n okBtn: onNavigate ? true : false,\n onOk: onNavigate,\n okBtnCaption: navigateCaption\n })));\n};\n\n//Контроль свойств - Страница ошибки\nP8PAppErrorPage.propTypes = {\n errorMessage: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n onNavigate: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n navigateCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_app_error_page.js?"); /***/ }), @@ -3062,7 +3183,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 */ P8PAppInlineError: () => (/* binding */ P8PAppInlineError),\n/* harmony export */ P8PAppInlineInfo: () => (/* binding */ P8PAppInlineInfo),\n/* harmony export */ P8PAppInlineMessage: () => (/* binding */ P8PAppInlineMessage),\n/* harmony export */ P8PAppInlineWarn: () => (/* binding */ P8PAppInlineWarn),\n/* harmony export */ P8PAppMessage: () => (/* binding */ P8PAppMessage),\n/* harmony export */ P8PAppMessageErr: () => (/* binding */ P8PAppMessageErr),\n/* harmony export */ P8PAppMessageInfo: () => (/* binding */ P8PAppMessageInfo),\n/* harmony export */ P8PAppMessageWarn: () => (/* binding */ P8PAppMessageWarn),\n/* harmony export */ P8P_APP_MESSAGE_VARIANT: () => (/* binding */ P8P_APP_MESSAGE_VARIANT)\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_Dialog__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material/Dialog */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material_DialogTitle__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @mui/material/DialogTitle */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.js\");\n/* harmony import */ var _mui_material_DialogContent__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material/DialogContent */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material_DialogContentText__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material/DialogContentText */ \"./node_modules/@mui/material/DialogContentText/DialogContentText.js\");\n/* harmony import */ var _mui_material_DialogActions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material/DialogActions */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material_Typography__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material/Typography */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material_Button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material/Button */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material_Container__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material/Container */ \"./node_modules/@mui/material/Container/Container.js\");\n/* harmony import */ var _mui_material_Box__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material/Box */ \"./node_modules/@mui/material/Box/Box.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга\r\n Компонент: Сообщение\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //базовый класс диалога Material UI\n //Заголовок диалога\n //Содержимое диалога\n //Текст содержимого диалога\n //Область действий диалога\n //Текст\n //Кнопки\n //Контейнер\n //Обёртка\n\n//---------\n//Константы\n//---------\n\n//Варианты исполнения\nconst P8P_APP_MESSAGE_VARIANT = {\n INFO: \"information\",\n WARN: \"warning\",\n ERR: \"error\"\n};\n\n//Стили\nconst STYLES = {\n DEFAULT: {\n wordBreak: \"break-word\"\n },\n INFO: {\n titleText: {},\n bodyText: {}\n },\n WARN: {\n titleText: {\n color: \"orange\"\n },\n bodyText: {\n color: \"orange\"\n }\n },\n ERR: {\n titleText: {\n color: \"red\"\n },\n bodyText: {\n color: \"red\"\n }\n },\n INLINE_MESSAGE: {\n with: \"100%\",\n textAlign: \"center\"\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Сообщение\nconst P8PAppMessage = ({\n variant,\n title,\n titleText,\n cancelBtn,\n onCancel,\n cancelBtnCaption,\n okBtn,\n onOk,\n okBtnCaption,\n open,\n text\n}) => {\n //Подбор стиля и ресурсов\n let style = STYLES.INFO;\n switch (variant) {\n case P8P_APP_MESSAGE_VARIANT.INFO:\n {\n style = STYLES.INFO;\n break;\n }\n case P8P_APP_MESSAGE_VARIANT.WARN:\n {\n style = STYLES.WARN;\n break;\n }\n case P8P_APP_MESSAGE_VARIANT.ERR:\n {\n style = STYLES.ERR;\n break;\n }\n }\n\n //Заголовок\n let titlePart;\n if (title && titleText) titlePart = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material_DialogTitle__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n id: \"message-dialog-title\",\n style: {\n ...style.DEFAULT,\n ...style.titleText\n }\n }, titleText);\n\n //Кнопка Отмена\n let cancelBtnPart;\n if (cancelBtn && cancelBtnCaption && variant === P8P_APP_MESSAGE_VARIANT.WARN) cancelBtnPart = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material_Button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n onClick: () => onCancel ? onCancel() : null\n }, cancelBtnCaption);\n\n //Кнопка OK\n let okBtnPart;\n if (okBtn && okBtnCaption) okBtnPart = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material_Button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n onClick: () => onOk ? onOk() : null,\n color: \"primary\",\n autoFocus: true\n }, okBtnCaption);\n\n //Все действия\n let actionsPart;\n if (cancelBtnPart || okBtnPart) actionsPart = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material_DialogActions__WEBPACK_IMPORTED_MODULE_3__[\"default\"], null, okBtnPart, cancelBtnPart);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material_Dialog__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n open: open || false,\n \"aria-labelledby\": \"message-dialog-title\",\n \"aria-describedby\": \"message-dialog-description\",\n onClose: () => onCancel ? onCancel() : null\n }, titlePart, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material_DialogContent__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material_DialogContentText__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n id: \"message-dialog-description\",\n style: style.bodyText\n }, text)), actionsPart);\n};\n\n//Контроль свойств - Сообщение\nP8PAppMessage.propTypes = {\n variant: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string).isRequired,\n title: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().bool),\n titleText: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string),\n cancelBtn: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().bool),\n onCancel: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n cancelBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string),\n okBtn: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().bool),\n onOk: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n okBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string),\n open: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().bool),\n text: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string)\n};\n\n//Встроенное сообщение\nconst P8PAppInlineMessage = ({\n variant,\n text,\n okBtn,\n onOk,\n okBtnCaption\n}) => {\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material_Container__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n style: STYLES.INLINE_MESSAGE\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material_Box__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n p: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material_Typography__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n color: variant === P8P_APP_MESSAGE_VARIANT.ERR ? \"error\" : variant === P8P_APP_MESSAGE_VARIANT.WARN ? \"primary\" : \"textSecondary\"\n }, text), okBtn && okBtnCaption ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material_Box__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n pt: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material_Button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n onClick: () => onOk ? onOk() : null,\n color: \"primary\",\n autoFocus: true\n }, okBtnCaption)) : null));\n};\n\n//Контроль свойств - Встроенное сообщение\nP8PAppInlineMessage.propTypes = {\n variant: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string).isRequired,\n text: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string).isRequired,\n okBtn: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().bool),\n onOk: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n okBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string)\n};\n\n//Формирование типового сообщения\nconst buildVariantMessage = (props, variant) => {\n //Извлекаем необходимые свойства\n let {\n open,\n titleText\n } = props;\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PAppMessage, _extends({}, props, {\n variant: variant,\n open: open === undefined ? true : open,\n title: titleText ? true : false,\n okBtn: true\n }));\n};\n\n//Формирование типового встроенного сообщения\nconst buildVariantInlineMessage = (props, variant) => {\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PAppInlineMessage, _extends({}, props, {\n variant: variant\n }));\n};\n\n//Сообщение об ошибке\nconst P8PAppMessageErr = props => buildVariantMessage(props, P8P_APP_MESSAGE_VARIANT.ERR);\n\n//Сообщение предупреждения\nconst P8PAppMessageWarn = props => buildVariantMessage(props, P8P_APP_MESSAGE_VARIANT.WARN);\n\n//Сообщение информации\nconst P8PAppMessageInfo = props => buildVariantMessage(props, P8P_APP_MESSAGE_VARIANT.INFO);\n\n//Встраиваемое сообщение об ошибке\nconst P8PAppInlineError = props => buildVariantInlineMessage(props, P8P_APP_MESSAGE_VARIANT.ERR);\n\n//Встраиваемое cообщение предупреждения\nconst P8PAppInlineWarn = props => buildVariantInlineMessage(props, P8P_APP_MESSAGE_VARIANT.WARN);\n\n//Встраиваемое сообщение информации\nconst P8PAppInlineInfo = props => buildVariantInlineMessage(props, P8P_APP_MESSAGE_VARIANT.INFO);\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_app_message.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ P8PAppInlineError: () => (/* binding */ P8PAppInlineError),\n/* harmony export */ P8PAppInlineInfo: () => (/* binding */ P8PAppInlineInfo),\n/* harmony export */ P8PAppInlineMessage: () => (/* binding */ P8PAppInlineMessage),\n/* harmony export */ P8PAppInlineWarn: () => (/* binding */ P8PAppInlineWarn),\n/* harmony export */ P8PAppMessage: () => (/* binding */ P8PAppMessage),\n/* harmony export */ P8PAppMessageErr: () => (/* binding */ P8PAppMessageErr),\n/* harmony export */ P8PAppMessageInfo: () => (/* binding */ P8PAppMessageInfo),\n/* harmony export */ P8PAppMessageWarn: () => (/* binding */ P8PAppMessageWarn),\n/* harmony export */ P8P_APP_MESSAGE_VARIANT: () => (/* binding */ P8P_APP_MESSAGE_VARIANT)\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_Dialog__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material/Dialog */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material_DialogTitle__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @mui/material/DialogTitle */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.js\");\n/* harmony import */ var _mui_material_DialogContent__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material/DialogContent */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material_DialogContentText__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material/DialogContentText */ \"./node_modules/@mui/material/DialogContentText/DialogContentText.js\");\n/* harmony import */ var _mui_material_DialogActions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material/DialogActions */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material_Typography__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material/Typography */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material_Button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material/Button */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material_Container__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material/Container */ \"./node_modules/@mui/material/Container/Container.js\");\n/* harmony import */ var _mui_material_Box__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material/Box */ \"./node_modules/@mui/material/Box/Box.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\n Парус 8 - Панели мониторинга\n Компонент: Сообщение\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //базовый класс диалога Material UI\n //Заголовок диалога\n //Содержимое диалога\n //Текст содержимого диалога\n //Область действий диалога\n //Текст\n //Кнопки\n //Контейнер\n //Обёртка\n\n//---------\n//Константы\n//---------\n\n//Варианты исполнения\nconst P8P_APP_MESSAGE_VARIANT = {\n INFO: \"information\",\n WARN: \"warning\",\n ERR: \"error\"\n};\n\n//Стили\nconst STYLES = {\n DEFAULT: {\n wordBreak: \"break-word\"\n },\n INFO: {\n titleText: {},\n bodyText: {}\n },\n WARN: {\n titleText: {\n color: \"orange\"\n },\n bodyText: {\n color: \"orange\"\n }\n },\n ERR: {\n titleText: {\n color: \"red\"\n },\n bodyText: {\n color: \"red\"\n }\n },\n INLINE_MESSAGE: {\n with: \"100%\",\n textAlign: \"center\"\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Сообщение\nconst P8PAppMessage = ({\n variant,\n title,\n titleText,\n cancelBtn,\n onCancel,\n cancelBtnCaption,\n okBtn,\n onOk,\n okBtnCaption,\n open,\n text\n}) => {\n //Подбор стиля и ресурсов\n let style = STYLES.INFO;\n switch (variant) {\n case P8P_APP_MESSAGE_VARIANT.INFO:\n {\n style = STYLES.INFO;\n break;\n }\n case P8P_APP_MESSAGE_VARIANT.WARN:\n {\n style = STYLES.WARN;\n break;\n }\n case P8P_APP_MESSAGE_VARIANT.ERR:\n {\n style = STYLES.ERR;\n break;\n }\n }\n\n //Заголовок\n let titlePart;\n if (title && titleText) titlePart = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material_DialogTitle__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n id: \"message-dialog-title\",\n style: {\n ...style.DEFAULT,\n ...style.titleText\n }\n }, titleText);\n\n //Кнопка Отмена\n let cancelBtnPart;\n if (cancelBtn && cancelBtnCaption && variant === P8P_APP_MESSAGE_VARIANT.WARN) cancelBtnPart = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material_Button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n onClick: () => onCancel ? onCancel() : null\n }, cancelBtnCaption);\n\n //Кнопка OK\n let okBtnPart;\n if (okBtn && okBtnCaption) okBtnPart = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material_Button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n onClick: () => onOk ? onOk() : null,\n color: \"primary\",\n autoFocus: true\n }, okBtnCaption);\n\n //Все действия\n let actionsPart;\n if (cancelBtnPart || okBtnPart) actionsPart = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material_DialogActions__WEBPACK_IMPORTED_MODULE_3__[\"default\"], null, okBtnPart, cancelBtnPart);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material_Dialog__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n open: open || false,\n \"aria-labelledby\": \"message-dialog-title\",\n \"aria-describedby\": \"message-dialog-description\",\n onClose: () => onCancel ? onCancel() : null\n }, titlePart, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material_DialogContent__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material_DialogContentText__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n id: \"message-dialog-description\",\n style: style.bodyText\n }, text)), actionsPart);\n};\n\n//Контроль свойств - Сообщение\nP8PAppMessage.propTypes = {\n variant: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string).isRequired,\n title: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().bool),\n titleText: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string),\n cancelBtn: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().bool),\n onCancel: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n cancelBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string),\n okBtn: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().bool),\n onOk: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n okBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string),\n open: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().bool),\n text: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string)\n};\n\n//Встроенное сообщение\nconst P8PAppInlineMessage = ({\n variant,\n text,\n okBtn,\n onOk,\n okBtnCaption\n}) => {\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material_Container__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n style: STYLES.INLINE_MESSAGE\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material_Box__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n p: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material_Typography__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n color: variant === P8P_APP_MESSAGE_VARIANT.ERR ? \"error\" : variant === P8P_APP_MESSAGE_VARIANT.WARN ? \"primary\" : \"textSecondary\"\n }, text), okBtn && okBtnCaption ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material_Box__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n pt: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material_Button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n onClick: () => onOk ? onOk() : null,\n color: \"primary\",\n autoFocus: true\n }, okBtnCaption)) : null));\n};\n\n//Контроль свойств - Встроенное сообщение\nP8PAppInlineMessage.propTypes = {\n variant: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string).isRequired,\n text: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string).isRequired,\n okBtn: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().bool),\n onOk: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n okBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string)\n};\n\n//Формирование типового сообщения\nconst buildVariantMessage = (props, variant) => {\n //Извлекаем необходимые свойства\n let {\n open,\n titleText\n } = props;\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PAppMessage, _extends({}, props, {\n variant: variant,\n open: open === undefined ? true : open,\n title: titleText ? true : false,\n okBtn: true\n }));\n};\n\n//Формирование типового встроенного сообщения\nconst buildVariantInlineMessage = (props, variant) => {\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PAppInlineMessage, _extends({}, props, {\n variant: variant\n }));\n};\n\n//Сообщение об ошибке\nconst P8PAppMessageErr = props => buildVariantMessage(props, P8P_APP_MESSAGE_VARIANT.ERR);\n\n//Сообщение предупреждения\nconst P8PAppMessageWarn = props => buildVariantMessage(props, P8P_APP_MESSAGE_VARIANT.WARN);\n\n//Сообщение информации\nconst P8PAppMessageInfo = props => buildVariantMessage(props, P8P_APP_MESSAGE_VARIANT.INFO);\n\n//Встраиваемое сообщение об ошибке\nconst P8PAppInlineError = props => buildVariantInlineMessage(props, P8P_APP_MESSAGE_VARIANT.ERR);\n\n//Встраиваемое cообщение предупреждения\nconst P8PAppInlineWarn = props => buildVariantInlineMessage(props, P8P_APP_MESSAGE_VARIANT.WARN);\n\n//Встраиваемое сообщение информации\nconst P8PAppInlineInfo = props => buildVariantInlineMessage(props, P8P_APP_MESSAGE_VARIANT.INFO);\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_app_message.js?"); /***/ }), @@ -3073,7 +3194,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 */ P8PAppProgress: () => (/* binding */ P8PAppProgress)\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_Dialog__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @mui/material/Dialog */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material_DialogTitle__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material/DialogTitle */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.js\");\n/* harmony import */ var _mui_material_DialogContent__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material/DialogContent */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material_DialogContentText__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material/DialogContentText */ \"./node_modules/@mui/material/DialogContentText/DialogContentText.js\");\n/* harmony import */ var _mui_material_LinearProgress__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material/LinearProgress */ \"./node_modules/@mui/material/LinearProgress/LinearProgress.js\");\n/*\r\n Парус 8 - Панели мониторинга\r\n Компонент: Индикатор процесса\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //базовый класс диалога Material UI\n //Заголовок диалога\n //Содержимое диалога\n //Текст содержимого диалога\n //Индикатор\n\n//-----------\n//Тело модуля\n//-----------\n\n//Индикатора прогресса\nconst P8PAppProgress = props => {\n //Извлекаем необходимые свойства\n let {\n open,\n title,\n text\n } = props;\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material_Dialog__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n open: open || false,\n \"aria-labelledby\": \"progress-dialog-title\",\n \"aria-describedby\": \"progress-dialog-description\"\n }, title ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material_DialogTitle__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n id: \"progress-dialog-title\"\n }, title) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material_DialogContent__WEBPACK_IMPORTED_MODULE_3__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material_DialogContentText__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n id: \"progress-dialog-description\"\n }, text), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material_LinearProgress__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null))));\n};\n\n//Контроль свойств - Индикатора прогресса\nP8PAppProgress.propTypes = {\n open: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().bool),\n title: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().string),\n text: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().string).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_app_progress.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ P8PAppProgress: () => (/* binding */ P8PAppProgress)\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_Dialog__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @mui/material/Dialog */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material_DialogTitle__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material/DialogTitle */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.js\");\n/* harmony import */ var _mui_material_DialogContent__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material/DialogContent */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material_DialogContentText__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material/DialogContentText */ \"./node_modules/@mui/material/DialogContentText/DialogContentText.js\");\n/* harmony import */ var _mui_material_LinearProgress__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material/LinearProgress */ \"./node_modules/@mui/material/LinearProgress/LinearProgress.js\");\n/*\n Парус 8 - Панели мониторинга\n Компонент: Индикатор процесса\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //базовый класс диалога Material UI\n //Заголовок диалога\n //Содержимое диалога\n //Текст содержимого диалога\n //Индикатор\n\n//-----------\n//Тело модуля\n//-----------\n\n//Индикатора прогресса\nconst P8PAppProgress = props => {\n //Извлекаем необходимые свойства\n let {\n open,\n title,\n text\n } = props;\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material_Dialog__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n open: open || false,\n \"aria-labelledby\": \"progress-dialog-title\",\n \"aria-describedby\": \"progress-dialog-description\"\n }, title ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material_DialogTitle__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n id: \"progress-dialog-title\"\n }, title) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material_DialogContent__WEBPACK_IMPORTED_MODULE_3__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material_DialogContentText__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n id: \"progress-dialog-description\"\n }, text), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material_LinearProgress__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null))));\n};\n\n//Контроль свойств - Индикатора прогресса\nP8PAppProgress.propTypes = {\n open: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().bool),\n title: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().string),\n text: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().string).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_app_progress.js?"); /***/ }), @@ -3084,7 +3205,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 */ P8PAppWorkspace: () => (/* binding */ P8PAppWorkspace)\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 _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/CssBaseline/CssBaseline.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/AppBar/AppBar.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Toolbar/Toolbar.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Drawer/Drawer.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/List/List.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemButton/ListItemButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemIcon/ListItemIcon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemText/ListItemText.js\");\n/* harmony import */ var _p8p_panels_menu__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./p8p_panels_menu */ \"./app/components/p8p_panels_menu.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 STYLES = {\n ROOT_BOX: {\n display: \"flex\"\n },\n APP_BAR: {\n position: \"fixed\"\n },\n APP_BAR_BUTTON: {\n mr: 2\n },\n MAIN: {\n flexGrow: 1\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Рабочее пространство\nconst P8PAppWorkspace = ({\n children,\n panels = [],\n selectedPanel,\n closeCaption,\n homeCaption,\n onHomeNavigate,\n onItemNavigate\n} = {}) => {\n //Собственное состояния\n const [open, setOpen] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Отработка открытия бокового меню\n const handleDrawerOpen = () => {\n setOpen(true);\n };\n\n //Отработка закрытия бового меню\n const handleDrawerClose = () => {\n setOpen(false);\n };\n\n //Отработка нажатия на домашнюю страницу\n const handleHomeClick = () => onHomeNavigate ? onHomeNavigate() : null;\n\n //Отработка нажатия на элемент бокового меню\n const handleItemNavigate = panel => {\n handleDrawerClose();\n onItemNavigate ? onItemNavigate(panel) : null;\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n sx: STYLES.ROOT_BOX\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n sx: STYLES.APP_BAR\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n color: \"inherit\",\n \"aria-label\": \"open drawer\",\n onClick: open ? handleDrawerClose : handleDrawerOpen,\n edge: \"start\",\n sx: STYLES.APP_BAR_BUTTON\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null, open ? \"chevron_left\" : \"menu\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n variant: \"h6\",\n noWrap: true,\n component: \"div\"\n }, selectedPanel?.caption))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n anchor: \"left\",\n open: open,\n onClose: handleDrawerClose\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n onClick: handleDrawerClose\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null, \"close\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n primary: closeCaption\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n onClick: handleHomeClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null, \"home\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n primary: homeCaption\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_p8p_panels_menu__WEBPACK_IMPORTED_MODULE_1__.P8PPanelsMenuDrawer, {\n panels: panels,\n selectedPanel: selectedPanel,\n onItemNavigate: handleItemNavigate\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"main\", {\n style: STYLES.MAIN\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null), children));\n};\n\n//Контроль свойств - Рабочее пространство\nP8PAppWorkspace.propTypes = {\n children: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().element),\n panels: prop_types__WEBPACK_IMPORTED_MODULE_14___default().arrayOf(_p8p_panels_menu__WEBPACK_IMPORTED_MODULE_1__.P8P_PANELS_MENU_PANEL_SHAPE).isRequired,\n selectedPanel: _p8p_panels_menu__WEBPACK_IMPORTED_MODULE_1__.P8P_PANELS_MENU_PANEL_SHAPE,\n closeCaption: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().string).isRequired,\n homeCaption: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().string).isRequired,\n onHomeNavigate: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().func),\n onItemNavigate: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_app_workspace.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ P8PAppWorkspace: () => (/* binding */ P8PAppWorkspace)\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 _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/CssBaseline/CssBaseline.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/AppBar/AppBar.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Toolbar/Toolbar.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Drawer/Drawer.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/List/List.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemButton/ListItemButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemIcon/ListItemIcon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemText/ListItemText.js\");\n/* harmony import */ var _p8p_panels_menu__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./p8p_panels_menu */ \"./app/components/p8p_panels_menu.js\");\n/*\n Парус 8 - Панели мониторинга\n Компонент: Рабочее пространство\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n ROOT_BOX: {\n display: \"flex\"\n },\n APP_BAR: {\n position: \"fixed\"\n },\n APP_BAR_BUTTON: {\n mr: 2\n },\n MAIN: {\n flexGrow: 1\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Рабочее пространство\nconst P8PAppWorkspace = ({\n children,\n panels = [],\n selectedPanel,\n closeCaption,\n homeCaption,\n onHomeNavigate,\n onItemNavigate\n} = {}) => {\n //Собственное состояния\n const [open, setOpen] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Отработка открытия бокового меню\n const handleDrawerOpen = () => {\n setOpen(true);\n };\n\n //Отработка закрытия бового меню\n const handleDrawerClose = () => {\n setOpen(false);\n };\n\n //Отработка нажатия на домашнюю страницу\n const handleHomeClick = () => onHomeNavigate ? onHomeNavigate() : null;\n\n //Отработка нажатия на элемент бокового меню\n const handleItemNavigate = panel => {\n handleDrawerClose();\n onItemNavigate ? onItemNavigate(panel) : null;\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n sx: STYLES.ROOT_BOX\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n sx: STYLES.APP_BAR\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n color: \"inherit\",\n \"aria-label\": \"open drawer\",\n onClick: open ? handleDrawerClose : handleDrawerOpen,\n edge: \"start\",\n sx: STYLES.APP_BAR_BUTTON\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null, open ? \"chevron_left\" : \"menu\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n variant: \"h6\",\n noWrap: true,\n component: \"div\"\n }, selectedPanel?.caption))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n anchor: \"left\",\n open: open,\n onClose: handleDrawerClose\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n onClick: handleDrawerClose\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null, \"close\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n primary: closeCaption\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n onClick: handleHomeClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null, \"home\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n primary: homeCaption\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_p8p_panels_menu__WEBPACK_IMPORTED_MODULE_1__.P8PPanelsMenuDrawer, {\n panels: panels,\n selectedPanel: selectedPanel,\n onItemNavigate: handleItemNavigate\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"main\", {\n style: STYLES.MAIN\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null), children));\n};\n\n//Контроль свойств - Рабочее пространство\nP8PAppWorkspace.propTypes = {\n children: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().element),\n panels: prop_types__WEBPACK_IMPORTED_MODULE_14___default().arrayOf(_p8p_panels_menu__WEBPACK_IMPORTED_MODULE_1__.P8P_PANELS_MENU_PANEL_SHAPE).isRequired,\n selectedPanel: _p8p_panels_menu__WEBPACK_IMPORTED_MODULE_1__.P8P_PANELS_MENU_PANEL_SHAPE,\n closeCaption: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().string).isRequired,\n homeCaption: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().string).isRequired,\n onHomeNavigate: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().func),\n onItemNavigate: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_app_workspace.js?"); /***/ }), @@ -3095,7 +3216,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ P8PChart: () => (/* binding */ P8PChart),\n/* harmony export */ P8P_CHART_TYPE: () => (/* binding */ P8P_CHART_TYPE)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var chart_js_auto__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! chart.js/auto */ \"./node_modules/chart.js/auto/auto.js\");\n/*\r\n Парус 8 - Панели мониторинга\r\n Компонент: График\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Диаграммы и графики\n\n//---------\n//Константы\n//---------\n\n//Виды графиков\nconst P8P_CHART_TYPE = {\n BAR: \"bar\",\n LINE: \"line\",\n PIE: \"pie\",\n DOUGHNUT: \"doughnut\"\n};\n\n//Структура элемента набора данных\nconst P8P_CHART_DATASET_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_2___default().shape({\n label: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n borderColor: prop_types__WEBPACK_IMPORTED_MODULE_2___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_2___default().string), prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_2___default().string))]),\n backgroundColor: prop_types__WEBPACK_IMPORTED_MODULE_2___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_2___default().string), prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_2___default().string))]),\n data: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_2___default().number)).isRequired,\n items: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_2___default().object)).isRequired\n});\n\n//-----------\n//Тело модуля\n//-----------\n\n//График\nconst P8PChart = ({\n type,\n title,\n legendPosition,\n options,\n labels,\n datasets,\n onClick,\n style\n}) => {\n //Ссылки на DOM\n const chartCanvasRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const chartRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n\n //Обработка нажатия на элемент графика\n const handleClick = e => {\n const bar = chartRef.current.getElementsAtEventForMode(e, \"nearest\", {\n intersect: true\n }, true)[0];\n if (onClick && bar) onClick({\n datasetIndex: bar.datasetIndex,\n itemIndex: bar.index,\n item: chartRef.current.data.datasets[bar.datasetIndex].items ? chartRef.current.data.datasets[bar.datasetIndex].items[bar.index] : null\n });\n };\n\n //При подключении к старнице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (!chartRef.current) {\n const ctx = chartCanvasRef.current.getContext(\"2d\");\n chartRef.current = new chart_js_auto__WEBPACK_IMPORTED_MODULE_1__[\"default\"](ctx, {\n type,\n data: {\n labels: [...labels],\n datasets: [...datasets]\n },\n options: {\n ...options,\n ...{\n responsive: true,\n plugins: {\n legend: {\n display: legendPosition ? true : false,\n position: legendPosition\n },\n title: {\n display: title ? true : false,\n text: title\n }\n }\n },\n onClick: handleClick\n }\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n //При обновлении данных\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (chartRef.current) {\n chartRef.current.data.labels = [...labels];\n chartRef.current.data.datasets = [...datasets];\n chartRef.current.update();\n }\n }, [datasets, labels]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: {\n ...style\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"canvas\", {\n ref: chartCanvasRef\n }));\n};\n\n//Контроль свойств - График\nP8PChart.propTypes = {\n type: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n title: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n legendPosition: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n options: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().object),\n labels: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_2___default().string)).isRequired,\n datasets: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf(P8P_CHART_DATASET_SHAPE),\n onClick: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n style: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().object)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_chart.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ P8PChart: () => (/* binding */ P8PChart),\n/* harmony export */ P8P_CHART_TYPE: () => (/* binding */ P8P_CHART_TYPE)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var chart_js_auto__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! chart.js/auto */ \"./node_modules/chart.js/auto/auto.js\");\n/*\n Парус 8 - Панели мониторинга\n Компонент: График\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Диаграммы и графики\n\n//---------\n//Константы\n//---------\n\n//Виды графиков\nconst P8P_CHART_TYPE = {\n BAR: \"bar\",\n LINE: \"line\",\n PIE: \"pie\",\n DOUGHNUT: \"doughnut\"\n};\n\n//Структура элемента набора данных\nconst P8P_CHART_DATASET_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_2___default().shape({\n label: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n borderColor: prop_types__WEBPACK_IMPORTED_MODULE_2___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_2___default().string), prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_2___default().string))]),\n backgroundColor: prop_types__WEBPACK_IMPORTED_MODULE_2___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_2___default().string), prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_2___default().string))]),\n data: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_2___default().number)).isRequired,\n items: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_2___default().object)).isRequired\n});\n\n//-----------\n//Тело модуля\n//-----------\n\n//График\nconst P8PChart = ({\n type,\n title,\n legendPosition,\n options,\n labels,\n datasets,\n onClick,\n style\n}) => {\n //Ссылки на DOM\n const chartCanvasRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const chartRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n\n //Обработка нажатия на элемент графика\n const handleClick = e => {\n const bar = chartRef.current.getElementsAtEventForMode(e, \"nearest\", {\n intersect: true\n }, true)[0];\n if (onClick && bar) onClick({\n datasetIndex: bar.datasetIndex,\n itemIndex: bar.index,\n item: chartRef.current.data.datasets[bar.datasetIndex].items ? chartRef.current.data.datasets[bar.datasetIndex].items[bar.index] : null\n });\n };\n\n //При подключении к старнице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (!chartRef.current) {\n const ctx = chartCanvasRef.current.getContext(\"2d\");\n chartRef.current = new chart_js_auto__WEBPACK_IMPORTED_MODULE_1__[\"default\"](ctx, {\n type,\n data: {\n labels: [...labels],\n datasets: [...datasets]\n },\n options: {\n ...options,\n ...{\n responsive: true,\n plugins: {\n legend: {\n display: legendPosition ? true : false,\n position: legendPosition\n },\n title: {\n display: title ? true : false,\n text: title\n }\n }\n },\n onClick: handleClick\n }\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n //При обновлении данных\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (chartRef.current) {\n chartRef.current.data.labels = [...labels];\n chartRef.current.data.datasets = [...datasets];\n chartRef.current.update();\n }\n }, [datasets, labels]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: {\n ...style\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"canvas\", {\n ref: chartCanvasRef\n }));\n};\n\n//Контроль свойств - График\nP8PChart.propTypes = {\n type: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n title: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n legendPosition: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n options: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().object),\n labels: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_2___default().string)).isRequired,\n datasets: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf(P8P_CHART_DATASET_SHAPE),\n onClick: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n style: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().object)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_chart.js?"); /***/ }), @@ -3106,7 +3227,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ P8PDataGrid: () => (/* binding */ P8PDataGrid),\n/* harmony export */ P8P_DATA_GRID_DATA_TYPE: () => (/* binding */ P8P_DATA_GRID_DATA_TYPE),\n/* harmony export */ P8P_DATA_GRID_FILTER_SHAPE: () => (/* binding */ P8P_DATA_GRID_FILTER_SHAPE),\n/* harmony export */ P8P_DATA_GRID_SIZE: () => (/* binding */ P8P_DATA_GRID_SIZE)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _p8p_table__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./p8p_table */ \"./app/components/p8p_table.js\");\n/*\r\n Парус 8 - Панели мониторинга\r\n Компонент: Таблица данных\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Таблица\n\n//---------\n//Константы\n//---------\n\n//Размеры отступов\nconst P8P_DATA_GRID_SIZE = _p8p_table__WEBPACK_IMPORTED_MODULE_1__.P8P_TABLE_SIZE;\n\n//Типы данных\nconst P8P_DATA_GRID_DATA_TYPE = _p8p_table__WEBPACK_IMPORTED_MODULE_1__.P8P_TABLE_DATA_TYPE;\n\n//Формат фильтра\nconst P8P_DATA_GRID_FILTER_SHAPE = _p8p_table__WEBPACK_IMPORTED_MODULE_1__.P8P_TABLE_FILTER_SHAPE;\n\n//-----------\n//Тело модуля\n//-----------\n\n//Таблица данных\nconst P8PDataGrid = ({\n columnsDef,\n filtersInitial,\n groups,\n rows,\n size,\n morePages = false,\n reloading,\n expandable,\n orderAscMenuItemCaption,\n orderDescMenuItemCaption,\n filterMenuItemCaption,\n valueFilterCaption,\n valueFromFilterCaption,\n valueToFilterCaption,\n okFilterBtnCaption,\n clearFilterBtnCaption,\n cancelFilterBtnCaption,\n morePagesBtnCaption,\n noDataFoundText,\n headCellRender,\n dataCellRender,\n groupCellRender,\n rowExpandRender,\n valueFormatter,\n onOrderChanged,\n onFilterChanged,\n onPagesCountChanged,\n objectsCopier\n}) => {\n //Собственное состояние - сортировки\n const [orders, setOrders] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]);\n\n //Собственное состояние - фильтры\n const [filters, setFilters] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(filtersInitial || []);\n\n //При изменении состояния сортировки\n const handleOrderChanged = ({\n columnName,\n direction\n }) => {\n let newOrders = objectsCopier(orders);\n const curOrder = newOrders.find(o => o.name == columnName);\n if (direction == null && curOrder) newOrders.splice(newOrders.indexOf(curOrder), 1);\n if (direction != null && !curOrder) newOrders.push({\n name: columnName,\n direction\n });\n if (direction != null && curOrder) curOrder.direction = direction;\n setOrders(newOrders);\n if (onOrderChanged) onOrderChanged({\n orders: newOrders\n });\n };\n\n //При изменении состояния фильтра\n const handleFilterChanged = ({\n columnName,\n from,\n to\n }) => {\n let newFilters = objectsCopier(filters);\n let curFilter = newFilters.find(f => f.name == columnName);\n if (from == null && to == null && curFilter) newFilters.splice(newFilters.indexOf(curFilter), 1);\n if ((from != null || to != null) && !curFilter) newFilters.push({\n name: columnName,\n from,\n to\n });\n if ((from != null || to != null) && curFilter) {\n curFilter.from = from;\n curFilter.to = to;\n }\n setFilters(newFilters);\n if (onFilterChanged) onFilterChanged({\n filters: newFilters\n });\n };\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = () => {\n if (onPagesCountChanged) onPagesCountChanged();\n };\n\n //При изменении списка установленных извне фильтров\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n setFilters(filtersInitial || []);\n }, [filtersInitial]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_p8p_table__WEBPACK_IMPORTED_MODULE_1__.P8PTable, {\n columnsDef: columnsDef,\n groups: groups,\n rows: rows,\n orders: orders,\n filters: filters,\n size: size || P8P_DATA_GRID_SIZE.MEDIUM,\n morePages: morePages,\n reloading: reloading,\n expandable: expandable,\n orderAscMenuItemCaption: orderAscMenuItemCaption,\n orderDescMenuItemCaption: orderDescMenuItemCaption,\n filterMenuItemCaption: filterMenuItemCaption,\n valueFilterCaption: valueFilterCaption,\n valueFromFilterCaption: valueFromFilterCaption,\n valueToFilterCaption: valueToFilterCaption,\n okFilterBtnCaption: okFilterBtnCaption,\n clearFilterBtnCaption: clearFilterBtnCaption,\n cancelFilterBtnCaption: cancelFilterBtnCaption,\n morePagesBtnCaption: morePagesBtnCaption,\n noDataFoundText: noDataFoundText,\n headCellRender: headCellRender,\n dataCellRender: dataCellRender,\n groupCellRender: groupCellRender,\n rowExpandRender: rowExpandRender,\n valueFormatter: valueFormatter,\n objectsCopier: objectsCopier,\n onOrderChanged: handleOrderChanged,\n onFilterChanged: handleFilterChanged,\n onPagesCountChanged: handlePagesCountChanged\n });\n};\n\n//Контроль свойств - Таблица данных\nP8PDataGrid.propTypes = {\n columnsDef: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().array).isRequired,\n filtersInitial: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf(P8P_DATA_GRID_FILTER_SHAPE),\n groups: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().array),\n rows: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().array).isRequired,\n size: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n morePages: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n reloading: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool).isRequired,\n expandable: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n orderAscMenuItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n orderDescMenuItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n filterMenuItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n valueFilterCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n valueFromFilterCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n valueToFilterCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n okFilterBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n clearFilterBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n cancelFilterBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n morePagesBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n noDataFoundText: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n headCellRender: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n dataCellRender: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n groupCellRender: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n rowExpandRender: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n valueFormatter: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n onOrderChanged: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n onFilterChanged: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n onPagesCountChanged: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n objectsCopier: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_data_grid.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ P8PDataGrid: () => (/* binding */ P8PDataGrid),\n/* harmony export */ P8P_DATA_GRID_DATA_TYPE: () => (/* binding */ P8P_DATA_GRID_DATA_TYPE),\n/* harmony export */ P8P_DATA_GRID_FILTER_SHAPE: () => (/* binding */ P8P_DATA_GRID_FILTER_SHAPE),\n/* harmony export */ P8P_DATA_GRID_SIZE: () => (/* binding */ P8P_DATA_GRID_SIZE)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _p8p_table__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./p8p_table */ \"./app/components/p8p_table.js\");\n/*\n Парус 8 - Панели мониторинга\n Компонент: Таблица данных\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Таблица\n\n//---------\n//Константы\n//---------\n\n//Размеры отступов\nconst P8P_DATA_GRID_SIZE = _p8p_table__WEBPACK_IMPORTED_MODULE_1__.P8P_TABLE_SIZE;\n\n//Типы данных\nconst P8P_DATA_GRID_DATA_TYPE = _p8p_table__WEBPACK_IMPORTED_MODULE_1__.P8P_TABLE_DATA_TYPE;\n\n//Формат фильтра\nconst P8P_DATA_GRID_FILTER_SHAPE = _p8p_table__WEBPACK_IMPORTED_MODULE_1__.P8P_TABLE_FILTER_SHAPE;\n\n//-----------\n//Тело модуля\n//-----------\n\n//Таблица данных\nconst P8PDataGrid = ({\n columnsDef,\n filtersInitial,\n rows,\n size,\n morePages,\n reloading,\n expandable,\n orderAscMenuItemCaption,\n orderDescMenuItemCaption,\n filterMenuItemCaption,\n valueFilterCaption,\n valueFromFilterCaption,\n valueToFilterCaption,\n okFilterBtnCaption,\n clearFilterBtnCaption,\n cancelFilterBtnCaption,\n morePagesBtnCaption,\n noDataFoundText,\n headCellRender,\n dataCellRender,\n rowExpandRender,\n valueFormatter,\n onOrderChanged,\n onFilterChanged,\n onPagesCountChanged,\n objectsCopier\n}) => {\n //Собственное состояние - сортировки\n const [orders, setOrders] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]);\n\n //Собственное состояние - фильтры\n const [filters, setFilters] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(filtersInitial || []);\n\n //При изменении состояния сортировки\n const handleOrderChanged = ({\n columnName,\n direction\n }) => {\n let newOrders = objectsCopier(orders);\n const curOrder = newOrders.find(o => o.name == columnName);\n if (direction == null && curOrder) newOrders.splice(newOrders.indexOf(curOrder), 1);\n if (direction != null && !curOrder) newOrders.push({\n name: columnName,\n direction\n });\n if (direction != null && curOrder) curOrder.direction = direction;\n setOrders(newOrders);\n if (onOrderChanged) onOrderChanged({\n orders: newOrders\n });\n };\n\n //При изменении состояния фильтра\n const handleFilterChanged = ({\n columnName,\n from,\n to\n }) => {\n let newFilters = objectsCopier(filters);\n let curFilter = newFilters.find(f => f.name == columnName);\n if (from == null && to == null && curFilter) newFilters.splice(newFilters.indexOf(curFilter), 1);\n if ((from != null || to != null) && !curFilter) newFilters.push({\n name: columnName,\n from,\n to\n });\n if ((from != null || to != null) && curFilter) {\n curFilter.from = from;\n curFilter.to = to;\n }\n setFilters(newFilters);\n if (onFilterChanged) onFilterChanged({\n filters: newFilters\n });\n };\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = () => {\n if (onPagesCountChanged) onPagesCountChanged();\n };\n\n //При изменении списка установленных извне фильтров\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n setFilters(filtersInitial || []);\n }, [filtersInitial]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_p8p_table__WEBPACK_IMPORTED_MODULE_1__.P8PTable, {\n columnsDef: columnsDef,\n rows: rows,\n orders: orders,\n filters: filters,\n size: size || P8P_DATA_GRID_SIZE.MEDIUM,\n morePages: morePages,\n reloading: reloading,\n expandable: expandable,\n orderAscMenuItemCaption: orderAscMenuItemCaption,\n orderDescMenuItemCaption: orderDescMenuItemCaption,\n filterMenuItemCaption: filterMenuItemCaption,\n valueFilterCaption: valueFilterCaption,\n valueFromFilterCaption: valueFromFilterCaption,\n valueToFilterCaption: valueToFilterCaption,\n okFilterBtnCaption: okFilterBtnCaption,\n clearFilterBtnCaption: clearFilterBtnCaption,\n cancelFilterBtnCaption: cancelFilterBtnCaption,\n morePagesBtnCaption: morePagesBtnCaption,\n noDataFoundText: noDataFoundText,\n headCellRender: headCellRender,\n dataCellRender: dataCellRender,\n rowExpandRender: rowExpandRender,\n valueFormatter: valueFormatter,\n onOrderChanged: handleOrderChanged,\n onFilterChanged: handleFilterChanged,\n onPagesCountChanged: handlePagesCountChanged\n });\n};\n\n//Контроль свойств - Таблица данных\nP8PDataGrid.propTypes = {\n columnsDef: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().array).isRequired,\n filtersInitial: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf(P8P_DATA_GRID_FILTER_SHAPE),\n rows: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().array).isRequired,\n size: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n morePages: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool).isRequired,\n reloading: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool).isRequired,\n expandable: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n orderAscMenuItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n orderDescMenuItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n filterMenuItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n valueFilterCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n valueFromFilterCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n valueToFilterCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n okFilterBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n clearFilterBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n cancelFilterBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n morePagesBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n noDataFoundText: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n headCellRender: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n dataCellRender: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n rowExpandRender: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n valueFormatter: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n onOrderChanged: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n onFilterChanged: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n onPagesCountChanged: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n objectsCopier: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_data_grid.js?"); /***/ }), @@ -3117,7 +3238,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 */ P8PFullScreenDialog: () => (/* binding */ P8PFullScreenDialog)\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_1__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/AppBar/AppBar.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Toolbar/Toolbar.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.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 STYLES = {\n DIALOG_TITLE: {\n padding: 0\n },\n APP_BAR: {\n position: \"relative\"\n },\n TITLE_TYPOGRAPHY: {\n ml: 2,\n flex: 1\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Полноэкранный диалог\nconst P8PFullScreenDialog = ({\n title,\n onClose,\n children\n}) => {\n const handleClose = () => {\n onClose ? onClose() : null;\n };\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n fullScreen: true,\n open: true,\n onClose: handleClose,\n scroll: \"paper\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n sx: STYLES.DIALOG_TITLE\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n sx: STYLES.APP_BAR\n }, /*#__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_5__[\"default\"], {\n edge: \"start\",\n color: \"inherit\",\n onClick: handleClose,\n \"aria-label\": \"close\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], null, \"close\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n sx: STYLES.TITLE_TYPOGRAPHY,\n variant: \"h6\",\n component: \"div\"\n }, title)))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], null, children));\n};\n\n//Контроль свойств - Полноэкранный диалог\nP8PFullScreenDialog.propTypes = {\n title: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().string).isRequired,\n onClose: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().func),\n children: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().element)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_fullscreen_dialog.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ P8PFullScreenDialog: () => (/* binding */ P8PFullScreenDialog)\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_1__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/AppBar/AppBar.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Toolbar/Toolbar.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/*\n Парус 8 - Панели мониторинга\n Компонент: Полноэкранный диалог\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n DIALOG_TITLE: {\n padding: 0\n },\n APP_BAR: {\n position: \"relative\"\n },\n TITLE_TYPOGRAPHY: {\n ml: 2,\n flex: 1\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Полноэкранный диалог\nconst P8PFullScreenDialog = ({\n title,\n onClose,\n children\n}) => {\n const handleClose = () => {\n onClose ? onClose() : null;\n };\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n fullScreen: true,\n open: true,\n onClose: handleClose,\n scroll: \"paper\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n sx: STYLES.DIALOG_TITLE\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n sx: STYLES.APP_BAR\n }, /*#__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_5__[\"default\"], {\n edge: \"start\",\n color: \"inherit\",\n onClick: handleClose,\n \"aria-label\": \"close\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], null, \"close\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n sx: STYLES.TITLE_TYPOGRAPHY,\n variant: \"h6\",\n component: \"div\"\n }, title)))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], null, children));\n};\n\n//Контроль свойств - Полноэкранный диалог\nP8PFullScreenDialog.propTypes = {\n title: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().string).isRequired,\n onClose: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().func),\n children: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().element)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_fullscreen_dialog.js?"); /***/ }), @@ -3128,7 +3249,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ P8PGantt: () => (/* binding */ P8PGantt),\n/* harmony export */ P8P_GANTT_TASK_ATTRIBUTE_SHAPE: () => (/* binding */ P8P_GANTT_TASK_ATTRIBUTE_SHAPE),\n/* harmony export */ P8P_GANTT_TASK_COLOR_SHAPE: () => (/* binding */ P8P_GANTT_TASK_COLOR_SHAPE),\n/* harmony export */ P8P_GANTT_TASK_SHAPE: () => (/* binding */ P8P_GANTT_TASK_SHAPE)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemText/ListItemText.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/List/List.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItem/ListItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Divider/Divider.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Slider/Slider.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Link/Link.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _p8p_app_message__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./p8p_app_message */ \"./app/components/p8p_app_message.js\");\n/*\r\n Парус 8 - Панели мониторинга\r\n Компонент: Диаграмма Ганта\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n //Встраиваемое сообщение об ошибке\n\n//---------\n//Константы\n//---------\n\n//Уровни масштаба\nconst P8P_GANTT_ZOOM = [0, 1, 2, 3, 4];\n\n//Уровни масштаба (строковые наименования в терминах библиотеки)\nconst P8P_GANTT_ZOOM_VIEW_MODES = {\n 0: \"Quarter Day\",\n 1: \"Half Day\",\n 2: \"Day\",\n 3: \"Week\",\n 4: \"Month\"\n};\n\n//Структура задачи\nconst P8P_GANTT_TASK_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_2___default().shape({\n id: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n rn: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().number).isRequired,\n numb: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n name: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n fullName: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n start: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n end: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n progress: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().number),\n dependencies: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().array),\n readOnly: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n readOnlyDates: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n readOnlyProgress: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n bgColor: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n textColor: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string)\n});\n\n//Структура динамического атрибута задачи\nconst P8P_GANTT_TASK_ATTRIBUTE_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_2___default().shape({\n name: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n caption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired\n});\n\n//Структура описания цвета задачи\nconst P8P_GANTT_TASK_COLOR_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_2___default().shape({\n bgColor: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n textColor: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n desc: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired\n});\n\n//Стили\nconst STYLES = {\n TASK_EDITOR_LIST: {\n width: \"100%\",\n minWidth: 300,\n maxWidth: 700,\n bgcolor: \"background.paper\"\n }\n};\n\n//--------------------------------\n//Вспомогательные классы и функции\n//--------------------------------\n\n//Проверка существования значения\nconst hasValue = value => typeof value !== \"undefined\" && value !== null && value !== \"\";\n\n//Редактор задачи\nconst P8PGanttTaskEditor = ({\n task,\n taskAttributes,\n taskColors,\n onOk,\n onCancel,\n taskAttributeRenderer,\n numbCaption,\n nameCaption,\n startCaption,\n endCaption,\n progressCaption,\n legendCaption,\n okBtnCaption,\n cancelBtnCaption\n}) => {\n //Собственное состояние\n const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n start: task.start,\n end: task.end,\n progress: task.progress\n });\n\n //При сохранении\n const handleOk = () => onOk && state.start && state.end ? onOk({\n task,\n start: state.start,\n end: state.end,\n progress: state.progress\n }) : null;\n\n //При отмене\n const handleCancel = () => onCancel ? onCancel() : null;\n\n //При изменении сроков\n const handlePeriodChanged = e => setState(prev => ({\n ...prev,\n [e.target.name]: e.target.value\n }));\n\n //При изменении прогресса\n const handleProgressChanged = (e, newValue) => setState(prev => ({\n ...prev,\n progress: newValue\n }));\n\n //Описание легенды для задачи\n let legend = null;\n if (Array.isArray(taskColors)) {\n const colorDesc = taskColors.find(color => task.bgColor === color.bgColor && task.textColor === color.textColor);\n if (colorDesc) legend = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n secondaryTypographyProps: {\n p: 1,\n sx: {\n ...(colorDesc.bgColor ? {\n backgroundColor: colorDesc.bgColor\n } : {}),\n ...(colorDesc.textColor ? {\n color: colorDesc.textColor\n } : {})\n }\n },\n primary: legendCaption,\n secondary: colorDesc.desc\n });\n }\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n open: true,\n onClose: handleCancel\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.TASK_EDITOR_LIST\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n alignItems: \"flex-start\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n primary: numbCaption,\n secondary: task.numb\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n component: \"li\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n alignItems: \"flex-start\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n primary: nameCaption,\n secondary: task.fullName\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n component: \"li\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n alignItems: \"flex-start\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n secondaryTypographyProps: {\n component: \"span\"\n },\n primary: startCaption,\n secondary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n error: !state.start,\n disabled: task.readOnly === true || task.readOnlyDates === true,\n name: \"start\",\n fullWidth: true,\n required: true,\n InputLabelProps: {\n shrink: true\n },\n type: \"date\",\n value: state.start,\n onChange: handlePeriodChanged,\n variant: \"standard\",\n size: \"small\",\n margin: \"normal\"\n })\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n component: \"li\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n alignItems: \"flex-start\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n secondaryTypographyProps: {\n component: \"span\"\n },\n primary: endCaption,\n secondary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n error: !state.end,\n disabled: task.readOnly === true || task.readOnlyDates === true,\n name: \"end\",\n fullWidth: true,\n required: true,\n InputLabelProps: {\n shrink: true\n },\n type: \"date\",\n value: state.end,\n onChange: handlePeriodChanged,\n variant: \"standard\",\n size: \"small\",\n margin: \"normal\"\n })\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n component: \"li\"\n }), hasValue(task.progress) ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n alignItems: \"flex-start\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n secondaryTypographyProps: {\n component: \"span\"\n },\n primary: `${progressCaption}${task.readOnly === true || task.readOnlyProgress === true ? ` (${task.progress}%)` : \"\"}`,\n secondary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n disabled: task.readOnly === true || task.readOnlyProgress === true,\n defaultValue: task.progress,\n valueLabelDisplay: \"auto\",\n onChange: handleProgressChanged\n })\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n component: \"li\"\n })) : null, legend ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n alignItems: \"flex-start\"\n }, legend), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n component: \"li\"\n })) : null, Array.isArray(taskAttributes) && taskAttributes.length > 0 ? taskAttributes.filter(attr => hasValue(task[attr.name])).map((attr, i) => {\n const defaultView = task[attr.name];\n const customView = taskAttributeRenderer ? taskAttributeRenderer({\n task,\n attribute: attr\n }) : null;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), {\n key: i\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n alignItems: \"flex-start\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n primary: attr.caption,\n secondaryTypographyProps: {\n component: \"span\"\n },\n secondary: customView ? customView : defaultView\n })), i < taskAttributes.length - 1 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n component: \"li\"\n }) : null);\n }) : null)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n disabled: !state.start || !state.end || task.readOnly,\n onClick: handleOk\n }, okBtnCaption), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n onClick: handleCancel\n }, cancelBtnCaption)));\n};\n\n//Контроль свойств - Редактор задачи\nP8PGanttTaskEditor.propTypes = {\n task: P8P_GANTT_TASK_SHAPE,\n taskAttributes: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf(P8P_GANTT_TASK_ATTRIBUTE_SHAPE),\n taskColors: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf(P8P_GANTT_TASK_COLOR_SHAPE),\n onOk: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n onCancel: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n taskAttributeRenderer: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n numbCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n nameCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n startCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n endCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n progressCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n legendCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n okBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n cancelBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Диаграмма Ганта\nconst P8PGantt = ({\n height,\n title,\n titleStyle,\n onTitleClick,\n zoomBar,\n readOnly,\n readOnlyDates,\n readOnlyProgress,\n zoom,\n tasks,\n taskAttributes,\n taskColors,\n onTaskDatesChange,\n onTaskProgressChange,\n taskAttributeRenderer,\n noDataFoundText,\n numbTaskEditorCaption,\n nameTaskEditorCaption,\n startTaskEditorCaption,\n endTaskEditorCaption,\n progressTaskEditorCaption,\n legendTaskEditorCaption,\n okTaskEditorBtnCaption,\n cancelTaskEditorBtnCaption\n}) => {\n //Собственное состояние\n const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n noData: true,\n gantt: null,\n zoom: P8P_GANTT_ZOOM.includes(zoom) ? zoom : 3,\n editTask: null\n });\n\n //Отображение диаграммы\n const showGantt = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n if (!state.gantt) {\n // eslint-disable-next-line no-undef\n const gantt = new Gantt(\"#__gantt__\", tasks, {\n view_mode: P8P_GANTT_ZOOM_VIEW_MODES[state.zoom],\n date_format: \"YYYY-MM-DD\",\n language: \"ru\",\n readOnly,\n readOnlyDates,\n readOnlyProgress,\n on_date_change: (task, start, end, isMain) => onTaskDatesChange ? onTaskDatesChange({\n task,\n start,\n end,\n isMain\n }) : null,\n on_progress_change: (task, progress) => onTaskProgressChange ? onTaskProgressChange({\n task,\n progress\n }) : null,\n on_click: openTaskEditor\n });\n setState(pv => ({\n ...pv,\n gantt,\n noData: false\n }));\n } else {\n state.gantt.refresh(tasks);\n setState(pv => ({\n ...pv,\n noData: false\n }));\n }\n }, [state.gantt, state.zoom, readOnly, readOnlyDates, readOnlyProgress, tasks, onTaskDatesChange, onTaskProgressChange]);\n\n //Обновление масштаба диаграммы\n const handleZoomChange = direction => setState(pv => ({\n ...pv,\n zoom: pv.zoom + direction < 0 ? 0 : pv.zoom + direction >= P8P_GANTT_ZOOM.length ? P8P_GANTT_ZOOM.length - 1 : pv.zoom + direction\n }));\n\n //Открытие редактора задачи\n const openTaskEditor = task => setState(pv => ({\n ...pv,\n editTask: {\n ...task\n }\n }));\n\n //При сохранении задачи в редакторе\n const handleTaskEditorSave = ({\n task,\n start,\n end,\n progress\n }) => {\n setState(pv => ({\n ...pv,\n editTask: null\n }));\n if (onTaskDatesChange && (task.start != start || task.end != end)) onTaskDatesChange({\n task,\n start,\n end,\n isMain: true\n });\n if (onTaskProgressChange && task.progress != progress) onTaskProgressChange({\n task,\n progress\n });\n };\n\n //При закрытии редактора задачи без сохранения\n const handleTaskEditorCancel = () => setState(pv => ({\n ...pv,\n editTask: null\n }));\n\n //При изменении масштаба\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (state.gantt) state.gantt.change_view_mode(P8P_GANTT_ZOOM_VIEW_MODES[state.zoom]);\n }, [state.gantt, state.zoom]);\n\n //При изменении списка задач\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (Array.isArray(tasks) && tasks.length > 0) showGantt();else setState(pv => ({\n ...pv,\n noData: true\n }));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [tasks]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, state.gantt && state.noData ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_p8p_app_message__WEBPACK_IMPORTED_MODULE_1__.P8PAppInlineError, {\n text: noDataFoundText\n }) : null, state.gantt && !state.noData && title ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n p: 1,\n sx: {\n ...(titleStyle ? titleStyle : {})\n },\n align: \"center\",\n color: \"textSecondary\",\n variant: \"subtitle1\"\n }, onTitleClick ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n component: \"button\",\n variant: \"body2\",\n underline: \"hover\",\n onClick: () => onTitleClick()\n }, title) : title) : null, state.gantt && !state.noData && zoomBar ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n p: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n onClick: () => handleZoomChange(-1),\n disabled: state.zoom == 0\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], null, \"zoom_in\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n onClick: () => handleZoomChange(1),\n disabled: state.zoom == P8P_GANTT_ZOOM.length - 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], null, \"zoom_out\"))) : null, state.editTask ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PGanttTaskEditor, {\n task: state.editTask,\n taskAttributes: taskAttributes,\n taskColors: taskColors,\n onOk: handleTaskEditorSave,\n onCancel: handleTaskEditorCancel,\n taskAttributeRenderer: taskAttributeRenderer,\n numbCaption: numbTaskEditorCaption,\n nameCaption: nameTaskEditorCaption,\n startCaption: startTaskEditorCaption,\n endCaption: endTaskEditorCaption,\n progressCaption: progressTaskEditorCaption,\n legendCaption: legendTaskEditorCaption,\n okBtnCaption: okTaskEditorBtnCaption,\n cancelBtnCaption: cancelTaskEditorBtnCaption\n }) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: {\n height,\n display: state.noData ? \"none\" : \"\"\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"svg\", {\n id: \"__gantt__\",\n width: \"100%\"\n })));\n};\n\n//Контроль свойств - Диаграмма Ганта\nP8PGantt.propTypes = {\n height: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n title: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n titleStyle: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().object),\n onTitleClick: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n zoomBar: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n readOnly: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n readOnlyDates: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n readOnlyProgress: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n zoom: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().number),\n tasks: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf(P8P_GANTT_TASK_SHAPE).isRequired,\n taskAttributes: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf(P8P_GANTT_TASK_ATTRIBUTE_SHAPE),\n taskColors: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf(P8P_GANTT_TASK_COLOR_SHAPE),\n onTaskDatesChange: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n onTaskProgressChange: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n taskAttributeRenderer: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n noDataFoundText: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n numbTaskEditorCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n nameTaskEditorCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n startTaskEditorCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n endTaskEditorCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n progressTaskEditorCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n legendTaskEditorCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n okTaskEditorBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n cancelTaskEditorBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_gantt.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ P8PGantt: () => (/* binding */ P8PGantt),\n/* harmony export */ P8P_GANTT_TASK_ATTRIBUTE_SHAPE: () => (/* binding */ P8P_GANTT_TASK_ATTRIBUTE_SHAPE),\n/* harmony export */ P8P_GANTT_TASK_COLOR_SHAPE: () => (/* binding */ P8P_GANTT_TASK_COLOR_SHAPE),\n/* harmony export */ P8P_GANTT_TASK_SHAPE: () => (/* binding */ P8P_GANTT_TASK_SHAPE)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemText/ListItemText.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/List/List.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItem/ListItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Divider/Divider.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Slider/Slider.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Link/Link.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _p8p_app_message__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./p8p_app_message */ \"./app/components/p8p_app_message.js\");\n/*\n Парус 8 - Панели мониторинга\n Компонент: Диаграмма Ганта\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n //Встраиваемое сообщение об ошибке\n\n//---------\n//Константы\n//---------\n\n//Уровни масштаба\nconst P8P_GANTT_ZOOM = [0, 1, 2, 3, 4];\n\n//Уровни масштаба (строковые наименования в терминах библиотеки)\nconst P8P_GANTT_ZOOM_VIEW_MODES = {\n 0: \"Quarter Day\",\n 1: \"Half Day\",\n 2: \"Day\",\n 3: \"Week\",\n 4: \"Month\"\n};\n\n//Структура задачи\nconst P8P_GANTT_TASK_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_2___default().shape({\n id: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n rn: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().number).isRequired,\n numb: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n name: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n fullName: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n start: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n end: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n progress: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().number),\n dependencies: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().array),\n readOnly: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n readOnlyDates: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n readOnlyProgress: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n bgColor: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n textColor: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n bgProgressColor: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string)\n});\n\n//Структура динамического атрибута задачи\nconst P8P_GANTT_TASK_ATTRIBUTE_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_2___default().shape({\n name: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n caption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired\n});\n\n//Структура описания цвета задачи\nconst P8P_GANTT_TASK_COLOR_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_2___default().shape({\n bgColor: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n textColor: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n bgProgressColor: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n desc: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired\n});\n\n//Стили\nconst STYLES = {\n TASK_EDITOR_LIST: {\n width: \"100%\",\n minWidth: 300,\n maxWidth: 700,\n bgcolor: \"background.paper\"\n }\n};\n\n//--------------------------------\n//Вспомогательные классы и функции\n//--------------------------------\n\n//Проверка существования значения\nconst hasValue = value => typeof value !== \"undefined\" && value !== null && value !== \"\";\n\n//Редактор задачи\nconst P8PGanttTaskEditor = ({\n task,\n taskAttributes,\n taskColors,\n onOk,\n onCancel,\n taskAttributeRenderer,\n numbCaption,\n nameCaption,\n startCaption,\n endCaption,\n progressCaption,\n legendCaption,\n okBtnCaption,\n cancelBtnCaption\n}) => {\n //Собственное состояние\n const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n start: task.start,\n end: task.end,\n progress: task.progress\n });\n\n //При сохранении\n const handleOk = () => onOk && state.start && state.end ? onOk({\n task,\n start: state.start,\n end: state.end,\n progress: state.progress\n }) : null;\n\n //При отмене\n const handleCancel = () => onCancel ? onCancel() : null;\n\n //При изменении сроков\n const handlePeriodChanged = e => setState(prev => ({\n ...prev,\n [e.target.name]: e.target.value\n }));\n\n //При изменении прогресса\n const handleProgressChanged = (e, newValue) => setState(prev => ({\n ...prev,\n progress: newValue\n }));\n\n //Описание легенды для задачи\n let legend = null;\n if (Array.isArray(taskColors)) {\n const colorDesc = taskColors.find(color => task.bgColor === color.bgColor && task.textColor === color.textColor && task.bgProgressColor === color.bgProgressColor);\n if (colorDesc) legend = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n secondaryTypographyProps: {\n p: 1,\n sx: {\n ...(colorDesc.bgProgressColor ? {\n background: `linear-gradient(to right, ${colorDesc.bgProgressColor} ,${colorDesc.bgColor ? colorDesc.bgColor : \"transparent\"})}`\n } : colorDesc.bgColor ? {\n backgroundColor: colorDesc.bgColor\n } : {}),\n ...(colorDesc.textColor ? {\n color: colorDesc.textColor\n } : {})\n }\n },\n primary: legendCaption,\n secondary: colorDesc.desc\n });\n }\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n open: true,\n onClose: handleCancel\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.TASK_EDITOR_LIST\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n alignItems: \"flex-start\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n primary: numbCaption,\n secondary: task.numb\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n component: \"li\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n alignItems: \"flex-start\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n primary: nameCaption,\n secondary: task.fullName\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n component: \"li\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n alignItems: \"flex-start\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n secondaryTypographyProps: {\n component: \"span\"\n },\n primary: startCaption,\n secondary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n error: !state.start,\n disabled: task.readOnly === true || task.readOnlyDates === true,\n name: \"start\",\n fullWidth: true,\n required: true,\n InputLabelProps: {\n shrink: true\n },\n type: \"date\",\n value: state.start,\n onChange: handlePeriodChanged,\n variant: \"standard\",\n size: \"small\",\n margin: \"normal\"\n })\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n component: \"li\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n alignItems: \"flex-start\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n secondaryTypographyProps: {\n component: \"span\"\n },\n primary: endCaption,\n secondary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n error: !state.end,\n disabled: task.readOnly === true || task.readOnlyDates === true,\n name: \"end\",\n fullWidth: true,\n required: true,\n InputLabelProps: {\n shrink: true\n },\n type: \"date\",\n value: state.end,\n onChange: handlePeriodChanged,\n variant: \"standard\",\n size: \"small\",\n margin: \"normal\"\n })\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n component: \"li\"\n }), hasValue(task.progress) ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n alignItems: \"flex-start\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n secondaryTypographyProps: {\n component: \"span\"\n },\n primary: `${progressCaption}${task.readOnly === true || task.readOnlyProgress === true ? ` (${task.progress}%)` : \"\"}`,\n secondary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n disabled: task.readOnly === true || task.readOnlyProgress === true,\n defaultValue: task.progress,\n valueLabelDisplay: \"auto\",\n onChange: handleProgressChanged\n })\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n component: \"li\"\n })) : null, legend ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n alignItems: \"flex-start\"\n }, legend), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n component: \"li\"\n })) : null, Array.isArray(taskAttributes) && taskAttributes.length > 0 ? taskAttributes.filter(attr => hasValue(task[attr.name])).map((attr, i) => {\n const defaultView = task[attr.name];\n const customView = taskAttributeRenderer ? taskAttributeRenderer({\n task,\n attribute: attr\n }) : null;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), {\n key: i\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n alignItems: \"flex-start\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n primary: attr.caption,\n secondaryTypographyProps: {\n component: \"span\"\n },\n secondary: customView ? customView : defaultView\n })), i < taskAttributes.length - 1 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n component: \"li\"\n }) : null);\n }) : null)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n disabled: !state.start || !state.end || task.readOnly,\n onClick: handleOk\n }, okBtnCaption), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n onClick: handleCancel\n }, cancelBtnCaption)));\n};\n\n//Контроль свойств - Редактор задачи\nP8PGanttTaskEditor.propTypes = {\n task: P8P_GANTT_TASK_SHAPE,\n taskAttributes: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf(P8P_GANTT_TASK_ATTRIBUTE_SHAPE),\n taskColors: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf(P8P_GANTT_TASK_COLOR_SHAPE),\n onOk: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n onCancel: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n taskAttributeRenderer: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n numbCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n nameCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n startCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n endCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n progressCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n legendCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n okBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n cancelBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Диаграмма Ганта\nconst P8PGantt = ({\n height,\n title,\n titleStyle,\n onTitleClick,\n zoomBar,\n readOnly,\n readOnlyDates,\n readOnlyProgress,\n zoom,\n tasks,\n taskAttributes,\n taskColors,\n onTaskDatesChange,\n onTaskProgressChange,\n taskAttributeRenderer,\n noDataFoundText,\n numbTaskEditorCaption,\n nameTaskEditorCaption,\n startTaskEditorCaption,\n endTaskEditorCaption,\n progressTaskEditorCaption,\n legendTaskEditorCaption,\n okTaskEditorBtnCaption,\n cancelTaskEditorBtnCaption\n}) => {\n //Собственное состояние\n const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n noData: true,\n gantt: null,\n zoom: P8P_GANTT_ZOOM.includes(zoom) ? zoom : 3,\n editTask: null\n });\n\n //Отображение диаграммы\n const showGantt = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n if (!state.gantt) {\n // eslint-disable-next-line no-undef\n const gantt = new Gantt(\"#__gantt__\", tasks, {\n view_mode: P8P_GANTT_ZOOM_VIEW_MODES[state.zoom],\n date_format: \"YYYY-MM-DD\",\n language: \"ru\",\n readOnly,\n readOnlyDates,\n readOnlyProgress,\n on_date_change: (task, start, end, isMain) => onTaskDatesChange ? onTaskDatesChange({\n task,\n start,\n end,\n isMain\n }) : null,\n on_progress_change: (task, progress) => onTaskProgressChange ? onTaskProgressChange({\n task,\n progress\n }) : null,\n on_click: openTaskEditor\n });\n setState(pv => ({\n ...pv,\n gantt,\n noData: false\n }));\n } else {\n state.gantt.refresh(tasks);\n setState(pv => ({\n ...pv,\n noData: false\n }));\n }\n }, [state.gantt, state.zoom, readOnly, readOnlyDates, readOnlyProgress, tasks, onTaskDatesChange, onTaskProgressChange]);\n\n //Обновление масштаба диаграммы\n const handleZoomChange = direction => setState(pv => ({\n ...pv,\n zoom: pv.zoom + direction < 0 ? 0 : pv.zoom + direction >= P8P_GANTT_ZOOM.length ? P8P_GANTT_ZOOM.length - 1 : pv.zoom + direction\n }));\n\n //Открытие редактора задачи\n const openTaskEditor = task => setState(pv => ({\n ...pv,\n editTask: {\n ...task\n }\n }));\n\n //При сохранении задачи в редакторе\n const handleTaskEditorSave = ({\n task,\n start,\n end,\n progress\n }) => {\n setState(pv => ({\n ...pv,\n editTask: null\n }));\n if (onTaskDatesChange && (task.start != start || task.end != end)) onTaskDatesChange({\n task,\n start,\n end,\n isMain: true\n });\n if (onTaskProgressChange && task.progress != progress) onTaskProgressChange({\n task,\n progress\n });\n };\n\n //При закрытии редактора задачи без сохранения\n const handleTaskEditorCancel = () => setState(pv => ({\n ...pv,\n editTask: null\n }));\n\n //При изменении масштаба\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (state.gantt) state.gantt.change_view_mode(P8P_GANTT_ZOOM_VIEW_MODES[state.zoom]);\n }, [state.gantt, state.zoom]);\n\n //При изменении списка задач\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (Array.isArray(tasks) && tasks.length > 0) showGantt();else setState(pv => ({\n ...pv,\n noData: true\n }));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [tasks]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, state.gantt && state.noData ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_p8p_app_message__WEBPACK_IMPORTED_MODULE_1__.P8PAppInlineError, {\n text: noDataFoundText\n }) : null, state.gantt && !state.noData && title ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n p: 1,\n sx: {\n ...(titleStyle ? titleStyle : {})\n },\n align: \"center\",\n color: \"textSecondary\",\n variant: \"subtitle1\"\n }, onTitleClick ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n component: \"button\",\n variant: \"body2\",\n underline: \"hover\",\n onClick: () => onTitleClick()\n }, title) : title) : null, state.gantt && !state.noData && zoomBar ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n p: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n onClick: () => handleZoomChange(-1),\n disabled: state.zoom == 0\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], null, \"zoom_in\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n onClick: () => handleZoomChange(1),\n disabled: state.zoom == P8P_GANTT_ZOOM.length - 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], null, \"zoom_out\"))) : null, state.editTask ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PGanttTaskEditor, {\n task: state.editTask,\n taskAttributes: taskAttributes,\n taskColors: taskColors,\n onOk: handleTaskEditorSave,\n onCancel: handleTaskEditorCancel,\n taskAttributeRenderer: taskAttributeRenderer,\n numbCaption: numbTaskEditorCaption,\n nameCaption: nameTaskEditorCaption,\n startCaption: startTaskEditorCaption,\n endCaption: endTaskEditorCaption,\n progressCaption: progressTaskEditorCaption,\n legendCaption: legendTaskEditorCaption,\n okBtnCaption: okTaskEditorBtnCaption,\n cancelBtnCaption: cancelTaskEditorBtnCaption\n }) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: {\n height,\n display: state.noData ? \"none\" : \"\"\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"svg\", {\n id: \"__gantt__\",\n width: \"100%\"\n })));\n};\n\n//Контроль свойств - Диаграмма Ганта\nP8PGantt.propTypes = {\n height: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n title: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n titleStyle: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().object),\n onTitleClick: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n zoomBar: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n readOnly: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n readOnlyDates: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n readOnlyProgress: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n zoom: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().number),\n tasks: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf(P8P_GANTT_TASK_SHAPE).isRequired,\n taskAttributes: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf(P8P_GANTT_TASK_ATTRIBUTE_SHAPE),\n taskColors: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf(P8P_GANTT_TASK_COLOR_SHAPE),\n onTaskDatesChange: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n onTaskProgressChange: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n taskAttributeRenderer: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n noDataFoundText: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n numbTaskEditorCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n nameTaskEditorCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n startTaskEditorCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n endTaskEditorCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n progressTaskEditorCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n legendTaskEditorCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n okTaskEditorBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n cancelTaskEditorBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_gantt.js?"); /***/ }), @@ -3139,7 +3260,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ P8PPanelsMenuDesktop: () => (/* binding */ P8PPanelsMenuDesktop),\n/* harmony export */ P8PPanelsMenuDrawer: () => (/* binding */ P8PPanelsMenuDrawer),\n/* harmony export */ P8PPanelsMenuGrid: () => (/* binding */ P8PPanelsMenuGrid),\n/* harmony export */ P8P_PANELS_MENU_PANEL_SHAPE: () => (/* binding */ P8P_PANELS_MENU_PANEL_SHAPE)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Divider/Divider.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Card/Card.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/CardMedia/CardMedia.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/CardContent/CardContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/CardActions/CardActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItem/ListItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemButton/ListItemButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemIcon/ListItemIcon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemText/ListItemText.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/List/List.js\");\n/*\r\n Парус 8 - Панели мониторинга\r\n Компонент: Меню панелей\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n\n//---------\n//Константы\n//---------\n\n//Типы меню\nconst P8P_PANELS_MENU_VARIANT = {\n DRAWER: \"DRAWER\",\n GRID: \"GRID\",\n DESKTOP: \"DESKTOP\"\n};\n\n//Структура элемента описания панели\nconst P8P_PANELS_MENU_PANEL_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_1___default().shape({\n name: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired,\n caption: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired,\n desc: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired,\n group: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string),\n icon: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired,\n path: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired,\n preview: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired,\n showInPanelsList: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().bool).isRequired,\n url: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired\n});\n\n//Стили\nconst STYLES = {\n GRID_CONTAINER: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"flex-start\",\n minHeight: \"100vh\"\n },\n GRID: {\n maxWidth: 1200,\n direction: \"row\",\n justifyContent: \"left\",\n alignItems: \"stretch\"\n },\n GRID_PANEL_CARD: {\n maxWidth: 400,\n height: \"100%\",\n flexDirection: \"column\",\n display: \"flex\"\n },\n GRID_PANEL_CARD_MEDIA: {\n height: 140\n },\n GRID_PANEL_CARD_CONTENT_TITLE: {\n alignItems: \"center\"\n },\n GRID_PANEL_CARD_ACTIONS: {\n marginTop: \"auto\",\n display: \"flex\",\n justifyContent: \"flex-end\",\n alignItems: \"flex-start\"\n },\n DESKTOP_GROUP_HEADER: {\n fontWeight: \"bold\",\n fontFamily: \"tahoma, arial, verdana, sans-serif!important\",\n fontSize: \"13px!important\"\n },\n DESKTOP_ITEM_BUTTON: {\n fontSize: \"12px\",\n textTransform: \"none\",\n \"&:hover\": {\n backgroundColor: \"#c3e1ff\"\n }\n },\n DESKTOP_ITEM_STACK: {\n justifyContent: \"center\",\n alignItems: \"center\"\n },\n DESKTOP_ITEM_ICON: {\n width: \"64px\",\n height: \"64px\",\n fontSize: \"64px\"\n }\n};\n\n//--------------------------------\n//Вспомогательные классы и функции\n//--------------------------------\n\n//Формирование групп\nconst getGroups = (panels, group) => {\n let res = [];\n let addDefaultGroup = false;\n for (const panel of panels) if (panel.showInPanelsList == true) {\n if (panel.group && !res.includes(panel.group)) res.push(panel.group);\n if (!panel.group) addDefaultGroup = true;\n }\n if (addDefaultGroup || res.length == 0) res.push(null);\n if (group) res = res.filter(g => g == group);\n return res;\n};\n\n//Формирование ссылок на панели\nconst getPanelsLinks = ({\n variant,\n panels,\n selectedPanel,\n group,\n defaultGroupTytle,\n navigateCaption,\n onItemNavigate\n}) => {\n //Получим группы\n let grps = getGroups(panels, group);\n\n //Построим ссылки\n const panelsLinks = [];\n for (const grp of grps) {\n if (!(grps.length == 1 && grps[0] == null)) panelsLinks.push(variant === P8P_PANELS_MENU_VARIANT.GRID ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n item: true,\n xs: 12,\n sm: 12,\n md: 12,\n lg: 12,\n xl: 12,\n key: grp\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n variant: \"h5\",\n color: \"secondary\"\n }, grp ? grp : defaultGroupTytle)) : variant === P8P_PANELS_MENU_VARIANT.DRAWER ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n key: grp\n }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n pb: 1,\n key: grp\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n variant: \"h7\",\n sx: STYLES.DESKTOP_GROUP_HEADER\n }, grp ? grp : defaultGroupTytle)));\n for (const panel of panels) {\n if (panel.showInPanelsList == true && (grp && panel.group === grp || !grp && !panel.group)) panelsLinks.push(variant === P8P_PANELS_MENU_VARIANT.GRID ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n item: true,\n xs: 12,\n sm: 6,\n md: 4,\n lg: 4,\n xl: 4,\n key: panel.name\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.GRID_PANEL_CARD\n }, panel.preview ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n component: \"img\",\n alt: panel.name,\n image: panel.preview,\n sx: STYLES.GRID_PANEL_CARD_MEDIA\n }) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n gap: 1,\n direction: \"row\",\n sx: STYLES.GRID_PANEL_CARD_CONTENT_TITLE\n }, panel.icon ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null, panel.icon) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n variant: \"h5\"\n }, panel.caption)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n variant: \"body2\",\n color: \"text.secondary\"\n }, panel.desc)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n sx: STYLES.GRID_PANEL_CARD_ACTIONS\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n size: \"large\",\n onClick: () => onItemNavigate ? onItemNavigate(panel) : null\n }, navigateCaption)))) : variant === P8P_PANELS_MENU_VARIANT.DRAWER ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n key: panel.name,\n disablePadding: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n selected: selectedPanel?.name === panel.name,\n onClick: () => onItemNavigate ? onItemNavigate(panel) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null, panel.icon)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n primary: panel.caption\n }))) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n p: 3,\n key: panel.name,\n onClick: () => onItemNavigate ? onItemNavigate(panel) : null,\n sx: STYLES.DESKTOP_ITEM_BUTTON\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n sx: STYLES.DESKTOP_ITEM_STACK\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n sx: STYLES.DESKTOP_ITEM_ICON\n }, panel.icon), panel.caption)));\n }\n }\n\n //Вернём ссылки\n return panelsLinks;\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Меню панелей - сдвигающееся боковое меню\nconst P8PPanelsMenuDrawer = ({\n onItemNavigate,\n panels = [],\n selectedPanel\n} = {}) => {\n //Формируем ссылки на панели\n const panelsLinks = getPanelsLinks({\n variant: P8P_PANELS_MENU_VARIANT.DRAWER,\n panels,\n selectedPanel,\n onItemNavigate\n });\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n sx: {\n paddingTop: 0\n }\n }, panelsLinks);\n};\n\n//Контроль свойств - Меню панелей - сдвигающееся боковое меню\nP8PPanelsMenuDrawer.propTypes = {\n onItemNavigate: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n panels: prop_types__WEBPACK_IMPORTED_MODULE_1___default().arrayOf(P8P_PANELS_MENU_PANEL_SHAPE).isRequired,\n selectedPanel: P8P_PANELS_MENU_PANEL_SHAPE\n};\n\n//Меню панелей - грид\nconst P8PPanelsMenuGrid = ({\n onItemNavigate,\n navigateCaption,\n panels = [],\n defaultGroupTytle\n} = {}) => {\n //Формируем ссылки на панели\n const panelsLinks = getPanelsLinks({\n variant: P8P_PANELS_MENU_VARIANT.GRID,\n panels,\n defaultGroupTytle,\n navigateCaption,\n onItemNavigate\n });\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.GRID_CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n container: true,\n spacing: 2,\n p: 2,\n sx: STYLES.GRID\n }, panelsLinks));\n};\n\n//Контроль свойств - Меню панелей - грид\nP8PPanelsMenuGrid.propTypes = {\n onItemNavigate: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n navigateCaption: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired,\n panels: prop_types__WEBPACK_IMPORTED_MODULE_1___default().arrayOf(P8P_PANELS_MENU_PANEL_SHAPE).isRequired,\n defaultGroupTytle: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired\n};\n\n//Меню панелей - рабочий стол\nconst P8PPanelsMenuDesktop = ({\n group,\n onItemNavigate,\n panels = [],\n defaultGroupTytle\n} = {}) => {\n //Формируем ссылки на панели\n const panelsLinks = getPanelsLinks({\n variant: P8P_PANELS_MENU_VARIANT.DESKTOP,\n panels,\n group,\n defaultGroupTytle,\n onItemNavigate\n });\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n p: 2\n }, panelsLinks);\n};\n\n//Контроль свойств - Меню панелей - рабочий стол\nP8PPanelsMenuDesktop.propTypes = {\n group: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string),\n onItemNavigate: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n panels: prop_types__WEBPACK_IMPORTED_MODULE_1___default().arrayOf(P8P_PANELS_MENU_PANEL_SHAPE).isRequired,\n defaultGroupTytle: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_panels_menu.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ P8PPanelsMenuDesktop: () => (/* binding */ P8PPanelsMenuDesktop),\n/* harmony export */ P8PPanelsMenuDrawer: () => (/* binding */ P8PPanelsMenuDrawer),\n/* harmony export */ P8PPanelsMenuGrid: () => (/* binding */ P8PPanelsMenuGrid),\n/* harmony export */ P8P_PANELS_MENU_PANEL_SHAPE: () => (/* binding */ P8P_PANELS_MENU_PANEL_SHAPE)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Divider/Divider.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Card/Card.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/CardMedia/CardMedia.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/CardContent/CardContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/CardActions/CardActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItem/ListItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemButton/ListItemButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemIcon/ListItemIcon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemText/ListItemText.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/List/List.js\");\n/*\n Парус 8 - Панели мониторинга\n Компонент: Меню панелей\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n\n//---------\n//Константы\n//---------\n\n//Типы меню\nconst P8P_PANELS_MENU_VARIANT = {\n DRAWER: \"DRAWER\",\n GRID: \"GRID\",\n DESKTOP: \"DESKTOP\"\n};\n\n//Структура элемента описания панели\nconst P8P_PANELS_MENU_PANEL_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_1___default().shape({\n name: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired,\n caption: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired,\n desc: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired,\n group: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string),\n icon: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired,\n path: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired,\n preview: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired,\n showInPanelsList: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().bool).isRequired,\n url: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired\n});\n\n//Стили\nconst STYLES = {\n GRID_CONTAINER: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"flex-start\",\n minHeight: \"100vh\"\n },\n GRID: {\n maxWidth: 1200,\n direction: \"row\",\n justifyContent: \"left\",\n alignItems: \"stretch\"\n },\n GRID_PANEL_CARD: {\n maxWidth: 400,\n height: \"100%\",\n flexDirection: \"column\",\n display: \"flex\"\n },\n GRID_PANEL_CARD_MEDIA: {\n height: 140\n },\n GRID_PANEL_CARD_CONTENT_TITLE: {\n alignItems: \"center\"\n },\n GRID_PANEL_CARD_ACTIONS: {\n marginTop: \"auto\",\n display: \"flex\",\n justifyContent: \"flex-end\",\n alignItems: \"flex-start\"\n },\n DESKTOP_GROUP_HEADER: {\n fontWeight: \"bold\",\n fontFamily: \"tahoma, arial, verdana, sans-serif!important\",\n fontSize: \"13px!important\"\n },\n DESKTOP_ITEM_BUTTON: {\n fontSize: \"12px\",\n textTransform: \"none\",\n \"&:hover\": {\n backgroundColor: \"#c3e1ff\"\n }\n },\n DESKTOP_ITEM_STACK: {\n justifyContent: \"center\",\n alignItems: \"center\"\n },\n DESKTOP_ITEM_ICON: {\n width: \"64px\",\n height: \"64px\",\n fontSize: \"64px\"\n }\n};\n\n//--------------------------------\n//Вспомогательные классы и функции\n//--------------------------------\n\n//Формирование групп\nconst getGroups = (panels, group) => {\n let res = [];\n let addDefaultGroup = false;\n for (const panel of panels) if (panel.showInPanelsList == true) {\n if (panel.group && !res.includes(panel.group)) res.push(panel.group);\n if (!panel.group) addDefaultGroup = true;\n }\n if (addDefaultGroup || res.length == 0) res.push(null);\n if (group) res = res.filter(g => g == group);\n return res;\n};\n\n//Формирование ссылок на панели\nconst getPanelsLinks = ({\n variant,\n panels,\n selectedPanel,\n group,\n defaultGroupTytle,\n navigateCaption,\n onItemNavigate\n}) => {\n //Получим группы\n let grps = getGroups(panels, group);\n\n //Построим ссылки\n const panelsLinks = [];\n for (const grp of grps) {\n if (!(grps.length == 1 && grps[0] == null)) panelsLinks.push(variant === P8P_PANELS_MENU_VARIANT.GRID ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n item: true,\n xs: 12,\n sm: 12,\n md: 12,\n lg: 12,\n xl: 12,\n key: grp\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n variant: \"h5\",\n color: \"secondary\"\n }, grp ? grp : defaultGroupTytle)) : variant === P8P_PANELS_MENU_VARIANT.DRAWER ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n key: grp\n }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n pb: 1,\n key: grp\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n variant: \"h7\",\n sx: STYLES.DESKTOP_GROUP_HEADER\n }, grp ? grp : defaultGroupTytle)));\n for (const panel of panels) {\n if (panel.showInPanelsList == true && (grp && panel.group === grp || !grp && !panel.group)) panelsLinks.push(variant === P8P_PANELS_MENU_VARIANT.GRID ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n item: true,\n xs: 12,\n sm: 6,\n md: 4,\n lg: 4,\n xl: 4,\n key: panel.name\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.GRID_PANEL_CARD\n }, panel.preview ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n component: \"img\",\n alt: panel.name,\n image: panel.preview,\n sx: STYLES.GRID_PANEL_CARD_MEDIA\n }) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n gap: 1,\n direction: \"row\",\n sx: STYLES.GRID_PANEL_CARD_CONTENT_TITLE\n }, panel.icon ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null, panel.icon) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n variant: \"h5\"\n }, panel.caption)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n variant: \"body2\",\n color: \"text.secondary\"\n }, panel.desc)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n sx: STYLES.GRID_PANEL_CARD_ACTIONS\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n size: \"large\",\n onClick: () => onItemNavigate ? onItemNavigate(panel) : null\n }, navigateCaption)))) : variant === P8P_PANELS_MENU_VARIANT.DRAWER ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n key: panel.name,\n disablePadding: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n selected: selectedPanel?.name === panel.name,\n onClick: () => onItemNavigate ? onItemNavigate(panel) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null, panel.icon)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n primary: panel.caption\n }))) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n p: 3,\n key: panel.name,\n onClick: () => onItemNavigate ? onItemNavigate(panel) : null,\n sx: STYLES.DESKTOP_ITEM_BUTTON\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n sx: STYLES.DESKTOP_ITEM_STACK\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n sx: STYLES.DESKTOP_ITEM_ICON\n }, panel.icon), panel.caption)));\n }\n }\n\n //Вернём ссылки\n return panelsLinks;\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Меню панелей - сдвигающееся боковое меню\nconst P8PPanelsMenuDrawer = ({\n onItemNavigate,\n panels = [],\n selectedPanel\n} = {}) => {\n //Формируем ссылки на панели\n const panelsLinks = getPanelsLinks({\n variant: P8P_PANELS_MENU_VARIANT.DRAWER,\n panels,\n selectedPanel,\n onItemNavigate\n });\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n sx: {\n paddingTop: 0\n }\n }, panelsLinks);\n};\n\n//Контроль свойств - Меню панелей - сдвигающееся боковое меню\nP8PPanelsMenuDrawer.propTypes = {\n onItemNavigate: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n panels: prop_types__WEBPACK_IMPORTED_MODULE_1___default().arrayOf(P8P_PANELS_MENU_PANEL_SHAPE).isRequired,\n selectedPanel: P8P_PANELS_MENU_PANEL_SHAPE\n};\n\n//Меню панелей - грид\nconst P8PPanelsMenuGrid = ({\n onItemNavigate,\n navigateCaption,\n panels = [],\n defaultGroupTytle\n} = {}) => {\n //Формируем ссылки на панели\n const panelsLinks = getPanelsLinks({\n variant: P8P_PANELS_MENU_VARIANT.GRID,\n panels,\n defaultGroupTytle,\n navigateCaption,\n onItemNavigate\n });\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.GRID_CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n container: true,\n spacing: 2,\n p: 2,\n sx: STYLES.GRID\n }, panelsLinks));\n};\n\n//Контроль свойств - Меню панелей - грид\nP8PPanelsMenuGrid.propTypes = {\n onItemNavigate: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n navigateCaption: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired,\n panels: prop_types__WEBPACK_IMPORTED_MODULE_1___default().arrayOf(P8P_PANELS_MENU_PANEL_SHAPE).isRequired,\n defaultGroupTytle: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired\n};\n\n//Меню панелей - рабочий стол\nconst P8PPanelsMenuDesktop = ({\n group,\n onItemNavigate,\n panels = [],\n defaultGroupTytle\n} = {}) => {\n //Формируем ссылки на панели\n const panelsLinks = getPanelsLinks({\n variant: P8P_PANELS_MENU_VARIANT.DESKTOP,\n panels,\n group,\n defaultGroupTytle,\n onItemNavigate\n });\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n p: 2\n }, panelsLinks);\n};\n\n//Контроль свойств - Меню панелей - рабочий стол\nP8PPanelsMenuDesktop.propTypes = {\n group: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string),\n onItemNavigate: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n panels: prop_types__WEBPACK_IMPORTED_MODULE_1___default().arrayOf(P8P_PANELS_MENU_PANEL_SHAPE).isRequired,\n defaultGroupTytle: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_panels_menu.js?"); /***/ }), @@ -3150,18 +3271,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ P8PTable: () => (/* binding */ P8PTable),\n/* harmony export */ P8P_TABLE_DATA_TYPE: () => (/* binding */ P8P_TABLE_DATA_TYPE),\n/* harmony export */ P8P_TABLE_FILTER_SHAPE: () => (/* binding */ P8P_TABLE_FILTER_SHAPE),\n/* harmony export */ P8P_TABLE_SIZE: () => (/* binding */ P8P_TABLE_SIZE)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/MenuItem/MenuItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Divider/Divider.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Menu/Menu.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Chip/Chip.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TableCell/TableCell.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TableContainer/TableContainer.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Paper/Paper.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Table/Table.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TableHead/TableHead.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TableRow/TableRow.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Link/Link.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TableBody/TableBody.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Container/Container.js\");\n/* harmony import */ var _p8p_app_message__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./p8p_app_message */ \"./app/components/p8p_app_message.js\");\n/* harmony import */ var _p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./p8p_table_reducer */ \"./app/components/p8p_table_reducer.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга\r\n Компонент: Таблица\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n //Встраиваемое сообщение об ошибке\n //Редьюсер состояния\n\n//---------\n//Константы\n//---------\n\n//Размеры отступов\nconst P8P_TABLE_SIZE = {\n SMALL: \"small\",\n MEDIUM: \"medium\"\n};\n\n//Типы данных\nconst P8P_TABLE_DATA_TYPE = {\n STR: \"STR\",\n NUMB: \"NUMB\",\n DATE: \"DATE\"\n};\n\n//Направления сортировки\nconst P8P_TABLE_COLUMN_ORDER_DIRECTIONS = {\n ASC: \"ASC\",\n DESC: \"DESC\"\n};\n\n//Действия панели инструментов столбца\nconst P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS = {\n ORDER_TOGGLE: \"ORDER_TOGGLE\",\n FILTER_TOGGLE: \"FILTER_TOGGLE\",\n EXPAND_TOGGLE: \"EXPAND_TOGGLE\"\n};\n\n//Действия меню столбца\nconst P8P_TABLE_COLUMN_MENU_ACTIONS = {\n ORDER_ASC: \"ORDER_ASC\",\n ORDER_DESC: \"ORDER_DESC\",\n FILTER: \"FILTER\"\n};\n\n//Структура элемента описания фильтра\nconst P8P_TABLE_FILTER_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_3___default().shape({\n name: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n from: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().any),\n to: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().any)\n});\n\n//Стили\nconst STYLES = {\n TABLE: {\n with: \"100%\"\n },\n TABLE_ROW: {\n \"&:last-child td, &:last-child th\": {\n border: 0\n }\n },\n TABLE_CELL_EXPAND_CONTAINER: {\n paddingBottom: 0,\n paddingTop: 0\n },\n TABLE_CELL_GROUP_HEADER: {\n backgroundColor: \"lightgray\"\n },\n TABLE_COLUMN_STACK: {\n alignItems: \"center\"\n },\n TABLE_COLUMN_MENU_ITEM_ICON: {\n paddingRight: \"10px\"\n },\n FILTER_CHIP: {\n alignItems: \"center\"\n },\n MORE_BUTTON_CONTAINER: {\n with: \"100%\",\n textAlign: \"center\",\n padding: \"5px\"\n }\n};\n\n//--------------------------------\n//Вспомогательные классы и функции\n//--------------------------------\n\n//Панель инструментов столбца (левая)\nconst P8PTableColumnToolBarLeft = ({\n columnDef,\n onItemClick\n}) => {\n //Кнопка развёртывания/свёртывания\n let expButton = null;\n if (columnDef.expandable) expButton = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: () => onItemClick ? onItemClick(P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.EXPAND_TOGGLE, columnDef.name) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, columnDef.expanded ? \"indeterminate_check_box\" : \"add_box\"));\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, expButton);\n};\n\n//Контроль свойств - Панель инструментов столбца (левая)\nP8PTableColumnToolBarLeft.propTypes = {\n columnDef: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object).isRequired,\n onItemClick: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//Панель инструментов столбца (правая)\nconst P8PTableColumnToolBarRight = ({\n columnDef,\n orders,\n filters,\n onItemClick\n}) => {\n //Кнопка сортировки\n const order = orders.find(o => o.name == columnDef.name);\n let orderButton = null;\n if (order) orderButton = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: () => onItemClick ? onItemClick(P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.ORDER_TOGGLE, columnDef.name) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, order.direction === P8P_TABLE_COLUMN_ORDER_DIRECTIONS.ASC ? \"arrow_upward\" : \"arrow_downward\"));\n\n //Кнопка фильтрации\n const filter = filters.find(f => f.name == columnDef.name);\n let filterButton = null;\n if ((0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.hasValue)(filter?.from) || (0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.hasValue)(filter?.to)) filterButton = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: () => onItemClick ? onItemClick(P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.FILTER_TOGGLE, columnDef.name) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, \"filter_alt\"));\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, orderButton, filterButton);\n};\n\n//Контроль свойств - Панель инструментов столбца (правая)\nP8PTableColumnToolBarRight.propTypes = {\n columnDef: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object).isRequired,\n orders: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array).isRequired,\n filters: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array).isRequired,\n onItemClick: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//Меню столбца\nconst P8PTableColumnMenu = ({\n columnDef,\n orderAscItemCaption,\n orderDescItemCaption,\n filterItemCaption,\n onItemClick\n}) => {\n //Собственное состояние\n const [anchorEl, setAnchorEl] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Флаг отображения\n const open = Boolean(anchorEl);\n\n //По нажатию на открытие меню\n const handleMenuButtonClick = event => {\n setAnchorEl(event.currentTarget);\n };\n\n //По нажатию на пункт меню\n const handleMenuItemClick = (event, index, action, columnName) => {\n if (onItemClick) onItemClick(action, columnName);\n setAnchorEl(null);\n };\n\n //При закрытии меню\n const handleMenuClose = () => {\n setAnchorEl(null);\n };\n\n //Формирование списка элементов меню в зависимости от описания колонки таблицы\n const menuItems = [];\n if (columnDef.order === true) {\n menuItems.push( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n key: \"orderAsc\",\n onClick: (event, index) => handleMenuItemClick(event, index, P8P_TABLE_COLUMN_MENU_ACTIONS.ORDER_ASC, columnDef.name)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.TABLE_COLUMN_MENU_ITEM_ICON\n }, \"arrow_upward\"), orderAscItemCaption));\n menuItems.push( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n key: \"orderDesc\",\n onClick: (event, index) => handleMenuItemClick(event, index, P8P_TABLE_COLUMN_MENU_ACTIONS.ORDER_DESC, columnDef.name)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.TABLE_COLUMN_MENU_ITEM_ICON\n }, \"arrow_downward\"), orderDescItemCaption));\n }\n if (columnDef.filter === true) {\n if (menuItems.length > 0) menuItems.push( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n key: \"divider\",\n sx: {\n my: 0.5\n }\n }));\n menuItems.push( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n key: \"filter\",\n onClick: (event, index) => handleMenuItemClick(event, index, P8P_TABLE_COLUMN_MENU_ACTIONS.FILTER, columnDef.name)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.TABLE_COLUMN_MENU_ITEM_ICON\n }, \"filter_alt\"), filterItemCaption));\n }\n\n //Генерация содержимого\n return menuItems.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n id: `${columnDef.name}_menu_button`,\n \"aria-haspopup\": \"true\",\n onClick: handleMenuButtonClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, \"more_vert\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n id: `${columnDef.name}_menu`,\n anchorEl: anchorEl,\n open: open,\n onClose: handleMenuClose\n }, menuItems)) : null;\n};\n\n//Контроль свойств - Меню столбца\nP8PTableColumnMenu.propTypes = {\n columnDef: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object).isRequired,\n orderAscItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n orderDescItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n filterItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n onItemClick: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//Диалог подсказки\nconst P8PTableColumnHintDialog = ({\n columnDef,\n okBtnCaption,\n onOk\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n open: true,\n \"aria-labelledby\": \"filter-dialog-title\",\n \"aria-describedby\": \"filter-dialog-description\",\n onClose: () => onOk ? onOk() : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n id: \"filter-dialog-title\"\n }, columnDef.caption), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n dangerouslySetInnerHTML: {\n __html: columnDef.hint\n }\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: () => onOk ? onOk() : null\n }, okBtnCaption)));\n};\n\n//Контроль свойств - Диалог подсказки\nP8PTableColumnHintDialog.propTypes = {\n columnDef: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object).isRequired,\n okBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n onOk: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//Диалог фильтра\nconst P8PTableColumnFilterDialog = ({\n columnDef,\n from,\n to,\n valueCaption,\n valueFromCaption,\n valueToCaption,\n okBtnCaption,\n clearBtnCaption,\n cancelBtnCaption,\n valueFormatter,\n onOk,\n onClear,\n onCancel\n}) => {\n //Собственное состояние - значения с-по\n const [filterValues, setFilterValues] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n from,\n to\n });\n\n //Отработка воода значения в фильтр\n const handleFilterTextFieldChanged = e => {\n setFilterValues(prev => ({\n ...prev,\n [e.target.name]: e.target.value\n }));\n };\n\n //Элементы ввода значений фильтра\n let inputs = null;\n if (Array.isArray(columnDef.values) && columnDef.values.length > 0) {\n inputs = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n name: \"from\",\n fullWidth: true,\n select: true,\n label: valueCaption,\n variant: \"standard\",\n value: filterValues.from,\n onChange: handleFilterTextFieldChanged\n }, columnDef.values.map((v, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n key: i,\n value: v\n }, valueFormatter ? valueFormatter({\n value: v,\n columnDef\n }) : v)));\n } else {\n switch (columnDef.dataType) {\n case P8P_TABLE_DATA_TYPE.STR:\n {\n inputs = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n name: \"from\",\n fullWidth: true,\n InputLabelProps: {\n shrink: true\n },\n value: filterValues.from,\n onChange: handleFilterTextFieldChanged,\n label: valueCaption,\n variant: \"standard\"\n });\n break;\n }\n case P8P_TABLE_DATA_TYPE.NUMB:\n case P8P_TABLE_DATA_TYPE.DATE:\n {\n inputs = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n name: \"from\",\n InputLabelProps: {\n shrink: true\n },\n type: columnDef.dataType == P8P_TABLE_DATA_TYPE.NUMB ? \"number\" : \"date\",\n value: filterValues.from,\n onChange: handleFilterTextFieldChanged,\n label: valueFromCaption,\n variant: \"standard\"\n }), \"\\xA0\", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n name: \"to\",\n InputLabelProps: {\n shrink: true\n },\n type: columnDef.dataType == P8P_TABLE_DATA_TYPE.NUMB ? \"number\" : \"date\",\n value: filterValues.to,\n onChange: handleFilterTextFieldChanged,\n label: valueToCaption,\n variant: \"standard\"\n }));\n break;\n }\n }\n }\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n open: true,\n \"aria-labelledby\": \"filter-dialog-title\",\n \"aria-describedby\": \"filter-dialog-description\",\n onClose: () => onCancel ? onCancel(columnDef.name) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n id: \"filter-dialog-title\"\n }, columnDef.caption), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, inputs), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: () => onOk ? onOk(columnDef.name, filterValues.from, filterValues.to) : null\n }, okBtnCaption), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: () => onClear ? onClear(columnDef.name) : null,\n variant: \"secondary\"\n }, clearBtnCaption), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: () => onCancel ? onCancel(columnDef.name) : null\n }, cancelBtnCaption)));\n};\n\n//Контроль свойств - Диалог фильтра\nP8PTableColumnFilterDialog.propTypes = {\n columnDef: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().object).isRequired,\n from: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().any),\n to: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().any),\n valueCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueFromCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueToCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n okBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n clearBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n cancelBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueFormatter: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onOk: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onClear: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onCancel: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//Сводный фильтр\nconst P8PTableFiltersChips = ({\n filters,\n columnsDef,\n valueFromCaption,\n valueToCaption,\n onFilterChipClick,\n onFilterChipDelete,\n valueFormatter\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n direction: \"row\",\n spacing: 1,\n pb: 2\n }, filters.map((filter, i) => {\n const columnDef = columnsDef.find(columnDef => columnDef.name == filter.name);\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n key: i,\n label: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n direction: \"row\",\n sx: STYLES.FILTER_CHIP\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"strong\", null, columnDef.caption), \":\\xA0\", (0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.hasValue)(filter.from) && !columnDef.values && columnDef.dataType != P8P_TABLE_DATA_TYPE.STR ? `${valueFromCaption.toLowerCase()} ` : null, (0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.hasValue)(filter.from) ? valueFormatter ? valueFormatter({\n value: filter.from,\n columnDef\n }) : filter.from : null, (0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.hasValue)(filter.to) && !columnDef.values && columnDef.dataType != P8P_TABLE_DATA_TYPE.STR ? ` ${valueToCaption.toLowerCase()} ` : null, (0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.hasValue)(filter.to) ? valueFormatter ? valueFormatter({\n value: filter.to,\n columnDef\n }) : filter.to : null),\n variant: \"outlined\",\n onClick: () => onFilterChipClick ? onFilterChipClick(columnDef.name) : null,\n onDelete: () => onFilterChipDelete ? onFilterChipDelete(columnDef.name) : null\n });\n }));\n};\n\n//Контроль свойств - Сводный фильтр\nP8PTableFiltersChips.propTypes = {\n filters: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array).isRequired,\n columnsDef: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array).isRequired,\n valueFromCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueToCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n onFilterChipClick: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onFilterChipDelete: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n valueFormatter: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Таблица\nconst P8PTable = ({\n columnsDef,\n groups = [{}],\n rows,\n orders,\n filters,\n size,\n morePages = false,\n reloading,\n expandable,\n orderAscMenuItemCaption,\n orderDescMenuItemCaption,\n filterMenuItemCaption,\n valueFilterCaption,\n valueFromFilterCaption,\n valueToFilterCaption,\n okFilterBtnCaption,\n clearFilterBtnCaption,\n cancelFilterBtnCaption,\n morePagesBtnCaption,\n noDataFoundText,\n headCellRender,\n dataCellRender,\n groupCellRender,\n rowExpandRender,\n valueFormatter,\n onOrderChanged,\n onFilterChanged,\n onPagesCountChanged,\n objectsCopier\n}) => {\n //Собственное состояние - описание заголовка\n const [header, dispatchHeaderAction] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useReducer)(_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.p8pTableReducer, (0,_p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.HEADER_INITIAL_STATE)());\n\n //Собственное состояние - фильтруемая колонка\n const [filterColumn, setFilterColumn] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Собственное состояние - развёрнутые строки\n const [expanded, setExpanded] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({});\n\n //Собственное состояния - развёрнутые группы\n const [expandedGroups, setExpandedGroups] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({});\n\n //Собственное состояние - колонка с отображаемой подсказкой\n const [displayHintColumn, setDisplayHintColumn] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Описание фильтруемой колонки\n const filterColumnDef = filterColumn ? columnsDef.find(columnDef => columnDef.name == filterColumn) || null : null;\n\n //Описание колонки с отображаемой подсказкой\n const displayHintColumnDef = displayHintColumn ? columnsDef.find(columnDef => columnDef.name == displayHintColumn) || null : null;\n\n //Значения фильтра фильтруемой колонки\n const [filterColumnFrom, filterColumnTo] = filterColumn ? (() => {\n const filter = filters.find(filter => filter.name == filterColumn);\n return filter ? [filter.from == null ? \"\" : filter.from, filter.to == null ? \"\" : filter.to] : [\"\", \"\"];\n })() : [\"\", \"\"];\n\n //Формирование заголовка таблицы\n const setHeader = ({\n columnsDef,\n expandable,\n objectsCopier\n }) => dispatchHeaderAction({\n type: _p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.P8P_TABLE_AT.SET_HEADER,\n payload: {\n columnsDef,\n expandable,\n objectsCopier\n }\n });\n\n //Сворачивание/разворачивание уровня заголовка таблицы\n const toggleHeaderExpand = ({\n columnName,\n objectsCopier\n }) => dispatchHeaderAction({\n type: _p8p_table_reducer__WEBPACK_IMPORTED_MODULE_2__.P8P_TABLE_AT.TOGGLE_HEADER_EXPAND,\n payload: {\n columnName,\n expandable,\n objectsCopier\n }\n });\n\n //Выравнивание в зависимости от типа данных\n const getAlignByDataType = ({\n dataType,\n hasChild\n }) => dataType === P8P_TABLE_DATA_TYPE.DATE || hasChild ? \"center\" : dataType === P8P_TABLE_DATA_TYPE.NUMB ? \"right\" : \"left\";\n\n //Упорядочение содержимого в зависимости от типа данных\n const getJustifyContentByDataType = ({\n dataType,\n hasChild\n }) => dataType === P8P_TABLE_DATA_TYPE.DATE || hasChild ? \"center\" : dataType === P8P_TABLE_DATA_TYPE.NUMB ? \"flex-end\" : \"flex-start\";\n\n //Отработка нажатия на элемент пункта меню\n const handleToolBarItemClick = (action, columnName) => {\n switch (action) {\n case P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.ORDER_TOGGLE:\n {\n const colOrder = orders.find(o => o.name == columnName);\n const newDirection = colOrder?.direction == P8P_TABLE_COLUMN_ORDER_DIRECTIONS.ASC ? P8P_TABLE_COLUMN_ORDER_DIRECTIONS.DESC : colOrder?.direction == P8P_TABLE_COLUMN_ORDER_DIRECTIONS.DESC ? null : P8P_TABLE_COLUMN_ORDER_DIRECTIONS.ASC;\n if (onOrderChanged) onOrderChanged({\n columnName,\n direction: newDirection\n });\n break;\n }\n case P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.FILTER_TOGGLE:\n setFilterColumn(columnName);\n break;\n case P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.EXPAND_TOGGLE:\n toggleHeaderExpand({\n columnName,\n objectsCopier\n });\n break;\n }\n };\n\n //Отработка нажатия на пункты меню\n const handleMenuItemClick = (action, columnName) => {\n switch (action) {\n case P8P_TABLE_COLUMN_MENU_ACTIONS.ORDER_ASC:\n onOrderChanged({\n columnName,\n direction: P8P_TABLE_COLUMN_ORDER_DIRECTIONS.ASC\n });\n break;\n case P8P_TABLE_COLUMN_MENU_ACTIONS.ORDER_DESC:\n onOrderChanged({\n columnName,\n direction: P8P_TABLE_COLUMN_ORDER_DIRECTIONS.DESC\n });\n break;\n case P8P_TABLE_COLUMN_MENU_ACTIONS.FILTER:\n setFilterColumn(columnName);\n break;\n }\n };\n\n //Отработка ввода значения фильтра колонки\n const handleFilterOk = (columnName, from, to) => {\n if (onFilterChanged) onFilterChanged({\n columnName,\n from: from === \"\" ? null : from,\n to: to === \"\" ? null : to\n });\n setFilterColumn(null);\n };\n\n //Отработка очистки значения фильтра колонки\n const handleFilterClear = columnName => {\n if (onFilterChanged) onFilterChanged({\n columnName,\n from: null,\n to: null\n });\n setFilterColumn(null);\n };\n\n //Отработка отмены ввода значения фильтра колонки\n const handleFilterCancel = () => {\n setFilterColumn(null);\n };\n\n //Отработка нажатия на элемент сводного фильтра\n const handleFilterChipClick = columnName => setFilterColumn(columnName);\n\n //Отработка удаления элемента сводного фильтра\n const handleFilterChipDelete = columnName => onFilterChanged ? onFilterChanged({\n columnName,\n from: null,\n to: null\n }) : null;\n\n //Отработка нажатия на кнопку догрузки страницы\n const handleMorePagesBtnClick = () => {\n if (onPagesCountChanged) onPagesCountChanged();\n };\n\n //Отработка нажатия на элемент отображения подсказки по колонке\n const handleColumnShowHintClick = columnName => setDisplayHintColumn(columnName);\n\n //Отработка сокрытия подсказки по колонке\n const handleHintOk = () => setDisplayHintColumn(null);\n\n //Отработка нажатия на кнопку раскрытия элемента\n const handleExpandClick = rowIndex => {\n if (expanded[rowIndex] === true) setExpanded(pv => {\n let res = {\n ...pv\n };\n delete res[rowIndex];\n return res;\n });else setExpanded(pv => ({\n ...pv,\n [rowIndex]: true\n }));\n };\n\n //При перезагрузке данных\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (reloading) setExpanded({});\n }, [reloading]);\n\n //При изменении описания колонок\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n setHeader({\n columnsDef,\n expandable,\n objectsCopier\n });\n }, [columnsDef, expandable, objectsCopier]);\n\n //Генерация заголовка группы\n const renderGroupCell = group => {\n let customRender = {};\n if (groupCellRender) customRender = groupCellRender({\n columnsDef: header.columnsDef,\n group\n }) || {};\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], _extends({\n colSpan: header.displayDataColumnsCount,\n sx: {\n ...STYLES.TABLE_CELL_GROUP_HEADER,\n ...customRender.cellStyle\n }\n }, customRender.cellProps), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n direction: \"row\",\n sx: STYLES.TABLE_COLUMN_STACK\n }, group.expandable ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: () => {\n setExpandedGroups(pv => ({\n ...pv,\n ...{\n [group.name]: !pv[group.name]\n }\n }));\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, expandedGroups[group.name] ? \"indeterminate_check_box\" : \"add_box\")) : null, customRender.data ? customRender.data : group.caption));\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, displayHintColumn ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableColumnHintDialog, {\n columnDef: displayHintColumnDef,\n okBtnCaption: okFilterBtnCaption,\n onOk: handleHintOk\n }) : null, filterColumn ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableColumnFilterDialog, {\n columnDef: filterColumnDef,\n from: filterColumnFrom,\n to: filterColumnTo,\n valueCaption: valueFilterCaption,\n valueFromCaption: valueFromFilterCaption,\n valueToCaption: valueToFilterCaption,\n okBtnCaption: okFilterBtnCaption,\n clearBtnCaption: clearFilterBtnCaption,\n cancelBtnCaption: cancelFilterBtnCaption,\n valueFormatter: valueFormatter,\n onOk: handleFilterOk,\n onClear: handleFilterClear,\n onCancel: handleFilterCancel\n }) : null, Array.isArray(filters) && filters.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableFiltersChips, {\n filters: filters,\n columnsDef: columnsDef,\n valueFromCaption: valueFromFilterCaption,\n valueToCaption: valueToFilterCaption,\n onFilterChipClick: handleFilterChipClick,\n onFilterChipDelete: handleFilterChipDelete,\n valueFormatter: valueFormatter\n }) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n component: _mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"]\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n sx: STYLES.TABLE,\n size: size || P8P_TABLE_SIZE.MEDIUM\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], null, header.displayLevels.map(level => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], {\n key: level\n }, expandable && rowExpandRender ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n key: \"head-cell-expand-control\",\n align: \"center\"\n }) : null, header.displayLevelsColumns[level].map((columnDef, j) => {\n let customRender = {};\n if (headCellRender) customRender = headCellRender({\n columnDef\n }) || {};\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], _extends({\n key: `head-cell-${j}`,\n align: getAlignByDataType(columnDef),\n sx: {\n ...customRender.cellStyle\n },\n rowSpan: columnDef.rowSpan,\n colSpan: columnDef.colSpan\n }, customRender.cellProps), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], _extends({\n direction: \"row\",\n justifyContent: getJustifyContentByDataType(columnDef),\n sx: {\n ...STYLES.TABLE_COLUMN_STACK,\n ...customRender.stackStyle\n }\n }, customRender.stackProps), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableColumnToolBarLeft, {\n columnDef: columnDef,\n onItemClick: handleToolBarItemClick\n }), customRender.data ? customRender.data : columnDef.hint ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], {\n component: \"button\",\n variant: \"body2\",\n align: \"left\",\n underline: \"always\",\n onClick: () => handleColumnShowHintClick(columnDef.name)\n }, columnDef.caption) : columnDef.caption, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableColumnToolBarRight, {\n columnDef: columnDef,\n orders: orders,\n filters: filters,\n onItemClick: handleToolBarItemClick\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableColumnMenu, {\n columnDef: columnDef,\n orderAscItemCaption: orderAscMenuItemCaption,\n orderDescItemCaption: orderDescMenuItemCaption,\n filterItemCaption: filterMenuItemCaption,\n onItemClick: handleMenuItemClick\n })));\n })))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_24__[\"default\"], null, rows.length > 0 ? groups.map((group, g) => {\n const rowsView = rows.map((row, i) => !group?.name || group?.name == row.groupName ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), {\n key: `data-${i}`\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], {\n key: `data-row-${i}`,\n sx: STYLES.TABLE_ROW\n }, expandable && rowExpandRender ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n key: `data-cell-expand-control-${i}`,\n align: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: () => handleExpandClick(i)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, expanded[i] === true ? \"keyboard_arrow_down\" : \"keyboard_arrow_right\"))) : null, header.displayDataColumns.map((columnDef, j) => {\n let customRender = {};\n if (dataCellRender) customRender = dataCellRender({\n row,\n columnDef\n }) || {};\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], _extends({\n key: `data-cell-${j}`,\n align: getAlignByDataType(columnDef),\n sx: {\n ...customRender.cellStyle\n }\n }, customRender.cellProps), customRender.data ? customRender.data : valueFormatter ? valueFormatter({\n value: row[columnDef.name],\n columnDef\n }) : row[columnDef.name]);\n })), expandable && rowExpandRender && expanded[i] === true ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], {\n key: `data-row-expand-${i}`\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n sx: STYLES.TABLE_CELL_EXPAND_CONTAINER,\n colSpan: header.displayDataColumnsCount\n }, rowExpandRender({\n columnsDef,\n row\n }))) : null) : null);\n return !group?.name ? rowsView : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), {\n key: `group-${g}`\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], {\n key: `group-header-${g}`\n }, renderGroupCell(group)), !group.expandable || expandedGroups[group.name] === true ? rowsView : null);\n }) : null)), rows.length == 0 ? noDataFoundText && !reloading ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_p8p_app_message__WEBPACK_IMPORTED_MODULE_1__.P8PAppInlineError, {\n text: noDataFoundText\n }) : null : morePages ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_25__[\"default\"], {\n style: STYLES.MORE_BUTTON_CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n fullWidth: true,\n onClick: handleMorePagesBtnClick\n }, morePagesBtnCaption)) : null));\n};\n\n//Контроль свойств - Таблица\nP8PTable.propTypes = {\n columnsDef: prop_types__WEBPACK_IMPORTED_MODULE_3___default().arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_3___default().shape({\n name: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n caption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n order: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n filter: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n dataType: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n visible: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n values: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array),\n parent: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),\n expandable: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n expanded: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired\n })).isRequired,\n groups: prop_types__WEBPACK_IMPORTED_MODULE_3___default().arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_3___default().shape({\n name: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n caption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n expandable: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n expanded: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired\n })),\n rows: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array).isRequired,\n orders: prop_types__WEBPACK_IMPORTED_MODULE_3___default().arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_3___default().shape({\n name: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n direction: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired\n })).isRequired,\n filters: prop_types__WEBPACK_IMPORTED_MODULE_3___default().arrayOf(P8P_TABLE_FILTER_SHAPE).isRequired,\n size: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),\n morePages: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool),\n reloading: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool).isRequired,\n expandable: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool),\n orderAscMenuItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n orderDescMenuItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n filterMenuItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueFilterCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueFromFilterCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n valueToFilterCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n okFilterBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n clearFilterBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n cancelFilterBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n morePagesBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string).isRequired,\n noDataFoundText: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),\n headCellRender: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n dataCellRender: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n groupCellRender: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n rowExpandRender: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n valueFormatter: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onOrderChanged: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onFilterChanged: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n onPagesCountChanged: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n objectsCopier: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_table.js?"); - -/***/ }), - -/***/ "./app/components/p8p_table_reducer.js": -/*!*********************************************!*\ - !*** ./app/components/p8p_table_reducer.js ***! - \*********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ HEADER_INITIAL_STATE: () => (/* binding */ HEADER_INITIAL_STATE),\n/* harmony export */ P8P_TABLE_AT: () => (/* binding */ P8P_TABLE_AT),\n/* harmony export */ hasValue: () => (/* binding */ hasValue),\n/* harmony export */ p8pTableReducer: () => (/* binding */ p8pTableReducer)\n/* harmony export */ });\n/*\r\n Парус 8 - Панели мониторинга\r\n Компонент: Таблица - редьюсер состояния\r\n*/\n\n//---------\n//Константы\n//---------\n\n//Типы действий\nconst P8P_TABLE_AT = {\n SET_HEADER: \"SET_HEADER\",\n //Установка заголовка таблицы\n TOGGLE_HEADER_EXPAND: \"TOGGLE_HEADER_EXPAND\" //Сворачивание/разворачивание уровня заголовка\n};\n\n//Состояние заголовка таблицы по умолчанию\nconst HEADER_INITIAL_STATE = () => ({\n columnsDef: [],\n displayLevels: [],\n displayLevelsColumns: {},\n displayDataColumnsCount: 0,\n displayDataColumns: []\n});\n\n//Состояние описания ячейки заголовка таблицы по умолчанию\nconst HEADER_COLUMN_INITIAL_STATE = ({\n columnDef,\n objectsCopier\n}) => {\n const tmp = objectsCopier(columnDef);\n if (!hasValue(tmp.parent)) tmp.parent = \"\";\n if (!hasValue(tmp.expandable)) tmp.expandable = false;\n if (!hasValue(tmp.expanded)) tmp.expanded = true;\n return tmp;\n};\n\n//--------------------------------\n//Вспомогательные классы и функции\n//--------------------------------\n\n//Проверка существования значения\nconst hasValue = value => typeof value !== \"undefined\" && value !== undefined && value !== null && value !== \"\";\n\n//Определение высоты (в уровнях) ячейки заголовка\nconst getDisplayColumnRowSpan = (displayTree, maxLevel) => {\n displayTree.forEach(columnDef => {\n columnDef.rowSpan = columnDef.hasChild ? maxLevel - columnDef.childMaxLevel + 1 : maxLevel - columnDef.level + 1;\n if (columnDef.hasChild) getDisplayColumnRowSpan(columnDef.child, maxLevel);\n });\n};\n\n//Определение ширины (в колонках) ячейки заголовка\nconst getDisplayColumnColSpan = (displayTree, columnDef) => {\n if (columnDef.hasChild) {\n let colSpan = 0;\n displayTree.forEach(cD => cD.parent == columnDef.name ? colSpan += getDisplayColumnColSpan(cD.child, cD) : null);\n return colSpan;\n } else return 1;\n};\n\n//Формирование дерева отображаемых элементов заголовка\nconst buildDisplayTree = (columnsDef, parent, level) => {\n const baseBuild = (columnsDef, parent, level) => {\n let maxLevel = level - 1;\n const res = columnsDef.filter(columnDef => columnDef.parent == parent && columnDef.visible).map(columnDef => {\n const [child, childMaxLevel] = columnDef.expanded ? baseBuild(columnsDef, columnDef.name, level + 1) : [[], level];\n if (childMaxLevel > maxLevel) maxLevel = childMaxLevel;\n const res = {\n ...columnDef,\n child,\n hasChild: child.length > 0 ? true : false,\n level,\n childMaxLevel: child.length > 0 ? childMaxLevel : 0\n };\n return {\n ...res,\n colSpan: getDisplayColumnColSpan(child, res),\n rowSpan: 1\n };\n });\n return [res, maxLevel];\n };\n const [displayTree, maxLevel] = baseBuild(columnsDef, parent, level);\n getDisplayColumnRowSpan(displayTree, maxLevel);\n return [displayTree, maxLevel];\n};\n\n//Формирование коллекции отображаемых колонок уровня\nconst buildDisplayLevelsColumns = (displayTree, maxLevel) => {\n const extractLevel = (displayTree, level) => {\n let res = [];\n displayTree.forEach(columnDef => {\n if (columnDef.level == level) res.push(columnDef);\n if (columnDef.hasChild) res = res.concat(extractLevel(columnDef.child, level));\n });\n return res;\n };\n const displayLevels = [...Array(maxLevel).keys()].map(i => i + 1);\n const displayLevelsColumns = {};\n displayLevels.forEach(level => displayLevelsColumns[level] = extractLevel(displayTree, level));\n return [displayLevels, displayLevelsColumns];\n};\n\n//Формирование коллекции отображаемых колонок данных\nconst buildDisplayDataColumns = (displayTree, expandable) => {\n const displayDataColumns = [];\n const traverseTree = displayTree => {\n displayTree.forEach(columnDef => !columnDef.hasChild ? displayDataColumns.push(columnDef) : traverseTree(columnDef.child));\n };\n traverseTree(displayTree);\n return [displayDataColumns, displayDataColumns.length + (expandable === true ? 1 : 0)];\n};\n\n//Формирование описания отображаемых колонок\nconst buildDisplay = ({\n columnsDef,\n expandable\n}) => {\n //Сформируем дерево отображаемых колонок заголовка\n const [displayTree, maxLevel] = buildDisplayTree(columnsDef, \"\", 1);\n //Вытянем дерево в удобные для рендеринга структуры\n const [displayLevels, displayLevelsColumns] = buildDisplayLevelsColumns(displayTree, maxLevel);\n //Сформируем отображаемые колонки данных\n const [displayDataColumns, displayDataColumnsCount] = buildDisplayDataColumns(displayTree, expandable);\n //Вернём результат\n return [displayLevels, displayLevelsColumns, displayDataColumns, displayDataColumnsCount];\n};\n\n//Формирование описания заголовка\nconst buildHeaderDef = ({\n columnsDef,\n expandable,\n objectsCopier\n}) => {\n //Инициализируем результат\n const res = HEADER_INITIAL_STATE();\n //Инициализируем внутренне описание колонок и поместим его в результат\n columnsDef.forEach(columnDef => res.columnsDef.push(HEADER_COLUMN_INITIAL_STATE({\n columnDef,\n objectsCopier\n })));\n //Добавим в результат сведения об отображаемых данных\n [res.displayLevels, res.displayLevelsColumns, res.displayDataColumns, res.displayDataColumnsCount] = buildDisplay({\n columnsDef: res.columnsDef,\n expandable\n });\n //Сформируем дерево отображаемых колонок заголовка\n //const [displayTree, maxLevel] = buildDisplayTree(res.columnsDef, \"\", 1);\n //Вытянем дерево в удобные для рендеринга структуры\n //[res.displayLevels, res.displayLevelsColumns] = buildDisplayLevelsColumns(displayTree, maxLevel);\n //Сформируем отображаемые колонки данных\n //[res.displayDataColumns, res.displayDataColumnsCount] = buildDisplayDataColumns(displayTree, expandable);\n //Вернём результат\n return res;\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Обработчики действий\nconst handlers = {\n //Формирование заголовка\n [P8P_TABLE_AT.SET_HEADER]: (state, {\n payload\n }) => {\n const {\n columnsDef,\n expandable,\n objectsCopier\n } = payload;\n return {\n ...state,\n ...buildHeaderDef({\n columnsDef,\n expandable,\n objectsCopier\n })\n };\n },\n [P8P_TABLE_AT.TOGGLE_HEADER_EXPAND]: (state, {\n payload\n }) => {\n const {\n columnName,\n expandable,\n objectsCopier\n } = payload;\n const columnsDef = objectsCopier(state.columnsDef);\n columnsDef.forEach(columnDef => columnDef.name == columnName ? columnDef.expanded = !columnDef.expanded : null);\n const [displayLevels, displayLevelsColumns, displayDataColumns, displayDataColumnsCount] = buildDisplay({\n columnsDef,\n expandable\n });\n //const [displayTree, maxLevel] = buildDisplayTree(columnsDef, \"\", 1);\n //const [displayLevels, displayLevelsColumns] = buildDisplayLevelsColumns(displayTree, maxLevel);\n //const [displayDataColumns, displayDataColumnsCount] = buildDisplayDataColumns(displayTree, expandable);\n return {\n ...state,\n columnsDef,\n displayLevels,\n displayLevelsColumns,\n displayDataColumns,\n displayDataColumnsCount\n };\n },\n //Обработчик по умолчанию\n DEFAULT: state => state\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n//Константы\n\n\n//Редьюсер состояния\nconst p8pTableReducer = (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_table_reducer.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ P8PTable: () => (/* binding */ P8PTable),\n/* harmony export */ P8P_TABLE_DATA_TYPE: () => (/* binding */ P8P_TABLE_DATA_TYPE),\n/* harmony export */ P8P_TABLE_FILTER_SHAPE: () => (/* binding */ P8P_TABLE_FILTER_SHAPE),\n/* harmony export */ P8P_TABLE_SIZE: () => (/* binding */ P8P_TABLE_SIZE)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/MenuItem/MenuItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Divider/Divider.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Menu/Menu.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Chip/Chip.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TableContainer/TableContainer.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Paper/Paper.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Table/Table.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TableHead/TableHead.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TableRow/TableRow.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TableCell/TableCell.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Link/Link.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TableBody/TableBody.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Container/Container.js\");\n/* harmony import */ var _p8p_app_message__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./p8p_app_message */ \"./app/components/p8p_app_message.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\n Парус 8 - Панели мониторинга\n Компонент: Таблица\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n //Встраиваемое сообщение об ошибке\n\n//---------\n//Константы\n//---------\n\n//Размеры отступов\nconst P8P_TABLE_SIZE = {\n SMALL: \"small\",\n MEDIUM: \"medium\"\n};\n\n//Типы данных\nconst P8P_TABLE_DATA_TYPE = {\n STR: \"STR\",\n NUMB: \"NUMB\",\n DATE: \"DATE\"\n};\n\n//Направления сортировки\nconst P8P_TABLE_COLUMN_ORDER_DIRECTIONS = {\n ASC: \"ASC\",\n DESC: \"DESC\"\n};\n\n//Действия панели инструментов столбца\nconst P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS = {\n ORDER_TOGGLE: \"ORDER_TOGGLE\",\n FILTER_TOGGLE: \"FILTER_TOGGLE\"\n};\n\n//Действия меню столбца\nconst P8P_TABLE_COLUMN_MENU_ACTIONS = {\n ORDER_ASC: \"ORDER_ASC\",\n ORDER_DESC: \"ORDER_DESC\",\n FILTER: \"FILTER\"\n};\n\n//Структура элемента описания фильтра\nconst P8P_TABLE_FILTER_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_2___default().shape({\n name: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n from: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().any),\n to: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().any)\n});\n\n//Стили\nconst STYLES = {\n TABLE: {\n with: \"100%\"\n },\n TABLE_ROW: {\n \"&:last-child td, &:last-child th\": {\n border: 0\n }\n },\n TABLE_CELL_EXPAND_CONTAINER: {\n paddingBottom: 0,\n paddingTop: 0\n },\n TABLE_COLUMN_STACK: {\n alignItems: \"center\"\n },\n TABLE_COLUMN_MENU_ITEM_ICON: {\n paddingRight: \"10px\"\n },\n FILTER_CHIP: {\n alignItems: \"center\"\n },\n MORE_BUTTON_CONTAINER: {\n with: \"100%\",\n textAlign: \"center\",\n padding: \"5px\"\n }\n};\n\n//--------------------------------\n//Вспомогательные классы и функции\n//--------------------------------\n\n//Проверка существования значения\nconst hasValue = value => typeof value !== \"undefined\" && value !== null && value !== \"\";\n\n//Панель инструментов столбца\nconst P8PTableColumnToolBar = ({\n columnDef,\n orders,\n filters,\n onItemClick\n}) => {\n //Кнопка сортировки\n const order = orders.find(o => o.name == columnDef.name);\n let orderButton = null;\n if (order) orderButton = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n onClick: () => onItemClick ? onItemClick(P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.ORDER_TOGGLE, columnDef.name) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null, order.direction === P8P_TABLE_COLUMN_ORDER_DIRECTIONS.ASC ? \"arrow_upward\" : \"arrow_downward\"));\n\n //Кнопка фильтрации\n const filter = filters.find(f => f.name == columnDef.name);\n let filterButton = null;\n if (hasValue(filter?.from) || hasValue(filter?.to)) filterButton = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n onClick: () => onItemClick ? onItemClick(P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.FILTER_TOGGLE, columnDef.name) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null, \"filter_alt\"));\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, orderButton, filterButton);\n};\n\n//Контроль свойств - Панель инструментов столбца\nP8PTableColumnToolBar.propTypes = {\n columnDef: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().object).isRequired,\n orders: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().array).isRequired,\n filters: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().array).isRequired,\n onItemClick: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func)\n};\n\n//Меню столбца\nconst P8PTableColumnMenu = ({\n columnDef,\n orderAscItemCaption,\n orderDescItemCaption,\n filterItemCaption,\n onItemClick\n}) => {\n //Собственное состояние\n const [anchorEl, setAnchorEl] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Флаг отображения\n const open = Boolean(anchorEl);\n\n //По нажатию на открытие меню\n const handleMenuButtonClick = event => {\n setAnchorEl(event.currentTarget);\n };\n\n //По нажатию на пункт меню\n const handleMenuItemClick = (event, index, action, columnName) => {\n if (onItemClick) onItemClick(action, columnName);\n setAnchorEl(null);\n };\n\n //При закрытии меню\n const handleMenuClose = () => {\n setAnchorEl(null);\n };\n\n //Формирование списка элементов меню в зависимости от описания колонки таблицы\n const menuItems = [];\n if (columnDef.order === true) {\n menuItems.push( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n key: \"orderAsc\",\n onClick: (event, index) => handleMenuItemClick(event, index, P8P_TABLE_COLUMN_MENU_ACTIONS.ORDER_ASC, columnDef.name)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n sx: STYLES.TABLE_COLUMN_MENU_ITEM_ICON\n }, \"arrow_upward\"), orderAscItemCaption));\n menuItems.push( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n key: \"orderDesc\",\n onClick: (event, index) => handleMenuItemClick(event, index, P8P_TABLE_COLUMN_MENU_ACTIONS.ORDER_DESC, columnDef.name)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n sx: STYLES.TABLE_COLUMN_MENU_ITEM_ICON\n }, \"arrow_downward\"), orderDescItemCaption));\n }\n if (columnDef.filter === true) {\n if (menuItems.length > 0) menuItems.push( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n key: \"divider\",\n sx: {\n my: 0.5\n }\n }));\n menuItems.push( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n key: \"filter\",\n onClick: (event, index) => handleMenuItemClick(event, index, P8P_TABLE_COLUMN_MENU_ACTIONS.FILTER, columnDef.name)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n sx: STYLES.TABLE_COLUMN_MENU_ITEM_ICON\n }, \"filter_alt\"), filterItemCaption));\n }\n\n //Генерация содержимого\n return menuItems.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n id: `${columnDef.name}_menu_button`,\n \"aria-haspopup\": \"true\",\n onClick: handleMenuButtonClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null, \"more_vert\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n id: `${columnDef.name}_menu`,\n anchorEl: anchorEl,\n open: open,\n onClose: handleMenuClose\n }, menuItems)) : null;\n};\n\n//Контроль свойств - Меню столбца\nP8PTableColumnMenu.propTypes = {\n columnDef: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().object).isRequired,\n orderAscItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n orderDescItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n filterItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n onItemClick: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func)\n};\n\n//Диалог подсказки\nconst P8PTableColumnHintDialog = ({\n columnDef,\n okBtnCaption,\n onOk\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n open: true,\n \"aria-labelledby\": \"filter-dialog-title\",\n \"aria-describedby\": \"filter-dialog-description\",\n onClose: () => onOk ? onOk() : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n id: \"filter-dialog-title\"\n }, columnDef.caption), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n dangerouslySetInnerHTML: {\n __html: columnDef.hint\n }\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n onClick: () => onOk ? onOk() : null\n }, okBtnCaption)));\n};\n\n//Контроль свойств - Диалог подсказки\nP8PTableColumnHintDialog.propTypes = {\n columnDef: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().object).isRequired,\n okBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n onOk: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func)\n};\n\n//Диалог фильтра\nconst P8PTableColumnFilterDialog = ({\n columnDef,\n from,\n to,\n valueCaption,\n valueFromCaption,\n valueToCaption,\n okBtnCaption,\n clearBtnCaption,\n cancelBtnCaption,\n valueFormatter,\n onOk,\n onClear,\n onCancel\n}) => {\n //Собственное состояние - значения с-по\n const [filterValues, setFilterValues] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n from,\n to\n });\n\n //Отработка воода значения в фильтр\n const handleFilterTextFieldChanged = e => {\n setFilterValues(prev => ({\n ...prev,\n [e.target.name]: e.target.value\n }));\n };\n\n //Элементы ввода значений фильтра\n let inputs = null;\n if (Array.isArray(columnDef.values) && columnDef.values.length > 0) {\n inputs = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n name: \"from\",\n fullWidth: true,\n select: true,\n label: valueCaption,\n variant: \"standard\",\n value: filterValues.from,\n onChange: handleFilterTextFieldChanged\n }, columnDef.values.map((v, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n key: i,\n value: v\n }, valueFormatter ? valueFormatter({\n value: v,\n columnDef\n }) : v)));\n } else {\n switch (columnDef.dataType) {\n case P8P_TABLE_DATA_TYPE.STR:\n {\n inputs = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n name: \"from\",\n fullWidth: true,\n InputLabelProps: {\n shrink: true\n },\n value: filterValues.from,\n onChange: handleFilterTextFieldChanged,\n label: valueCaption,\n variant: \"standard\"\n });\n break;\n }\n case P8P_TABLE_DATA_TYPE.NUMB:\n case P8P_TABLE_DATA_TYPE.DATE:\n {\n inputs = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n name: \"from\",\n InputLabelProps: {\n shrink: true\n },\n type: columnDef.dataType == P8P_TABLE_DATA_TYPE.NUMB ? \"number\" : \"date\",\n value: filterValues.from,\n onChange: handleFilterTextFieldChanged,\n label: valueFromCaption,\n variant: \"standard\"\n }), \"\\xA0\", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n name: \"to\",\n InputLabelProps: {\n shrink: true\n },\n type: columnDef.dataType == P8P_TABLE_DATA_TYPE.NUMB ? \"number\" : \"date\",\n value: filterValues.to,\n onChange: handleFilterTextFieldChanged,\n label: valueToCaption,\n variant: \"standard\"\n }));\n break;\n }\n }\n }\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n open: true,\n \"aria-labelledby\": \"filter-dialog-title\",\n \"aria-describedby\": \"filter-dialog-description\",\n onClose: () => onCancel ? onCancel(columnDef.name) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n id: \"filter-dialog-title\"\n }, columnDef.caption), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null, inputs), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n onClick: () => onOk ? onOk(columnDef.name, filterValues.from, filterValues.to) : null\n }, okBtnCaption), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n onClick: () => onClear ? onClear(columnDef.name) : null,\n variant: \"secondary\"\n }, clearBtnCaption), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n onClick: () => onCancel ? onCancel(columnDef.name) : null\n }, cancelBtnCaption)));\n};\n\n//Контроль свойств - Диалог фильтра\nP8PTableColumnFilterDialog.propTypes = {\n columnDef: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().object).isRequired,\n from: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().any),\n to: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().any),\n valueCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n valueFromCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n valueToCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n okBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n clearBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n cancelBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n valueFormatter: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n onOk: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n onClear: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n onCancel: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func)\n};\n\n//Сводный фильтр\nconst P8PTableFiltersChips = ({\n filters,\n columnsDef,\n valueFromCaption,\n valueToCaption,\n onFilterChipClick,\n onFilterChipDelete,\n valueFormatter\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n direction: \"row\",\n spacing: 1,\n pb: 2\n }, filters.map((filter, i) => {\n const columnDef = columnsDef.find(columnDef => columnDef.name == filter.name);\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n key: i,\n label: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n direction: \"row\",\n sx: STYLES.FILTER_CHIP\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"strong\", null, columnDef.caption), \":\\xA0\", hasValue(filter.from) && !columnDef.values && columnDef.dataType != P8P_TABLE_DATA_TYPE.STR ? `${valueFromCaption.toLowerCase()} ` : null, hasValue(filter.from) ? valueFormatter ? valueFormatter({\n value: filter.from,\n columnDef\n }) : filter.from : null, hasValue(filter.to) && !columnDef.values && columnDef.dataType != P8P_TABLE_DATA_TYPE.STR ? ` ${valueToCaption.toLowerCase()} ` : null, hasValue(filter.to) ? valueFormatter ? valueFormatter({\n value: filter.to,\n columnDef\n }) : filter.to : null),\n variant: \"outlined\",\n onClick: () => onFilterChipClick ? onFilterChipClick(columnDef.name) : null,\n onDelete: () => onFilterChipDelete ? onFilterChipDelete(columnDef.name) : null\n });\n }));\n};\n\n//Контроль свойств - Сводный фильтр\nP8PTableFiltersChips.propTypes = {\n filters: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().array).isRequired,\n columnsDef: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().array).isRequired,\n valueFromCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n valueToCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n onFilterChipClick: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n onFilterChipDelete: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n valueFormatter: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func)\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Таблица\nconst P8PTable = ({\n columnsDef,\n rows,\n orders,\n filters,\n size,\n morePages,\n reloading,\n expandable,\n orderAscMenuItemCaption,\n orderDescMenuItemCaption,\n filterMenuItemCaption,\n valueFilterCaption,\n valueFromFilterCaption,\n valueToFilterCaption,\n okFilterBtnCaption,\n clearFilterBtnCaption,\n cancelFilterBtnCaption,\n morePagesBtnCaption,\n noDataFoundText,\n headCellRender,\n dataCellRender,\n rowExpandRender,\n valueFormatter,\n onOrderChanged,\n onFilterChanged,\n onPagesCountChanged\n}) => {\n //Собственное состояние - фильтруемая колонка\n const [filterColumn, setFilterColumn] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Собственное состояние - развёрнутые строки\n const [expanded, setExpanded] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({});\n\n //Собственное состояние - колонка с отображаемой подсказкой\n const [displayHintColumn, setDisplayHintColumn] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n //Описание фильтруемой колонки\n const filterColumnDef = filterColumn ? columnsDef.find(columnDef => columnDef.name == filterColumn) || null : null;\n\n //Описание колонки с отображаемой подсказкой\n const displayHintColumnDef = displayHintColumn ? columnsDef.find(columnDef => columnDef.name == displayHintColumn) || null : null;\n\n //Значения фильтра фильтруемой колонки\n const [filterColumnFrom, filterColumnTo] = filterColumn ? (() => {\n const filter = filters.find(filter => filter.name == filterColumn);\n return filter ? [filter.from == null ? \"\" : filter.from, filter.to == null ? \"\" : filter.to] : [\"\", \"\"];\n })() : [\"\", \"\"];\n\n //Определение списка видимых колонок\n const visibleColumns = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => columnsDef.filter(columnDef => columnDef.visible === true), [columnsDef]);\n\n //Определение количества видимых колонок\n const visibleColumnsCount = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => visibleColumns.length + (expandable === true ? 1 : 0), [visibleColumns, expandable]);\n\n //Выравнивание в зависимости от типа данных\n const getAlignByDataType = dataType => dataType === P8P_TABLE_DATA_TYPE.DATE ? \"center\" : dataType === P8P_TABLE_DATA_TYPE.NUMB ? \"right\" : \"left\";\n\n //Упорядочение содержимого в зависимости от типа данных\n const getJustifyContentByDataType = dataType => dataType === P8P_TABLE_DATA_TYPE.DATE ? \"center\" : dataType === P8P_TABLE_DATA_TYPE.NUMB ? \"flex-end\" : \"flex-start\";\n\n //Отработка нажатия на элемент пункта меню\n const handleToolBarItemClick = (action, columnName) => {\n switch (action) {\n case P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.ORDER_TOGGLE:\n {\n const colOrder = orders.find(o => o.name == columnName);\n const newDirection = colOrder?.direction == P8P_TABLE_COLUMN_ORDER_DIRECTIONS.ASC ? P8P_TABLE_COLUMN_ORDER_DIRECTIONS.DESC : colOrder?.direction == P8P_TABLE_COLUMN_ORDER_DIRECTIONS.DESC ? null : P8P_TABLE_COLUMN_ORDER_DIRECTIONS.ASC;\n if (onOrderChanged) onOrderChanged({\n columnName,\n direction: newDirection\n });\n break;\n }\n case P8P_TABLE_COLUMN_TOOL_BAR_ACTIONS.FILTER_TOGGLE:\n setFilterColumn(columnName);\n break;\n }\n };\n\n //Отработка нажатия на пункты меню\n const handleMenuItemClick = (action, columnName) => {\n switch (action) {\n case P8P_TABLE_COLUMN_MENU_ACTIONS.ORDER_ASC:\n onOrderChanged({\n columnName,\n direction: P8P_TABLE_COLUMN_ORDER_DIRECTIONS.ASC\n });\n break;\n case P8P_TABLE_COLUMN_MENU_ACTIONS.ORDER_DESC:\n onOrderChanged({\n columnName,\n direction: P8P_TABLE_COLUMN_ORDER_DIRECTIONS.DESC\n });\n break;\n case P8P_TABLE_COLUMN_MENU_ACTIONS.FILTER:\n setFilterColumn(columnName);\n break;\n }\n };\n\n //Отработка ввода значения фильтра колонки\n const handleFilterOk = (columnName, from, to) => {\n if (onFilterChanged) onFilterChanged({\n columnName,\n from: from === \"\" ? null : from,\n to: to === \"\" ? null : to\n });\n setFilterColumn(null);\n };\n\n //Отработка очистки значения фильтра колонки\n const handleFilterClear = columnName => {\n if (onFilterChanged) onFilterChanged({\n columnName,\n from: null,\n to: null\n });\n setFilterColumn(null);\n };\n\n //Отработка отмены ввода значения фильтра колонки\n const handleFilterCancel = () => {\n setFilterColumn(null);\n };\n\n //Отработка нажатия на элемент сводного фильтра\n const handleFilterChipClick = columnName => setFilterColumn(columnName);\n\n //Отработка удаления элемента сводного фильтра\n const handleFilterChipDelete = columnName => onFilterChanged ? onFilterChanged({\n columnName,\n from: null,\n to: null\n }) : null;\n\n //Отработка нажатия на кнопку догрузки страницы\n const handleMorePagesBtnClick = () => {\n if (onPagesCountChanged) onPagesCountChanged();\n };\n\n //Отработка нажатия на элемент отображения подсказки по колонке\n const handleColumnShowHintClick = columnName => setDisplayHintColumn(columnName);\n\n //Отработка сокрытия подсказки по колонке\n const handleHintOk = () => setDisplayHintColumn(null);\n\n //Отработка нажатия на кнопку раскрытия элемента\n const handleExpandClick = rowIndex => {\n if (expanded[rowIndex] === true) setExpanded(pv => {\n let res = {\n ...pv\n };\n delete res[rowIndex];\n return res;\n });else setExpanded(pv => ({\n ...pv,\n [rowIndex]: true\n }));\n };\n\n //При перезагрузке данных\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (reloading) setExpanded({});\n }, [reloading]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, displayHintColumn ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableColumnHintDialog, {\n columnDef: displayHintColumnDef,\n okBtnCaption: okFilterBtnCaption,\n onOk: handleHintOk\n }) : null, filterColumn ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableColumnFilterDialog, {\n columnDef: filterColumnDef,\n from: filterColumnFrom,\n to: filterColumnTo,\n valueCaption: valueFilterCaption,\n valueFromCaption: valueFromFilterCaption,\n valueToCaption: valueToFilterCaption,\n okBtnCaption: okFilterBtnCaption,\n clearBtnCaption: clearFilterBtnCaption,\n cancelBtnCaption: cancelFilterBtnCaption,\n valueFormatter: valueFormatter,\n onOk: handleFilterOk,\n onClear: handleFilterClear,\n onCancel: handleFilterCancel\n }) : null, Array.isArray(filters) && filters.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableFiltersChips, {\n filters: filters,\n columnsDef: columnsDef,\n valueFromCaption: valueFromFilterCaption,\n valueToCaption: valueToFilterCaption,\n onFilterChipClick: handleFilterChipClick,\n onFilterChipDelete: handleFilterChipDelete,\n valueFormatter: valueFormatter\n }) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n component: _mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"]\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n sx: STYLES.TABLE,\n size: size || P8P_TABLE_SIZE.MEDIUM\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], null, expandable && rowExpandRender ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n key: \"head-cell-expand-control\",\n align: \"center\"\n }) : null, visibleColumns.map((columnDef, j) => {\n let customRender = {};\n if (headCellRender) customRender = headCellRender({\n columnDef\n }) || {};\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], _extends({\n key: `head-cell-${j}`,\n align: getAlignByDataType(columnDef.dataType),\n sx: {\n ...customRender.cellStyle\n }\n }, customRender.cellProps), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], _extends({\n direction: \"row\",\n justifyContent: getJustifyContentByDataType(columnDef.dataType),\n sx: {\n ...STYLES.TABLE_COLUMN_STACK,\n ...customRender.stackStyle\n }\n }, customRender.stackProps), customRender.data ? customRender.data : columnDef.hint ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], {\n component: \"button\",\n variant: \"body2\",\n align: \"left\",\n underline: \"always\",\n onClick: () => handleColumnShowHintClick(columnDef.name)\n }, columnDef.caption) : columnDef.caption, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableColumnToolBar, {\n columnDef: columnDef,\n orders: orders,\n filters: filters,\n onItemClick: handleToolBarItemClick\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(P8PTableColumnMenu, {\n columnDef: columnDef,\n orderAscItemCaption: orderAscMenuItemCaption,\n orderDescItemCaption: orderDescMenuItemCaption,\n filterItemCaption: filterMenuItemCaption,\n onItemClick: handleMenuItemClick\n })));\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], null, rows.length > 0 ? rows.map((row, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), {\n key: `data-${i}`\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n key: `data-row-${i}`,\n sx: STYLES.TABLE_ROW\n }, expandable && rowExpandRender ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n key: `data-cell-expand-control-${i}`,\n align: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n onClick: () => handleExpandClick(i)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null, expanded[i] === true ? \"keyboard_arrow_down\" : \"keyboard_arrow_right\"))) : null, visibleColumns.map((columnDef, j) => {\n let customRender = {};\n if (dataCellRender) customRender = dataCellRender({\n row,\n columnDef\n }) || {};\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], _extends({\n key: `data-cell-${j}`,\n align: getAlignByDataType(columnDef.dataType),\n sx: {\n ...customRender.cellStyle\n }\n }, customRender.cellProps), customRender.data ? customRender.data : valueFormatter ? valueFormatter({\n value: row[columnDef.name],\n columnDef\n }) : row[columnDef.name]);\n })), expandable && rowExpandRender && expanded[i] === true ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n key: `data-row-expand-${i}`\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n sx: STYLES.TABLE_CELL_EXPAND_CONTAINER,\n colSpan: visibleColumnsCount\n }, rowExpandRender({\n columnsDef,\n row\n }))) : null)) : null)), rows.length == 0 ? noDataFoundText && !reloading ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_p8p_app_message__WEBPACK_IMPORTED_MODULE_1__.P8PAppInlineError, {\n text: noDataFoundText\n }) : null : morePages ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_24__[\"default\"], {\n style: STYLES.MORE_BUTTON_CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n fullWidth: true,\n onClick: handleMorePagesBtnClick\n }, morePagesBtnCaption)) : null));\n};\n\n//Контроль свойств - Таблица\nP8PTable.propTypes = {\n columnsDef: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_2___default().shape({\n name: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n caption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n order: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool).isRequired,\n filter: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool).isRequired,\n dataType: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n values: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().array)\n })).isRequired,\n rows: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().array).isRequired,\n orders: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_2___default().shape({\n name: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n direction: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired\n })).isRequired,\n filters: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf(P8P_TABLE_FILTER_SHAPE).isRequired,\n size: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n morePages: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool).isRequired,\n reloading: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool).isRequired,\n expandable: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),\n orderAscMenuItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n orderDescMenuItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n filterMenuItemCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n valueFilterCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n valueFromFilterCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n valueToFilterCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n okFilterBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n clearFilterBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n cancelFilterBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n morePagesBtnCaption: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n noDataFoundText: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),\n headCellRender: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n dataCellRender: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n rowExpandRender: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n valueFormatter: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n onOrderChanged: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n onFilterChanged: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n onPagesCountChanged: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_table.js?"); /***/ }), @@ -3172,7 +3282,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ConfigWrapper: () => (/* binding */ ConfigWrapper),\n/* harmony export */ P8PAppWorkspaceConfigWrapped: () => (/* binding */ P8PAppWorkspaceConfigWrapped),\n/* harmony export */ P8PDataGridConfigWrapped: () => (/* binding */ P8PDataGridConfigWrapped),\n/* harmony export */ P8PGanttConfigWrapped: () => (/* binding */ P8PGanttConfigWrapped),\n/* harmony export */ P8PPanelsMenuGridConfigWrapped: () => (/* binding */ P8PPanelsMenuGridConfigWrapped),\n/* harmony export */ P8PTableConfigWrapped: () => (/* binding */ P8PTableConfigWrapped),\n/* harmony export */ P8P_APP_WORKSPACE_CONFIG_PROPS: () => (/* binding */ P8P_APP_WORKSPACE_CONFIG_PROPS),\n/* harmony export */ P8P_DATA_GRID_CONFIG_PROPS: () => (/* binding */ P8P_DATA_GRID_CONFIG_PROPS),\n/* harmony export */ P8P_DATA_GRID_DATA_TYPE: () => (/* reexport safe */ _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8P_DATA_GRID_DATA_TYPE),\n/* harmony export */ P8P_DATA_GRID_FILTER_SHAPE: () => (/* reexport safe */ _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8P_DATA_GRID_FILTER_SHAPE),\n/* harmony export */ P8P_DATA_GRID_SIZE: () => (/* reexport safe */ _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8P_DATA_GRID_SIZE),\n/* harmony export */ P8P_GANTT_CONFIG_PROPS: () => (/* binding */ P8P_GANTT_CONFIG_PROPS),\n/* harmony export */ P8P_GANTT_TASK_ATTRIBUTE_SHAPE: () => (/* reexport safe */ _components_p8p_gantt__WEBPACK_IMPORTED_MODULE_7__.P8P_GANTT_TASK_ATTRIBUTE_SHAPE),\n/* harmony export */ P8P_GANTT_TASK_COLOR_SHAPE: () => (/* reexport safe */ _components_p8p_gantt__WEBPACK_IMPORTED_MODULE_7__.P8P_GANTT_TASK_COLOR_SHAPE),\n/* harmony export */ P8P_GANTT_TASK_SHAPE: () => (/* reexport safe */ _components_p8p_gantt__WEBPACK_IMPORTED_MODULE_7__.P8P_GANTT_TASK_SHAPE),\n/* harmony export */ P8P_PANELS_MENU_GRID_CONFIG_PROPS: () => (/* binding */ P8P_PANELS_MENU_GRID_CONFIG_PROPS),\n/* harmony export */ P8P_PANELS_MENU_PANEL_SHAPE: () => (/* reexport safe */ _components_p8p_panels_menu__WEBPACK_IMPORTED_MODULE_3__.P8P_PANELS_MENU_PANEL_SHAPE),\n/* harmony export */ P8P_TABLE_CONFIG_PROPS: () => (/* binding */ P8P_TABLE_CONFIG_PROPS),\n/* harmony export */ P8P_TABLE_DATA_TYPE: () => (/* reexport safe */ _components_p8p_table__WEBPACK_IMPORTED_MODULE_5__.P8P_TABLE_DATA_TYPE),\n/* harmony export */ P8P_TABLE_FILTER_SHAPE: () => (/* reexport safe */ _components_p8p_table__WEBPACK_IMPORTED_MODULE_5__.P8P_TABLE_FILTER_SHAPE),\n/* harmony export */ P8P_TABLE_SIZE: () => (/* reexport safe */ _components_p8p_table__WEBPACK_IMPORTED_MODULE_5__.P8P_TABLE_SIZE)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../app.text */ \"./app.text.js\");\n/* harmony import */ var _components_p8p_panels_menu__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./components/p8p_panels_menu */ \"./app/components/p8p_panels_menu.js\");\n/* harmony import */ var _components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./components/p8p_app_workspace */ \"./app/components/p8p_app_workspace.js\");\n/* harmony import */ var _components_p8p_table__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./components/p8p_table */ \"./app/components/p8p_table.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _components_p8p_gantt__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./components/p8p_gantt */ \"./app/components/p8p_gantt.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга\r\n Обёртки для компонент, обеспечивающие подключение их к настройкам приложения\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Вспомогательные процедуры и функции\n //Текстовые ресурсы и константы\n //Меню панелей\n //Рабочее пространство\n //Таблица данных\n //Таблица данных\n //Диаграмма Ганта\n\n//---------\n//Константы\n//---------\n\n//Конфигурируемые свойства \"Меню панелей (табличное)\" (P8PPanelsMenuGrid)\nconst P8P_PANELS_MENU_GRID_CONFIG_PROPS = {\n navigateCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.NAVIGATE,\n defaultGroupTytle: _app_text__WEBPACK_IMPORTED_MODULE_2__.TITLES.DEFAULT_PANELS_GROUP\n};\n\n//Конфигурируемые свойства \"Рабочего пространства\" (P8PAppWorkspace)\nconst P8P_APP_WORKSPACE_CONFIG_PROPS = {\n closeCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.CLOSE,\n homeCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.NAVIGATE_HOME\n};\n\n//Конфигурируемые свойства \"Таблицы\" (P8PTable)\nconst P8P_TABLE_CONFIG_PROPS = {\n orderAscMenuItemCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.ORDER_ASC,\n orderDescMenuItemCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.ORDER_DESC,\n filterMenuItemCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.FILTER,\n valueFilterCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.CAPTIONS.VALUE,\n valueFromFilterCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.CAPTIONS.VALUE_FROM,\n valueToFilterCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.CAPTIONS.VALUE_TO,\n okFilterBtnCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.OK,\n clearFilterBtnCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.CLEAR,\n cancelFilterBtnCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.CANCEL,\n morePagesBtnCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.MORE,\n noDataFoundText: _app_text__WEBPACK_IMPORTED_MODULE_2__.TEXTS.NO_DATA_FOUND\n};\n\n//Конфигурируемые свойства \"Таблицы данных\" (P8PDataGrid)\nconst P8P_DATA_GRID_CONFIG_PROPS = {\n orderAscMenuItemCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.ORDER_ASC,\n orderDescMenuItemCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.ORDER_DESC,\n filterMenuItemCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.FILTER,\n valueFilterCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.CAPTIONS.VALUE,\n valueFromFilterCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.CAPTIONS.VALUE_FROM,\n valueToFilterCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.CAPTIONS.VALUE_TO,\n okFilterBtnCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.OK,\n clearFilterBtnCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.CLEAR,\n cancelFilterBtnCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.CANCEL,\n morePagesBtnCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.MORE,\n noDataFoundText: _app_text__WEBPACK_IMPORTED_MODULE_2__.TEXTS.NO_DATA_FOUND,\n objectsCopier: _core_utils__WEBPACK_IMPORTED_MODULE_1__.deepCopyObject\n};\n\n//Конфигурируемые свойства \"Диаграммы Ганта\" (P8PGantt)\nconst P8P_GANTT_CONFIG_PROPS = {\n noDataFoundText: _app_text__WEBPACK_IMPORTED_MODULE_2__.TEXTS.NO_DATA_FOUND,\n numbTaskEditorCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.CAPTIONS.NUMB,\n nameTaskEditorCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.CAPTIONS.NAME,\n startTaskEditorCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.CAPTIONS.START,\n endTaskEditorCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.CAPTIONS.END,\n progressTaskEditorCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.CAPTIONS.PROGRESS,\n legendTaskEditorCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.CAPTIONS.LEGEND,\n okTaskEditorBtnCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.OK,\n cancelTaskEditorBtnCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.CANCEL\n};\n\n//-----------------------\n//Вспомогательные функции\n//-----------------------\n\n//Рекурсивное добавление свойств элемента, получаемых из конфигурационных файлов\nconst addConfigChildProps = children => react__WEBPACK_IMPORTED_MODULE_0___default().Children.map(children, child => {\n if (! /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().isValidElement(child)) return child;\n const {\n children,\n ...restProps\n } = child.props;\n let configProps = {};\n if (child.type.name === \"P8PPanelsMenuGrid\") configProps = P8P_PANELS_MENU_GRID_CONFIG_PROPS;\n if (child.type.name === \"P8PTable\") configProps = P8P_TABLE_CONFIG_PROPS;\n if (child.type.name === \"P8PDataGrid\") configProps = P8P_DATA_GRID_CONFIG_PROPS;\n if (child.type.name === \"P8PGantt\") configProps = P8P_GANTT_CONFIG_PROPS;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(child.type, {\n ...configProps,\n ...restProps\n }, addConfigChildProps(children));\n});\n\n//-----------\n//Тело модуля\n//-----------\n\n//Обёртка для компонента \"Меню панелей (табличное)\" (P8PPanelsMenuGrid)\nconst P8PPanelsMenuGridConfigWrapped = (props = {}) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_panels_menu__WEBPACK_IMPORTED_MODULE_3__.P8PPanelsMenuGrid, _extends({}, P8P_PANELS_MENU_GRID_CONFIG_PROPS, props));\n\n//Обёртка для компонента \"Рабочее пространство\" (P8PAppWorkspace)\nconst P8PAppWorkspaceConfigWrapped = (props = {}) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_4__.P8PAppWorkspace, _extends({}, P8P_APP_WORKSPACE_CONFIG_PROPS, props));\n\n//Обёртка для компонента \"Таблица\" (P8PTable)\nconst P8PTableConfigWrapped = (props = {}) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_table__WEBPACK_IMPORTED_MODULE_5__.P8PTable, _extends({}, P8P_TABLE_CONFIG_PROPS, props));\n\n//Обёртка для компонента \"Таблица данных\" (P8PDataGrid)\nconst P8PDataGridConfigWrapped = (props = {}) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8PDataGrid, _extends({}, P8P_DATA_GRID_CONFIG_PROPS, props));\n\n//Обёртка для компонента \"Диаграмма Ганта\" (P8PGantt)\nconst P8PGanttConfigWrapped = (props = {}) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_gantt__WEBPACK_IMPORTED_MODULE_7__.P8PGantt, _extends({}, P8P_GANTT_CONFIG_PROPS, props));\n\n//Универсальный элемент-обёртка в параметры конфигурации\nconst ConfigWrapper = ({\n children\n}) => addConfigChildProps(children);\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/config_wrapper.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ConfigWrapper: () => (/* binding */ ConfigWrapper),\n/* harmony export */ P8PAppWorkspaceConfigWrapped: () => (/* binding */ P8PAppWorkspaceConfigWrapped),\n/* harmony export */ P8PDataGridConfigWrapped: () => (/* binding */ P8PDataGridConfigWrapped),\n/* harmony export */ P8PGanttConfigWrapped: () => (/* binding */ P8PGanttConfigWrapped),\n/* harmony export */ P8PPanelsMenuGridConfigWrapped: () => (/* binding */ P8PPanelsMenuGridConfigWrapped),\n/* harmony export */ P8PTableConfigWrapped: () => (/* binding */ P8PTableConfigWrapped),\n/* harmony export */ P8P_APP_WORKSPACE_CONFIG_PROPS: () => (/* binding */ P8P_APP_WORKSPACE_CONFIG_PROPS),\n/* harmony export */ P8P_DATA_GRID_CONFIG_PROPS: () => (/* binding */ P8P_DATA_GRID_CONFIG_PROPS),\n/* harmony export */ P8P_DATA_GRID_DATA_TYPE: () => (/* reexport safe */ _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8P_DATA_GRID_DATA_TYPE),\n/* harmony export */ P8P_DATA_GRID_FILTER_SHAPE: () => (/* reexport safe */ _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8P_DATA_GRID_FILTER_SHAPE),\n/* harmony export */ P8P_DATA_GRID_SIZE: () => (/* reexport safe */ _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8P_DATA_GRID_SIZE),\n/* harmony export */ P8P_GANTT_CONFIG_PROPS: () => (/* binding */ P8P_GANTT_CONFIG_PROPS),\n/* harmony export */ P8P_GANTT_TASK_ATTRIBUTE_SHAPE: () => (/* reexport safe */ _components_p8p_gantt__WEBPACK_IMPORTED_MODULE_7__.P8P_GANTT_TASK_ATTRIBUTE_SHAPE),\n/* harmony export */ P8P_GANTT_TASK_COLOR_SHAPE: () => (/* reexport safe */ _components_p8p_gantt__WEBPACK_IMPORTED_MODULE_7__.P8P_GANTT_TASK_COLOR_SHAPE),\n/* harmony export */ P8P_GANTT_TASK_SHAPE: () => (/* reexport safe */ _components_p8p_gantt__WEBPACK_IMPORTED_MODULE_7__.P8P_GANTT_TASK_SHAPE),\n/* harmony export */ P8P_PANELS_MENU_GRID_CONFIG_PROPS: () => (/* binding */ P8P_PANELS_MENU_GRID_CONFIG_PROPS),\n/* harmony export */ P8P_PANELS_MENU_PANEL_SHAPE: () => (/* reexport safe */ _components_p8p_panels_menu__WEBPACK_IMPORTED_MODULE_3__.P8P_PANELS_MENU_PANEL_SHAPE),\n/* harmony export */ P8P_TABLE_CONFIG_PROPS: () => (/* binding */ P8P_TABLE_CONFIG_PROPS),\n/* harmony export */ P8P_TABLE_DATA_TYPE: () => (/* reexport safe */ _components_p8p_table__WEBPACK_IMPORTED_MODULE_5__.P8P_TABLE_DATA_TYPE),\n/* harmony export */ P8P_TABLE_FILTER_SHAPE: () => (/* reexport safe */ _components_p8p_table__WEBPACK_IMPORTED_MODULE_5__.P8P_TABLE_FILTER_SHAPE),\n/* harmony export */ P8P_TABLE_SIZE: () => (/* reexport safe */ _components_p8p_table__WEBPACK_IMPORTED_MODULE_5__.P8P_TABLE_SIZE)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../app.text */ \"./app.text.js\");\n/* harmony import */ var _components_p8p_panels_menu__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./components/p8p_panels_menu */ \"./app/components/p8p_panels_menu.js\");\n/* harmony import */ var _components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./components/p8p_app_workspace */ \"./app/components/p8p_app_workspace.js\");\n/* harmony import */ var _components_p8p_table__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./components/p8p_table */ \"./app/components/p8p_table.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _components_p8p_gantt__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./components/p8p_gantt */ \"./app/components/p8p_gantt.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\n Парус 8 - Панели мониторинга\n Обёртки для компонент, обеспечивающие подключение их к настройкам приложения\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Вспомогательные процедуры и функции\n //Текстовые ресурсы и константы\n //Меню панелей\n //Рабочее пространство\n //Таблица данных\n //Таблица данных\n //Диаграмма Ганта\n\n//---------\n//Константы\n//---------\n\n//Конфигурируемые свойства \"Меню панелей (табличное)\" (P8PPanelsMenuGrid)\nconst P8P_PANELS_MENU_GRID_CONFIG_PROPS = {\n navigateCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.NAVIGATE,\n defaultGroupTytle: _app_text__WEBPACK_IMPORTED_MODULE_2__.TITLES.DEFAULT_PANELS_GROUP\n};\n\n//Конфигурируемые свойства \"Рабочего пространства\" (P8PAppWorkspace)\nconst P8P_APP_WORKSPACE_CONFIG_PROPS = {\n closeCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.CLOSE,\n homeCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.NAVIGATE_HOME\n};\n\n//Конфигурируемые свойства \"Таблицы\" (P8PTable)\nconst P8P_TABLE_CONFIG_PROPS = {\n orderAscMenuItemCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.ORDER_ASC,\n orderDescMenuItemCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.ORDER_DESC,\n filterMenuItemCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.FILTER,\n valueFilterCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.CAPTIONS.VALUE,\n valueFromFilterCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.CAPTIONS.VALUE_FROM,\n valueToFilterCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.CAPTIONS.VALUE_TO,\n okFilterBtnCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.OK,\n clearFilterBtnCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.CLEAR,\n cancelFilterBtnCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.CANCEL,\n morePagesBtnCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.MORE,\n noDataFoundText: _app_text__WEBPACK_IMPORTED_MODULE_2__.TEXTS.NO_DATA_FOUND\n};\n\n//Конфигурируемые свойства \"Таблицы данных\" (P8PDataGrid)\nconst P8P_DATA_GRID_CONFIG_PROPS = {\n orderAscMenuItemCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.ORDER_ASC,\n orderDescMenuItemCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.ORDER_DESC,\n filterMenuItemCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.FILTER,\n valueFilterCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.CAPTIONS.VALUE,\n valueFromFilterCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.CAPTIONS.VALUE_FROM,\n valueToFilterCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.CAPTIONS.VALUE_TO,\n okFilterBtnCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.OK,\n clearFilterBtnCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.CLEAR,\n cancelFilterBtnCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.CANCEL,\n morePagesBtnCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.MORE,\n noDataFoundText: _app_text__WEBPACK_IMPORTED_MODULE_2__.TEXTS.NO_DATA_FOUND,\n objectsCopier: _core_utils__WEBPACK_IMPORTED_MODULE_1__.deepCopyObject\n};\n\n//Конфигурируемые свойства \"Диаграммы Ганта\" (P8PGantt)\nconst P8P_GANTT_CONFIG_PROPS = {\n noDataFoundText: _app_text__WEBPACK_IMPORTED_MODULE_2__.TEXTS.NO_DATA_FOUND,\n numbTaskEditorCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.CAPTIONS.NUMB,\n nameTaskEditorCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.CAPTIONS.NAME,\n startTaskEditorCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.CAPTIONS.START,\n endTaskEditorCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.CAPTIONS.END,\n progressTaskEditorCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.CAPTIONS.PROGRESS,\n legendTaskEditorCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.CAPTIONS.LEGEND,\n okTaskEditorBtnCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.OK,\n cancelTaskEditorBtnCaption: _app_text__WEBPACK_IMPORTED_MODULE_2__.BUTTONS.CANCEL\n};\n\n//-----------------------\n//Вспомогательные функции\n//-----------------------\n\n//Рекурсивное добавление свойств элемента, получаемых из конфигурационных файлов\nconst addConfigChildProps = children => react__WEBPACK_IMPORTED_MODULE_0___default().Children.map(children, child => {\n if (! /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().isValidElement(child)) return child;\n const {\n children,\n ...restProps\n } = child.props;\n let configProps = {};\n if (child.type.name === \"P8PPanelsMenuGrid\") configProps = P8P_PANELS_MENU_GRID_CONFIG_PROPS;\n if (child.type.name === \"P8PTable\") configProps = P8P_TABLE_CONFIG_PROPS;\n if (child.type.name === \"P8PDataGrid\") configProps = P8P_DATA_GRID_CONFIG_PROPS;\n if (child.type.name === \"P8PGantt\") configProps = P8P_GANTT_CONFIG_PROPS;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(child.type, {\n ...configProps,\n ...restProps\n }, addConfigChildProps(children));\n});\n\n//-----------\n//Тело модуля\n//-----------\n\n//Обёртка для компонента \"Меню панелей (табличное)\" (P8PPanelsMenuGrid)\nconst P8PPanelsMenuGridConfigWrapped = (props = {}) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_panels_menu__WEBPACK_IMPORTED_MODULE_3__.P8PPanelsMenuGrid, _extends({}, P8P_PANELS_MENU_GRID_CONFIG_PROPS, props));\n\n//Обёртка для компонента \"Рабочее пространство\" (P8PAppWorkspace)\nconst P8PAppWorkspaceConfigWrapped = (props = {}) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_4__.P8PAppWorkspace, _extends({}, P8P_APP_WORKSPACE_CONFIG_PROPS, props));\n\n//Обёртка для компонента \"Таблица\" (P8PTable)\nconst P8PTableConfigWrapped = (props = {}) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_table__WEBPACK_IMPORTED_MODULE_5__.P8PTable, _extends({}, P8P_TABLE_CONFIG_PROPS, props));\n\n//Обёртка для компонента \"Таблица данных\" (P8PDataGrid)\nconst P8PDataGridConfigWrapped = (props = {}) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8PDataGrid, _extends({}, P8P_DATA_GRID_CONFIG_PROPS, props));\n\n//Обёртка для компонента \"Диаграмма Ганта\" (P8PGantt)\nconst P8PGanttConfigWrapped = (props = {}) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_gantt__WEBPACK_IMPORTED_MODULE_7__.P8PGantt, _extends({}, P8P_GANTT_CONFIG_PROPS, props));\n\n//Универсальный элемент-обёртка в параметры конфигурации\nconst ConfigWrapper = ({\n children\n}) => addConfigChildProps(children);\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/config_wrapper.js?"); /***/ }), @@ -3183,7 +3293,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 */ ApplicationContext: () => (/* binding */ ApplicationContext),\n/* harmony export */ \"ApplicationСtx\": () => (/* binding */ ApplicationСtx)\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_4__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _application_reducer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./application_reducer */ \"./app/context/application_reducer.js\");\n/* harmony import */ var _messaging__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _backend__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./backend */ \"./app/context/backend.js\");\n/*\r\n Парус 8 - Панели мониторинга\r\n Контекст: Приложение\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //ReactJS\n //Контроль свойств компонента\n //Редьюсер состояния\n //Контекст отображения сообщений\n //Контекст взаимодействия с сервером\n\n//---------\n//Константы\n//---------\n\n//Клиентский API \"ПАРУС 8 Онлайн\"\nconst P8O_API = window.top?.parus?.clientApi;\n\n//Структура объекта с описанием ошибок\nconst APPLICATION_CONTEXT_ERRORS_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_4___default().shape({\n P8O_API_UNAVAILABLE: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().string).isRequired\n});\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n//Контекст приложения\nconst ApplicationСtx = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)();\n\n//Провайдер контекста приложения\nconst ApplicationContext = ({\n errors,\n displaySizeGetter,\n guidGenerator,\n config,\n children\n}) => {\n //Подключим редьюсер состояния\n const [state, dispatch] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useReducer)(_application_reducer__WEBPACK_IMPORTED_MODULE_1__.applicationReducer, (0,_application_reducer__WEBPACK_IMPORTED_MODULE_1__.INITIAL_STATE)(displaySizeGetter));\n\n //Подключение к контексту взаимодействия с сервером\n const {\n getConfig,\n getRespPayload\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_backend__WEBPACK_IMPORTED_MODULE_3__[\"BackEndСtx\"]);\n\n //Подключение к контексту отображения сообщений\n const {\n showMsgErr\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_messaging__WEBPACK_IMPORTED_MODULE_2__[\"MessagingСtx\"]);\n\n //Установка флага инициализированности приложения\n const setInitialized = () => dispatch({\n type: _application_reducer__WEBPACK_IMPORTED_MODULE_1__.APP_AT.SET_INITIALIZED\n });\n\n //Установка текущего размера экрана\n const setDisplaySize = displaySize => dispatch({\n type: _application_reducer__WEBPACK_IMPORTED_MODULE_1__.APP_AT.SET_DISPLAY_SIZE,\n payload: displaySize\n });\n\n //Установка базового URL приложения\n const setUrlBase = urlBase => dispatch({\n type: _application_reducer__WEBPACK_IMPORTED_MODULE_1__.APP_AT.SET_URL_BASE,\n payload: urlBase\n });\n\n //Установка списка панелей\n const setPanels = panels => dispatch({\n type: _application_reducer__WEBPACK_IMPORTED_MODULE_1__.APP_AT.LOAD_PANELS,\n payload: panels\n });\n\n //Поиск раздела по имени\n const findPanelByName = name => state.panels.find(panel => panel.name == name);\n\n //Отображение закладки \"ПАРУС 8 Онлайн\" с указанным URL\n const pOnlineShowTab = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({\n id,\n url,\n caption,\n onClose\n }) => {\n if (P8O_API) {\n const _id = id || guidGenerator();\n P8O_API.ui.openTab({\n id: _id,\n url,\n caption,\n onClose: () => onClose ? onClose(_id) : null\n });\n return _id;\n } else showMsgErr(errors.P8O_API_UNAVAILABLE);\n }, [showMsgErr, guidGenerator, errors.P8O_API_UNAVAILABLE]);\n\n //Отображение раздела \"ПАРУС 8 Онлайн\"\n const pOnlineShowUnit = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({\n unitCode,\n showMethod = \"main\",\n inputParameters\n }) => {\n if (P8O_API) P8O_API.fn.openDocumentModal({\n unitcode: unitCode,\n method: showMethod,\n inputParameters\n });else showMsgErr(errors.P8O_API_UNAVAILABLE);\n }, [showMsgErr, errors.P8O_API_UNAVAILABLE]);\n\n //Отображение документа \"ПАРУС 8 Онлайн\"\n const pOnlineShowDocument = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({\n unitCode,\n document,\n showMethod = \"main\",\n inRnParameter = \"in_RN\"\n }) => {\n if (P8O_API) P8O_API.fn.openDocumentModal({\n unitcode: unitCode,\n method: showMethod,\n inputParameters: [{\n name: inRnParameter,\n value: document\n }]\n });else showMsgErr(errors.P8O_API_UNAVAILABLE);\n }, [showMsgErr, errors.P8O_API_UNAVAILABLE]);\n\n //Отображение словаря \"ПАРУС 8 Онлайн\"\n const pOnlineShowDictionary = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({\n unitCode,\n showMethod = \"main\",\n inputParameters,\n callBack\n }) => {\n if (P8O_API) P8O_API.fn.openDictionary({\n unitcode: unitCode,\n method: showMethod,\n inputParameters\n }, res => callBack ? callBack(res) : null);else showMsgErr(errors.P8O_API_UNAVAILABLE);\n }, [showMsgErr, errors.P8O_API_UNAVAILABLE]);\n\n //Исполнение пользовательской процедуры \"ПАРУС 8 Онлайн\"\n const pOnlineUserProcedure = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({\n code,\n inputParameters,\n callBack\n }) => {\n if (P8O_API) P8O_API.fn.performUserProcedureSync({\n code,\n inputParameters\n }, res => callBack ? callBack(res) : null);else showMsgErr(errors.P8O_API_UNAVAILABLE);\n }, [showMsgErr, errors.P8O_API_UNAVAILABLE]);\n\n //Исполнение пользовательского отчёта \"ПАРУС 8 Онлайн\"\n const pOnlineUserReport = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({\n code,\n inputParameters\n }) => {\n if (P8O_API) P8O_API.fn.performUserReport({\n code,\n inputParameters\n });else showMsgErr(errors.P8O_API_UNAVAILABLE);\n }, [showMsgErr, errors.P8O_API_UNAVAILABLE]);\n\n //Получение количества записей на странице\n const configSystemPageSize = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => config.SYSTEM.PAGE_SIZE, [config.SYSTEM.PAGE_SIZE]);\n\n //Получение базового URL приложения\n const configUrlBase = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => state.urlBase, [state.urlBase]);\n\n //Инициализация приложения\n const initApp = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n //Читаем конфигурацию с сервера\n let res = await getConfig();\n //Сохраняем базовый URL приложения\n setUrlBase(getRespPayload(res)?.Panels?.urlBase);\n //Сохраняем список панелей\n setPanels(getRespPayload(res)?.Panels?.Panel);\n //Установим флаг завершения инициализации\n setInitialized();\n }, [getConfig, getRespPayload]);\n\n //Обработка подключения контекста к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (!state.initialized) {\n //Слушаем изменение размеров окна\n window.addEventListener(\"resize\", () => {\n if (displaySizeGetter) setDisplaySize(displaySizeGetter());\n });\n //Инициализируем приложение\n initApp();\n }\n }, [state.initialized, initApp, displaySizeGetter]);\n\n //Вернём компонент провайдера\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ApplicationСtx.Provider, {\n value: {\n findPanelByName,\n pOnlineShowTab,\n pOnlineShowUnit,\n pOnlineShowDocument,\n pOnlineShowDictionary,\n pOnlineUserProcedure,\n pOnlineUserReport,\n configSystemPageSize,\n configUrlBase,\n appState: state\n }\n }, children);\n};\n\n//Контроль свойств - Провайдер контекста приложения\nApplicationContext.propTypes = {\n errors: APPLICATION_CONTEXT_ERRORS_SHAPE.isRequired,\n displaySizeGetter: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().func),\n guidGenerator: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().func).isRequired,\n config: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().object).isRequired,\n children: prop_types__WEBPACK_IMPORTED_MODULE_4___default().oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_4___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_4___default().node)), (prop_types__WEBPACK_IMPORTED_MODULE_4___default().node)])\n};\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/context/application.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ApplicationContext: () => (/* binding */ ApplicationContext),\n/* harmony export */ \"ApplicationСtx\": () => (/* binding */ ApplicationСtx)\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_4__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _application_reducer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./application_reducer */ \"./app/context/application_reducer.js\");\n/* harmony import */ var _messaging__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _backend__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./backend */ \"./app/context/backend.js\");\n/*\n Парус 8 - Панели мониторинга\n Контекст: Приложение\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //ReactJS\n //Контроль свойств компонента\n //Редьюсер состояния\n //Контекст отображения сообщений\n //Контекст взаимодействия с сервером\n\n//---------\n//Константы\n//---------\n\n//Клиентский API \"ПАРУС 8 Онлайн\"\nconst P8O_API = window.top?.parus?.clientApi;\n\n//Структура объекта с описанием ошибок\nconst APPLICATION_CONTEXT_ERRORS_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_4___default().shape({\n P8O_API_UNAVAILABLE: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().string).isRequired\n});\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n//Контекст приложения\nconst ApplicationСtx = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)();\n\n//Провайдер контекста приложения\nconst ApplicationContext = ({\n errors,\n displaySizeGetter,\n guidGenerator,\n config,\n children\n}) => {\n //Подключим редьюсер состояния\n const [state, dispatch] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useReducer)(_application_reducer__WEBPACK_IMPORTED_MODULE_1__.applicationReducer, (0,_application_reducer__WEBPACK_IMPORTED_MODULE_1__.INITIAL_STATE)(displaySizeGetter));\n\n //Подключение к контексту взаимодействия с сервером\n const {\n getConfig,\n getRespPayload\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_backend__WEBPACK_IMPORTED_MODULE_3__[\"BackEndСtx\"]);\n\n //Подключение к контексту отображения сообщений\n const {\n showMsgErr\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_messaging__WEBPACK_IMPORTED_MODULE_2__[\"MessagingСtx\"]);\n\n //Установка флага инициализированности приложения\n const setInitialized = () => dispatch({\n type: _application_reducer__WEBPACK_IMPORTED_MODULE_1__.APP_AT.SET_INITIALIZED\n });\n\n //Установка текущего размера экрана\n const setDisplaySize = displaySize => dispatch({\n type: _application_reducer__WEBPACK_IMPORTED_MODULE_1__.APP_AT.SET_DISPLAY_SIZE,\n payload: displaySize\n });\n\n //Установка базового URL приложения\n const setUrlBase = urlBase => dispatch({\n type: _application_reducer__WEBPACK_IMPORTED_MODULE_1__.APP_AT.SET_URL_BASE,\n payload: urlBase\n });\n\n //Установка списка панелей\n const setPanels = panels => dispatch({\n type: _application_reducer__WEBPACK_IMPORTED_MODULE_1__.APP_AT.LOAD_PANELS,\n payload: panels\n });\n\n //Поиск раздела по имени\n const findPanelByName = name => state.panels.find(panel => panel.name == name);\n\n //Отображение закладки \"ПАРУС 8 Онлайн\" с указанным URL\n const pOnlineShowTab = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({\n id,\n url,\n caption,\n onClose\n }) => {\n if (P8O_API) {\n const _id = id || guidGenerator();\n P8O_API.ui.openTab({\n id: _id,\n url,\n caption,\n onClose: () => onClose ? onClose(_id) : null\n });\n return _id;\n } else showMsgErr(errors.P8O_API_UNAVAILABLE);\n }, [showMsgErr, guidGenerator, errors.P8O_API_UNAVAILABLE]);\n\n //Отображение раздела \"ПАРУС 8 Онлайн\"\n const pOnlineShowUnit = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({\n unitCode,\n showMethod = \"main\",\n inputParameters\n }) => {\n if (P8O_API) P8O_API.fn.openDocumentModal({\n unitcode: unitCode,\n method: showMethod,\n inputParameters\n });else showMsgErr(errors.P8O_API_UNAVAILABLE);\n }, [showMsgErr, errors.P8O_API_UNAVAILABLE]);\n\n //Отображение документа \"ПАРУС 8 Онлайн\"\n const pOnlineShowDocument = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({\n unitCode,\n document,\n showMethod = \"main\",\n inRnParameter = \"in_RN\"\n }) => {\n if (P8O_API) P8O_API.fn.openDocumentModal({\n unitcode: unitCode,\n method: showMethod,\n inputParameters: [{\n name: inRnParameter,\n value: document\n }]\n });else showMsgErr(errors.P8O_API_UNAVAILABLE);\n }, [showMsgErr, errors.P8O_API_UNAVAILABLE]);\n\n //Отображение словаря \"ПАРУС 8 Онлайн\"\n const pOnlineShowDictionary = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({\n unitCode,\n showMethod = \"main\",\n inputParameters,\n callBack\n }) => {\n if (P8O_API) P8O_API.fn.openDictionary({\n unitcode: unitCode,\n method: showMethod,\n inputParameters\n }, res => callBack ? callBack(res) : null);else showMsgErr(errors.P8O_API_UNAVAILABLE);\n }, [showMsgErr, errors.P8O_API_UNAVAILABLE]);\n\n //Исполнение пользовательской процедуры \"ПАРУС 8 Онлайн\"\n const pOnlineUserProcedure = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({\n code,\n inputParameters,\n callBack\n }) => {\n if (P8O_API) P8O_API.fn.performUserProcedureSync({\n code,\n inputParameters\n }, res => callBack ? callBack(res) : null);else showMsgErr(errors.P8O_API_UNAVAILABLE);\n }, [showMsgErr, errors.P8O_API_UNAVAILABLE]);\n\n //Исполнение пользовательского отчёта \"ПАРУС 8 Онлайн\"\n const pOnlineUserReport = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({\n code,\n inputParameters\n }) => {\n if (P8O_API) P8O_API.fn.performUserReport({\n code,\n inputParameters\n });else showMsgErr(errors.P8O_API_UNAVAILABLE);\n }, [showMsgErr, errors.P8O_API_UNAVAILABLE]);\n\n //Получение количества записей на странице\n const configSystemPageSize = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => config.SYSTEM.PAGE_SIZE, [config.SYSTEM.PAGE_SIZE]);\n\n //Получение базового URL приложения\n const configUrlBase = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => state.urlBase, [state.urlBase]);\n\n //Инициализация приложения\n const initApp = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n //Читаем конфигурацию с сервера\n let res = await getConfig();\n //Сохраняем базовый URL приложения\n setUrlBase(getRespPayload(res)?.Panels?.urlBase);\n //Сохраняем список панелей\n setPanels(getRespPayload(res)?.Panels?.Panel);\n //Установим флаг завершения инициализации\n setInitialized();\n }, [getConfig, getRespPayload]);\n\n //Обработка подключения контекста к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (!state.initialized) {\n //Слушаем изменение размеров окна\n window.addEventListener(\"resize\", () => {\n if (displaySizeGetter) setDisplaySize(displaySizeGetter());\n });\n //Инициализируем приложение\n initApp();\n }\n }, [state.initialized, initApp, displaySizeGetter]);\n\n //Вернём компонент провайдера\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ApplicationСtx.Provider, {\n value: {\n findPanelByName,\n pOnlineShowTab,\n pOnlineShowUnit,\n pOnlineShowDocument,\n pOnlineShowDictionary,\n pOnlineUserProcedure,\n pOnlineUserReport,\n configSystemPageSize,\n configUrlBase,\n appState: state\n }\n }, children);\n};\n\n//Контроль свойств - Провайдер контекста приложения\nApplicationContext.propTypes = {\n errors: APPLICATION_CONTEXT_ERRORS_SHAPE.isRequired,\n displaySizeGetter: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().func),\n guidGenerator: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().func).isRequired,\n config: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().object).isRequired,\n children: prop_types__WEBPACK_IMPORTED_MODULE_4___default().oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_4___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_4___default().node)), (prop_types__WEBPACK_IMPORTED_MODULE_4___default().node)])\n};\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/context/application.js?"); /***/ }), @@ -3194,7 +3304,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 */ APP_AT: () => (/* binding */ APP_AT),\n/* harmony export */ INITIAL_STATE: () => (/* binding */ INITIAL_STATE),\n/* harmony export */ applicationReducer: () => (/* binding */ applicationReducer)\n/* harmony export */ });\n/*\r\n Парус 8 - Панели мониторинга\r\n Контекст: Приложение - редьюсер состояния\r\n*/\n\n//---------\n//Константы\n//---------\n\n//Типы действий\nconst APP_AT = {\n SET_URL_BASE: \"SET_URL_BASE\",\n //Установка базового URL приложения\n LOAD_PANELS: \"LOAD_PANELS\",\n //Загрузка списка панелей\n SET_INITIALIZED: \"SET_INITIALIZED\",\n //Установка флага инициализированности приложения\n SET_DISPLAY_SIZE: \"SET_DISPLAY_SIZE\" //Установка текущего типового размера экрана\n};\n\n//Состояние приложения по умолчанию\nconst INITIAL_STATE = displaySizeGetter => ({\n displaySize: displaySizeGetter(),\n urlBase: \"\",\n panels: [],\n panelsLoaded: false,\n initialized: false\n});\n\n//-----------\n//Тело модуля\n//-----------\n\n//Обработчики действий\nconst handlers = {\n //Установка базового URL приложения\n [APP_AT.SET_URL_BASE]: (state, {\n payload\n }) => ({\n ...state,\n urlBase: payload\n }),\n //Загрузка списка панелей\n [APP_AT.LOAD_PANELS]: (state, {\n payload\n }) => {\n let panels = [];\n if (payload && Array.isArray(payload)) for (let p of payload) panels.push({\n ...p\n });\n return {\n ...state,\n panels,\n panelsLoaded: true\n };\n },\n //Установка текущего типового размера экрана\n [APP_AT.SET_INITIALIZED]: state => ({\n ...state,\n initialized: true\n }),\n //Установка текущего типового размера экрана\n [APP_AT.SET_DISPLAY_SIZE]: (state, {\n payload\n }) => ({\n ...state,\n displaySize: payload\n }),\n //Обработчик по умолчанию\n DEFAULT: state => state\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n//Константы\n\n\n//Редьюсер состояния\nconst applicationReducer = (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/context/application_reducer.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ APP_AT: () => (/* binding */ APP_AT),\n/* harmony export */ INITIAL_STATE: () => (/* binding */ INITIAL_STATE),\n/* harmony export */ applicationReducer: () => (/* binding */ applicationReducer)\n/* harmony export */ });\n/*\n Парус 8 - Панели мониторинга\n Контекст: Приложение - редьюсер состояния\n*/\n\n//---------\n//Константы\n//---------\n\n//Типы действий\nconst APP_AT = {\n SET_URL_BASE: \"SET_URL_BASE\",\n //Установка базового URL приложения\n LOAD_PANELS: \"LOAD_PANELS\",\n //Загрузка списка панелей\n SET_INITIALIZED: \"SET_INITIALIZED\",\n //Установка флага инициализированности приложения\n SET_DISPLAY_SIZE: \"SET_DISPLAY_SIZE\" //Установка текущего типового размера экрана\n};\n\n//Состояние приложения по умолчанию\nconst INITIAL_STATE = displaySizeGetter => ({\n displaySize: displaySizeGetter(),\n urlBase: \"\",\n panels: [],\n panelsLoaded: false,\n initialized: false\n});\n\n//-----------\n//Тело модуля\n//-----------\n\n//Обработчики действий\nconst handlers = {\n //Установка базового URL приложения\n [APP_AT.SET_URL_BASE]: (state, {\n payload\n }) => ({\n ...state,\n urlBase: payload\n }),\n //Загрузка списка панелей\n [APP_AT.LOAD_PANELS]: (state, {\n payload\n }) => {\n let panels = [];\n if (payload && Array.isArray(payload)) for (let p of payload) panels.push({\n ...p\n });\n return {\n ...state,\n panels,\n panelsLoaded: true\n };\n },\n //Установка текущего типового размера экрана\n [APP_AT.SET_INITIALIZED]: state => ({\n ...state,\n initialized: true\n }),\n //Установка текущего типового размера экрана\n [APP_AT.SET_DISPLAY_SIZE]: (state, {\n payload\n }) => ({\n ...state,\n displaySize: payload\n }),\n //Обработчик по умолчанию\n DEFAULT: state => state\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n//Константы\n\n\n//Редьюсер состояния\nconst applicationReducer = (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/context/application_reducer.js?"); /***/ }), @@ -3205,7 +3315,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 */ BackEndContext: () => (/* binding */ BackEndContext),\n/* harmony export */ \"BackEndСtx\": () => (/* binding */ BackEndСtx)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _messaging__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./messaging */ \"./app/context/messaging.js\");\n/*\r\n Парус 8 - Панели мониторинга\r\n Контекст: Взаимодействие с серверным API\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //ReactJS\n //Контроль свойств компонента\n //Контекст сообщений\n\n//---------\n//Константы\n//---------\n\n//Структура объекта клиента\nconst BACKEND_CONTEXT_CLIENT_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_2___default().shape({\n SERV_DATA_TYPE_STR: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n SERV_DATA_TYPE_NUMB: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n SERV_DATA_TYPE_DATE: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n SERV_DATA_TYPE_CLOB: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n isRespErr: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func).isRequired,\n getRespErrMessage: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func).isRequired,\n getRespPayload: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func).isRequired,\n executeStored: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func).isRequired,\n getConfig: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func).isRequired\n});\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n//Контекст взаимодействия с серверным API\nconst BackEndСtx = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)();\n\n//Провайдер контекста взаимодействия с серверным API\nconst BackEndContext = ({\n client,\n children\n}) => {\n //Подключение к контексту сообщений\n const {\n showLoader,\n hideLoader,\n showMsgErr\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_messaging__WEBPACK_IMPORTED_MODULE_1__[\"MessagingСtx\"]);\n\n //Проверка ответа на наличие ошибки\n const isRespErr = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(resp => client.isRespErr(resp), [client]);\n\n //Извлечение ошибки из ответа\n const getRespErrMessage = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(resp => client.getRespErrMessage(resp), [client]);\n\n //Извлечение полезного содержимого из ответа\n const getRespPayload = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(resp => client.getRespPayload(resp), [client]);\n\n //Запуск хранимой процедуры\n const executeStored = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ({\n stored,\n args,\n respArg,\n isArray,\n tagValueProcessor,\n attributeValueProcessor,\n loader = true,\n loaderMessage = \"\",\n throwError = true,\n showErrorMessage = true,\n fullResponse = false,\n spreadOutArguments = true\n } = {}) => {\n try {\n if (loader !== false) showLoader(loaderMessage);\n let result = await client.executeStored({\n stored,\n args,\n respArg,\n isArray,\n tagValueProcessor,\n attributeValueProcessor,\n throwError,\n spreadOutArguments\n });\n if (fullResponse === true || isRespErr(result)) return result;else return result.XPAYLOAD;\n } catch (e) {\n if (showErrorMessage) showMsgErr(e.message);\n throw e;\n } finally {\n if (loader !== false) hideLoader();\n }\n }, [showLoader, hideLoader, isRespErr, showMsgErr, client]);\n\n //Загрузка настроек панелей\n const getConfig = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ({\n loader = true,\n loaderMessage = \"\",\n throwError = true,\n showErrorMessage = true\n } = {}) => {\n try {\n if (loader !== false) showLoader(loaderMessage);\n let result = await client.getConfig({\n throwError\n });\n return result;\n } catch (e) {\n if (showErrorMessage) showMsgErr(e.message);\n throw e;\n } finally {\n if (loader !== false) hideLoader();\n }\n }, [showLoader, hideLoader, showMsgErr, client]);\n\n //Вернём компонент провайдера\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(BackEndСtx.Provider, {\n value: {\n SERV_DATA_TYPE_STR: client.SERV_DATA_TYPE_STR,\n SERV_DATA_TYPE_NUMB: client.SERV_DATA_TYPE_NUMB,\n SERV_DATA_TYPE_DATE: client.SERV_DATA_TYPE_DATE,\n SERV_DATA_TYPE_CLOB: client.SERV_DATA_TYPE_CLOB,\n isRespErr,\n getRespErrMessage,\n getRespPayload,\n executeStored,\n getConfig\n }\n }, children);\n};\n\n//Контроль свойств - Провайдер контекста взаимодействия с серверным API\nBackEndContext.propTypes = {\n client: BACKEND_CONTEXT_CLIENT_SHAPE.isRequired,\n children: prop_types__WEBPACK_IMPORTED_MODULE_2___default().oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_2___default().node)), (prop_types__WEBPACK_IMPORTED_MODULE_2___default().node)])\n};\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/context/backend.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ BackEndContext: () => (/* binding */ BackEndContext),\n/* harmony export */ \"BackEndСtx\": () => (/* binding */ BackEndСtx)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _messaging__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./messaging */ \"./app/context/messaging.js\");\n/*\n Парус 8 - Панели мониторинга\n Контекст: Взаимодействие с серверным API\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //ReactJS\n //Контроль свойств компонента\n //Контекст сообщений\n\n//---------\n//Константы\n//---------\n\n//Структура объекта клиента\nconst BACKEND_CONTEXT_CLIENT_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_2___default().shape({\n SERV_DATA_TYPE_STR: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n SERV_DATA_TYPE_NUMB: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n SERV_DATA_TYPE_DATE: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n SERV_DATA_TYPE_CLOB: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string).isRequired,\n isRespErr: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func).isRequired,\n getRespErrMessage: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func).isRequired,\n getRespPayload: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func).isRequired,\n executeStored: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func).isRequired,\n getConfig: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func).isRequired\n});\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n//Контекст взаимодействия с серверным API\nconst BackEndСtx = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)();\n\n//Провайдер контекста взаимодействия с серверным API\nconst BackEndContext = ({\n client,\n children\n}) => {\n //Подключение к контексту сообщений\n const {\n showLoader,\n hideLoader,\n showMsgErr\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_messaging__WEBPACK_IMPORTED_MODULE_1__[\"MessagingСtx\"]);\n\n //Проверка ответа на наличие ошибки\n const isRespErr = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(resp => client.isRespErr(resp), [client]);\n\n //Извлечение ошибки из ответа\n const getRespErrMessage = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(resp => client.getRespErrMessage(resp), [client]);\n\n //Извлечение полезного содержимого из ответа\n const getRespPayload = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(resp => client.getRespPayload(resp), [client]);\n\n //Запуск хранимой процедуры\n const executeStored = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ({\n stored,\n args,\n respArg,\n isArray,\n tagValueProcessor,\n attributeValueProcessor,\n loader = true,\n loaderMessage = \"\",\n throwError = true,\n showErrorMessage = true,\n fullResponse = false,\n spreadOutArguments = true\n } = {}) => {\n try {\n if (loader !== false) showLoader(loaderMessage);\n let result = await client.executeStored({\n stored,\n args,\n respArg,\n isArray,\n tagValueProcessor,\n attributeValueProcessor,\n throwError,\n spreadOutArguments\n });\n if (fullResponse === true || isRespErr(result)) return result;else return result.XPAYLOAD;\n } catch (e) {\n if (showErrorMessage) showMsgErr(e.message);\n throw e;\n } finally {\n if (loader !== false) hideLoader();\n }\n }, [showLoader, hideLoader, isRespErr, showMsgErr, client]);\n\n //Загрузка настроек панелей\n const getConfig = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ({\n loader = true,\n loaderMessage = \"\",\n throwError = true,\n showErrorMessage = true\n } = {}) => {\n try {\n if (loader !== false) showLoader(loaderMessage);\n let result = await client.getConfig({\n throwError\n });\n return result;\n } catch (e) {\n if (showErrorMessage) showMsgErr(e.message);\n throw e;\n } finally {\n if (loader !== false) hideLoader();\n }\n }, [showLoader, hideLoader, showMsgErr, client]);\n\n //Вернём компонент провайдера\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(BackEndСtx.Provider, {\n value: {\n SERV_DATA_TYPE_STR: client.SERV_DATA_TYPE_STR,\n SERV_DATA_TYPE_NUMB: client.SERV_DATA_TYPE_NUMB,\n SERV_DATA_TYPE_DATE: client.SERV_DATA_TYPE_DATE,\n SERV_DATA_TYPE_CLOB: client.SERV_DATA_TYPE_CLOB,\n isRespErr,\n getRespErrMessage,\n getRespPayload,\n executeStored,\n getConfig\n }\n }, children);\n};\n\n//Контроль свойств - Провайдер контекста взаимодействия с серверным API\nBackEndContext.propTypes = {\n client: BACKEND_CONTEXT_CLIENT_SHAPE.isRequired,\n children: prop_types__WEBPACK_IMPORTED_MODULE_2___default().oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_2___default().node)), (prop_types__WEBPACK_IMPORTED_MODULE_2___default().node)])\n};\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/context/backend.js?"); /***/ }), @@ -3216,7 +3326,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 */ MessagingContext: () => (/* binding */ MessagingContext),\n/* harmony export */ \"MessagingСtx\": () => (/* binding */ MessagingСtx)\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_4__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _components_p8p_app_progress__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../components/p8p_app_progress */ \"./app/components/p8p_app_progress.js\");\n/* harmony import */ var _components_p8p_app_message__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../components/p8p_app_message */ \"./app/components/p8p_app_message.js\");\n/* harmony import */ var _messaging_reducer__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./messaging_reducer */ \"./app/context/messaging_reducer.js\");\n/*\r\n Парус 8 - Панели мониторинга\r\n Контекст: Сообщения\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //ReactJS\n //Контроль свойств компонента\n //Индикатор процесса\n //Диалог сообщения\n //Редьюсер состояния\n\n//---------\n//Константы\n//---------\n\n//Структура объекта с описанием типовых заголовков\nconst MESSAGING_CONTEXT_TITLES_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_4___default().shape({\n ERR: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().string).isRequired,\n WARN: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().string).isRequired,\n INFO: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().string).isRequired\n});\n\n//Структура объекта с описанием типовых текстов\nconst MESSAGING_CONTEXT_TEXTS_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_4___default().shape({\n LOADING: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().string).isRequired\n});\n\n//Структура объекта с описанием типовых кнопок\nconst MESSAGING_CONTEXT_BUTTONS_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_4___default().shape({\n CLOSE: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().string).isRequired,\n OK: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().string).isRequired,\n CANCEL: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().string).isRequired\n});\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n//Контекст сообщений\nconst MessagingСtx = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)();\n\n//Провайдер контекста сообщений\nconst MessagingContext = ({\n titles,\n texts,\n buttons,\n children\n}) => {\n //Подключим редьюсер состояния\n const [state, dispatch] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useReducer)(_messaging_reducer__WEBPACK_IMPORTED_MODULE_3__.messagingReducer, _messaging_reducer__WEBPACK_IMPORTED_MODULE_3__.INITIAL_STATE);\n\n //Отображение загрузчика\n const showLoader = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(message => dispatch({\n type: _messaging_reducer__WEBPACK_IMPORTED_MODULE_3__.MSG_AT.SHOW_LOADER,\n payload: message\n }), []);\n\n //Сокрытие загрузчика\n const hideLoader = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => dispatch({\n type: _messaging_reducer__WEBPACK_IMPORTED_MODULE_3__.MSG_AT.HIDE_LOADER\n }), []);\n\n //Отображение сообщения\n const showMsg = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((type, text, msgOnOk = null, msgOnCancel = null) => dispatch({\n type: _messaging_reducer__WEBPACK_IMPORTED_MODULE_3__.MSG_AT.SHOW_MSG,\n payload: {\n type,\n text,\n msgOnOk,\n msgOnCancel\n }\n }), []);\n\n //Отображение сообщения - ошибка\n const showMsgErr = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((text, msgOnOk = null) => showMsg(_messaging_reducer__WEBPACK_IMPORTED_MODULE_3__.MSG_TYPE.ERR, text, msgOnOk), [showMsg]);\n\n //Отображение сообщения - информация\n const showMsgInfo = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((text, msgOnOk = null) => showMsg(_messaging_reducer__WEBPACK_IMPORTED_MODULE_3__.MSG_TYPE.INFO, text, msgOnOk), [showMsg]);\n\n //Отображение сообщения - предупреждение\n const showMsgWarn = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((text, msgOnOk = null, msgOnCancel = null) => showMsg(_messaging_reducer__WEBPACK_IMPORTED_MODULE_3__.MSG_TYPE.WARN, text, msgOnOk, msgOnCancel), [showMsg]);\n\n //Сокрытие сообщения\n const hideMsg = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((cancel = false) => {\n dispatch({\n type: _messaging_reducer__WEBPACK_IMPORTED_MODULE_3__.MSG_AT.HIDE_MSG\n });\n if (!cancel && state.msgOnOk) state.msgOnOk();\n if (cancel && state.msgOnCancel) state.msgOnCancel();\n }, [state]);\n\n //Отработка нажатия на \"ОК\" в сообщении\n const handleMessageOkClick = () => {\n hideMsg(false);\n };\n\n //Отработка нажатия на \"Отмена\" в сообщении\n const handleMessageCancelClick = () => {\n hideMsg(true);\n };\n\n //Встраиваемое сообщение\n const InlineMsg = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(props => (0,_components_p8p_app_message__WEBPACK_IMPORTED_MODULE_2__.P8PAppInlineMessage)({\n okBtn: true,\n okBtnCaption: buttons.OK,\n ...props\n }), [buttons.OK]);\n\n //Встраиваемое сообщение об ошибке\n const InlineMsgErr = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(props => (0,_components_p8p_app_message__WEBPACK_IMPORTED_MODULE_2__.P8PAppInlineError)({\n okBtn: true,\n okBtnCaption: buttons.OK,\n ...props\n }), [buttons.OK]);\n\n //Встраиваемое сообщение с информацией\n const InlineMsgInfo = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(props => (0,_components_p8p_app_message__WEBPACK_IMPORTED_MODULE_2__.P8PAppInlineInfo)({\n okBtn: true,\n okBtnCaption: buttons.OK,\n ...props\n }), [buttons.OK]);\n\n //Встраиваемое сообщение с предупреждением\n const InlineMsgWarn = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(props => (0,_components_p8p_app_message__WEBPACK_IMPORTED_MODULE_2__.P8PAppInlineWarn)({\n okBtn: true,\n okBtnCaption: buttons.OK,\n ...props\n }), [buttons.OK]);\n\n //Вернём компонент провайдера\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(MessagingСtx.Provider, {\n value: {\n MSG_TYPE: _messaging_reducer__WEBPACK_IMPORTED_MODULE_3__.MSG_TYPE,\n showLoader,\n hideLoader,\n showMsg,\n showMsgErr,\n showMsgInfo,\n showMsgWarn,\n hideMsg,\n InlineMsg,\n InlineMsgErr,\n InlineMsgInfo,\n InlineMsgWarn,\n msgState: state\n }\n }, state.loading ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_app_progress__WEBPACK_IMPORTED_MODULE_1__.P8PAppProgress, {\n open: true,\n text: state.loadingMessage || texts.LOADING\n }) : null, state.msg ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_app_message__WEBPACK_IMPORTED_MODULE_2__.P8PAppMessage, {\n open: true,\n variant: state.msgType,\n text: state.msgText,\n title: true,\n titleText: state.msgType == _messaging_reducer__WEBPACK_IMPORTED_MODULE_3__.MSG_TYPE.ERR ? titles.ERR : state.msgType == _messaging_reducer__WEBPACK_IMPORTED_MODULE_3__.MSG_TYPE.WARN ? titles.WARN : titles.INFO,\n okBtn: true,\n onOk: handleMessageOkClick,\n okBtnCaption: [_messaging_reducer__WEBPACK_IMPORTED_MODULE_3__.MSG_TYPE.ERR, _messaging_reducer__WEBPACK_IMPORTED_MODULE_3__.MSG_TYPE.INFO].includes(state.msgType) ? buttons.CLOSE : buttons.OK,\n cancelBtn: state.msgType == _messaging_reducer__WEBPACK_IMPORTED_MODULE_3__.MSG_TYPE.WARN,\n onCancel: handleMessageCancelClick,\n cancelBtnCaption: buttons.CANCEL\n }) : null, children);\n};\n\n//Контроль свойств - Провайдер контекста сообщений\nMessagingContext.propTypes = {\n titles: MESSAGING_CONTEXT_TITLES_SHAPE,\n texts: MESSAGING_CONTEXT_TEXTS_SHAPE,\n buttons: MESSAGING_CONTEXT_BUTTONS_SHAPE,\n children: prop_types__WEBPACK_IMPORTED_MODULE_4___default().oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_4___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_4___default().node)), (prop_types__WEBPACK_IMPORTED_MODULE_4___default().node)])\n};\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/context/messaging.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ MessagingContext: () => (/* binding */ MessagingContext),\n/* harmony export */ \"MessagingСtx\": () => (/* binding */ MessagingСtx)\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_4__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _components_p8p_app_progress__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../components/p8p_app_progress */ \"./app/components/p8p_app_progress.js\");\n/* harmony import */ var _components_p8p_app_message__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../components/p8p_app_message */ \"./app/components/p8p_app_message.js\");\n/* harmony import */ var _messaging_reducer__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./messaging_reducer */ \"./app/context/messaging_reducer.js\");\n/*\n Парус 8 - Панели мониторинга\n Контекст: Сообщения\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //ReactJS\n //Контроль свойств компонента\n //Индикатор процесса\n //Диалог сообщения\n //Редьюсер состояния\n\n//---------\n//Константы\n//---------\n\n//Структура объекта с описанием типовых заголовков\nconst MESSAGING_CONTEXT_TITLES_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_4___default().shape({\n ERR: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().string).isRequired,\n WARN: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().string).isRequired,\n INFO: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().string).isRequired\n});\n\n//Структура объекта с описанием типовых текстов\nconst MESSAGING_CONTEXT_TEXTS_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_4___default().shape({\n LOADING: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().string).isRequired\n});\n\n//Структура объекта с описанием типовых кнопок\nconst MESSAGING_CONTEXT_BUTTONS_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_4___default().shape({\n CLOSE: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().string).isRequired,\n OK: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().string).isRequired,\n CANCEL: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().string).isRequired\n});\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n//Контекст сообщений\nconst MessagingСtx = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)();\n\n//Провайдер контекста сообщений\nconst MessagingContext = ({\n titles,\n texts,\n buttons,\n children\n}) => {\n //Подключим редьюсер состояния\n const [state, dispatch] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useReducer)(_messaging_reducer__WEBPACK_IMPORTED_MODULE_3__.messagingReducer, _messaging_reducer__WEBPACK_IMPORTED_MODULE_3__.INITIAL_STATE);\n\n //Отображение загрузчика\n const showLoader = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(message => dispatch({\n type: _messaging_reducer__WEBPACK_IMPORTED_MODULE_3__.MSG_AT.SHOW_LOADER,\n payload: message\n }), []);\n\n //Сокрытие загрузчика\n const hideLoader = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => dispatch({\n type: _messaging_reducer__WEBPACK_IMPORTED_MODULE_3__.MSG_AT.HIDE_LOADER\n }), []);\n\n //Отображение сообщения\n const showMsg = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((type, text, msgOnOk = null, msgOnCancel = null) => dispatch({\n type: _messaging_reducer__WEBPACK_IMPORTED_MODULE_3__.MSG_AT.SHOW_MSG,\n payload: {\n type,\n text,\n msgOnOk,\n msgOnCancel\n }\n }), []);\n\n //Отображение сообщения - ошибка\n const showMsgErr = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((text, msgOnOk = null) => showMsg(_messaging_reducer__WEBPACK_IMPORTED_MODULE_3__.MSG_TYPE.ERR, text, msgOnOk), [showMsg]);\n\n //Отображение сообщения - информация\n const showMsgInfo = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((text, msgOnOk = null) => showMsg(_messaging_reducer__WEBPACK_IMPORTED_MODULE_3__.MSG_TYPE.INFO, text, msgOnOk), [showMsg]);\n\n //Отображение сообщения - предупреждение\n const showMsgWarn = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((text, msgOnOk = null, msgOnCancel = null) => showMsg(_messaging_reducer__WEBPACK_IMPORTED_MODULE_3__.MSG_TYPE.WARN, text, msgOnOk, msgOnCancel), [showMsg]);\n\n //Сокрытие сообщения\n const hideMsg = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((cancel = false) => {\n dispatch({\n type: _messaging_reducer__WEBPACK_IMPORTED_MODULE_3__.MSG_AT.HIDE_MSG\n });\n if (!cancel && state.msgOnOk) state.msgOnOk();\n if (cancel && state.msgOnCancel) state.msgOnCancel();\n }, [state]);\n\n //Отработка нажатия на \"ОК\" в сообщении\n const handleMessageOkClick = () => {\n hideMsg(false);\n };\n\n //Отработка нажатия на \"Отмена\" в сообщении\n const handleMessageCancelClick = () => {\n hideMsg(true);\n };\n\n //Встраиваемое сообщение\n const InlineMsg = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(props => (0,_components_p8p_app_message__WEBPACK_IMPORTED_MODULE_2__.P8PAppInlineMessage)({\n okBtn: true,\n okBtnCaption: buttons.OK,\n ...props\n }), [buttons.OK]);\n\n //Встраиваемое сообщение об ошибке\n const InlineMsgErr = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(props => (0,_components_p8p_app_message__WEBPACK_IMPORTED_MODULE_2__.P8PAppInlineError)({\n okBtn: true,\n okBtnCaption: buttons.OK,\n ...props\n }), [buttons.OK]);\n\n //Встраиваемое сообщение с информацией\n const InlineMsgInfo = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(props => (0,_components_p8p_app_message__WEBPACK_IMPORTED_MODULE_2__.P8PAppInlineInfo)({\n okBtn: true,\n okBtnCaption: buttons.OK,\n ...props\n }), [buttons.OK]);\n\n //Встраиваемое сообщение с предупреждением\n const InlineMsgWarn = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(props => (0,_components_p8p_app_message__WEBPACK_IMPORTED_MODULE_2__.P8PAppInlineWarn)({\n okBtn: true,\n okBtnCaption: buttons.OK,\n ...props\n }), [buttons.OK]);\n\n //Вернём компонент провайдера\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(MessagingСtx.Provider, {\n value: {\n MSG_TYPE: _messaging_reducer__WEBPACK_IMPORTED_MODULE_3__.MSG_TYPE,\n showLoader,\n hideLoader,\n showMsg,\n showMsgErr,\n showMsgInfo,\n showMsgWarn,\n hideMsg,\n InlineMsg,\n InlineMsgErr,\n InlineMsgInfo,\n InlineMsgWarn,\n msgState: state\n }\n }, state.loading ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_app_progress__WEBPACK_IMPORTED_MODULE_1__.P8PAppProgress, {\n open: true,\n text: state.loadingMessage || texts.LOADING\n }) : null, state.msg ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_app_message__WEBPACK_IMPORTED_MODULE_2__.P8PAppMessage, {\n open: true,\n variant: state.msgType,\n text: state.msgText,\n title: true,\n titleText: state.msgType == _messaging_reducer__WEBPACK_IMPORTED_MODULE_3__.MSG_TYPE.ERR ? titles.ERR : state.msgType == _messaging_reducer__WEBPACK_IMPORTED_MODULE_3__.MSG_TYPE.WARN ? titles.WARN : titles.INFO,\n okBtn: true,\n onOk: handleMessageOkClick,\n okBtnCaption: [_messaging_reducer__WEBPACK_IMPORTED_MODULE_3__.MSG_TYPE.ERR, _messaging_reducer__WEBPACK_IMPORTED_MODULE_3__.MSG_TYPE.INFO].includes(state.msgType) ? buttons.CLOSE : buttons.OK,\n cancelBtn: state.msgType == _messaging_reducer__WEBPACK_IMPORTED_MODULE_3__.MSG_TYPE.WARN,\n onCancel: handleMessageCancelClick,\n cancelBtnCaption: buttons.CANCEL\n }) : null, children);\n};\n\n//Контроль свойств - Провайдер контекста сообщений\nMessagingContext.propTypes = {\n titles: MESSAGING_CONTEXT_TITLES_SHAPE,\n texts: MESSAGING_CONTEXT_TEXTS_SHAPE,\n buttons: MESSAGING_CONTEXT_BUTTONS_SHAPE,\n children: prop_types__WEBPACK_IMPORTED_MODULE_4___default().oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_4___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_4___default().node)), (prop_types__WEBPACK_IMPORTED_MODULE_4___default().node)])\n};\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/context/messaging.js?"); /***/ }), @@ -3227,7 +3337,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 */ INITIAL_STATE: () => (/* binding */ INITIAL_STATE),\n/* harmony export */ MSG_AT: () => (/* binding */ MSG_AT),\n/* harmony export */ MSG_TYPE: () => (/* binding */ MSG_TYPE),\n/* harmony export */ messagingReducer: () => (/* binding */ messagingReducer)\n/* harmony export */ });\n/* harmony import */ var _components_p8p_app_message__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../components/p8p_app_message */ \"./app/components/p8p_app_message.js\");\n/*\r\n Парус 8 - Панели мониторинга\r\n Контекст: Сообщения - редьюсер состояния\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Диалог сообщения\n\n//---------\n//Константы\n//---------\n\n//Типы действий\nconst MSG_AT = {\n SHOW_LOADER: \"SHOW_LOADER\",\n //Отображение индикатора загрузки\n HIDE_LOADER: \"HIDE_LOADER\",\n //Сокрытие индикатора загрузки\n SHOW_MSG: \"SHOW_MSG\",\n //Отображение сообщения\n HIDE_MSG: \"HIDE_MSG\" //Сокрытие сообщения\n};\n\n//Типы сообщений\nconst MSG_TYPE = {\n INFO: _components_p8p_app_message__WEBPACK_IMPORTED_MODULE_0__.P8P_APP_MESSAGE_VARIANT.INFO,\n //Тип диалога - информация\n WARN: _components_p8p_app_message__WEBPACK_IMPORTED_MODULE_0__.P8P_APP_MESSAGE_VARIANT.WARN,\n //Тип диалога - предупреждение\n ERR: _components_p8p_app_message__WEBPACK_IMPORTED_MODULE_0__.P8P_APP_MESSAGE_VARIANT.ERR //Тип диалога - ошибка\n};\n\n//Состояние сообщений по умолчанию\nconst INITIAL_STATE = {\n loading: false,\n loadingMessage: \"\",\n msg: false,\n msgType: MSG_TYPE.ERR,\n msgText: null,\n msgOnOk: null,\n msgOnCancel: null\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Обработчики действий\nconst handlers = {\n //Отображение индикатора обработки данных\n [MSG_AT.SHOW_LOADER]: (state, {\n payload\n }) => ({\n ...state,\n loading: true,\n loadingMessage: payload\n }),\n //Сокрытие индикатора обработки данных\n [MSG_AT.HIDE_LOADER]: state => ({\n ...state,\n loading: false\n }),\n //Отображение сообщения\n [MSG_AT.SHOW_MSG]: (state, {\n payload\n }) => ({\n ...state,\n msg: true,\n msgType: payload.type || MSG_TYPE.APP_ERR,\n msgText: payload.text,\n msgOnOk: payload.msgOnOk,\n msgOnCancel: payload.msgOnCancel\n }),\n //Сокрытие сообщения\n [MSG_AT.HIDE_MSG]: state => ({\n ...state,\n msg: false,\n msgOnOk: null,\n msgOnCancel: null\n }),\n //Обработчик по умолчанию\n DEFAULT: state => state\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n//Константы\n\n\n//Редьюсер состояния\nconst messagingReducer = (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/context/messaging_reducer.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ INITIAL_STATE: () => (/* binding */ INITIAL_STATE),\n/* harmony export */ MSG_AT: () => (/* binding */ MSG_AT),\n/* harmony export */ MSG_TYPE: () => (/* binding */ MSG_TYPE),\n/* harmony export */ messagingReducer: () => (/* binding */ messagingReducer)\n/* harmony export */ });\n/* harmony import */ var _components_p8p_app_message__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../components/p8p_app_message */ \"./app/components/p8p_app_message.js\");\n/*\n Парус 8 - Панели мониторинга\n Контекст: Сообщения - редьюсер состояния\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Диалог сообщения\n\n//---------\n//Константы\n//---------\n\n//Типы действий\nconst MSG_AT = {\n SHOW_LOADER: \"SHOW_LOADER\",\n //Отображение индикатора загрузки\n HIDE_LOADER: \"HIDE_LOADER\",\n //Сокрытие индикатора загрузки\n SHOW_MSG: \"SHOW_MSG\",\n //Отображение сообщения\n HIDE_MSG: \"HIDE_MSG\" //Сокрытие сообщения\n};\n\n//Типы сообщений\nconst MSG_TYPE = {\n INFO: _components_p8p_app_message__WEBPACK_IMPORTED_MODULE_0__.P8P_APP_MESSAGE_VARIANT.INFO,\n //Тип диалога - информация\n WARN: _components_p8p_app_message__WEBPACK_IMPORTED_MODULE_0__.P8P_APP_MESSAGE_VARIANT.WARN,\n //Тип диалога - предупреждение\n ERR: _components_p8p_app_message__WEBPACK_IMPORTED_MODULE_0__.P8P_APP_MESSAGE_VARIANT.ERR //Тип диалога - ошибка\n};\n\n//Состояние сообщений по умолчанию\nconst INITIAL_STATE = {\n loading: false,\n loadingMessage: \"\",\n msg: false,\n msgType: MSG_TYPE.ERR,\n msgText: null,\n msgOnOk: null,\n msgOnCancel: null\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Обработчики действий\nconst handlers = {\n //Отображение индикатора обработки данных\n [MSG_AT.SHOW_LOADER]: (state, {\n payload\n }) => ({\n ...state,\n loading: true,\n loadingMessage: payload\n }),\n //Сокрытие индикатора обработки данных\n [MSG_AT.HIDE_LOADER]: state => ({\n ...state,\n loading: false\n }),\n //Отображение сообщения\n [MSG_AT.SHOW_MSG]: (state, {\n payload\n }) => ({\n ...state,\n msg: true,\n msgType: payload.type || MSG_TYPE.APP_ERR,\n msgText: payload.text,\n msgOnOk: payload.msgOnOk,\n msgOnCancel: payload.msgOnCancel\n }),\n //Сокрытие сообщения\n [MSG_AT.HIDE_MSG]: state => ({\n ...state,\n msg: false,\n msgOnOk: null,\n msgOnCancel: null\n }),\n //Обработчик по умолчанию\n DEFAULT: state => state\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n//Константы\n\n\n//Редьюсер состояния\nconst messagingReducer = (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/context/messaging_reducer.js?"); /***/ }), @@ -3238,7 +3348,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 */ NavigationContext: () => (/* binding */ NavigationContext),\n/* harmony export */ NavigationCtx: () => (/* binding */ NavigationCtx),\n/* harmony export */ getRootLocation: () => (/* binding */ getRootLocation)\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_4__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-router-dom */ \"./node_modules/react-router/dist/index.js\");\n/* harmony import */ var query_string__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! query-string */ \"./node_modules/query-string/index.js\");\n/* harmony import */ var _application__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./application */ \"./app/context/application.js\");\n/*\r\n Парус 8 - Панели мониторинга\r\n Контекст: Навигация\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //ReactJS\n //Контроль свойств компонента\n //Роутер приложения\n //Работа со строкой запроса\n //Контекст приложения\n\n//---------\n//Константы\n//---------\n\n//Типовые пути\nconst PATHS = {\n ROOT: \"/\" //Корень приложения\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n//Получение корневого пути\nconst getRootLocation = () => PATHS.ROOT;\n\n//Контекст навигации\nconst NavigationCtx = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)();\n\n//Провайдер контекста навигации\nconst NavigationContext = ({\n children\n}) => {\n //Подключение к объекту роутера для управления навигацией\n const location = (0,react_router_dom__WEBPACK_IMPORTED_MODULE_3__.useLocation)();\n\n //Подключение к объекту роутера для управления навигацией\n const navigate = (0,react_router_dom__WEBPACK_IMPORTED_MODULE_3__.useNavigate)();\n\n //Подключение к контексту приложения\n const {\n findPanelByName\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_application__WEBPACK_IMPORTED_MODULE_2__[\"ApplicationСtx\"]);\n\n //Проверка наличия параметров запроса\n const isNavigationSearch = () => location.search ? true : false;\n\n //Считываение параметров запроса\n const getNavigationSearch = () => query_string__WEBPACK_IMPORTED_MODULE_1__[\"default\"].parse(location.search);\n\n //Проверка наличия параметров запроса (передаваемых через состояние)\n const isNavigationState = () => location.state ? true : false;\n\n //Считываение параметров запроса (передаваемых через состояние)\n const getNavigationState = () => isNavigationState() ? JSON.parse(location.state) : null;\n\n //Обновление текущей страницы\n const refresh = () => window.location.reload();\n\n //Возврат на предыдущую страницу\n const navigateBack = () => navigate(-1);\n\n //Переход к адресу внутри приложения\n const navigateTo = ({\n path,\n search,\n state,\n replace = false\n }) => {\n //Если указано куда переходить\n if (path) {\n //Переходим к адресу\n if (state) navigate(path, {\n state: JSON.stringify(state),\n replace\n });else navigate({\n pathname: path,\n search: query_string__WEBPACK_IMPORTED_MODULE_1__[\"default\"].stringify(search),\n replace\n });\n //Флаг успешного перехода\n return true;\n }\n //Переход не состоялся\n else return false;\n };\n\n //Переход к домашней страничке\n const navigateRoot = state => navigateTo({\n path: getRootLocation(),\n state\n });\n\n //Переход к панели\n const navigatePanel = (panel, state) => {\n if (panel) {\n let path = getRootLocation();\n path = !path.endsWith(\"/\") && !panel.url.startsWith(\"/\") ? `${path}/${panel.url}` : `${path}${panel.url}`;\n navigateTo({\n path,\n state\n });\n } else return false;\n };\n\n //Переход к панели по наименованию\n const navigatePanelByName = (name, state) => navigatePanel(findPanelByName(name), state);\n\n //Переход к произвольному адресу\n const navigateURL = url => {\n window.open(url, \"_self\");\n };\n\n //Вернём компонент провайдера\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(NavigationCtx.Provider, {\n value: {\n getNavigationSearch,\n isNavigationSearch,\n getNavigationState,\n isNavigationState,\n refresh,\n navigateTo,\n navigateBack,\n navigateRoot,\n navigatePanel,\n navigatePanelByName,\n navigateURL\n }\n }, children);\n};\n\n//Контроль свойств - Провайдер контекста навигации\nNavigationContext.propTypes = {\n children: prop_types__WEBPACK_IMPORTED_MODULE_4___default().oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_4___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_4___default().node)), (prop_types__WEBPACK_IMPORTED_MODULE_4___default().node)])\n};\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/context/navigation.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ NavigationContext: () => (/* binding */ NavigationContext),\n/* harmony export */ NavigationCtx: () => (/* binding */ NavigationCtx),\n/* harmony export */ getRootLocation: () => (/* binding */ getRootLocation)\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_4__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-router-dom */ \"./node_modules/react-router/dist/index.js\");\n/* harmony import */ var query_string__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! query-string */ \"./node_modules/query-string/index.js\");\n/* harmony import */ var _application__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./application */ \"./app/context/application.js\");\n/*\n Парус 8 - Панели мониторинга\n Контекст: Навигация\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //ReactJS\n //Контроль свойств компонента\n //Роутер приложения\n //Работа со строкой запроса\n //Контекст приложения\n\n//---------\n//Константы\n//---------\n\n//Типовые пути\nconst PATHS = {\n ROOT: \"/\" //Корень приложения\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n//Получение корневого пути\nconst getRootLocation = () => PATHS.ROOT;\n\n//Контекст навигации\nconst NavigationCtx = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)();\n\n//Провайдер контекста навигации\nconst NavigationContext = ({\n children\n}) => {\n //Подключение к объекту роутера для управления навигацией\n const location = (0,react_router_dom__WEBPACK_IMPORTED_MODULE_3__.useLocation)();\n\n //Подключение к объекту роутера для управления навигацией\n const navigate = (0,react_router_dom__WEBPACK_IMPORTED_MODULE_3__.useNavigate)();\n\n //Подключение к контексту приложения\n const {\n findPanelByName\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_application__WEBPACK_IMPORTED_MODULE_2__[\"ApplicationСtx\"]);\n\n //Проверка наличия параметров запроса\n const isNavigationSearch = () => location.search ? true : false;\n\n //Считываение параметров запроса\n const getNavigationSearch = () => query_string__WEBPACK_IMPORTED_MODULE_1__[\"default\"].parse(location.search);\n\n //Проверка наличия параметров запроса (передаваемых через состояние)\n const isNavigationState = () => location.state ? true : false;\n\n //Считываение параметров запроса (передаваемых через состояние)\n const getNavigationState = () => isNavigationState() ? JSON.parse(location.state) : null;\n\n //Обновление текущей страницы\n const refresh = () => window.location.reload();\n\n //Возврат на предыдущую страницу\n const navigateBack = () => navigate(-1);\n\n //Переход к адресу внутри приложения\n const navigateTo = ({\n path,\n search,\n state,\n replace = false\n }) => {\n //Если указано куда переходить\n if (path) {\n //Переходим к адресу\n if (state) navigate(path, {\n state: JSON.stringify(state),\n replace\n });else navigate({\n pathname: path,\n search: query_string__WEBPACK_IMPORTED_MODULE_1__[\"default\"].stringify(search),\n replace\n });\n //Флаг успешного перехода\n return true;\n }\n //Переход не состоялся\n else return false;\n };\n\n //Переход к домашней страничке\n const navigateRoot = state => navigateTo({\n path: getRootLocation(),\n state\n });\n\n //Переход к панели\n const navigatePanel = (panel, state) => {\n if (panel) {\n let path = getRootLocation();\n path = !path.endsWith(\"/\") && !panel.url.startsWith(\"/\") ? `${path}/${panel.url}` : `${path}${panel.url}`;\n navigateTo({\n path,\n state\n });\n } else return false;\n };\n\n //Переход к панели по наименованию\n const navigatePanelByName = (name, state) => navigatePanel(findPanelByName(name), state);\n\n //Переход к произвольному адресу\n const navigateURL = url => {\n window.open(url, \"_self\");\n };\n\n //Вернём компонент провайдера\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(NavigationCtx.Provider, {\n value: {\n getNavigationSearch,\n isNavigationSearch,\n getNavigationState,\n isNavigationState,\n refresh,\n navigateTo,\n navigateBack,\n navigateRoot,\n navigatePanel,\n navigatePanelByName,\n navigateURL\n }\n }, children);\n};\n\n//Контроль свойств - Провайдер контекста навигации\nNavigationContext.propTypes = {\n children: prop_types__WEBPACK_IMPORTED_MODULE_4___default().oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_4___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_4___default().node)), (prop_types__WEBPACK_IMPORTED_MODULE_4___default().node)])\n};\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/context/navigation.js?"); /***/ }), @@ -3249,7 +3359,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 */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var fast_xml_parser__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! fast-xml-parser */ \"./node_modules/fast-xml-parser/src/fxp.js\");\n/* harmony import */ var fast_xml_parser__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(fast_xml_parser__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! dayjs */ \"./node_modules/dayjs/dayjs.min.js\");\n/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(dayjs__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _app_config__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../app.config */ \"./app.config.js\");\n/*\r\n Парус 8 - Панели мониторинга\r\n Ядро: Клиент для взаимодействия с сервером приложений \"Парус 8 Онлайн\"\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Конвертация XML в JSON и JSON в XML\n //Работа с датами\n //Настройки приложения\n\n//---------\n//Константы\n//---------\n\n//Коды функций сервера\nconst SRV_FN_CODE_EXEC_STORED = \"EXEC_STORED\"; //Код функции сервера \"Запуск хранимой процедуры\"\n\n//Типы данных сервера\nconst SERV_DATA_TYPE_STR = \"STR\"; //Тип данных \"строка\"\nconst SERV_DATA_TYPE_NUMB = \"NUMB\"; //Тип данных \"число\"\nconst SERV_DATA_TYPE_DATE = \"DATE\"; //Тип данных \"дата\"\nconst SERV_DATA_TYPE_CLOB = \"CLOB\"; //Тип данных \"текст\"\n\n//Состояния ответов сервера\nconst RESP_STATUS_OK = \"OK\"; //Успех\nconst RESP_STATUS_ERR = \"ERR\"; //Ошибка\n\n//Типовые ошибки клиента\nconst ERR_APPSERVER = \"Ошибка сервера приложений\"; //Общая ошибка клиента\nconst ERR_UNEXPECTED = \"Неожиданный ответ сервера\"; //Неожиданный ответ сервера\nconst ERR_NETWORK = \"Ошибка соединения с сервером\"; //Ошибка сети\nconst ERR_UNAUTH = \"Сеанс завершен. Пройдите аутентификацию повторно.\"; //Ошибка аутентификации\n\n//Типовые пути конвертации в массив (при переводе XML -> JSON)\nconst XML_ALWAYS_ARRAY_PATHS = [\"XRESPOND.XPAYLOAD.XOUT_ARGUMENTS\", \"XRESPOND.XPAYLOAD.XROWS\", \"XRESPOND.XPAYLOAD.XCOLUMNS_DEF\", \"XRESPOND.XPAYLOAD.XCOLUMNS_DEF.values\", \"XRESPOND.XPAYLOAD.XGROUPS\", \"XRESPOND.XPAYLOAD.XGANTT_DEF.taskAttributes\", \"XRESPOND.XPAYLOAD.XGANTT_DEF.taskColors\", \"XRESPOND.XPAYLOAD.XGANTT_TASKS\", \"XRESPOND.XPAYLOAD.XGANTT_TASKS.dependencies\", \"XRESPOND.XPAYLOAD.XCHART.labels\", \"XRESPOND.XPAYLOAD.XCHART.datasets\", \"XRESPOND.XPAYLOAD.XCHART.datasets.data\", \"XRESPOND.XPAYLOAD.XCHART.datasets.items\"];\n\n//Типовой постфикс тега для массива (при переводе XML -> JSON)\nconst XML_ALWAYS_ARRAY_POSTFIX = \"__SYSTEM__ARRAY__\";\n\n//-----------\n//Тело модуля\n//-----------\n\n//Определение типа данных значения аргумента\nconst getServerDataType = value => {\n let res = SERV_DATA_TYPE_STR;\n if (typeof value == \"number\") res = SERV_DATA_TYPE_NUMB;\n if (value instanceof Date) res = SERV_DATA_TYPE_DATE;\n return res;\n};\n\n//Формирование стандартного ответа - ошибка\nconst makeRespErr = ({\n message\n}) => ({\n SSTATUS: RESP_STATUS_ERR,\n SMESSAGE: message\n});\n\n//Разбор XML\nconst parseXML = (xmlDoc, isArray, transformTagName, tagValueProcessor, attributeValueProcessor) => {\n return new Promise((resolve, reject) => {\n try {\n let opts = {\n ignoreDeclaration: true,\n ignoreAttributes: false,\n parseAttributeValue: true,\n attributeNamePrefix: \"\"\n };\n if (isArray) opts.isArray = isArray;\n if (transformTagName) opts.transformTagName = transformTagName;\n if (tagValueProcessor) opts.tagValueProcessor = tagValueProcessor;\n if (attributeValueProcessor) opts.attributeValueProcessor = attributeValueProcessor;\n const parser = new fast_xml_parser__WEBPACK_IMPORTED_MODULE_0__.XMLParser(opts);\n resolve(parser.parse(xmlDoc));\n } catch (e) {\n reject(e);\n }\n });\n};\n\n//Формирование XML\nconst buildXML = jsonObj => {\n return new Promise((resolve, reject) => {\n try {\n const builder = new fast_xml_parser__WEBPACK_IMPORTED_MODULE_0__.XMLBuilder({\n ignoreAttributes: false,\n oneListGroup: true\n });\n resolve(builder.build(jsonObj));\n } catch (e) {\n reject(e);\n }\n });\n};\n\n//Проверка ответа на наличие ошибки\nconst isRespErr = resp => resp && resp?.SSTATUS && resp?.SSTATUS === RESP_STATUS_ERR;\n\n//Извлечение ошибки из ответа\nconst getRespErrMessage = resp => isRespErr(resp) && resp.SMESSAGE ? resp.SMESSAGE : \"\";\n\n//Извлечение полезного содержимого из ответа\nconst getRespPayload = resp => resp && resp.XPAYLOAD ? resp.XPAYLOAD : null;\n\n//Исполнение действия на сервере\nconst executeAction = async ({\n serverURL,\n action,\n payload = {},\n isArray,\n transformTagName,\n tagValueProcessor,\n attributeValueProcessor\n} = {}) => {\n console.log(`EXECUTING ${action ? action : \"\"} ON ${serverURL} WITH PAYLOAD:`);\n console.log(payload ? payload : \"NO PAYLOAD\");\n let response = null;\n let responseJSON = null;\n try {\n //Сформируем типовой запрос\n const rqBody = {\n XREQUEST: {\n SACTION: action,\n XPAYLOAD: payload\n }\n };\n //Выполняем запрос\n response = await fetch(serverURL, {\n method: \"POST\",\n body: await buildXML(rqBody),\n headers: {\n \"content-type\": \"application/xml\"\n }\n });\n } catch (e) {\n //Сетевая ошибка\n throw new Error(`${ERR_NETWORK}: ${e.message}`);\n }\n //Проверим на наличие ошибок HTTP - если есть вернём их\n if (!response.ok) throw new Error(`${ERR_APPSERVER}: ${response.statusText}`);\n //Проверим на наличие редиректа к аутентификации (возникает, если сеанс окончен)\n if (response.redirected && response.url.toLowerCase().includes(\"auth?returnurl\")) throw new Error(ERR_UNAUTH);\n //Ошибок нет - пробуем разобрать\n try {\n let responseText = await response.text();\n //console.log(\"SERVER RESPONSE TEXT:\");\n //console.log(responseText);\n responseJSON = await parseXML(responseText, isArray, transformTagName, tagValueProcessor, attributeValueProcessor);\n } catch (e) {\n //Что-то пошло не так при парсинге\n throw new Error(ERR_UNEXPECTED);\n }\n //Разобрали, проверяем структуру ответа на обязательные атрибуты\n if (!responseJSON?.XRESPOND || !responseJSON?.XRESPOND?.SSTATUS || ![RESP_STATUS_ERR, RESP_STATUS_OK].includes(responseJSON?.XRESPOND?.SSTATUS) || responseJSON?.XRESPOND?.SSTATUS === RESP_STATUS_OK && responseJSON?.XRESPOND?.XPAYLOAD == undefined || responseJSON?.XRESPOND?.SSTATUS === RESP_STATUS_ERR && responseJSON?.XRESPOND?.SMESSAGE == undefined) throw new Error(ERR_UNEXPECTED);\n //Всё хорошо - возвращаем (без корня, он не нужен)\n console.log(\"SERVER RESPONSE JSON:\");\n console.log(responseJSON.XRESPOND);\n return responseJSON.XRESPOND;\n};\n\n//Запуск хранимой процедуры\nconst executeStored = async ({\n stored,\n args,\n respArg,\n isArray,\n tagValueProcessor,\n attributeValueProcessor,\n throwError = true,\n spreadOutArguments = false\n} = {}) => {\n let res = null;\n try {\n let serverArgs = [];\n if (args) for (const arg in args) {\n let typedArg = false;\n if (args[arg] && Object.hasOwn(args[arg], \"VALUE\") && Object.hasOwn(args[arg], \"SDATA_TYPE\") && args[arg]?.SDATA_TYPE) typedArg = true;\n const dataType = typedArg ? args[arg].SDATA_TYPE : getServerDataType(args[arg]);\n let value = typedArg ? args[arg].VALUE : args[arg];\n if (dataType === SERV_DATA_TYPE_DATE) value = dayjs__WEBPACK_IMPORTED_MODULE_1___default()(value).format(\"YYYY-MM-DDTHH:mm:ss\");\n serverArgs.push({\n XARGUMENT: {\n SNAME: arg,\n VALUE: value,\n SDATA_TYPE: dataType\n }\n });\n }\n res = await executeAction({\n serverURL: `${_app_config__WEBPACK_IMPORTED_MODULE_2__[\"default\"].SYSTEM.SERVER}${!_app_config__WEBPACK_IMPORTED_MODULE_2__[\"default\"].SYSTEM.SERVER.endsWith(\"/\") ? \"/\" : \"\"}Process`,\n action: SRV_FN_CODE_EXEC_STORED,\n payload: {\n SSTORED: stored,\n XARGUMENTS: serverArgs,\n SRESP_ARG: respArg\n },\n isArray: (name, jPath) => XML_ALWAYS_ARRAY_PATHS.indexOf(jPath) !== -1 || jPath.endsWith(XML_ALWAYS_ARRAY_POSTFIX) || (isArray ? isArray(name, jPath) : false),\n tagValueProcessor,\n attributeValueProcessor\n });\n if (spreadOutArguments === true && Array.isArray(res?.XPAYLOAD?.XOUT_ARGUMENTS)) {\n let spreadArgs = {};\n for (let arg of res.XPAYLOAD.XOUT_ARGUMENTS) spreadArgs[arg.SNAME] = arg.VALUE;\n delete res.XPAYLOAD.XOUT_ARGUMENTS;\n res.XPAYLOAD = {\n ...res.XPAYLOAD,\n ...spreadArgs\n };\n }\n } catch (e) {\n if (throwError) throw e;else return makeRespErr({\n message: e.message\n });\n }\n if (res.SSTATUS === RESP_STATUS_ERR && throwError === true) throw new Error(res.SMESSAGE);\n return res;\n};\n\n//Чтение конфигурации плагина\nconst getConfig = async ({\n throwError = true\n} = {}) => {\n let res = null;\n try {\n res = await executeAction({\n serverURL: `${_app_config__WEBPACK_IMPORTED_MODULE_2__[\"default\"].SYSTEM.SERVER}${!_app_config__WEBPACK_IMPORTED_MODULE_2__[\"default\"].SYSTEM.SERVER.endsWith(\"/\") ? \"/\" : \"\"}GetConfig`\n });\n } catch (e) {\n if (throwError) throw e;else return makeRespErr({\n message: e.message\n });\n }\n if (res.SSTATUS === RESP_STATUS_ERR && throwError === true) throw new Error(res.SMESSAGE);\n return res;\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n SERV_DATA_TYPE_STR,\n SERV_DATA_TYPE_NUMB,\n SERV_DATA_TYPE_DATE,\n SERV_DATA_TYPE_CLOB,\n isRespErr,\n getRespErrMessage,\n getRespPayload,\n executeStored,\n getConfig\n});\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/core/client.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var fast_xml_parser__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! fast-xml-parser */ \"./node_modules/fast-xml-parser/src/fxp.js\");\n/* harmony import */ var fast_xml_parser__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(fast_xml_parser__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! dayjs */ \"./node_modules/dayjs/dayjs.min.js\");\n/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(dayjs__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _app_config__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../app.config */ \"./app.config.js\");\n/*\n Парус 8 - Панели мониторинга\n Ядро: Клиент для взаимодействия с сервером приложений \"Парус 8 Онлайн\"\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Конвертация XML в JSON и JSON в XML\n //Работа с датами\n //Настройки приложения\n\n//---------\n//Константы\n//---------\n\n//Коды функций сервера\nconst SRV_FN_CODE_EXEC_STORED = \"EXEC_STORED\"; //Код функции сервера \"Запуск хранимой процедуры\"\n\n//Типы данных сервера\nconst SERV_DATA_TYPE_STR = \"STR\"; //Тип данных \"строка\"\nconst SERV_DATA_TYPE_NUMB = \"NUMB\"; //Тип данных \"число\"\nconst SERV_DATA_TYPE_DATE = \"DATE\"; //Тип данных \"дата\"\nconst SERV_DATA_TYPE_CLOB = \"CLOB\"; //Тип данных \"текст\"\n\n//Состояния ответов сервера\nconst RESP_STATUS_OK = \"OK\"; //Успех\nconst RESP_STATUS_ERR = \"ERR\"; //Ошибка\n\n//Типовые ошибки клиента\nconst ERR_APPSERVER = \"Ошибка сервера приложений\"; //Общая ошибка клиента\nconst ERR_UNEXPECTED = \"Неожиданный ответ сервера\"; //Неожиданный ответ сервера\nconst ERR_NETWORK = \"Ошибка соединения с сервером\"; //Ошибка сети\n\n//Типовые пути конвертации в массив (при переводе XML -> JSON)\nconst XML_ALWAYS_ARRAY_PATHS = [\"XRESPOND.XPAYLOAD.XOUT_ARGUMENTS\", \"XRESPOND.XPAYLOAD.XROWS\", \"XRESPOND.XPAYLOAD.XCOLUMNS_DEF\", \"XRESPOND.XPAYLOAD.XCOLUMNS_DEF.values\", \"XRESPOND.XPAYLOAD.XGANTT_DEF.taskAttributes\", \"XRESPOND.XPAYLOAD.XGANTT_DEF.taskColors\", \"XRESPOND.XPAYLOAD.XGANTT_TASKS\", \"XRESPOND.XPAYLOAD.XGANTT_TASKS.dependencies\", \"XRESPOND.XPAYLOAD.XCHART.labels\", \"XRESPOND.XPAYLOAD.XCHART.datasets\", \"XRESPOND.XPAYLOAD.XCHART.datasets.data\", \"XRESPOND.XPAYLOAD.XCHART.datasets.items\"];\n\n//Типовой постфикс тега для массива (при переводе XML -> JSON)\nconst XML_ALWAYS_ARRAY_POSTFIX = \"__SYSTEM__ARRAY__\";\n\n//-----------\n//Тело модуля\n//-----------\n\n//Определение типа данных значения аргумента\nconst getServerDataType = value => {\n let res = SERV_DATA_TYPE_STR;\n if (typeof value == \"number\") res = SERV_DATA_TYPE_NUMB;\n if (value instanceof Date) res = SERV_DATA_TYPE_DATE;\n return res;\n};\n\n//Формирование стандартного ответа - ошибка\nconst makeRespErr = ({\n message\n}) => ({\n SSTATUS: RESP_STATUS_ERR,\n SMESSAGE: message\n});\n\n//Разбор XML\nconst parseXML = (xmlDoc, isArray, transformTagName, tagValueProcessor, attributeValueProcessor) => {\n return new Promise((resolve, reject) => {\n try {\n let opts = {\n ignoreDeclaration: true,\n ignoreAttributes: false,\n parseAttributeValue: true,\n attributeNamePrefix: \"\"\n };\n if (isArray) opts.isArray = isArray;\n if (transformTagName) opts.transformTagName = transformTagName;\n if (tagValueProcessor) opts.tagValueProcessor = tagValueProcessor;\n if (attributeValueProcessor) opts.attributeValueProcessor = attributeValueProcessor;\n const parser = new fast_xml_parser__WEBPACK_IMPORTED_MODULE_0__.XMLParser(opts);\n resolve(parser.parse(xmlDoc));\n } catch (e) {\n reject(e);\n }\n });\n};\n\n//Формирование XML\nconst buildXML = jsonObj => {\n return new Promise((resolve, reject) => {\n try {\n const builder = new fast_xml_parser__WEBPACK_IMPORTED_MODULE_0__.XMLBuilder({\n ignoreAttributes: false,\n oneListGroup: true\n });\n resolve(builder.build(jsonObj));\n } catch (e) {\n reject(e);\n }\n });\n};\n\n//Проверка ответа на наличие ошибки\nconst isRespErr = resp => resp && resp?.SSTATUS && resp?.SSTATUS === RESP_STATUS_ERR;\n\n//Извлечение ошибки из ответа\nconst getRespErrMessage = resp => isRespErr(resp) && resp.SMESSAGE ? resp.SMESSAGE : \"\";\n\n//Извлечение полезного содержимого из ответа\nconst getRespPayload = resp => resp && resp.XPAYLOAD ? resp.XPAYLOAD : null;\n\n//Исполнение действия на сервере\nconst executeAction = async ({\n serverURL,\n action,\n payload = {},\n isArray,\n transformTagName,\n tagValueProcessor,\n attributeValueProcessor\n} = {}) => {\n console.log(`EXECUTING ${action ? action : \"\"} ON ${serverURL} WITH PAYLOAD:`);\n console.log(payload ? payload : \"NO PAYLOAD\");\n let response = null;\n let responseJSON = null;\n try {\n //Сформируем типовой запрос\n const rqBody = {\n XREQUEST: {\n SACTION: action,\n XPAYLOAD: payload\n }\n };\n //Выполняем запрос\n response = await fetch(serverURL, {\n method: \"POST\",\n body: await buildXML(rqBody),\n headers: {\n \"content-type\": \"application/xml\"\n }\n });\n } catch (e) {\n //Сетевая ошибка\n throw new Error(`${ERR_NETWORK}: ${e.message}`);\n }\n //Проверим на наличие ошибок HTTP - если есть вернём их\n if (!response.ok) throw new Error(`${ERR_APPSERVER}: ${response.statusText}`);\n //Ошибок нет - пробуем разобрать\n try {\n let responseText = await response.text();\n //console.log(\"SERVER RESPONSE TEXT:\");\n //console.log(responseText);\n responseJSON = await parseXML(responseText, isArray, transformTagName, tagValueProcessor, attributeValueProcessor);\n } catch (e) {\n //Что-то пошло не так при парсинге\n throw new Error(ERR_UNEXPECTED);\n }\n //Разобрали, проверяем структуру ответа на обязательные атрибуты\n if (!responseJSON?.XRESPOND || !responseJSON?.XRESPOND?.SSTATUS || ![RESP_STATUS_ERR, RESP_STATUS_OK].includes(responseJSON?.XRESPOND?.SSTATUS) || responseJSON?.XRESPOND?.SSTATUS === RESP_STATUS_OK && responseJSON?.XRESPOND?.XPAYLOAD == undefined || responseJSON?.XRESPOND?.SSTATUS === RESP_STATUS_ERR && responseJSON?.XRESPOND?.SMESSAGE == undefined) throw new Error(ERR_UNEXPECTED);\n //Всё хорошо - возвращаем (без корня, он не нужен)\n console.log(\"SERVER RESPONSE JSON:\");\n console.log(responseJSON.XRESPOND);\n return responseJSON.XRESPOND;\n};\n\n//Запуск хранимой процедуры\nconst executeStored = async ({\n stored,\n args,\n respArg,\n isArray,\n tagValueProcessor,\n attributeValueProcessor,\n throwError = true,\n spreadOutArguments = false\n} = {}) => {\n let res = null;\n try {\n let serverArgs = [];\n if (args) for (const arg in args) {\n let typedArg = false;\n if (args[arg] && Object.hasOwn(args[arg], \"VALUE\") && Object.hasOwn(args[arg], \"SDATA_TYPE\") && args[arg]?.SDATA_TYPE) typedArg = true;\n const dataType = typedArg ? args[arg].SDATA_TYPE : getServerDataType(args[arg]);\n let value = typedArg ? args[arg].VALUE : args[arg];\n if (dataType === SERV_DATA_TYPE_DATE) value = dayjs__WEBPACK_IMPORTED_MODULE_1___default()(value).format(\"YYYY-MM-DDTHH:mm:ss\");\n serverArgs.push({\n XARGUMENT: {\n SNAME: arg,\n VALUE: value,\n SDATA_TYPE: dataType\n }\n });\n }\n res = await executeAction({\n serverURL: `${_app_config__WEBPACK_IMPORTED_MODULE_2__[\"default\"].SYSTEM.SERVER}${!_app_config__WEBPACK_IMPORTED_MODULE_2__[\"default\"].SYSTEM.SERVER.endsWith(\"/\") ? \"/\" : \"\"}Process`,\n action: SRV_FN_CODE_EXEC_STORED,\n payload: {\n SSTORED: stored,\n XARGUMENTS: serverArgs,\n SRESP_ARG: respArg\n },\n isArray: (name, jPath) => XML_ALWAYS_ARRAY_PATHS.indexOf(jPath) !== -1 || jPath.endsWith(XML_ALWAYS_ARRAY_POSTFIX) || (isArray ? isArray(name, jPath) : false),\n tagValueProcessor,\n attributeValueProcessor\n });\n if (spreadOutArguments === true && Array.isArray(res?.XPAYLOAD?.XOUT_ARGUMENTS)) {\n let spreadArgs = {};\n for (let arg of res.XPAYLOAD.XOUT_ARGUMENTS) spreadArgs[arg.SNAME] = arg.VALUE;\n delete res.XPAYLOAD.XOUT_ARGUMENTS;\n res.XPAYLOAD = {\n ...res.XPAYLOAD,\n ...spreadArgs\n };\n }\n } catch (e) {\n if (throwError) throw e;else return makeRespErr({\n message: e.message\n });\n }\n if (res.SSTATUS === RESP_STATUS_ERR && throwError === true) throw new Error(res.SMESSAGE);\n return res;\n};\n\n//Чтение конфигурации плагина\nconst getConfig = async ({\n throwError = true\n} = {}) => {\n let res = null;\n try {\n res = await executeAction({\n serverURL: `${_app_config__WEBPACK_IMPORTED_MODULE_2__[\"default\"].SYSTEM.SERVER}${!_app_config__WEBPACK_IMPORTED_MODULE_2__[\"default\"].SYSTEM.SERVER.endsWith(\"/\") ? \"/\" : \"\"}GetConfig`\n });\n } catch (e) {\n if (throwError) throw e;else return makeRespErr({\n message: e.message\n });\n }\n if (res.SSTATUS === RESP_STATUS_ERR && throwError === true) throw new Error(res.SMESSAGE);\n return res;\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n SERV_DATA_TYPE_STR,\n SERV_DATA_TYPE_NUMB,\n SERV_DATA_TYPE_DATE,\n SERV_DATA_TYPE_CLOB,\n isRespErr,\n getRespErrMessage,\n getRespPayload,\n executeStored,\n getConfig\n});\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/core/client.js?"); /***/ }), @@ -3260,7 +3370,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ deepCopyObject: () => (/* binding */ deepCopyObject),\n/* harmony export */ formatDateJSONDateOnly: () => (/* binding */ formatDateJSONDateOnly),\n/* harmony export */ formatDateRF: () => (/* binding */ formatDateRF),\n/* harmony export */ formatNumberRFCurrency: () => (/* binding */ formatNumberRFCurrency),\n/* harmony export */ genGUID: () => (/* binding */ genGUID),\n/* harmony export */ getDisplaySize: () => (/* binding */ getDisplaySize),\n/* harmony export */ hasValue: () => (/* binding */ hasValue),\n/* harmony export */ object2Base64XML: () => (/* binding */ object2Base64XML)\n/* harmony export */ });\n/* harmony import */ var fast_xml_parser__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! fast-xml-parser */ \"./node_modules/fast-xml-parser/src/fxp.js\");\n/* harmony import */ var fast_xml_parser__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(fast_xml_parser__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! dayjs */ \"./node_modules/dayjs/dayjs.min.js\");\n/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(dayjs__WEBPACK_IMPORTED_MODULE_1__);\n/*\r\n Парус 8 - Панели мониторинга\r\n Ядро: Вспомогательные функции\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Конвертация XML в JSON и JSON в XML\n //Работа с датами\n\n//---------\n//Константы\n//---------\n\n//Коды типовых размеров экранов\nconst DISPLAY_SIZE_CODE = {\n XS: \"XS\",\n //eXtra Small - супер маленький экран\n SM: \"SM\",\n //Small - маленький экран\n MD: \"MD\",\n //Middle - средний экран\n LG: \"LG\" //Large - большой экран\n};\n\n//Типовые размеры экранов\nconst DISPLAY_SIZE = {\n [DISPLAY_SIZE_CODE.XS]: {\n WIDTH_FROM: 0,\n WIDTH_TO: 767\n },\n //eXtra Small - супер маленький экран < 768px\n [DISPLAY_SIZE_CODE.SM]: {\n WIDTH_FROM: 768,\n WIDTH_TO: 991\n },\n //Small - маленький экран >= 768px\n [DISPLAY_SIZE_CODE.MD]: {\n WIDTH_FROM: 992,\n WIDTH_TO: 1199\n },\n //Middle - средний экран >= 992px\n [DISPLAY_SIZE_CODE.LG]: {\n WIDTH_FROM: 1200,\n WIDTH_TO: 1000000\n } //Large - большой экран >= 1200px\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Проверка существования значения\nconst hasValue = value => typeof value !== \"undefined\" && value !== null && value !== \"\";\n\n//Проверка типа устройства\nconst getDisplaySize = () => {\n let res = DISPLAY_SIZE_CODE.MD;\n Object.keys(DISPLAY_SIZE).map(dspl => {\n if (window.innerWidth >= DISPLAY_SIZE[dspl].WIDTH_FROM && window.innerWidth <= DISPLAY_SIZE[dspl].WIDTH_TO) res = dspl;\n });\n return res;\n};\n\n//Глубокое копирование объекта\nconst deepCopyObject = obj => JSON.parse(JSON.stringify(obj));\n\n//Конвертация объекта в Base64 XML\nconst object2Base64XML = (obj, builderOptions) => {\n const builder = new fast_xml_parser__WEBPACK_IMPORTED_MODULE_0__.XMLBuilder(builderOptions);\n //onOrderChanged({ orders: btoa(ordersBuilder.build(newOrders)) });\n return btoa(unescape(encodeURIComponent(builder.build(obj))));\n};\n\n//Форматирование даты в формат РФ\nconst formatDateRF = value => value ? dayjs__WEBPACK_IMPORTED_MODULE_1___default()(value).format(\"DD.MM.YYYY\") : null;\n\n//Форматирование даты в формат JSON (только дата, без времени)\nconst formatDateJSONDateOnly = value => value ? dayjs__WEBPACK_IMPORTED_MODULE_1___default()(value).format(\"YYYY-MM-DD\") : null;\n\n//Форматирование числа в \"Денежном\" формате РФ\nconst formatNumberRFCurrency = value => hasValue(value) ? new Intl.NumberFormat(\"ru-RU\", {\n minimumFractionDigits: 2\n}).format(value) : null;\n\n//Формирование уникального идентификатора\nconst genGUID = () => \"10000000-1000-4000-8000-100000000000\".replace(/[018]/g, c => (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16));\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/core/utils.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ deepCopyObject: () => (/* binding */ deepCopyObject),\n/* harmony export */ formatDateJSONDateOnly: () => (/* binding */ formatDateJSONDateOnly),\n/* harmony export */ formatDateRF: () => (/* binding */ formatDateRF),\n/* harmony export */ formatNumberRFCurrency: () => (/* binding */ formatNumberRFCurrency),\n/* harmony export */ genGUID: () => (/* binding */ genGUID),\n/* harmony export */ getDisplaySize: () => (/* binding */ getDisplaySize),\n/* harmony export */ hasValue: () => (/* binding */ hasValue),\n/* harmony export */ object2Base64XML: () => (/* binding */ object2Base64XML)\n/* harmony export */ });\n/* harmony import */ var fast_xml_parser__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! fast-xml-parser */ \"./node_modules/fast-xml-parser/src/fxp.js\");\n/* harmony import */ var fast_xml_parser__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(fast_xml_parser__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! dayjs */ \"./node_modules/dayjs/dayjs.min.js\");\n/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(dayjs__WEBPACK_IMPORTED_MODULE_1__);\n/*\n Парус 8 - Панели мониторинга\n Ядро: Вспомогательные функции\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Конвертация XML в JSON и JSON в XML\n //Работа с датами\n\n//---------\n//Константы\n//---------\n\n//Коды типовых размеров экранов\nconst DISPLAY_SIZE_CODE = {\n XS: \"XS\",\n //eXtra Small - супер маленький экран\n SM: \"SM\",\n //Small - маленький экран\n MD: \"MD\",\n //Middle - средний экран\n LG: \"LG\" //Large - большой экран\n};\n\n//Типовые размеры экранов\nconst DISPLAY_SIZE = {\n [DISPLAY_SIZE_CODE.XS]: {\n WIDTH_FROM: 0,\n WIDTH_TO: 767\n },\n //eXtra Small - супер маленький экран < 768px\n [DISPLAY_SIZE_CODE.SM]: {\n WIDTH_FROM: 768,\n WIDTH_TO: 991\n },\n //Small - маленький экран >= 768px\n [DISPLAY_SIZE_CODE.MD]: {\n WIDTH_FROM: 992,\n WIDTH_TO: 1199\n },\n //Middle - средний экран >= 992px\n [DISPLAY_SIZE_CODE.LG]: {\n WIDTH_FROM: 1200,\n WIDTH_TO: 1000000\n } //Large - большой экран >= 1200px\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Проверка существования значения\nconst hasValue = value => typeof value !== \"undefined\" && value !== null && value !== \"\";\n\n//Проверка типа устройства\nconst getDisplaySize = () => {\n let res = DISPLAY_SIZE_CODE.MD;\n Object.keys(DISPLAY_SIZE).map(dspl => {\n if (window.innerWidth >= DISPLAY_SIZE[dspl].WIDTH_FROM && window.innerWidth <= DISPLAY_SIZE[dspl].WIDTH_TO) res = dspl;\n });\n return res;\n};\n\n//Глубокое копирование объекта\nconst deepCopyObject = obj => JSON.parse(JSON.stringify(obj));\n\n//Конвертация объекта в Base64 XML\nconst object2Base64XML = (obj, builderOptions) => {\n const builder = new fast_xml_parser__WEBPACK_IMPORTED_MODULE_0__.XMLBuilder(builderOptions);\n //onOrderChanged({ orders: btoa(ordersBuilder.build(newOrders)) });\n return btoa(unescape(encodeURIComponent(builder.build(obj))));\n};\n\n//Форматирование даты в формат РФ\nconst formatDateRF = value => value ? dayjs__WEBPACK_IMPORTED_MODULE_1___default()(value).format(\"DD.MM.YYYY\") : null;\n\n//Форматирование даты в формат JSON (только дата, без времени)\nconst formatDateJSONDateOnly = value => value ? dayjs__WEBPACK_IMPORTED_MODULE_1___default()(value).format(\"YYYY-MM-DD\") : null;\n\n//Форматирование числа в \"Денежном\" формате РФ\nconst formatNumberRFCurrency = value => hasValue(value) ? new Intl.NumberFormat(\"ru-RU\", {\n minimumFractionDigits: 2\n}).format(value) : null;\n\n//Формирование уникального идентификатора\nconst genGUID = () => \"10000000-1000-4000-8000-100000000000\".replace(/[018]/g, c => (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16));\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/core/utils.js?"); /***/ }), @@ -3271,7 +3381,29 @@ 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 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 react_dom_client__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom/client */ \"./node_modules/react-dom/client.js\");\n/* harmony import */ var _root__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./root */ \"./app/root.js\");\n/*\r\n Парус 8 - Панели мониторинга\r\n Точка входа в приложение\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //React\n //Работа с DOM в React\n //Корневой компонент приложения\n\n//-----------\n//Точка входа\n//-----------\n\nconst root = (0,react_dom_client__WEBPACK_IMPORTED_MODULE_1__.createRoot)(document.getElementById(\"app-content\"));\nroot.render( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_root__WEBPACK_IMPORTED_MODULE_2__[\"default\"], null));\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/index.js?"); +eval("__webpack_require__.r(__webpack_exports__);\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 react_dom_client__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom/client */ \"./node_modules/react-dom/client.js\");\n/* harmony import */ var _root__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./root */ \"./app/root.js\");\n/*\n Парус 8 - Панели мониторинга\n Точка входа в приложение\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //React\n //Работа с DOM в React\n //Корневой компонент приложения\n\n//-----------\n//Точка входа\n//-----------\n\nconst root = (0,react_dom_client__WEBPACK_IMPORTED_MODULE_1__.createRoot)(document.getElementById(\"app-content\"));\nroot.render( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_root__WEBPACK_IMPORTED_MODULE_2__[\"default\"], null));\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/index.js?"); + +/***/ }), + +/***/ "./app/panels/alex/alex.js": +/*!*********************************!*\ + !*** ./app/panels/alex/alex.js ***! + \*********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Alex: () => (/* binding */ Alex)\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 _app_text__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/*\n Парус 8 - Панели мониторинга - ПУП - Работы проектов\n Панель мониторинга: Описание макета (пользовательская инструкция)\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Текстовые ресурсы\n //Контекст приложения\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n IMG_CONT: {\n textAlign: \"center\",\n padding: \"10px\"\n },\n IMG: {\n maxWidth: \"100%\",\n height: \"auto\"\n },\n PRGF_TABLE: {\n paddingTop: \"20px\",\n paddingBottom: \"20px\",\n display: \"flex\",\n justifyContent: \"center\"\n },\n TABLE: {\n width: \"80%\"\n },\n TABLE_TITLE: {\n backgroundColor: \"lightgray\"\n },\n TABLE_SUBTITLE: {\n textAlign: \"center\",\n backgroundColor: \"#f3eded\",\n fontWeight: \"bold\"\n },\n FAB_BACK: {\n position: \"absolute\",\n right: \"20px\",\n marginTop: \"20px\"\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Корневая панель работ проектов\nconst Alex = () => {\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, \"1234\");\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/alex/alex.js?"); + +/***/ }), + +/***/ "./app/panels/alex/index.js": +/*!**********************************!*\ + !*** ./app/panels/alex/index.js ***! + \**********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ RootClass: () => (/* binding */ RootClass)\n/* harmony export */ });\n/* harmony import */ var _alex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./alex */ \"./app/panels/alex/alex.js\");\n/*\n Парус 8 - Панели мониторинга - ПУП - Работы проектов\n Панель мониторинга: Описание макета (пользовательская инструкция)\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Корневая панель пользовательской инструкции\n\n//----------------\n//Интерфейс модуля\n//----------------\n\nconst RootClass = _alex__WEBPACK_IMPORTED_MODULE_0__.Alex;\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/alex/index.js?"); /***/ }), @@ -3297,25 +3429,135 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), -/***/ "./app/panels/eqs_prfrm/eqs_prfrm.js": -/*!*******************************************!*\ - !*** ./app/panels/eqs_prfrm/eqs_prfrm.js ***! - \*******************************************/ +/***/ "./app/panels/mech_rec_cost_prod_plans/hooks.js": +/*!******************************************************!*\ + !*** ./app/panels/mech_rec_cost_prod_plans/hooks.js ***! + \******************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ EqsPrfrm: () => (/* binding */ EqsPrfrm)\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/*\r\n Парус 8 - Панели мониторинга - ТОиР - Выполнение работ\r\n Панель мониторинга: Корневая панель выполнения работ\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n\n//-----------\n//Тело модуля\n//-----------\n\n//Корневая панель выполнения работ\nconst EqsPrfrm = () => {\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, \"\\u0412\\u044B\\u043F\\u043E\\u043B\\u043D\\u0435\\u043D\\u0438\\u0435 \\u0440\\u0430\\u0431\\u043E\\u0442 \\u0422\\u041E\\u0438\\u0420\");\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/eqs_prfrm/eqs_prfrm.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useFilteredPlans: () => (/* binding */ useFilteredPlans)\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\nconst useFilteredPlans = (plans, filter) => {\n const filteredPlans = react__WEBPACK_IMPORTED_MODULE_0___default().useMemo(() => {\n return plans.filter(project => project.SDOC_INFO.toLowerCase().includes(filter));\n }, [plans, filter]);\n return filteredPlans;\n};\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_cost_prod_plans/hooks.js?"); /***/ }), -/***/ "./app/panels/eqs_prfrm/index.js": -/*!***************************************!*\ - !*** ./app/panels/eqs_prfrm/index.js ***! - \***************************************/ +/***/ "./app/panels/mech_rec_cost_prod_plans/index.js": +/*!******************************************************!*\ + !*** ./app/panels/mech_rec_cost_prod_plans/index.js ***! + \******************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ RootClass: () => (/* binding */ RootClass)\n/* harmony export */ });\n/* harmony import */ var _eqs_prfrm__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./eqs_prfrm */ \"./app/panels/eqs_prfrm/eqs_prfrm.js\");\n/*\r\n Парус 8 - Панели мониторинга - ТОиР - Выполнение работ\r\n Панель мониторинга: Точка входа\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Корневая панель выполнения работ\n\n//----------------\n//Интерфейс модуля\n//----------------\n\nconst RootClass = _eqs_prfrm__WEBPACK_IMPORTED_MODULE_0__.EqsPrfrm;\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/eqs_prfrm/index.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ RootClass: () => (/* binding */ RootClass)\n/* harmony export */ });\n/* harmony import */ var _mech_rec_cost_prod_plans__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./mech_rec_cost_prod_plans */ \"./app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\");\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Производственная программа\r\n Панель мониторинга: Точка входа\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Корневая панель производственной программы\n\n//----------------\n//Интерфейс модуля\n//----------------\n\nconst RootClass = _mech_rec_cost_prod_plans__WEBPACK_IMPORTED_MODULE_0__.MechRecCostProdPlans;\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_cost_prod_plans/index.js?"); + +/***/ }), + +/***/ "./app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans copy.js": +/*!******************************************************************************!*\ + !*** ./app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans copy.js ***! + \******************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ MechRecCostProdPlans: () => (/* binding */ MechRecCostProdPlans)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_13__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/List/List.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemButton/ListItemButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemText/ListItemText.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Fab/Fab.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Drawer/Drawer.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/InputLabel/InputLabel.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Select/Select.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/MenuItem/MenuItem.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _components_p8p_gantt__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../components/p8p_gantt */ \"./app/components/p8p_gantt.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./hooks */ \"./app/panels/mech_rec_cost_prod_plans/hooks.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Производственная программа\r\n Панель мониторинга: Корневая панель производственной программы\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Контекст взаимодействия с сервером\n //Контекст сообщений\n //Контекст приложения\n //Подключение компонентов к настройкам приложения\n //Диаграмма Ганта\n //Вспомогательные функции\n //Вспомогательные хуки\n\n//---------\n//Константы\n//---------\n\n//Высота диаграммы Ганта\nconst GANTT_HEIGHT = \"650px\";\n\n//Ширина диаграммы Ганта\nconst GANTT_WIDTH = \"98vw\";\n\n//Стили\nconst STYLES = {\n PROJECTS_FINDER: {\n marginTop: \"10px\",\n marginLeft: \"10px\",\n width: \"93%\"\n },\n PROJECTS_LIST_ITEM_PRIMARY: {\n wordWrap: \"break-word\"\n },\n PROJECTS_LIST_ITEM_SECONDARY: {\n wordWrap: \"break-word\",\n fontSize: \"0.5rem\",\n textTransform: \"uppercase\"\n },\n PROJECTS_LIST_ITEM_SECONDARY_NOJOBS: {\n color: \"red\"\n },\n PROJECTS_LIST_ITEM_SECONDARY_NOEDIT: {\n color: \"gray\"\n },\n PROJECTS_LIST_ITEM_SECONDARY_CHANGED: {\n color: \"green\"\n },\n PROJECTS_BUTTON: {\n position: \"absolute\"\n },\n PROJECTS_DRAWER: {\n minWidth: \"250px\",\n display: \"inline-block\",\n flexShrink: 0,\n [`& .MuiDrawer-paper`]: {\n minWidth: \"250px\",\n display: \"inline-block\",\n boxSizing: \"border-box\"\n }\n },\n GANTT_CONTAINER: {\n height: GANTT_HEIGHT,\n width: GANTT_WIDTH\n },\n GANTT_TITLE: {\n paddingLeft: \"100px\",\n paddingRight: \"120px\"\n },\n PERIODS_BUTTON: {\n position: \"absolute\",\n right: \"20px\"\n },\n PERIODS_DRAWER: {\n width: \"1000px\",\n flexShrink: 0,\n [`& .MuiDrawer-paper`]: {\n width: \"1000px\",\n boxSizing: \"border-box\"\n }\n }\n};\n\n//Список проектов\nconst ProjectsList = ({\n plans = [],\n selectedPlan,\n filter,\n setFilter,\n onClick\n} = {}) => {\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n sx: STYLES.PROJECTS_FINDER,\n name: \"planFilter\",\n label: \"\\u041F\\u043B\\u0430\\u043D\",\n value: filter,\n variant: \"standard\",\n fullWidth: true,\n onChange: event => {\n setFilter(event.target.value);\n }\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, plans.map(p => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n key: p.NRN,\n selected: p.NRN === selectedPlan,\n onClick: () => onClick ? onClick(p) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n primary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n sx: STYLES.PROJECTS_LIST_ITEM_PRIMARY\n }, p.SDOC_INFO),\n secondary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n sx: {\n ...STYLES.PROJECTS_LIST_ITEM_SECONDARY,\n ...(p.NJOBS == 0 ? STYLES.PROJECTS_LIST_ITEM_SECONDARY_NOJOBS : p.NCHANGED == 1 ? STYLES.PROJECTS_LIST_ITEM_SECONDARY_CHANGED : STYLES.PROJECTS_LIST_ITEM_SECONDARY_NOEDIT)\n }\n })\n })))));\n};\n\n//Контроль свойств - Список проектов\nProjectsList.propTypes = {\n plans: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().array),\n selectedPlan: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().number),\n onClick: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().func),\n filter: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().string),\n setFilter: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().func)\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Корневая панель производственной программы\nconst MechRecCostProdPlans = () => {\n //Собственное состояние\n let [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n init: false,\n showPlanList: false,\n plans: [],\n plansLoaded: false,\n selectedPlanSpecsLoaded: false,\n selectedPlan: null,\n selectedPlanMaxLevel: null,\n selectedPlanCurLevel: null,\n selectedPlanGanttDef: {},\n selectedPlanSpecs: []\n });\n const [filter, setFilter] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(\"\");\n const filteredPlans = (0,_hooks__WEBPACK_IMPORTED_MODULE_7__.useFilteredPlans)(state.plans, filter);\n\n //Подключение к контексту приложения\n const {\n pOnlineShowDocument\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_3__[\"ApplicationСtx\"]);\n\n //Подключение к контексту сообщений\n const {\n InlineMsgInfo\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_2__[\"MessagingСtx\"]);\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 initPlans = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (!state.init) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.PRODPLAN_INIT\",\n args: {},\n respArg: \"COUT\"\n });\n setState(pv => ({\n ...pv,\n init: true,\n plans: [...(data?.XFCPRODPLANS || [])],\n plansLoaded: true\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [state.init, executeStored]);\n\n //Выбор плана\n const selectPlan = project => {\n setState(pv => ({\n ...pv,\n selectedPlan: project,\n selectedPlanSpecsLoaded: false,\n selectedPlanMaxLevel: null,\n selectedPlanCurLevel: null,\n selectedPlanSpecs: [],\n selectedPlanGanttDef: {},\n showPlanList: false\n }));\n };\n\n //Сброс выбора плана\n const unselectPlan = () => setState(pv => ({\n ...pv,\n selectedPlanSpecsLoaded: false,\n selectedPlan: null,\n selectedPlanMaxLevel: null,\n selectedPlanCurLevel: null,\n selectedPlanSpecs: [],\n selectedPlanGanttDef: {},\n showPlanList: false\n }));\n\n //Загрузка списка спецификаций плана\n const loadPlanSpecs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (curMaxLevel = null, level = null) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCPRODPLANSP_GET\",\n args: {\n NFCPRODPLAN: state.selectedPlan,\n NLEVEL: level\n },\n attributeValueProcessor: (name, val) => name == \"numb\" ? undefined : [\"start\", \"end\"].includes(name) ? (0,_core_utils__WEBPACK_IMPORTED_MODULE_6__.formatDateJSONDateOnly)(val) : val,\n respArg: \"COUT\"\n });\n let maxLevel = curMaxLevel ? curMaxLevel : 0;\n //Если есть данные\n if (data.XGANTT_TASKS) {\n //Обходим данные\n data.XGANTT_TASKS.forEach(el => {\n // Если есть зависимости\n if (el.dependencies) {\n //Разбиваем их в array\n el.dependencies = el.dependencies[0].split(\",\");\n }\n //Если уровень больше рассчитанного максимального\n maxLevel = maxLevel < el.level ? el.level : maxLevel;\n });\n }\n setState(pv => ({\n ...pv,\n selectedPlanMaxLevel: maxLevel,\n selectedPlanCurLevel: level || level === 0 ? level : maxLevel,\n selectedPlanSpecsLoaded: true,\n selectedPlanGanttDef: data.XGANTT_DEF ? {\n ...data.XGANTT_DEF\n } : {},\n selectedPlanSpecs: [...(data?.XGANTT_TASKS || [])]\n }));\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [executeStored, state.ident, state.selectedPlan]);\n\n //Обработка нажатия на элемент в списке планов\n const handleProjectClick = project => {\n if (state.selectedPlan != project.NRN) selectPlan(project.NRN);else unselectPlan();\n };\n\n //Отработка нажатия на заголовок плана\n const handleTitleClick = () => {\n state.selectedPlan ? pOnlineShowDocument({\n unitCode: \"CostProductPlans\",\n document: state.selectedPlan\n }) : null;\n };\n\n //При подключении компонента к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n initPlans();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n //При смене выбранного плана\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (state.selectedPlan) loadPlanSpecs();\n }, [state.selectedPlan, loadPlanSpecs]);\n\n //Выбор уровня\n const handleChangeSelectList = selectedLevel => {\n loadPlanSpecs(state.selectedPlanMaxLevel, selectedLevel);\n setState(pv => ({\n ...pv,\n selectedPlanCurLevel: selectedLevel\n }));\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n p: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n variant: \"extended\",\n sx: STYLES.PROJECTS_BUTTON,\n onClick: () => setState(pv => ({\n ...pv,\n showPlanList: !pv.showPlanList\n }))\n }, \"\\u041F\\u043B\\u0430\\u043D\\u044B\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n anchor: \"left\",\n open: state.showPlanList,\n onClose: () => setState(pv => ({\n ...pv,\n showPlanList: false\n })),\n sx: STYLES.PROJECTS_DRAWER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ProjectsList, {\n plans: filteredPlans,\n selectedPlan: state.selectedPlan,\n filter: filter,\n setFilter: setFilter,\n onClick: handleProjectClick\n })), state.init == true ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n container: true,\n spacing: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n item: true,\n xs: 12\n }, state.selectedPlanSpecsLoaded ? state.selectedPlanSpecs.length === 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InlineMsgInfo, {\n okBtn: false,\n text: \"В плане отсутствуют записи спецификации\"\n }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n sx: STYLES.GANTT_CONTAINER,\n p: 1\n }, state.selectedPlanMaxLevel ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n sx: {\n float: \"right\"\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n id: \"demo-simple-select-label\"\n }, \"\\u0423\\u0440\\u043E\\u0432\\u0435\\u043D\\u044C\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n labelId: \"demo-simple-select-label\",\n id: \"demo-simple-select\",\n value: state.selectedPlanCurLevel,\n label: \"\\u0423\\u0440\\u043E\\u0432\\u0435\\u043D\\u044C\",\n onChange: event => {\n handleChangeSelectList(event.target.value);\n },\n defaultValue: state.selectedPlanCurLevel\n }, [...Array(state.selectedPlanMaxLevel + 1).keys()].map(el => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n value: el,\n key: el\n }, el)))) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_gantt__WEBPACK_IMPORTED_MODULE_5__.P8PGantt, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_4__.P8P_GANTT_CONFIG_PROPS, state.selectedPlanGanttDef, {\n height: GANTT_HEIGHT,\n onTitleClick: handleTitleClick,\n titleStyle: STYLES.GANTT_TITLE,\n tasks: state.selectedPlanSpecs\n }))) : !state.selectedPlan ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InlineMsgInfo, {\n okBtn: false,\n text: \"Укажите план для отображения его спецификации\"\n }) : null)) : null);\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans_copy.js?"); + +/***/ }), + +/***/ "./app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js": +/*!*************************************************************************!*\ + !*** ./app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js ***! + \*************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ MechRecCostProdPlans: () => (/* binding */ MechRecCostProdPlans)\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 _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/List/List.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemButton/ListItemButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemText/ListItemText.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_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Fab/Fab.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Drawer/Drawer.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/InputLabel/InputLabel.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Select/Select.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/MenuItem/MenuItem.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _components_p8p_gantt__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../components/p8p_gantt */ \"./app/components/p8p_gantt.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./hooks */ \"./app/panels/mech_rec_cost_prod_plans/hooks.js\");\n/* harmony import */ var fast_xml_parser__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! fast-xml-parser */ \"./node_modules/fast-xml-parser/src/fxp.js\");\n/* harmony import */ var fast_xml_parser__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(fast_xml_parser__WEBPACK_IMPORTED_MODULE_8__);\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Производственная программа\r\n Панель мониторинга: Корневая панель производственной программы\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Контекст взаимодействия с сервером\n //Контекст сообщений\n //Контекст приложения\n //Подключение компонентов к настройкам приложения\n //Диаграмма Ганта\n //Вспомогательные функции\n //Вспомогательные хуки\n\n\n//---------\n//Константы\n//---------\n\n//Высота диаграммы Ганта\nconst GANTT_HEIGHT = \"650px\";\n\n//Ширина диаграммы Ганта\nconst GANTT_WIDTH = \"98vw\";\n\n//Стили\nconst STYLES = {\n PROJECTS_FINDER: {\n marginTop: \"10px\",\n marginLeft: \"10px\",\n width: \"93%\"\n },\n PROJECTS_LIST_ITEM_PRIMARY: {\n wordWrap: \"break-word\"\n },\n PROJECTS_LIST_ITEM_SECONDARY: {\n wordWrap: \"break-word\",\n fontSize: \"0.5rem\",\n textTransform: \"uppercase\"\n },\n PROJECTS_LIST_ITEM_SECONDARY_NOJOBS: {\n color: \"red\"\n },\n PROJECTS_LIST_ITEM_SECONDARY_NOEDIT: {\n color: \"gray\"\n },\n PROJECTS_LIST_ITEM_SECONDARY_CHANGED: {\n color: \"green\"\n },\n PROJECTS_BUTTON: {\n position: \"absolute\"\n },\n PROJECTS_DRAWER: {\n minWidth: \"250px\",\n display: \"inline-block\",\n flexShrink: 0,\n [`& .MuiDrawer-paper`]: {\n minWidth: \"250px\",\n display: \"inline-block\",\n boxSizing: \"border-box\"\n }\n },\n GANTT_CONTAINER: {\n height: GANTT_HEIGHT,\n width: GANTT_WIDTH\n },\n GANTT_TITLE: {\n paddingLeft: \"100px\",\n paddingRight: \"120px\"\n },\n PERIODS_BUTTON: {\n position: \"absolute\",\n right: \"20px\"\n },\n PERIODS_DRAWER: {\n width: \"1000px\",\n flexShrink: 0,\n [`& .MuiDrawer-paper`]: {\n width: \"1000px\",\n boxSizing: \"border-box\"\n }\n }\n};\n\n//Список проектов\nconst ProjectsList = ({\n plans = [],\n selectedPlan,\n filter,\n setFilter,\n onClick\n} = {}) => {\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n sx: STYLES.PROJECTS_FINDER,\n name: \"planFilter\",\n label: \"\\u041F\\u043B\\u0430\\u043D\",\n value: filter,\n variant: \"standard\",\n fullWidth: true,\n onChange: event => {\n setFilter(event.target.value);\n }\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null, plans.map(p => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n key: p.NRN,\n selected: p.NRN === selectedPlan,\n onClick: () => onClick ? onClick(p) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n primary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n sx: STYLES.PROJECTS_LIST_ITEM_PRIMARY\n }, p.SDOC_INFO),\n secondary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n sx: {\n ...STYLES.PROJECTS_LIST_ITEM_SECONDARY,\n ...(p.NJOBS == 0 ? STYLES.PROJECTS_LIST_ITEM_SECONDARY_NOJOBS : p.NCHANGED == 1 ? STYLES.PROJECTS_LIST_ITEM_SECONDARY_CHANGED : STYLES.PROJECTS_LIST_ITEM_SECONDARY_NOEDIT)\n }\n })\n })))));\n};\n\n//Контроль свойств - Список проектов\nProjectsList.propTypes = {\n plans: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().array),\n selectedPlan: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().number),\n onClick: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().func),\n filter: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().string),\n setFilter: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().func)\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Разбор XML\nconst parseXML = (xmlDoc, attributeValueProcessor) => {\n return new Promise((resolve, reject) => {\n try {\n let opts = {\n ignoreDeclaration: true,\n ignoreAttributes: false,\n parseAttributeValue: true,\n attributeNamePrefix: \"\"\n };\n if (attributeValueProcessor) opts.attributeValueProcessor = attributeValueProcessor;\n const parser = new fast_xml_parser__WEBPACK_IMPORTED_MODULE_8__.XMLParser(opts);\n const data = parser.parse(xmlDoc);\n resolve(data.XDATA);\n } catch (e) {\n reject(e);\n }\n });\n};\n\n//Корневая панель производственной программы\nconst MechRecCostProdPlans = () => {\n //Собственное состояние\n let [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n init: false,\n showPlanList: false,\n plans: [],\n plansLoaded: false,\n selectedPlanSpecsLoaded: false,\n selectedPlan: null,\n selectedPlanMaxLevel: null,\n selectedPlanLevel: null,\n selectedPlanMenuItems: null,\n selectedPlanGanttDef: {},\n selectedPlanSpecs: []\n });\n const [filter, setFilter] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(\"\");\n const filteredPlans = (0,_hooks__WEBPACK_IMPORTED_MODULE_7__.useFilteredPlans)(state.plans, filter);\n\n //Подключение к контексту приложения\n const {\n pOnlineShowDocument\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_3__[\"ApplicationСtx\"]);\n\n //Подключение к контексту сообщений\n const {\n InlineMsgInfo\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_2__[\"MessagingСtx\"]);\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 initPlans = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (!state.init) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.PRODPLAN_INIT\",\n args: {},\n respArg: \"COUT\"\n });\n setState(pv => ({\n ...pv,\n init: true,\n plans: [...(data?.XFCPRODPLANS || [])],\n plansLoaded: true\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [state.init, executeStored]);\n\n //Выбор плана\n const selectPlan = project => {\n setState(pv => ({\n ...pv,\n selectedPlan: project,\n selectedPlanSpecsLoaded: false,\n selectedPlanMaxLevel: null,\n selectedPlanLevel: null,\n selectedPlanMenuItems: null,\n selectedPlanSpecs: [],\n selectedPlanGanttDef: {},\n showPlanList: false\n }));\n };\n\n //Сброс выбора плана\n const unselectPlan = () => setState(pv => ({\n ...pv,\n selectedPlanSpecsLoaded: false,\n selectedPlan: null,\n selectedPlanMaxLevel: null,\n selectedPlanLevel: null,\n selectedPlanMenuItems: null,\n selectedPlanSpecs: [],\n selectedPlanGanttDef: {},\n showPlanList: false\n }));\n\n //Загрузка списка спецификаций плана\n const loadPlanSpecs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (level = null) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCPRODPLANSP_GET\",\n args: {\n NFCPRODPLAN: state.selectedPlan,\n NLEVEL: level\n }\n });\n let doc = await parseXML(data.COUT, (name, val) => name == \"numb\" ? undefined : [\"start\", \"end\"].includes(name) ? (0,_core_utils__WEBPACK_IMPORTED_MODULE_6__.formatDateJSONDateOnly)(val) : val);\n console.log(doc.XGANTT_DEF);\n console.log(doc.XGANTT_TASKS);\n setState(pv => ({\n ...pv,\n selectedPlanMaxLevel: data.NMAX_LEVEL,\n selectedPlanLevel: level || level === 0 ? level : data.NMAX_LEVEL,\n selectedPlanMenuItems: state.selectedPlanMenuItems ? state.selectedPlanMenuItems : [...Array(data.NMAX_LEVEL).keys()].map(el => el + 1),\n selectedPlanSpecsLoaded: true,\n selectedPlanGanttDef: doc.XGANTT_DEF ? {\n ...doc.XGANTT_DEF\n } : {},\n selectedPlanSpecs: [...(doc?.XGANTT_TASKS || [])]\n }));\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [executeStored, state.ident, state.selectedPlan]);\n\n //Обработка нажатия на элемент в списке планов\n const handleProjectClick = project => {\n if (state.selectedPlan != project.NRN) selectPlan(project.NRN);else unselectPlan();\n };\n\n //Отработка нажатия на заголовок плана\n const handleTitleClick = () => {\n state.selectedPlan ? pOnlineShowDocument({\n unitCode: \"CostProductPlans\",\n document: state.selectedPlan\n }) : null;\n };\n\n //При подключении компонента к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n initPlans();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n //При смене выбранного плана\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (state.selectedPlan) loadPlanSpecs();\n }, [state.selectedPlan, loadPlanSpecs]);\n\n //Выбор уровня\n const handleChangeSelectList = selectedLevel => {\n loadPlanSpecs(selectedLevel);\n setState(pv => ({\n ...pv,\n selectedPlanLevel: selectedLevel\n }));\n };\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n p: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n variant: \"extended\",\n sx: STYLES.PROJECTS_BUTTON,\n onClick: () => setState(pv => ({\n ...pv,\n showPlanList: !pv.showPlanList\n }))\n }, \"\\u041F\\u043B\\u0430\\u043D\\u044B\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n anchor: \"left\",\n open: state.showPlanList,\n onClose: () => setState(pv => ({\n ...pv,\n showPlanList: false\n })),\n sx: STYLES.PROJECTS_DRAWER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ProjectsList, {\n plans: filteredPlans,\n selectedPlan: state.selectedPlan,\n filter: filter,\n setFilter: setFilter,\n onClick: handleProjectClick\n })), state.init == true ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n container: true,\n spacing: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n item: true,\n xs: 12\n }, state.selectedPlanSpecsLoaded ? state.selectedPlanSpecs.length === 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InlineMsgInfo, {\n okBtn: false,\n text: \"В плане отсутствуют записи спецификации\"\n }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n sx: STYLES.GANTT_CONTAINER,\n p: 1\n }, state.selectedPlanMaxLevel ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n sx: {\n float: \"right\"\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n id: \"demo-simple-select-label\"\n }, \"\\u0423\\u0440\\u043E\\u0432\\u0435\\u043D\\u044C\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n labelId: \"demo-simple-select-label\",\n id: \"demo-simple-select\",\n value: state.selectedPlanLevel,\n label: \"\\u0423\\u0440\\u043E\\u0432\\u0435\\u043D\\u044C\",\n onChange: event => {\n handleChangeSelectList(event.target.value);\n },\n defaultValue: state.selectedPlanLevel\n }, state.selectedPlanMenuItems.map(el => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n value: el,\n key: el\n }, el)))) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_gantt__WEBPACK_IMPORTED_MODULE_5__.P8PGantt, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_4__.P8P_GANTT_CONFIG_PROPS, state.selectedPlanGanttDef, {\n height: GANTT_HEIGHT,\n onTitleClick: handleTitleClick,\n titleStyle: STYLES.GANTT_TITLE,\n tasks: state.selectedPlanSpecs\n }))) : !state.selectedPlan ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InlineMsgInfo, {\n okBtn: false,\n text: \"Укажите план для отображения его спецификации\"\n }) : null)) : null);\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js?"); + +/***/ }), + +/***/ "./app/panels/prj_agn_info/TabsElements/agentChart.js": +/*!************************************************************!*\ + !*** ./app/panels/prj_agn_info/TabsElements/agentChart.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ AgentChart: () => (/* binding */ AgentChart)\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_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _components_p8p_chart__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../components/p8p_chart */ \"./app/components/p8p_chart.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/* eslint-disable react/prop-types */\n\n //Интерфейсные элементы\n //График\n\nconst AgentChart = ({\n chart,\n pOnlineShowUnit\n}) => {\n //Отработка нажатия на график\n const handleChartClick = ({\n item\n }) => {\n pOnlineShowUnit({\n unitCode: \"PayNotes\",\n showMethod: \"SelectList\",\n inputParameters: [{\n name: item.SCOND,\n value: item.NIDENT\n }]\n });\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], null, chart.loaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_chart__WEBPACK_IMPORTED_MODULE_1__.P8PChart, _extends({}, chart, {\n onClick: handleChartClick,\n style: {\n minWidth: \"40vw\",\n maxHeight: \"30vw\",\n minHeight: \"405px\",\n display: \"flex\",\n justifyContent: \"center\"\n }\n })) : null));\n};\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_agn_info/TabsElements/agentChart.js?"); + +/***/ }), + +/***/ "./app/panels/prj_agn_info/TabsElements/agentContracts.js": +/*!****************************************************************!*\ + !*** ./app/panels/prj_agn_info/TabsElements/agentContracts.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ AgentContracts: () => (/* binding */ AgentContracts)\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_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Link/Link.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../config_wrapper */ \"./app/config_wrapper.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/* eslint-disable react/prop-types */\n\n //Интерфейсные элементы\n //Таблица данных\n //Подключение компонентов к настройкам приложения\n\nconst AgentContracts = ({\n dataGrid,\n setDataGrid,\n pOnlineShowDocument\n}) => {\n //Генерация представления ячейки c данными\n const dataCellRender = ({\n row,\n columnDef\n }) => {\n switch (columnDef.name) {\n case \"NDOC_SUM\":\n return {\n data: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n component: \"button\",\n variant: \"body2\",\n underline: \"hover\",\n onClick: () => pOnlineShowDocument({\n unitCode: \"Contracts\",\n document: row[\"NRN\"]\n })\n }, row[columnDef.name])\n };\n }\n };\n\n //При изменении состояния фильтра\n const handleFilterChanged = ({\n filters\n }) => setDataGrid(pv => ({\n ...pv,\n filters: [...filters],\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении состояния сортировки\n const handleOrderChanged = ({\n orders\n }) => setDataGrid(pv => ({\n ...pv,\n orders: [...orders],\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = () => setDataGrid(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: {\n textAlign: \"center\"\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n container: true,\n spacing: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n item: true,\n xs: 12\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_2__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: dataGrid.columnsDef,\n rows: dataGrid.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8P_DATA_GRID_SIZE.LARGE,\n filtersInitial: dataGrid.filters,\n morePages: dataGrid.morePages,\n reloading: dataGrid.reload,\n dataCellRender: dataCellRender,\n onOrderChanged: handleOrderChanged,\n onFilterChanged: handleFilterChanged,\n onPagesCountChanged: handlePagesCountChanged\n }))))));\n};\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_agn_info/TabsElements/agentContracts.js?"); + +/***/ }), + +/***/ "./app/panels/prj_agn_info/TabsElements/agentInfo.js": +/*!***********************************************************!*\ + !*** ./app/panels/prj_agn_info/TabsElements/agentInfo.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ AgentInfo: () => (/* binding */ AgentInfo)\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_1__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Card/Card.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/CardContent/CardContent.js\");\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/CardActions/CardActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* eslint-disable react/prop-types */\n\n //Интерфейсные элементы\n\nconst makeInfoByCond = (blockName, infoValue) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, infoValue ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n variant: \"body2\",\n component: \"div\",\n sx: {\n textAlign: \"justify\",\n paddingTop: \"5px\"\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"b\", null, blockName, \":\"), \" \", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"br\", null), infoValue) : null);\n};\nconst AgentInfo = ({\n agentInfo,\n pOnlineShowDocument\n}) => {\n //При нажатии перехода на контрагента\n const handleAgnetClick = id => pOnlineShowDocument({\n unitCode: \"AGNLIST\",\n document: id\n });\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n sx: {\n minHeight: \"510px\"\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n sx: {\n minHeight: \"457px\"\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n variant: \"h5\",\n component: \"div\",\n sx: {\n fontSize: 16,\n fontWeight: \"bold\"\n },\n gutterBottom: true\n }, agentInfo.AGNNAME), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n sx: {\n display: \"flex\",\n alignItems: \"flex-end\",\n flexDirection: \"column\",\n bgcolor: \"background.paper\"\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_1__[\"default\"], null, \"\\u0418\\u041D\\u041D: \", agentInfo.AGNIDNUMB), agentInfo.ORGCODE ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_1__[\"default\"], null, \"\\u041E\\u041A\\u041F\\u041E: \", agentInfo.ORGCODE) : null), makeInfoByCond(\"Мнемокод\", agentInfo.AGNABBR), makeInfoByCond(\"Наименование\", agentInfo.AGNNAME), makeInfoByCond(\"Полное наименование\", agentInfo.FULLNAME), makeInfoByCond(\"Адрес\", agentInfo.ADDRESS)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: {\n alignItems: \"flex-end\",\n justifyContent: \"flex-end\"\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n variant: \"contained\",\n onClick: () => handleAgnetClick(agentInfo.NRN)\n }, \"\\u041F\\u0435\\u0440\\u0435\\u0439\\u0442\\u0438 \\u043A \\u043A\\u043E\\u043D\\u0442\\u0440\\u0430\\u0433\\u0435\\u043D\\u0442\\u0443\"))));\n};\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_agn_info/TabsElements/agentInfo.js?"); + +/***/ }), + +/***/ "./app/panels/prj_agn_info/back.js": +/*!*****************************************!*\ + !*** ./app/panels/prj_agn_info/back.js ***! + \*****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ clearSelectList: () => (/* binding */ clearSelectList),\n/* harmony export */ useAgent: () => (/* binding */ useAgent),\n/* harmony export */ useAgnlist: () => (/* binding */ useAgnlist),\n/* harmony export */ useTabs: () => (/* binding */ useTabs)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n\n\nconst useAgnlist = executeStored => {\n //Список контрагентов\n const [agents, setAgents] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]);\n const agentsGet = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async SREGEXP => {\n //Считываем список контрагентов\n const data = await executeStored({\n stored: \"UDO_PKG_P8PANELS_KOZLOV.AGNLIST_GET\",\n args: {\n SREGEXP: SREGEXP\n },\n respArg: \"COUT\"\n });\n //Если есть данные\n if (data.AGENTS) {\n setAgents(data.AGENTS.length > 1 ? [...data.AGENTS] : [data.AGENTS]);\n } else {\n setAgents([]);\n }\n }, [executeStored]);\n return [agents, agentsGet];\n};\n\n//Информация о контрагенте\nconst useAgent = executeStored => {\n //Информация о контрагенте\n const [agentInfo, setAgentInfo] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({});\n\n //Инициализация информации о контрагенте\n const agentInfoGet = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async NRN => {\n const data = await executeStored({\n stored: \"UDO_PKG_P8PANELS_KOZLOV.AGNLIST_INFO_GET\",\n args: {\n NRN: NRN\n },\n respArg: \"COUT\"\n });\n //Устанавливаем информацию о контрагенте\n setAgentInfo(data.AGENT_INFO);\n }, [executeStored]);\n return [agentInfo, agentInfoGet];\n};\n\n//Информация для закладок\nconst useTabs = (executeStored, SERV_DATA_TYPE_CLOB) => {\n //Состояние для страницы договоров - таблица данных\n const [dataGrid, setDataGrid] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n NRN: null,\n dataLoaded: false,\n columnsDef: [],\n filters: [],\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n });\n\n //Состояние для страницы графиков - график\n const [chart, setChart] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n NRN: null,\n loaded: false,\n labels: [],\n datasets: []\n });\n\n //Размер страницы данных\n const DATA_GRID_PAGE_SIZE = 5;\n const agentContractsInit = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async NRN => {\n if (NRN && dataGrid.reload) {\n const data = await executeStored({\n stored: \"UDO_PKG_P8PANELS_KOZLOV.AGENT_CONTRACTS_GET\",\n args: {\n NRN: NRN,\n CFILTERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.object2Base64XML)(dataGrid.filters, {\n arrayNodeName: \"filters\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.object2Base64XML)(dataGrid.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: dataGrid.pageNumber,\n NPAGE_SIZE: DATA_GRID_PAGE_SIZE,\n NINCLUDE_DEF: dataGrid.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\"\n });\n setDataGrid(pv => ({\n ...pv,\n NRN: NRN,\n filters: pv.filters,\n orders: pv.orders,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE\n }));\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [dataGrid.reload, dataGrid.filters, dataGrid.orders, dataGrid.pageNumber, dataGrid.dataLoaded, executeStored, SERV_DATA_TYPE_CLOB]);\n\n //Загрузка данных графика с сервера\n const agentChartInit = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async NRN => {\n if (NRN && !chart.loaded) {\n const chart = await executeStored({\n stored: \"UDO_PKG_P8PANELS_KOZLOV.AGENT_CHART\",\n args: {\n NAGENT: NRN\n },\n respArg: \"COUT\"\n });\n setChart(pv => ({\n ...pv,\n loaded: true,\n ...chart.XCHART\n }));\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [chart.loaded, executeStored]);\n\n //При изменении необходимости перезагрузки контрактов или рег. номера контрагента\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n agentContractsInit(dataGrid.NRN);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [dataGrid.reload, dataGrid.NRN]);\n\n //При изменении необходимости перезагрузки графика или рег. номера контрагента\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n agentChartInit(chart.NRN);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [chart.loaded, chart.NRN]);\n return [dataGrid, setDataGrid, chart, setChart, agentContractsInit, agentChartInit];\n};\n\n//Очистка селектлиста\nconst clearSelectList = async function (nAgentBefore, executeStored) {\n await executeStored({\n stored: \"UDO_PKG_P8PANELS_KOZLOV.CHART_SELECTLIST_CLEAR\",\n args: {\n NAGENT: nAgentBefore\n }\n });\n};\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_agn_info/back.js?"); + +/***/ }), + +/***/ "./app/panels/prj_agn_info/index.js": +/*!******************************************!*\ + !*** ./app/panels/prj_agn_info/index.js ***! + \******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ RootClass: () => (/* binding */ RootClass)\n/* harmony export */ });\n/* harmony import */ var _prj_agn_info__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./prj_agn_info */ \"./app/panels/prj_agn_info/prj_agn_info.js\");\n/*\r\n Парус 8 - Панели мониторинга - Информация по контрагенту (вебинар)\r\n Панель мониторинга: Точка входа\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Информация по контрагенту (вебинар)\n\n//----------------\n//Интерфейс модуля\n//----------------\n\nconst RootClass = _prj_agn_info__WEBPACK_IMPORTED_MODULE_0__.PrjAgnInfo;\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_agn_info/index.js?"); + +/***/ }), + +/***/ "./app/panels/prj_agn_info/prj_agn_info.js": +/*!*************************************************!*\ + !*** ./app/panels/prj_agn_info/prj_agn_info.js ***! + \*************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ PrjAgnInfo: () => (/* binding */ PrjAgnInfo)\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 _context_application__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/List/List.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItem/ListItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemButton/ListItemButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemText/ListItemText.js\");\n/* harmony import */ var _tabs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tabs */ \"./app/panels/prj_agn_info/tabs.js\");\n/* harmony import */ var _back__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./back */ \"./app/panels/prj_agn_info/back.js\");\n/*\r\n Парус 8 - Панели мониторинга - Информация по контрагенту (вебинар)\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контекст взаимодействия с сервером\n //Контекст приложения\n //Интерфейсные элементы\n\n\n\n//Стили\nconst STYLES = {\n MAIN: {\n border: \"3px solid rgba(0, 0, 0,.5)\",\n minHeight: \"625px\",\n minWidth: \"1200px\"\n },\n // , justifyContent: \"space-around\"\n CONTAINER: {\n textAlign: \"center\",\n paddingTop: \"20px\",\n margin: \"0px 100px\",\n maxWidth: \"2000px\"\n },\n AGNLIST: {\n maxWidth: \"300px\",\n padding: \"16px 25px\"\n },\n AGNINFO: {\n borderLeft: \"3px solid rgba(0, 0, 0,.5)\"\n },\n FINDBUTTON: {\n marginTop: \"10px\"\n },\n TITLE: {\n paddingBottom: \"40px\"\n },\n LIST: {\n width: \"100%\",\n maxWidth: \"600px\",\n bgcolor: \"background.paper\"\n },\n LISTITEM: {\n textAlign: \"left\"\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Корневая панель работ проектов\nconst PrjAgnInfo = () => {\n //Подключение к контексту приложения\n const {\n pOnlineShowUnit,\n pOnlineShowDocument\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_2__[\"ApplicationСtx\"]);\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 [agents, agentsGet] = (0,_back__WEBPACK_IMPORTED_MODULE_4__.useAgnlist)(executeStored);\n\n //Собственное состояние - форма поиска контрагента\n const [agentsFind, setAgentsFind] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(\"\");\n\n //Собственное состояние - информация о контрагенте\n const [agentInfo, agentInfoGet] = (0,_back__WEBPACK_IMPORTED_MODULE_4__.useAgent)(executeStored);\n\n //При вводе значения в форме поиска\n const handleAgentsFindText = e => {\n //Устанавливаем фильтр контрагентов\n setAgentsFind(e.target.value);\n };\n\n //При нажатии кнопки поиска\n const handleAgentsFindBtn = () => {\n //Получаем список контрагентов\n agentsGet(agentsFind);\n };\n\n //При нажатии на контрагента\n const handleAgnetClick = id => {\n //Если есть информация о прошлом контрагенте\n if (agentInfo.NRN) {\n (0,_back__WEBPACK_IMPORTED_MODULE_4__.clearSelectList)(agentInfo.NRN, executeStored);\n }\n //Получаем информацию о контрагенте\n agentInfoGet(id);\n };\n\n //При подключении компонента к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Получаем список контрагентов\n agentsGet(null, executeStored);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: STYLES.CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.TITLE,\n variant: \"h6\"\n }, \"\\u0418\\u043D\\u0444\\u043E\\u0440\\u043C\\u0430\\u0446\\u0438\\u044F \\u043E \\u043A\\u043E\\u043D\\u0442\\u0440\\u0430\\u0433\\u0435\\u043D\\u0442\\u0435\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n container: true,\n spacing: 2,\n style: STYLES.MAIN\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n item: true,\n xs: 4,\n style: STYLES.AGNLIST\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n name: \"mnemo\",\n label: \"\\u041C\\u043D\\u0435\\u043C\\u043E\\u043A\\u043E\\u0434\",\n value: agentsFind,\n variant: \"standard\",\n fullWidth: true,\n onChange: handleAgentsFindText\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n style: STYLES.FINDBUTTON,\n onClick: handleAgentsFindBtn,\n variant: \"contained\",\n fullWidth: true\n }, \"\\u0418\\u0441\\u043A\\u0430\\u0442\\u044C\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n sx: STYLES.LIST\n }, agents.map(a => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n key: a.NRN,\n disablePadding: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n onClick: () => handleAgnetClick(a.NRN)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n primary: a.SAGNABBR\n })))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n item: true,\n container: true,\n xs: true,\n style: STYLES.AGNINFO\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_tabs__WEBPACK_IMPORTED_MODULE_3__.BasicTabs, {\n agentInfo: agentInfo,\n pOnlineShowUnit: pOnlineShowUnit,\n pOnlineShowDocument: pOnlineShowDocument,\n executeStored: executeStored,\n SERV_DATA_TYPE_CLOB: SERV_DATA_TYPE_CLOB\n }))));\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_agn_info/prj_agn_info.js?"); + +/***/ }), + +/***/ "./app/panels/prj_agn_info/tabs.js": +/*!*****************************************!*\ + !*** ./app/panels/prj_agn_info/tabs.js ***! + \*****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ BasicTabs: () => (/* binding */ BasicTabs)\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_8__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_8__);\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_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Tabs/Tabs.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Tab/Tab.js\");\n/* harmony import */ var _TabsElements_agentInfo__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./TabsElements/agentInfo */ \"./app/panels/prj_agn_info/TabsElements/agentInfo.js\");\n/* harmony import */ var _TabsElements_agentContracts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./TabsElements/agentContracts */ \"./app/panels/prj_agn_info/TabsElements/agentContracts.js\");\n/* harmony import */ var _TabsElements_agentChart__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./TabsElements/agentChart */ \"./app/panels/prj_agn_info/TabsElements/agentChart.js\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./utils */ \"./app/panels/prj_agn_info/utils.js\");\n/* harmony import */ var _back__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./back */ \"./app/panels/prj_agn_info/back.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/* eslint-disable react/prop-types */\n\n\n //Интерфейсные элементы\n\n\n\n\n\nfunction CustomTabPanel(props) {\n const {\n children,\n value,\n index,\n ...other\n } = props;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", _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 sx: {\n p: 3\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null, children)));\n}\nCustomTabPanel.propTypes = {\n children: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().node),\n index: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().number).isRequired,\n value: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().number).isRequired\n};\nfunction a11yProps(index) {\n return {\n id: `simple-tab-${index}`,\n \"aria-controls\": `simple-tabpanel-${index}`\n };\n}\nconst BasicTabs = ({\n agentInfo,\n pOnlineShowUnit,\n pOnlineShowDocument,\n executeStored,\n SERV_DATA_TYPE_CLOB\n}) => {\n //Собственное состояние - информация о контрактах и графике\n const [dataGrid, setDataGrid, chart, setChart] = (0,_back__WEBPACK_IMPORTED_MODULE_5__.useTabs)(executeStored, SERV_DATA_TYPE_CLOB);\n //Собствественное состояние - Текущая страница\n const [value, setValue] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(0);\n\n //При изменении страницы\n const handleChange = (event, newValue) => {\n setValue(newValue);\n };\n\n //Эффект на изменение контрагента\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n setDataGrid(pv => ({\n ...pv,\n NRN: agentInfo.NRN,\n pageNumber: 1,\n reload: true\n }));\n setChart(pv => ({\n ...pv,\n NRN: agentInfo.NRN,\n loaded: false\n }));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [agentInfo]);\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: {\n width: \"100%\"\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: {\n borderBottom: 1,\n borderColor: \"divider\",\n marginRight: \"24px\"\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n value: value,\n onChange: handleChange,\n \"aria-label\": \"basic tabs example\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], _extends({\n label: \"\\u041A\\u0430\\u0440\\u0442\\u043E\\u0447\\u043A\\u0430\"\n }, a11yProps(0))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], _extends({\n label: \"\\u0414\\u043E\\u0433\\u043E\\u0432\\u043E\\u0440\\u044B\"\n }, a11yProps(1))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], _extends({\n label: \"\\u041F\\u043B\\u0430\\u0442\\u0435\\u0436\\u0438\"\n }, a11yProps(2))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(CustomTabPanel, {\n value: value,\n index: 0\n }, agentInfo.NRN ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_TabsElements_agentInfo__WEBPACK_IMPORTED_MODULE_1__.AgentInfo, {\n agentInfo: agentInfo,\n pOnlineShowDocument: pOnlineShowDocument\n }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_utils__WEBPACK_IMPORTED_MODULE_4__.AgentNotSelected, null)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(CustomTabPanel, {\n value: value,\n index: 1\n }, agentInfo.NRN ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_TabsElements_agentContracts__WEBPACK_IMPORTED_MODULE_2__.AgentContracts, {\n dataGrid: dataGrid,\n setDataGrid: setDataGrid,\n pOnlineShowDocument: pOnlineShowDocument\n }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_utils__WEBPACK_IMPORTED_MODULE_4__.AgentNotSelected, null)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(CustomTabPanel, {\n value: value,\n index: 2\n }, agentInfo.NRN ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_TabsElements_agentChart__WEBPACK_IMPORTED_MODULE_3__.AgentChart, {\n chart: chart,\n pOnlineShowUnit: pOnlineShowUnit\n }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_utils__WEBPACK_IMPORTED_MODULE_4__.AgentNotSelected, null)));\n};\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_agn_info/tabs.js?"); + +/***/ }), + +/***/ "./app/panels/prj_agn_info/utils.js": +/*!******************************************!*\ + !*** ./app/panels/prj_agn_info/utils.js ***! + \******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ AgentNotSelected: () => (/* binding */ AgentNotSelected)\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\nconst AgentNotSelected = () => {\n //Если контрагент не выбран - сообщаем */\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"h3\", null, \"\\u041A\\u043E\\u043D\\u0442\\u0440\\u0430\\u0433\\u0435\\u043D\\u0442 \\u043D\\u0435 \\u0432\\u044B\\u0431\\u0440\\u0430\\u043D.\");\n};\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_agn_info/utils.js?"); /***/ }), @@ -3396,39 +3638,6 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), -/***/ "./app/panels/prj_graph/index.js": -/*!***************************************!*\ - !*** ./app/panels/prj_graph/index.js ***! - \***************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ RootClass: () => (/* binding */ RootClass)\n/* harmony export */ });\n/* harmony import */ var _prj_graph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./prj_graph */ \"./app/panels/prj_graph/prj_graph.js\");\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Графики проектов\r\n Панель мониторинга: Точка входа\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Корневая панель графиков проекта\n\n//----------------\n//Интерфейс модуля\n//----------------\n\nconst RootClass = _prj_graph__WEBPACK_IMPORTED_MODULE_0__.PrjGraph;\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_graph/index.js?"); - -/***/ }), - -/***/ "./app/panels/prj_graph/layouts.js": -/*!*****************************************!*\ - !*** ./app/panels/prj_graph/layouts.js ***! - \*****************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ dataCellRender: () => (/* binding */ dataCellRender),\n/* harmony export */ groupCellRender: () => (/* binding */ groupCellRender)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Link/Link.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_1__ = __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 MONTH_COLUMN_REG_EXP = /[0-9]{4}_[0-9]{1,2}/;\n\n//-----------\n//Тело модуля\n//-----------\n\n//Формирование значения для плашки этапа\nconst formatStageItemValue = (state, text) => {\n const [stateText, icon] = state == 0 ? [\"Зарегистрирован\", \"app_registration\"] : state == 1 ? [\"Открыт\", \"lock_open\"] : state == 2 ? [\"Закрыт\", \"lock_outline\"] : state == 3 ? [\"Согласован\", \"thumb_up_alt\"] : state == 4 ? [\"Исполнение прекращено\", \"block\"] : [\"Остановлен\", \"do_not_disturb_on\"];\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n direction: \"row\",\n gap: 0.5,\n alignItems: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n title: stateText\n }, icon), text);\n};\n\n//Генерация представления ячейки заголовка группы\nconst groupCellRender = ({\n group,\n pOnlineShowDocument\n}) => ({\n cellStyle: {\n padding: \"2px\"\n },\n data: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n component: \"button\",\n variant: \"body2\",\n align: \"left\",\n onClick: () => pOnlineShowDocument({\n unitCode: \"Projects\",\n document: group.name\n })\n }, group.caption)\n});\n\n//Генерация представления ячейки c данными\nconst dataCellRender = ({\n row,\n columnDef,\n pOnlineShowDocument\n}) => {\n if (MONTH_COLUMN_REG_EXP.test(columnDef.name)) {\n const dF = new Date(row.DFROM);\n const dT = new Date(row.DTO);\n const [year, month] = columnDef.name.split(\"_\");\n const mF = new Date(year, month - 1, 1);\n const mT = new Date(year, month, 0);\n let cellStyle = {};\n let cellProps = {};\n let data = null;\n if (dF <= mF && dT >= mT || dF >= mF && dF <= mT || dT >= mF && dT <= mT) {\n if (year == dF.getFullYear() && month == dF.getMonth() + 1) data = formatStageItemValue(row.NSTATE, row.SRESP);\n cellStyle = {\n backgroundColor: row.NSTATE == 0 ? \"lightyellow\" : row.NSTATE == 1 ? \"lightgreen\" : \"lightblue\",\n cursor: \"pointer\"\n };\n cellProps = {\n title: `${(0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.formatDateRF)(dF)} - ${(0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.formatDateRF)(dT)}`,\n onClick: () => pOnlineShowDocument({\n unitCode: \"ProjectsStages\",\n document: row.NRN\n })\n };\n }\n return {\n cellStyle: {\n padding: \"2px\",\n maxWidth: \"30px\",\n overflow: \"visible\",\n fontSize: \"smaller\",\n whiteSpace: \"nowrap\",\n ...cellStyle\n },\n cellProps,\n data\n };\n }\n switch (columnDef.name) {\n case \"SJOB\":\n return {\n cellProps: {\n title: row[columnDef.name]\n },\n cellStyle: {\n padding: \"2px\",\n maxWidth: \"300px\",\n textOverflow: \"ellipsis\",\n overflow: \"hidden\",\n whiteSpace: \"pre\",\n fontSize: \"smaller\"\n }\n };\n }\n};\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_graph/layouts.js?"); - -/***/ }), - -/***/ "./app/panels/prj_graph/prj_graph.js": -/*!*******************************************!*\ - !*** ./app/panels/prj_graph/prj_graph.js ***! - \*******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ PrjGraph: () => (/* binding */ PrjGraph)\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_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\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 _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./layouts */ \"./app/panels/prj_graph/layouts.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, 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//Графики проектов\nconst PrjGraph = () => {\n //Собственное состояние - таблица данных\n const [dataGrid, setdataGrid] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n groups: [],\n rows: [],\n reload: true\n });\n\n //Подключение к контексту приложения\n const {\n pOnlineShowDocument\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_3__[\"ApplicationСtx\"]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_4__[\"BackEndСtx\"]);\n\n //Загрузка данных таблицы с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (dataGrid.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.GRAPH\",\n args: {},\n respArg: \"COUT\",\n attributeValueProcessor: (name, val) => [\"caption\", \"name\", \"parent\"].includes(name) ? undefined : val\n });\n setdataGrid(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: [...(data.XROWS || [])],\n groups: [...(data.XGROUPS || [])],\n dataLoaded: true,\n reload: false\n }));\n }\n }, [dataGrid.reload, executeStored]);\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadData();\n }, [dataGrid.reload, loadData]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n container: true,\n spacing: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n item: true,\n xs: 12\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n p: 5\n }, dataGrid.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_2__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: dataGrid.columnsDef,\n groups: dataGrid.groups,\n rows: dataGrid.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8P_DATA_GRID_SIZE.LARGE,\n reloading: dataGrid.reload,\n dataCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_5__.dataCellRender)({\n ...prms,\n pOnlineShowDocument\n }),\n groupCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_5__.groupCellRender)({\n ...prms,\n pOnlineShowDocument\n })\n })) : null))));\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_graph/prj_graph.js?"); - -/***/ }), - /***/ "./app/panels/prj_help/index.js": /*!**************************************!*\ !*** ./app/panels/prj_help/index.js ***! @@ -3491,7 +3700,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 */ PrjJobs: () => (/* binding */ PrjJobs)\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_15__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_15__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/List/List.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemButton/ListItemButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemIcon/ListItemIcon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemText/ListItemText.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __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/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Fab/Fab.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Drawer/Drawer.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _components_p8p_gantt__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../components/p8p_gantt */ \"./app/components/p8p_gantt.js\");\n/* harmony import */ var _res_mon__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./res_mon */ \"./app/panels/prj_jobs/res_mon.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Работы проектов\r\n Панель мониторинга: Корневая панель работ проектов\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Контекст взаимодействия с сервером\n //Контекст сообщений\n //Контекст приложения\n //Вспомогательные функции\n //Подключение компонентов к настройкам приложения\n //Диаграмма Ганта\n //Монитор ресурсов\n\n//---------\n//Константы\n//---------\n\n//Высота диаграммы Ганта\nconst GANTT_HEIGHT = \"650px\";\n\n//Ширина диаграммы Ганта\nconst GANTT_WIDTH = \"98vw\";\n\n//Стили\nconst STYLES = {\n PROJECTS_LIST_SAVE_BUTTON: {\n backgroundColor: \"orange\"\n },\n PROJECTS_LIST_ITEM_NOJOBS: {\n backgroundColor: \"#ff000045\"\n },\n PROJECTS_LIST_ITEM_PRIMARY: {\n wordWrap: \"break-word\"\n },\n PROJECTS_LIST_ITEM_SECONDARY: {\n wordWrap: \"break-word\",\n fontSize: \"0.5rem\",\n textTransform: \"uppercase\"\n },\n PROJECTS_LIST_ITEM_SECONDARY_NOJOBS: {\n color: \"red\"\n },\n PROJECTS_LIST_ITEM_SECONDARY_NOEDIT: {\n color: \"gray\"\n },\n PROJECTS_LIST_ITEM_SECONDARY_CHANGED: {\n color: \"green\"\n },\n PROJECTS_BUTTON: {\n position: \"absolute\"\n },\n PROJECTS_DRAWER: {\n width: \"250px\",\n flexShrink: 0,\n [`& .MuiDrawer-paper`]: {\n width: \"250px\",\n boxSizing: \"border-box\"\n }\n },\n GANTT_CONTAINER: {\n height: GANTT_HEIGHT,\n width: GANTT_WIDTH\n },\n GANTT_TITLE: {\n paddingLeft: \"100px\",\n paddingRight: \"120px\"\n },\n PERIODS_BUTTON: {\n position: \"absolute\",\n right: \"20px\"\n },\n PERIODS_DRAWER: {\n width: \"1000px\",\n flexShrink: 0,\n [`& .MuiDrawer-paper`]: {\n width: \"1000px\",\n boxSizing: \"border-box\"\n }\n }\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Формирование значения для колонки \"Состояние\" этапа\nconst formatStageStatusValue = value => {\n const [text, icon] = value == 0 ? [\"Зарегистрирован\", \"app_registration\"] : value == 1 ? [\"Открыт\", \"lock_open\"] : value == 2 ? [\"Закрыт\", \"lock_outline\"] : value == 3 ? [\"Согласован\", \"thumb_up_alt\"] : value == 4 ? [\"Исполнение прекращено\", \"block\"] : [\"Остановлен\", \"do_not_disturb_on\"];\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n direction: \"row\",\n gap: 0.5,\n alignItems: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n title: text\n }, icon), text);\n};\n\n//Формирование значения для колонки \"Состояние\" работы\nconst formatJobStatusValue = value => {\n const [text, icon] = value == 0 ? [\"Не начата\", \"not_started\"] : value == 1 ? [\"Выполняется\", \"loop\"] : value == 2 ? [\"Выполнена\", \"task_alt\"] : value == 3 ? [\"Остановлена\", \"do_not_disturb_on\"] : [\"Отменена\", \"cancel\"];\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n direction: \"row\",\n gap: 0.5,\n alignItems: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n title: text\n }, icon), text);\n};\n\n//Список проектов\nconst ProjectsList = ({\n projects = [],\n selectedProject,\n onClick\n} = {}) => {\n //Подключение к контексту сообщений\n const {\n InlineMsgErr\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_2__[\"MessagingСtx\"]);\n\n //Генерация содержимого\n return projects.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null, projects.map(p => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n key: p.NRN,\n sx: p.NJOBS == 0 ? STYLES.PROJECTS_LIST_ITEM_NOJOBS : null,\n selected: p.NRN === selectedProject,\n onClick: () => onClick ? onClick(p) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n title: p.NEDITABLE == 1 ? \"Можно редактировать\" : \"Редактирование недоступно\"\n }, p.NEDITABLE == 1 ? \"edit\" : \"edit_off\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n primary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n sx: STYLES.PROJECTS_LIST_ITEM_PRIMARY\n }, p.SNAME),\n secondary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n sx: {\n ...STYLES.PROJECTS_LIST_ITEM_SECONDARY,\n ...(p.NJOBS == 0 ? STYLES.PROJECTS_LIST_ITEM_SECONDARY_NOJOBS : p.NCHANGED == 1 ? STYLES.PROJECTS_LIST_ITEM_SECONDARY_CHANGED : STYLES.PROJECTS_LIST_ITEM_SECONDARY_NOEDIT)\n }\n }, p.NJOBS == 1 ? p.NEDITABLE == 1 ? p.NCHANGED == 1 ? \"Изменён\" : \"Не изменён\" : \"Редактирование недоступно\" : \"Работы не определены\")\n })))) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InlineMsgErr, {\n okBtn: false,\n text: \"Нет доступных проектов\"\n });\n};\n\n//Контроль свойств - Список проектов\nProjectsList.propTypes = {\n projects: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().array),\n selectedProject: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().number),\n onClick: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().func)\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Корневая панель работ проектов\nconst PrjJobs = () => {\n //Собственное состояние\n let [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n needSave: false,\n showProjectsList: false,\n showPeriodsList: false,\n init: false,\n dateBegin: null,\n dateFact: null,\n durationMeas: null,\n labMeas: null,\n resourceStatus: null,\n ident: null,\n projects: [],\n projectsLoaded: false,\n selectedProjectJobsLoaded: false,\n selectedProject: null,\n selectedProjectDocRn: null,\n selectedProjectGanttDef: {},\n selectedProjectTasks: []\n });\n\n //Подключение к контексту приложения\n const {\n pOnlineShowDocument\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_3__[\"ApplicationСtx\"]);\n\n //Подключение к контексту сообщений\n const {\n InlineMsgInfo\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_2__[\"MessagingСtx\"]);\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 loadProjects = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (force = false) => {\n if (!state.projectsLoaded || force) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_PRJCTS_LIST\",\n args: {\n NIDENT: state.ident\n },\n respArg: \"COUT\"\n });\n setState(pv => ({\n ...pv,\n projectsLoaded: true,\n projects: [...(data?.XPROJECTS || [])]\n }));\n }\n }, [executeStored, state.ident, state.projectsLoaded]);\n\n //Загрузка списка работ проекта\n const loadProjectJobs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (tasksOnly = false) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_JOBS_LIST\",\n args: {\n NIDENT: state.ident,\n NPRN: state.selectedProject,\n NINCLUDE_DEF: tasksOnly === false ? 1 : 0\n },\n attributeValueProcessor: (name, val) => name == \"numb\" ? undefined : [\"start\", \"end\"].includes(name) ? (0,_core_utils__WEBPACK_IMPORTED_MODULE_4__.formatDateJSONDateOnly)(val) : val,\n respArg: \"COUT\"\n });\n setState(pv => ({\n ...pv,\n selectedProjectJobsLoaded: true,\n selectedProjectGanttDef: tasksOnly === true ? {\n ...pv.selectedProjectGanttDef\n } : data.XGANTT_DEF ? {\n ...data.XGANTT_DEF\n } : {},\n selectedProjectTasks: [...data.XGANTT_TASKS]\n }));\n }, [executeStored, state.ident, state.selectedProject]);\n\n //Изменение работы в графике\n const modifyJob = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (job, dateFrom, dateTo, dateBegin, dateFact, durationMeas) => {\n let data = null;\n try {\n data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_JOBS_MODIFY_PERIOD\",\n args: {\n NJB_JOBS: job,\n DDATE_FROM: dateFrom,\n DDATE_TO: dateTo,\n DBEGIN: dateBegin,\n DFACT: dateFact,\n NDURATION_MEAS: durationMeas\n }\n });\n if (data?.NRESOURCE_STATUS != -1) {\n setState(pv => ({\n ...pv,\n resourceStatus: data.NRESOURCE_STATUS,\n needSave: true\n }));\n loadProjects(true);\n }\n } finally {\n loadProjectJobs(true);\n }\n }, [executeStored, loadProjectJobs, loadProjects]);\n\n //Сохранение буфера балансировки в проекты\n const saveProjects = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_SAVE\",\n args: {\n NIDENT: state.ident\n },\n respArg: \"COUT\"\n });\n setState(pv => ({\n ...pv,\n needSave: false,\n projects: [...(data?.XPROJECTS || [])]\n }));\n }, [executeStored, state.ident]);\n\n //Инициализация данных балансировки\n const initJobs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (!state.init) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_INIT\",\n args: {\n DBEGIN: state.dateBegin ? new Date(state.dateBegin) : null,\n DFACT: state.dateFact ? new Date(state.dateFact) : null,\n NDURATION_MEAS: state.durationMeas,\n SLAB_MEAS: state.labMeas,\n NIDENT: state.ident\n }\n });\n setState(pv => ({\n ...pv,\n init: true,\n dateBegin: data.DBEGIN,\n dateFact: data.DFACT,\n durationMeas: data.NDURATION_MEAS,\n labMeas: data.SLAB_MEAS,\n resourceStatus: data.NRESOURCE_STATUS,\n ident: data.NIDENT\n }));\n }\n }, [state.init, state.dateBegin, state.dateFact, state.durationMeas, state.labMeas, state.ident, executeStored]);\n\n //Грузим список проектов при смене идентификатора процесса\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (state.ident) loadProjects();\n }, [state.ident, loadProjects]);\n\n //При смене выбранного проекта\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (state.selectedProject) loadProjectJobs(false);\n }, [state.selectedProject, loadProjectJobs]);\n\n //При подключении компонента к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n initJobs();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n //Выбор проекта\n const selectPoject = (project, projectDocRn) => {\n setState(pv => ({\n ...pv,\n selectedProject: project,\n selectedProjectDocRn: projectDocRn,\n selectedProjectJobsLoaded: false,\n selectedProjectTasks: [],\n selectedProjectGanttDef: {},\n showProjectsList: false\n }));\n };\n\n //Сброс выбора проекта\n const unselectProject = () => setState(pv => ({\n ...pv,\n selectedProjectJobsLoaded: false,\n selectedProject: null,\n selectedProjectDocRn: null,\n selectedProjectTasks: [],\n selectedProjectGanttDef: {},\n showProjectsList: false\n }));\n\n //Обработка нажатия на элемент в списке проектов\n const handleProjectClick = project => {\n if (state.selectedProject != project.NRN) selectPoject(project.NRN, project.NPROJECT);else unselectProject();\n };\n\n //Отработка нажатия на заголовок плана-графика\n const handleTitleClick = () => state.selectedProjectDocRn ? pOnlineShowDocument({\n unitCode: \"Projects\",\n document: state.selectedProjectDocRn\n }) : null;\n\n //Обработка измненения сроков задачи в диаграмме Гантта\n const handleTaskDatesChange = ({\n task,\n start,\n end,\n isMain\n }) => {\n if (isMain) modifyJob(task.rn, new Date(start), new Date(end), new Date(state.dateBegin), new Date(state.dateFact), state.durationMeas);\n };\n\n //Генерация кастомных представлений атрибутов задачи в редакторе\n const taskAttributeRenderer = ({\n task,\n attribute\n }) => {\n switch (attribute.name) {\n case \"type\":\n return task.type === 1 ? \"Этап проекта\" : \"Работа проекта\";\n case \"state\":\n return task.type === 1 ? formatStageStatusValue(task[attribute.name]) : formatJobStatusValue(task[attribute.name]);\n default:\n return null;\n }\n };\n\n //Обработка нажатия на сохранение данных в проект\n const handleSaveToProjectsClick = () => saveProjects();\n\n //Обработка нажатия на проект в таблице детализации трудоёмкости по плану-графику монитора ресурсов\n const handlePlanJobsDtlProjectClick = ({\n sender\n }) => {\n setState(pv => ({\n ...pv,\n showPeriodsList: false\n }));\n if (state.selectedProject != sender.NJB_PRJCTS) selectPoject(sender.NJB_PRJCTS, sender.NPROJECT);\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n p: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n variant: \"extended\",\n sx: STYLES.PROJECTS_BUTTON,\n onClick: () => setState(pv => ({\n ...pv,\n showProjectsList: !pv.showProjectsList\n }))\n }, \"\\u041F\\u0440\\u043E\\u0435\\u043A\\u0442\\u044B\", state.needSave ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, \"\\xA0\\xA0\", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n sx: {\n color: \"orange\"\n }\n }, \"save\")) : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n anchor: \"left\",\n open: state.showProjectsList,\n onClose: () => setState(pv => ({\n ...pv,\n showProjectsList: false\n })),\n sx: STYLES.PROJECTS_DRAWER\n }, state.projectsLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, state.needSave ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n sx: STYLES.PROJECTS_LIST_SAVE_BUTTON,\n onClick: handleSaveToProjectsClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, \"save\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n primary: \"\\u0421\\u043E\\u0445\\u0440\\u0430\\u043D\\u0438\\u0442\\u044C\",\n secondary: \"\\u041F\\u0435\\u0440\\u0435\\u043D\\u0441\\u0442\\u0438 \\u0438\\u0437\\u043C\\u0435\\u043D\\u0435\\u043D\\u0438\\u044F \\u0432 \\u043F\\u0440\\u043E\\u0435\\u043A\\u0442\\u044B\"\n }))) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ProjectsList, {\n projects: state.projects,\n selectedProject: state.selectedProject,\n onClick: handleProjectClick\n })) : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n variant: \"extended\",\n sx: STYLES.PERIODS_BUTTON,\n onClick: () => setState(pv => ({\n ...pv,\n showPeriodsList: !pv.showPeriodsList\n }))\n }, \"\\u0420\\u0435\\u0441\\u0443\\u0440\\u0441\\u044B\", [0, 1].includes(state.resourceStatus) ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, \"\\xA0\\xA0\", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n sx: {\n color: state.resourceStatus === 0 ? \"green\" : \"red\"\n }\n }, state.resourceStatus === 0 ? \"done\" : \"error\")) : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n anchor: \"right\",\n open: state.showPeriodsList,\n onClose: () => setState(pv => ({\n ...pv,\n showPeriodsList: false\n })),\n sx: STYLES.PERIODS_DRAWER\n }, state.ident ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_res_mon__WEBPACK_IMPORTED_MODULE_7__.ResMon, {\n ident: state.ident,\n onPlanJobsDtlProjectClick: handlePlanJobsDtlProjectClick\n }) : null), state.init == true ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n container: true,\n spacing: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n item: true,\n xs: 12\n }, state.selectedProjectJobsLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n sx: STYLES.GANTT_CONTAINER,\n p: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_gantt__WEBPACK_IMPORTED_MODULE_6__.P8PGantt, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_5__.P8P_GANTT_CONFIG_PROPS, state.selectedProjectGanttDef, {\n height: GANTT_HEIGHT,\n titleStyle: STYLES.GANTT_TITLE,\n onTitleClick: handleTitleClick,\n tasks: state.selectedProjectTasks,\n onTaskDatesChange: handleTaskDatesChange,\n taskAttributeRenderer: taskAttributeRenderer\n }))) : !state.selectedProject ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InlineMsgInfo, {\n okBtn: false,\n text: \"Укажите проект для отображения его плана-графика\"\n }) : null)) : null);\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_jobs/prj_jobs.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ PrjJobs: () => (/* binding */ PrjJobs)\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_15__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_15__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/List/List.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemButton/ListItemButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemIcon/ListItemIcon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemText/ListItemText.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __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/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Fab/Fab.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Drawer/Drawer.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _components_p8p_gantt__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../components/p8p_gantt */ \"./app/components/p8p_gantt.js\");\n/* harmony import */ var _res_mon__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./res_mon */ \"./app/panels/prj_jobs/res_mon.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Работы проектов\r\n Панель мониторинга: Корневая панель работ проектов\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Контекст взаимодействия с сервером\n //Контекст сообщений\n //Контекст приложения\n //Вспомогательные функции\n //Подключение компонентов к настройкам приложения\n //Диаграмма Ганта\n //Монитор ресурсов\n\n//---------\n//Константы\n//---------\n\n//Высота диаграммы Ганта\nconst GANTT_HEIGHT = \"650px\";\n\n//Ширина диаграммы Ганта\nconst GANTT_WIDTH = \"98vw\";\n\n//Стили\nconst STYLES = {\n PROJECTS_LIST_SAVE_BUTTON: {\n backgroundColor: \"orange\"\n },\n PROJECTS_LIST_ITEM_NOJOBS: {\n backgroundColor: \"#ff000045\"\n },\n PROJECTS_LIST_ITEM_PRIMARY: {\n wordWrap: \"break-word\"\n },\n PROJECTS_LIST_ITEM_SECONDARY: {\n wordWrap: \"break-word\",\n fontSize: \"0.5rem\",\n textTransform: \"uppercase\"\n },\n PROJECTS_LIST_ITEM_SECONDARY_NOJOBS: {\n color: \"red\"\n },\n PROJECTS_LIST_ITEM_SECONDARY_NOEDIT: {\n color: \"gray\"\n },\n PROJECTS_LIST_ITEM_SECONDARY_CHANGED: {\n color: \"green\"\n },\n PROJECTS_BUTTON: {\n position: \"absolute\"\n },\n PROJECTS_DRAWER: {\n width: \"250px\",\n flexShrink: 0,\n [`& .MuiDrawer-paper`]: {\n width: \"250px\",\n boxSizing: \"border-box\"\n }\n },\n GANTT_CONTAINER: {\n height: GANTT_HEIGHT,\n width: GANTT_WIDTH\n },\n GANTT_TITLE: {\n paddingLeft: \"100px\",\n paddingRight: \"120px\"\n },\n PERIODS_BUTTON: {\n position: \"absolute\",\n right: \"20px\"\n },\n PERIODS_DRAWER: {\n width: \"1000px\",\n flexShrink: 0,\n [`& .MuiDrawer-paper`]: {\n width: \"1000px\",\n boxSizing: \"border-box\"\n }\n }\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Формирование значения для колонки \"Состояние\" этапа\nconst formatStageStatusValue = value => {\n const [text, icon] = value == 0 ? [\"Зарегистрирован\", \"app_registration\"] : value == 1 ? [\"Открыт\", \"lock_open\"] : value == 2 ? [\"Закрыт\", \"lock_outline\"] : value == 3 ? [\"Согласован\", \"thumb_up_alt\"] : value == 4 ? [\"Исполнение прекращено\", \"block\"] : [\"Остановлен\", \"do_not_disturb_on\"];\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n direction: \"row\",\n gap: 0.5,\n alignItems: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n title: text\n }, icon), text);\n};\n\n//Формирование значения для колонки \"Состояние\" работы\nconst formatJobStatusValue = value => {\n const [text, icon] = value == 0 ? [\"Не начата\", \"not_started\"] : value == 1 ? [\"Выполняется\", \"loop\"] : value == 2 ? [\"Выполнена\", \"task_alt\"] : value == 3 ? [\"Остановлена\", \"do_not_disturb_on\"] : [\"Отменена\", \"cancel\"];\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n direction: \"row\",\n gap: 0.5,\n alignItems: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n title: text\n }, icon), text);\n};\n\n//Список проектов\nconst ProjectsList = ({\n projects = [],\n selectedProject,\n onClick\n} = {}) => {\n //Подключение к контексту сообщений\n const {\n InlineMsgErr\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_2__[\"MessagingСtx\"]);\n\n //Генерация содержимого\n return projects.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null, projects.map(p => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n key: p.NRN,\n sx: p.NJOBS == 0 ? STYLES.PROJECTS_LIST_ITEM_NOJOBS : null,\n selected: p.NRN === selectedProject,\n onClick: () => onClick ? onClick(p) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n title: p.NEDITABLE == 1 ? \"Можно редактировать\" : \"Редактирование недоступно\"\n }, p.NEDITABLE == 1 ? \"edit\" : \"edit_off\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n primary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n sx: STYLES.PROJECTS_LIST_ITEM_PRIMARY\n }, p.SNAME),\n secondary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n sx: {\n ...STYLES.PROJECTS_LIST_ITEM_SECONDARY,\n ...(p.NJOBS == 0 ? STYLES.PROJECTS_LIST_ITEM_SECONDARY_NOJOBS : p.NCHANGED == 1 ? STYLES.PROJECTS_LIST_ITEM_SECONDARY_CHANGED : STYLES.PROJECTS_LIST_ITEM_SECONDARY_NOEDIT)\n }\n }, p.NJOBS == 1 ? p.NEDITABLE == 1 ? p.NCHANGED == 1 ? \"Изменён\" : \"Не изменён\" : \"Редактирование недоступно\" : \"Работы не определены\")\n })))) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InlineMsgErr, {\n okBtn: false,\n text: \"Нет доступных проектов\"\n });\n};\n\n//Контроль свойств - Список проектов\nProjectsList.propTypes = {\n projects: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().array),\n selectedProject: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().number),\n onClick: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().func)\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Корневая панель работ проектов\nconst PrjJobs = () => {\n //Собственное состояние\n let [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n needSave: false,\n showProjectsList: false,\n showPeriodsList: false,\n init: false,\n dateBegin: null,\n dateFact: null,\n durationMeas: null,\n labMeas: null,\n resourceStatus: null,\n ident: null,\n projects: [],\n projectsLoaded: false,\n selectedProjectJobsLoaded: false,\n selectedProject: null,\n selectedProjectDocRn: null,\n selectedProjectGanttDef: {},\n selectedProjectTasks: []\n });\n\n //Подключение к контексту приложения\n const {\n pOnlineShowDocument\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_3__[\"ApplicationСtx\"]);\n\n //Подключение к контексту сообщений\n const {\n InlineMsgInfo\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_2__[\"MessagingСtx\"]);\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 loadProjects = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (force = false) => {\n if (!state.projectsLoaded || force) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_PRJCTS_LIST\",\n args: {\n NIDENT: state.ident\n },\n respArg: \"COUT\"\n });\n setState(pv => ({\n ...pv,\n projectsLoaded: true,\n projects: [...(data?.XPROJECTS || [])]\n }));\n }\n }, [executeStored, state.ident, state.projectsLoaded]);\n\n //Загрузка списка работ проекта\n const loadProjectJobs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (tasksOnly = false) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_JOBS_LIST\",\n args: {\n NIDENT: state.ident,\n NPRN: state.selectedProject,\n NINCLUDE_DEF: tasksOnly === false ? 1 : 0\n },\n attributeValueProcessor: (name, val) => name == \"numb\" ? undefined : [\"start\", \"end\"].includes(name) ? (0,_core_utils__WEBPACK_IMPORTED_MODULE_4__.formatDateJSONDateOnly)(val) : val,\n respArg: \"COUT\"\n });\n console.log(data);\n setState(pv => ({\n ...pv,\n selectedProjectJobsLoaded: true,\n selectedProjectGanttDef: tasksOnly === true ? {\n ...pv.selectedProjectGanttDef\n } : data.XGANTT_DEF ? {\n ...data.XGANTT_DEF\n } : {},\n selectedProjectTasks: [...data.XGANTT_TASKS]\n }));\n }, [executeStored, state.ident, state.selectedProject]);\n\n //Изменение работы в графике\n const modifyJob = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (job, dateFrom, dateTo, dateBegin, dateFact, durationMeas) => {\n let data = null;\n try {\n data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_JOBS_MODIFY_PERIOD\",\n args: {\n NJB_JOBS: job,\n DDATE_FROM: dateFrom,\n DDATE_TO: dateTo,\n DBEGIN: dateBegin,\n DFACT: dateFact,\n NDURATION_MEAS: durationMeas\n }\n });\n if (data?.NRESOURCE_STATUS != -1) {\n setState(pv => ({\n ...pv,\n resourceStatus: data.NRESOURCE_STATUS,\n needSave: true\n }));\n loadProjects(true);\n }\n } finally {\n loadProjectJobs(true);\n }\n }, [executeStored, loadProjectJobs, loadProjects]);\n\n //Сохранение буфера балансировки в проекты\n const saveProjects = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_SAVE\",\n args: {\n NIDENT: state.ident\n },\n respArg: \"COUT\"\n });\n setState(pv => ({\n ...pv,\n needSave: false,\n projects: [...(data?.XPROJECTS || [])]\n }));\n }, [executeStored, state.ident]);\n\n //Инициализация данных балансировки\n const initJobs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (!state.init) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_INIT\",\n args: {\n DBEGIN: state.dateBegin ? new Date(state.dateBegin) : null,\n DFACT: state.dateFact ? new Date(state.dateFact) : null,\n NDURATION_MEAS: state.durationMeas,\n SLAB_MEAS: state.labMeas,\n NIDENT: state.ident\n }\n });\n setState(pv => ({\n ...pv,\n init: true,\n dateBegin: data.DBEGIN,\n dateFact: data.DFACT,\n durationMeas: data.NDURATION_MEAS,\n labMeas: data.SLAB_MEAS,\n resourceStatus: data.NRESOURCE_STATUS,\n ident: data.NIDENT\n }));\n }\n }, [state.init, state.dateBegin, state.dateFact, state.durationMeas, state.labMeas, state.ident, executeStored]);\n\n //Грузим список проектов при смене идентификатора процесса\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (state.ident) loadProjects();\n }, [state.ident, loadProjects]);\n\n //При смене выбранного проекта\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (state.selectedProject) loadProjectJobs(false);\n }, [state.selectedProject, loadProjectJobs]);\n\n //При подключении компонента к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n initJobs();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n //Выбор проекта\n const selectPoject = (project, projectDocRn) => {\n setState(pv => ({\n ...pv,\n selectedProject: project,\n selectedProjectDocRn: projectDocRn,\n selectedProjectJobsLoaded: false,\n selectedProjectTasks: [],\n selectedProjectGanttDef: {},\n showProjectsList: false\n }));\n };\n\n //Сброс выбора проекта\n const unselectProject = () => setState(pv => ({\n ...pv,\n selectedProjectJobsLoaded: false,\n selectedProject: null,\n selectedProjectDocRn: null,\n selectedProjectTasks: [],\n selectedProjectGanttDef: {},\n showProjectsList: false\n }));\n\n //Обработка нажатия на элемент в списке проектов\n const handleProjectClick = project => {\n if (state.selectedProject != project.NRN) selectPoject(project.NRN, project.NPROJECT);else unselectProject();\n };\n\n //Отработка нажатия на заголовок плана-графика\n const handleTitleClick = () => state.selectedProjectDocRn ? pOnlineShowDocument({\n unitCode: \"Projects\",\n document: state.selectedProjectDocRn\n }) : null;\n\n //Обработка измненения сроков задачи в диаграмме Гантта\n const handleTaskDatesChange = ({\n task,\n start,\n end,\n isMain\n }) => {\n if (isMain) modifyJob(task.rn, new Date(start), new Date(end), new Date(state.dateBegin), new Date(state.dateFact), state.durationMeas);\n };\n\n //Генерация кастомных представлений атрибутов задачи в редакторе\n const taskAttributeRenderer = ({\n task,\n attribute\n }) => {\n switch (attribute.name) {\n case \"type\":\n return task.type === 1 ? \"Этап проекта\" : \"Работа проекта\";\n case \"state\":\n return task.type === 1 ? formatStageStatusValue(task[attribute.name]) : formatJobStatusValue(task[attribute.name]);\n default:\n return null;\n }\n };\n\n //Обработка нажатия на сохранение данных в проект\n const handleSaveToProjectsClick = () => saveProjects();\n\n //Обработка нажатия на проект в таблице детализации трудоёмкости по плану-графику монитора ресурсов\n const handlePlanJobsDtlProjectClick = ({\n sender\n }) => {\n setState(pv => ({\n ...pv,\n showPeriodsList: false\n }));\n if (state.selectedProject != sender.NJB_PRJCTS) selectPoject(sender.NJB_PRJCTS, sender.NPROJECT);\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n p: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n variant: \"extended\",\n sx: STYLES.PROJECTS_BUTTON,\n onClick: () => setState(pv => ({\n ...pv,\n showProjectsList: !pv.showProjectsList\n }))\n }, \"\\u041F\\u0440\\u043E\\u0435\\u043A\\u0442\\u044B\", state.needSave ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, \"\\xA0\\xA0\", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n sx: {\n color: \"orange\"\n }\n }, \"save\")) : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n anchor: \"left\",\n open: state.showProjectsList,\n onClose: () => setState(pv => ({\n ...pv,\n showProjectsList: false\n })),\n sx: STYLES.PROJECTS_DRAWER\n }, state.projectsLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, state.needSave ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n sx: STYLES.PROJECTS_LIST_SAVE_BUTTON,\n onClick: handleSaveToProjectsClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, \"save\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n primary: \"\\u0421\\u043E\\u0445\\u0440\\u0430\\u043D\\u0438\\u0442\\u044C\",\n secondary: \"\\u041F\\u0435\\u0440\\u0435\\u043D\\u0441\\u0442\\u0438 \\u0438\\u0437\\u043C\\u0435\\u043D\\u0435\\u043D\\u0438\\u044F \\u0432 \\u043F\\u0440\\u043E\\u0435\\u043A\\u0442\\u044B\"\n }))) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ProjectsList, {\n projects: state.projects,\n selectedProject: state.selectedProject,\n onClick: handleProjectClick\n })) : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n variant: \"extended\",\n sx: STYLES.PERIODS_BUTTON,\n onClick: () => setState(pv => ({\n ...pv,\n showPeriodsList: !pv.showPeriodsList\n }))\n }, \"\\u0420\\u0435\\u0441\\u0443\\u0440\\u0441\\u044B\", [0, 1].includes(state.resourceStatus) ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, \"\\xA0\\xA0\", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n sx: {\n color: state.resourceStatus === 0 ? \"green\" : \"red\"\n }\n }, state.resourceStatus === 0 ? \"done\" : \"error\")) : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n anchor: \"right\",\n open: state.showPeriodsList,\n onClose: () => setState(pv => ({\n ...pv,\n showPeriodsList: false\n })),\n sx: STYLES.PERIODS_DRAWER\n }, state.ident ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_res_mon__WEBPACK_IMPORTED_MODULE_7__.ResMon, {\n ident: state.ident,\n onPlanJobsDtlProjectClick: handlePlanJobsDtlProjectClick\n }) : null), state.init == true ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n container: true,\n spacing: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n item: true,\n xs: 12\n }, state.selectedProjectJobsLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n sx: STYLES.GANTT_CONTAINER,\n p: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_gantt__WEBPACK_IMPORTED_MODULE_6__.P8PGantt, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_5__.P8P_GANTT_CONFIG_PROPS, state.selectedProjectGanttDef, {\n height: GANTT_HEIGHT,\n titleStyle: STYLES.GANTT_TITLE,\n onTitleClick: handleTitleClick,\n tasks: state.selectedProjectTasks,\n onTaskDatesChange: handleTaskDatesChange,\n taskAttributeRenderer: taskAttributeRenderer\n }))) : !state.selectedProject ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InlineMsgInfo, {\n okBtn: false,\n text: \"Укажите проект для отображения его плана-графика\"\n }) : null)) : null);\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_jobs/prj_jobs.js?"); /***/ }), @@ -3524,7 +3733,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ DataGrid: () => (/* binding */ DataGrid),\n/* harmony export */ groupCellRender: () => (/* binding */ groupCellRender)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_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_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - Примеры для разработчиков\r\n Пример: Таблица данных \"P8PDataGrid\"\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Вспомогательные процедуры и функции\n //Таблица данных\n //Подключение компонентов к настройкам приложения\n //Контекст взаимодействия с сервером\n\n//---------\n//Константы\n//---------\n\n//Размер страницы данных\nconst DATA_GRID_PAGE_SIZE = 5;\n\n//Стили\nconst STYLES = {\n CONTAINER: {\n textAlign: \"center\",\n paddingTop: \"20px\"\n },\n TITLE: {\n paddingBottom: \"15px\"\n }\n};\n\n//---------------------------------------------\n//Вспомогательные функции форматирования данных\n//---------------------------------------------\n\n//Формирование значения для колонки \"Тип контрагента\"\nconst formatAgentTypeValue = (value, addText = false) => {\n const [text, icon] = value == 0 ? [\"Юридическое лицо\", \"business\"] : [\"Физическое лицо\", \"person\"];\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n direction: \"row\",\n gap: 0.5,\n alignItems: \"center\",\n justifyContent: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n title: text\n }, icon), addText == true ? text : null);\n};\n\n//Форматирование значений колонок\nconst valueFormatter = ({\n value,\n columnDef\n}) => {\n switch (columnDef.name) {\n case \"NAGNTYPE\":\n return formatAgentTypeValue(value, true);\n }\n return value;\n};\n\n//Генерация представления ячейки c данными\nconst dataCellRender = ({\n row,\n columnDef\n}) => {\n switch (columnDef.name) {\n case \"NAGNTYPE\":\n return {\n cellProps: {\n align: \"center\"\n },\n data: formatAgentTypeValue(row[columnDef.name], false)\n };\n }\n};\n\n//Генерация представления ячейки заголовка\nconst headCellRender = ({\n columnDef\n}) => {\n switch (columnDef.name) {\n case \"NAGNTYPE\":\n return {\n stackProps: {\n justifyContent: \"center\"\n },\n cellProps: {\n align: \"center\"\n }\n };\n }\n};\n\n//Генерация представления ячейки заголовка группы\nconst groupCellRender = () => ({\n cellStyle: {\n padding: \"2px\"\n }\n});\n\n//-----------\n//Тело модуля\n//-----------\n\n//Пример: Таблица данных \"P8PDataGrid\"\nconst DataGrid = ({\n title\n}) => {\n //Собственное состояние - таблица данных\n const [dataGrid, setdataGrid] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n filters: null,\n orders: null,\n groups: [],\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_4__[\"BackEndСtx\"]);\n\n //Загрузка данных таблицы с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (dataGrid.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_SAMPLES.DATA_GRID\",\n args: {\n CFILTERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.object2Base64XML)(dataGrid.filters, {\n arrayNodeName: \"filters\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.object2Base64XML)(dataGrid.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: dataGrid.pageNumber,\n NPAGE_SIZE: DATA_GRID_PAGE_SIZE,\n NINCLUDE_DEF: dataGrid.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\"\n });\n setdataGrid(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n groups: pv.pageNumber == 1 ? [...(data.XGROUPS || [])] : [...pv.groups, ...(data.XGROUPS.filter(g => !pv.groups.find(pg => pg.name == g.name)) || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE\n }));\n }\n }, [dataGrid.reload, dataGrid.filters, dataGrid.orders, dataGrid.dataLoaded, dataGrid.pageNumber, executeStored, SERV_DATA_TYPE_CLOB]);\n\n //При изменении состояния фильтра\n const handleFilterChanged = ({\n filters\n }) => setdataGrid(pv => ({\n ...pv,\n filters: [...filters],\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении состояния сортировки\n const handleOrderChanged = ({\n orders\n }) => setdataGrid(pv => ({\n ...pv,\n orders: [...orders],\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = () => setdataGrid(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadData();\n }, [dataGrid.reload, loadData]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: STYLES.CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n sx: STYLES.TITLE,\n variant: \"h6\"\n }, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n container: true,\n spacing: 1,\n pt: 5\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n item: true,\n xs: 12\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n p: 5\n }, dataGrid.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_2__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: dataGrid.columnsDef,\n groups: dataGrid.groups,\n rows: dataGrid.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_2__.P8P_DATA_GRID_SIZE.LARGE,\n filtersInitial: dataGrid.filters,\n morePages: dataGrid.morePages,\n reloading: dataGrid.reload,\n valueFormatter: valueFormatter,\n headCellRender: headCellRender,\n dataCellRender: dataCellRender,\n groupCellRender: groupCellRender,\n onOrderChanged: handleOrderChanged,\n onFilterChanged: handleFilterChanged,\n onPagesCountChanged: handlePagesCountChanged\n })) : null))));\n};\n\n//Контроль свойств - Пример: Таблица данных \"P8PDataGrid\"\nDataGrid.propTypes = {\n title: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().string).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/samples/data_grid.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ DataGrid: () => (/* binding */ DataGrid)\n/* harmony export */ });\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_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - Примеры для разработчиков\r\n Пример: Таблица данных \"P8PDataGrid\"\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Вспомогательные процедуры и функции\n //Таблица данных\n //Подключение компонентов к настройкам приложения\n //Контекст взаимодействия с сервером\n\n//---------\n//Константы\n//---------\n\n//Размер страницы данных\nconst DATA_GRID_PAGE_SIZE = 5;\n\n//Стили\nconst STYLES = {\n CONTAINER: {\n textAlign: \"center\",\n paddingTop: \"20px\"\n },\n TITLE: {\n paddingBottom: \"15px\"\n }\n};\n\n//---------------------------------------------\n//Вспомогательные функции форматирования данных\n//---------------------------------------------\n\n//Формирование значения для колонки \"Тип контрагента\"\nconst formatAgentTypeValue = (value, addText = false) => {\n const [text, icon] = value == 0 ? [\"Юридическое лицо\", \"business\"] : [\"Физическое лицо\", \"person\"];\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n direction: \"row\",\n gap: 0.5,\n alignItems: \"center\",\n justifyContent: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n title: text\n }, icon), addText == true ? text : null);\n};\n\n//Форматирование значений колонок\nconst valueFormatter = ({\n value,\n columnDef\n}) => {\n switch (columnDef.name) {\n case \"NAGNTYPE\":\n return formatAgentTypeValue(value, true);\n }\n return value;\n};\n\n//Генерация представления ячейки c данными\nconst dataCellRender = ({\n row,\n columnDef\n}) => {\n switch (columnDef.name) {\n case \"NAGNTYPE\":\n return {\n cellProps: {\n align: \"center\"\n },\n data: formatAgentTypeValue(row[columnDef.name], false)\n };\n }\n};\n\n//Генерация представления ячейки заголовка\nconst headCellRender = ({\n columnDef\n}) => {\n switch (columnDef.name) {\n case \"NAGNTYPE\":\n return {\n stackProps: {\n justifyContent: \"center\"\n },\n cellProps: {\n align: \"center\"\n }\n };\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Пример: Таблица данных \"P8PDataGrid\"\nconst DataGrid = ({\n title\n}) => {\n //Собственное состояние - таблица данных\n const [dataGrid, setdataGrid] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n filters: null,\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_4__[\"BackEndСtx\"]);\n\n //Загрузка данных таблицы с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (dataGrid.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_SAMPLES.DATA_GRID\",\n args: {\n CFILTERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.object2Base64XML)(dataGrid.filters, {\n arrayNodeName: \"filters\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.object2Base64XML)(dataGrid.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: dataGrid.pageNumber,\n NPAGE_SIZE: DATA_GRID_PAGE_SIZE,\n NINCLUDE_DEF: dataGrid.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\"\n });\n setdataGrid(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE\n }));\n }\n }, [dataGrid.reload, dataGrid.filters, dataGrid.orders, dataGrid.dataLoaded, dataGrid.pageNumber, executeStored, SERV_DATA_TYPE_CLOB]);\n\n //При изменении состояния фильтра\n const handleFilterChanged = ({\n filters\n }) => setdataGrid(pv => ({\n ...pv,\n filters: [...filters],\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении состояния сортировки\n const handleOrderChanged = ({\n orders\n }) => setdataGrid(pv => ({\n ...pv,\n orders: [...orders],\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = () => setdataGrid(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadData();\n }, [dataGrid.reload, loadData]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: STYLES.CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n sx: STYLES.TITLE,\n variant: \"h6\"\n }, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n container: true,\n spacing: 1,\n pt: 5\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n item: true,\n xs: 12\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n p: 5\n }, dataGrid.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_2__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: dataGrid.columnsDef,\n rows: dataGrid.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_2__.P8P_DATA_GRID_SIZE.LARGE,\n filtersInitial: dataGrid.filters,\n morePages: dataGrid.morePages,\n reloading: dataGrid.reload,\n valueFormatter: valueFormatter,\n headCellRender: headCellRender,\n dataCellRender: dataCellRender,\n onOrderChanged: handleOrderChanged,\n onFilterChanged: handleFilterChanged,\n onPagesCountChanged: handlePagesCountChanged\n })) : null))));\n};\n\n//Контроль свойств - Пример: Таблица данных \"P8PDataGrid\"\nDataGrid.propTypes = {\n title: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().string).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/samples/data_grid.js?"); /***/ }), @@ -3612,7 +3821,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 */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\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_messaging__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./context/application */ \"./app/context/application.js\");\n/* harmony import */ var _app__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./app */ \"./app/app.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../app.text */ \"./app.text.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _app_config__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../app.config */ \"./app.config.js\");\n/* harmony import */ var _core_client__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./core/client */ \"./app/core/client.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//Обёртка для контекста\nconst Root = () => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_context_messaging__WEBPACK_IMPORTED_MODULE_1__.MessagingContext, {\n titles: _app_text__WEBPACK_IMPORTED_MODULE_5__.TITLES,\n texts: _app_text__WEBPACK_IMPORTED_MODULE_5__.TEXTS,\n buttons: _app_text__WEBPACK_IMPORTED_MODULE_5__.BUTTONS\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_context_backend__WEBPACK_IMPORTED_MODULE_2__.BackEndContext, {\n client: _core_client__WEBPACK_IMPORTED_MODULE_8__[\"default\"]\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_context_application__WEBPACK_IMPORTED_MODULE_3__.ApplicationContext, {\n errors: _app_text__WEBPACK_IMPORTED_MODULE_5__.ERRORS,\n displaySizeGetter: _core_utils__WEBPACK_IMPORTED_MODULE_6__.getDisplaySize,\n guidGenerator: _core_utils__WEBPACK_IMPORTED_MODULE_6__.genGUID,\n config: _app_config__WEBPACK_IMPORTED_MODULE_7__[\"default\"]\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_app__WEBPACK_IMPORTED_MODULE_4__.App, null))));\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Root);\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/root.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\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_messaging__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./context/application */ \"./app/context/application.js\");\n/* harmony import */ var _app__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./app */ \"./app/app.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../app.text */ \"./app.text.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _app_config__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../app.config */ \"./app.config.js\");\n/* harmony import */ var _core_client__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./core/client */ \"./app/core/client.js\");\n/*\n Парус 8 - Панели мониторинга\n Корневой класс приложения (обёртка для контекста)\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контекст сообщений\n //Контекст взаимодействия с сервером\n //Контекст приложения\n //Приложение\n //Текстовые ресурсы и константы\n //Вспомогательные функции\n //Настройки приложения\n //Клиент для взаимодействия с сервером\n\n//-----------\n//Тело модуля\n//-----------\n\n//Обёртка для контекста\nconst Root = () => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_context_messaging__WEBPACK_IMPORTED_MODULE_1__.MessagingContext, {\n titles: _app_text__WEBPACK_IMPORTED_MODULE_5__.TITLES,\n texts: _app_text__WEBPACK_IMPORTED_MODULE_5__.TEXTS,\n buttons: _app_text__WEBPACK_IMPORTED_MODULE_5__.BUTTONS\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_context_backend__WEBPACK_IMPORTED_MODULE_2__.BackEndContext, {\n client: _core_client__WEBPACK_IMPORTED_MODULE_8__[\"default\"]\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_context_application__WEBPACK_IMPORTED_MODULE_3__.ApplicationContext, {\n errors: _app_text__WEBPACK_IMPORTED_MODULE_5__.ERRORS,\n displaySizeGetter: _core_utils__WEBPACK_IMPORTED_MODULE_6__.getDisplaySize,\n guidGenerator: _core_utils__WEBPACK_IMPORTED_MODULE_6__.genGUID,\n config: _app_config__WEBPACK_IMPORTED_MODULE_7__[\"default\"]\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_app__WEBPACK_IMPORTED_MODULE_4__.App, null))));\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Root);\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/root.js?"); /***/ }), diff --git a/libs/frappe-gantt/frappe-gantt.js b/libs/frappe-gantt/frappe-gantt.js index 0ca18a0..da08f9f 100644 --- a/libs/frappe-gantt/frappe-gantt.js +++ b/libs/frappe-gantt/frappe-gantt.js @@ -473,6 +473,9 @@ var Gantt = (function () { class: 'bar-progress', append_to: this.bar_group, }); + //ЦИТК + if (this.task.bgProgressColor) this.$bar_progress.style.fill = this.task.bgProgressColor; + //ЦИТК animateSVG(this.$bar_progress, 'width', 0, this.progress_width); } diff --git a/p8panels.config b/p8panels.config index 985b3d8..c04e3e8 100644 --- a/p8panels.config +++ b/p8panels.config @@ -12,10 +12,16 @@ - + + + + + + + + preview="./img/eqs_prfrm.jpg"/> +