/* Парус 8 - Панели мониторинга - ПУП - Мониторинг сборки изделий Панель мониторинга: Детализация по объекту */ //--------------------- //Подключение библиотек //--------------------- import React from "react"; //Классы React import PropTypes from "prop-types"; //Контроль свойств компонента import { Box, Grid, Container, Button, Typography } from "@mui/material"; //Интерфейсные элементы import { ProgressBox } from "../elements/progressBox"; //Блок информации по прогрессу объекта import { P8PDataGrid, P8P_DATA_GRID_SIZE } from "../../../components/p8p_data_grid"; //Таблица данных import { P8P_DATA_GRID_CONFIG_PROPS } from "../../../config_wrapper"; //Подключение компонентов к настройкам приложения import { useCostProductComposition, useCostRouteLists, useCostDeliverySheets } from "../backend"; //Компоненты панели //--------- //Константы //--------- //Стили const STYLES = { TABLE_INFO_MAIN: { display: "flex", justifyContent: "center", alignItems: "center", flexDirection: "column", border: "1px solid", borderRadius: "25px", height: "35vh" }, TABLE_INFO_SUB: { margin: "21.6px 0px", maxHeight: "100%", overflow: "auto", textAlign: "center", width: "100%" }, DETAIL_INFO: { display: "flex", justifyContent: "space-around", alignItems: "center", border: "1px solid", borderRadius: "25px", height: "17vh" }, PRODUCT_SELECTOR: { display: "flex", justifyContent: "center", alignItems: "center", flexDirection: "column", border: "1px solid", borderRadius: "25px", height: "53vh", marginTop: "16px" }, PLAN_INFO_MAIN: { display: "flex", flexDirection: "column", gap: "16px" }, PLAN_INFO_SUB: { display: "flex", justifyContent: "space-between", width: "280px", borderBottom: "1px solid" } }; //------------------------------------ //Вспомогательные функции и компоненты //------------------------------------ //Информация об объекте const CardDetailInfo = ({ cardInfo }) => { return ( <> Номер борта: {cardInfo.SNUMB} Год выпуска: {cardInfo.NYEAR} ); }; //Контроль свойств - Информация об объекте CardDetailInfo.propTypes = { cardInfo: PropTypes.object }; //Детали объекта const CardSelector = ({ products, setCostProductComposition }) => { //При выборе детали в SVG const handleProductClick = product => { setCostProductComposition(pv => ({ ...pv, selectedProduct: product })); }; return ( <> {products.map(el => ( ))} ); }; //Контроль свойств - Детали объекта CardSelector.propTypes = { products: PropTypes.array, setCostProductComposition: PropTypes.func }; //Генерация представления ячейки заголовка const headCellRender = ({ columnDef }) => { //Описываем общий стиль let cellStyle = { padding: "2px 5px", fontSize: "12px", textAlign: "center", lineHeight: "1rem" }; let stackProps = { justifyContent: "center" }; //Дополнительные свойства switch (columnDef.name) { case "NREMN_LABOUR": //Добавляем максимальную ширину cellStyle = { ...cellStyle, maxWidth: "90px" }; break; case "NDEFICIT": //Добавляем максимальную ширину cellStyle = { ...cellStyle, maxWidth: "55px" }; break; case "NAPPLICABILITY": //Добавляем максимальную ширину cellStyle = { ...cellStyle, maxWidth: "90px" }; break; default: break; } return { stackProps, cellStyle }; }; //Генерация заливки строки исходя от значений const dataCellRender = ({ row, columnDef }) => { //Описываем общий стиль let cellStyle = { padding: "2px 5px", fontSize: "12px" }; //Для всех кроме содержания и номенклатуры добавляем выравнивание switch (columnDef.name) { case "SOPERATION": break; case "SNOMEN": break; default: //Добавляем выравнивание cellStyle = { ...cellStyle, textAlign: "center" }; break; } return { cellStyle, data: row[columnDef] }; }; //----------- //Тело модуля //----------- //Детализация по объекту const CardDetail = ({ card, handleBackClick }) => { //Собственное состояние - данные производственных составов SVG const [costProductComposition, setCostProductComposition] = useCostProductComposition(card.NRN); //Собственное состояние - таблица данных маршрутных листов const [costRouteLists, setCostRouteLists] = useCostRouteLists(card.NRN, costProductComposition.selectedProduct); //Собственное состояние - таблица данных комплектовочных ведомостей const [сostDeliverySheets, setСostDeliverySheets] = useCostDeliverySheets(card.NRN, costProductComposition.selectedProduct); //При изменении состояния сортировки маршрутных листов const costRouteListsOrderChanged = ({ orders }) => setCostRouteLists(pv => ({ ...pv, orders: [...orders], pageNumber: 1, reload: true })); //При изменении количества отображаемых страниц маршрутных листов const costRouteListsPagesCountChanged = () => setCostRouteLists(pv => ({ ...pv, pageNumber: pv.pageNumber + 1, reload: true })); //При изменении состояния сортировки комплектовочных ведомостей const СostDeliverySheetsOrderChanged = ({ orders }) => setСostDeliverySheets(pv => ({ ...pv, orders: [...orders], pageNumber: 1, reload: true })); //При изменении количества отображаемых страниц комплектовочных ведомостей const СostDeliverySheetsPagesCountChanged = () => setСostDeliverySheets(pv => ({ ...pv, pageNumber: pv.pageNumber + 1, reload: true })); return ( {!costRouteLists.dataLoaded ? ( Выберите агрегат самолёта, чтобы увидеть информацию ) : costRouteLists.rows.length === 0 ? ( Нет данных по МК ) : ( <> Маршрутная карта )} {!сostDeliverySheets.dataLoaded ? ( Выберите агрегат самолёта, чтобы увидеть информацию ) : сostDeliverySheets.rows.length === 0 ? ( Нет данных по КВ ) : ( <> Дефицит по КВ )} ); }; //Контроль свойств - Детализация по объекту CardDetail.propTypes = { card: PropTypes.object, handleBackClick: PropTypes.func }; //---------------- //Интерфейс модуля //---------------- export { CardDetail };