83 lines
3.6 KiB
JavaScript
83 lines
3.6 KiB
JavaScript
/*
|
||
Парус 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 };
|