97 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /*
 | ||
|     Парус 8 - Панели мониторинга - ПУП - Информация о проектах
 | ||
|     Список проектов: дополнительная разметка и вёрстка клиентских элементов
 | ||
| */
 | ||
| 
 | ||
| //---------------------
 | ||
| //Подключение библиотек
 | ||
| //---------------------
 | ||
| 
 | ||
| import React from "react"; //Классы React
 | ||
| import { Icon, Stack, Paper, Link } from "@mui/material"; //Интерфейсные элементы
 | ||
| import { P8P_DATA_GRID_MORE_HEIGHT } from "../../components/p8p_data_grid"; //Таблица данных
 | ||
| import { APP_BAR_HEIGHT } from "../../components/p8p_app_workspace"; //Заголовок страницы
 | ||
| import { APP_STYLES } from "../../../app.styles"; //Типовые стили
 | ||
| import { COMMON_STYLES, formatCostStatusValue, formatCostReadyValue } from "./layouts"; //Общие стили и разметка панели
 | ||
| import { Stages } from "./stages"; //Компонент "Этапы проекта"
 | ||
| 
 | ||
| //---------
 | ||
| //Константы
 | ||
| //---------
 | ||
| 
 | ||
| //Высота фильтра (пиксели)
 | ||
| const FILTER_HEIGHT = "60px";
 | ||
| 
 | ||
| //Стили
 | ||
| const STYLES = {
 | ||
|     DATA_GRID_CONTAINER: morePages => ({
 | ||
|         height: `calc(100vh - ${APP_BAR_HEIGHT} - ${FILTER_HEIGHT} - ${morePages ? P8P_DATA_GRID_MORE_HEIGHT : "0px"} - 8px)`,
 | ||
|         ...APP_STYLES.SCROLL
 | ||
|     })
 | ||
| };
 | ||
| 
 | ||
| //-----------
 | ||
| //Тело модуля
 | ||
| //-----------
 | ||
| 
 | ||
| //Формирование значения для колонки "Состояние" проекта
 | ||
| const formatPrjStateValue = value => {
 | ||
|     const [text, icon] =
 | ||
|         value == 0
 | ||
|             ? ["Зарегистрирован", "app_registration"]
 | ||
|             : value == 1
 | ||
|             ? ["Открыт", "lock_open"]
 | ||
|             : value == 2
 | ||
|             ? ["Остановлен", "do_not_disturb_on"]
 | ||
|             : value == 3
 | ||
|             ? ["Закрыт", "lock_outline"]
 | ||
|             : value == 4
 | ||
|             ? ["Согласован", "thumb_up_alt"]
 | ||
|             : ["Исполнение прекращено", "block"];
 | ||
|     return (
 | ||
|         <Stack direction="row" gap={0.5} alignItems="center" justifyContent="center">
 | ||
|             <Icon title={text} sx={COMMON_STYLES.STATE(value)}>
 | ||
|                 {icon}
 | ||
|             </Icon>
 | ||
|         </Stack>
 | ||
|     );
 | ||
| };
 | ||
| 
 | ||
| //Форматирование ячеек таблицы "Проекты"
 | ||
| const projectDataCellRender = ({ row, columnDef, showProject }) => {
 | ||
|     //Формирование представлений
 | ||
|     switch (columnDef.name) {
 | ||
|         case "NCOST_STATUS":
 | ||
|             return { cellProps: { align: "center" }, data: formatCostStatusValue({ value: row[columnDef.name] }) };
 | ||
|         case "NCOST_READY":
 | ||
|             return { cellProps: { align: "center" }, data: formatCostReadyValue(row[columnDef.name]) };
 | ||
|         case "NSTATE":
 | ||
|             return { cellProps: { align: "center" }, data: formatPrjStateValue(row[columnDef.name]) };
 | ||
|         case "SCODE":
 | ||
|             return {
 | ||
|                 data: (
 | ||
|                     <Link component="button" align="left" underline="hover" onClick={() => showProject(row["NRN"])}>
 | ||
|                         {row[columnDef.name]}
 | ||
|                     </Link>
 | ||
|                 )
 | ||
|             };
 | ||
|         default:
 | ||
|             return { data: row[columnDef.name] };
 | ||
|     }
 | ||
| };
 | ||
| 
 | ||
| //Генерация представления расширения строки таблицы "Проектов"
 | ||
| const projectRowExpandRender = ({ row }) => {
 | ||
|     return (
 | ||
|         <Paper elevation={6}>
 | ||
|             <Stages projectRn={row.NRN} projectCode={row.SCODE} />
 | ||
|         </Paper>
 | ||
|     );
 | ||
| };
 | ||
| 
 | ||
| //----------------
 | ||
| //Интерфейс модуля
 | ||
| //----------------
 | ||
| 
 | ||
| export { STYLES as PROJECTS_STYLES, projectDataCellRender, projectRowExpandRender };
 |