forked from CITKParus/P8-Panels
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 };
|