/* Парус 8 - Панели мониторинга - ПУП - Информация о проектах Список проектов: пользовательские хуки для взаимодействия с сервером */ //--------------------- //Подключение библиотек //--------------------- import { useState, useContext, useEffect } from "react"; //Классы React import { BackEndСtx } from "../../context/backend"; //Контекст взаимодействия с сервером import { object2Base64XML, formatDateRF } from "../../core/utils"; //Вспомогательные функции import config from "../../../app.config"; //Настройки приложения //--------- //Константы //--------- //Размер страницы данных const DATA_GRID_PAGE_SIZE = config.SYSTEM.PAGE_SIZE; //----------- //Тело модуля //----------- //Получение данных проектов с сервера const useProjectsDataGrid = ({ prjType, insDep, priceStructStatus, prjState, search, pageNumber, orders }) => { //Собственное состояние - флаг загрузки const [isLoading, setLoading] = useState(false); //Собственное состояние - таблица данных const [data, setData] = useState({ init: false, morePages: true }); //Подключение к контексту взаимодействия с сервером const { executeStored, SERV_DATA_TYPE_CLOB } = useContext(BackEndСtx); //При необходимости обновить данные таблицы useEffect(() => { //Загрузка данных таблицы с сервера const loadData = async () => { try { setLoading(true); const data = await executeStored({ stored: "PKG_P8PANELS_PROJECTS.INFO_PROJECTS_DG", args: { SPRJ_TYPE: prjType, SINS_DEPARTMENT: insDep, NCOST_STATUS: priceStructStatus, NSTATE: prjState, SSEARCH: search, CORDERS: { VALUE: object2Base64XML(orders, { arrayNodeName: "orders" }), SDATA_TYPE: SERV_DATA_TYPE_CLOB }, NPAGE_NUMBER: pageNumber, NPAGE_SIZE: DATA_GRID_PAGE_SIZE, NINCLUDE_DEF: pageNumber == 1 ? 1 : 0 }, respArg: "COUT", loader: true, attributeValueProcessor: (name, val) => (["DBEGPLAN", "DENDPLAN"].includes(name) ? formatDateRF(val) : val) }); setData(pv => ({ ...pv, columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef || [], rows: pageNumber == 1 ? [...(data.XDATA_GRID.rows || [])] : [...(pv.rows || []), ...(data.XDATA_GRID.rows || [])], morePages: DATA_GRID_PAGE_SIZE == 0 ? false : (data.XDATA_GRID.rows || []).length >= DATA_GRID_PAGE_SIZE, init: true })); } finally { setLoading(false); } }; loadData(); }, [prjType, insDep, priceStructStatus, prjState, search, pageNumber, orders, executeStored, SERV_DATA_TYPE_CLOB]); //Возвращаем интерфейс хука return [data, isLoading]; }; //---------------- //Интерфейс модуля //---------------- export { useProjectsDataGrid };