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 };
 |