forked from CITKParus/P8-Panels
71 lines
3.3 KiB
JavaScript
71 lines
3.3 KiB
JavaScript
/*
|
||
Парус 8 - Панели мониторинга - ПУП - Информация о проектах
|
||
Список проектов
|
||
*/
|
||
|
||
//---------------------
|
||
//Подключение библиотек
|
||
//---------------------
|
||
|
||
import React, { useState, useContext } from "react"; //Классы React
|
||
import { P8PDataGrid } from "../../components/p8p_data_grid"; //Таблица данных
|
||
import { P8P_DATA_GRID_CONFIG_PROPS } from "../../config_wrapper"; //Подключение компонентов к настройкам приложения
|
||
import { ApplicationСtx } from "../../context/application"; //Контекст приложения
|
||
import { useProjectsDataGrid } from "./projects_hooks"; //Хуки списка проектов
|
||
import { FILTER_INITIAL, Filter } from "./filter"; //Компонент "Фильтр"
|
||
import { PROJECTS_STYLES, projectDataCellRender, projectRowExpandRender } from "./projects_layouts"; //Дополнительная разметка и вёрстка клиентских элементов
|
||
|
||
//-----------
|
||
//Тело модуля
|
||
//-----------
|
||
|
||
//Список проектов
|
||
const Projects = () => {
|
||
//Собственное состояние
|
||
const [projects, setProjects] = useState({ pageNumber: 1, orders: [], filter: { ...FILTER_INITIAL } });
|
||
|
||
//Состояние таблицы проектов
|
||
const [projectsDataGrid] = useProjectsDataGrid({ ...projects.filter, pageNumber: projects.pageNumber, orders: projects.orders });
|
||
|
||
//Подключение к контексту приложения
|
||
const { pOnlineShowDocument } = useContext(ApplicationСtx);
|
||
|
||
//Отображение записи проекта в штатном разделе
|
||
const showProject = async rn => pOnlineShowDocument({ unitCode: "Projects", document: rn, modal: false });
|
||
|
||
//При изменении количества отображаемых страниц
|
||
const handlePagesCountChanged = () => setProjects(pv => ({ ...pv, pageNumber: pv.pageNumber + 1 }));
|
||
|
||
//При изменении состояния сортировки
|
||
const handleOrderChanged = ({ orders }) => setProjects(pv => ({ ...pv, orders: [...orders], pageNumber: 1 }));
|
||
|
||
//При изменении фильтра
|
||
const handleFilterChanged = values => setProjects(pv => ({ ...pv, filter: { ...values }, pageNumber: 1 }));
|
||
|
||
//Генерация содержимого
|
||
return (
|
||
<>
|
||
<Filter values={projects.filter} onChange={handleFilterChanged} />
|
||
{projectsDataGrid.init ? (
|
||
<P8PDataGrid
|
||
{...P8P_DATA_GRID_CONFIG_PROPS}
|
||
{...projectsDataGrid}
|
||
containerComponentProps={{ sx: PROJECTS_STYLES.DATA_GRID_CONTAINER(projectsDataGrid.morePages), elevation: 0 }}
|
||
expandable={true}
|
||
fixedHeader={true}
|
||
onPagesCountChanged={handlePagesCountChanged}
|
||
onOrderChanged={handleOrderChanged}
|
||
dataCellRender={prms => projectDataCellRender({ ...prms, showProject })}
|
||
rowExpandRender={projectRowExpandRender}
|
||
/>
|
||
) : null}
|
||
</>
|
||
);
|
||
};
|
||
|
||
//----------------
|
||
//Интерфейс модуля
|
||
//----------------
|
||
|
||
export { Projects };
|