diff --git a/app/panels/mech_rec_cost_prod_plans/hooks.js b/app/panels/mech_rec_cost_prod_plans/hooks.js index 62664b1..3cf45a9 100644 --- a/app/panels/mech_rec_cost_prod_plans/hooks.js +++ b/app/panels/mech_rec_cost_prod_plans/hooks.js @@ -1,5 +1,19 @@ -import React from "react"; +/* + Парус 8 - Панели мониторинга - ПУП - Производственная программа + Кастомные хуки +*/ +//--------------------- +//Подключение библиотек +//--------------------- + +import React from "react"; //Классы React + +//----------- +//Тело модуля +//----------- + +//Клиентский отбор загруженных планов по поисковой фразе export const useFilteredPlans = (plans, filter) => { const filteredPlans = React.useMemo(() => { return plans.filter(project => project.SDOC_INFO.toLowerCase().includes(filter)); 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 index 025db4f..10fd417 100644 --- 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 @@ -31,32 +31,50 @@ 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: { + PLANS_FINDER: { marginTop: "10px", marginLeft: "10px", width: "93%" }, + PLANS_LIST_ITEM_PRIMARY: { wordWrap: "break-word" }, + PLANS_BUTTON: { position: "absolute" }, + PLANS_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" } } + GANTT_TITLE: { paddingLeft: "100px", paddingRight: "120px" } }; -//Список проектов -const ProjectsList = ({ plans = [], selectedPlan, filter, setFilter, onClick } = {}) => { +//------------------------------------ +//Вспомогательные функции и компоненты +//------------------------------------ + +//Разбор XML с данными спецификации производственной программы +const parseProdPlanSpXML = xmlDoc => { + return new Promise((resolve, reject) => { + try { + const parser = new XMLParser({ + ignoreDeclaration: true, + ignoreAttributes: false, + parseAttributeValue: true, + attributeNamePrefix: "", + attributeValueProcessor: (name, val) => + name == "numb" ? undefined : ["start", "end"].includes(name) ? formatDateJSONDateOnly(val) : val + }); + const data = parser.parse(xmlDoc); + resolve(data.XDATA); + } catch (e) { + reject(e); + } + }); +}; + +//Список планов +const PlansList = ({ plans = [], selectedPlan, filter, setFilter, onClick } = {}) => { //Генерация содержимого return (