/*
    Парус 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 { ApplicationCtx } 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(ApplicationCtx);

    //Отображение записи проекта в штатном разделе
    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 };
