Dollerino 261f2cf490 init
2026-04-02 13:44:02 +03:00

183 lines
8.4 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
Парус 8 - Панели мониторинга - ТОиР - Аналитика по ремонтам АТС
Пользовательские хуки: Хуки основных компонентов
*/
//---------------------
//Подключение библиотек
//---------------------
import { useState, useContext, useCallback, useEffect } from "react"; //Классы React
import { BackEndСtx } from "../../../context/backend"; //Контекст взаимодействия с сервером
import { object2Base64XML, formatDateRF } from "../../../core/utils";
//--------------------------
//Вспомогательные компоненты
//--------------------------
//-----------
//Тело модуля
//-----------
//Хук графика статусов
const useChartStatuses = ({ storedArgs = {} }) => {
//Собственное состояние - график
const [chartStatuses, setChartStatuses] = useState({ loaded: false, reload: false });
//Подключение к контексту взаимодействия с сервером
const { executeStored } = useContext(BackEndСtx);
//При необходимости перезагрузки графика
const handleReload = useCallback(() => setChartStatuses(pv => ({ ...pv, reload: true })), []);
//При подключении к странице
useEffect(() => {
//Загрузка данных графика с сервера
const loadChart = async () => {
try {
const chart = await executeStored({
stored: "UDO_PKG_P8PANELS_RPR_ANL.CHART_STATUSES",
args: {
DDATE_FROM: storedArgs.dDateBegin ? new Date(storedArgs.dDateBegin) : null,
DDATE_TO: storedArgs.dDateEnd ? new Date(storedArgs.dDateEnd) : null,
SINS_DEPARTMENT: storedArgs.sCustomerDept,
SEQTYPEWRK: storedArgs.sWorkType,
SEQWRKKIND: storedArgs.sWorkKind,
NSTATE: storedArgs.nState,
NTYPESPEND: storedArgs.nType
},
respArg: "COUT"
});
setChartStatuses(pv => ({ ...pv, loaded: true, reload: false, ...chart.XCHART }));
} catch (e) {
setChartStatuses(pv => ({ ...pv, loaded: false, reload: false }));
}
};
//При необходимости перезагрузить
if (chartStatuses.reload) loadChart();
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [chartStatuses.reload, executeStored]);
//Возвращаем график
return { chartStatuses, handleReload };
};
//Хук графика трудовых затрат
const useChartSpendings = ({ storedArgs = {} }) => {
//Собственное состояние - график
const [chartSpendings, setChartSpendings] = useState({ loaded: false, reload: false });
//Подключение к контексту взаимодействия с сервером
const { executeStored } = useContext(BackEndСtx);
//При необходимости перезагрузки графика
const handleReload = useCallback(() => setChartSpendings(pv => ({ ...pv, reload: true })), []);
//При подключении к странице
useEffect(() => {
//Загрузка данных графика с сервера
const loadChart = async () => {
try {
const chart = await executeStored({
stored: "UDO_PKG_P8PANELS_RPR_ANL.CHART_SPENDINGS",
args: {
DDATE_FROM: storedArgs.dDateBegin ? new Date(storedArgs.dDateBegin) : null,
DDATE_TO: storedArgs.dDateEnd ? new Date(storedArgs.dDateEnd) : null,
SINS_DEPARTMENT: storedArgs.sCustomerDept,
SEQTYPEWRK: storedArgs.sWorkType,
SEQWRKKIND: storedArgs.sWorkKind,
NSTATE: storedArgs.nState,
NTYPESPEND: storedArgs.nType
},
respArg: "COUT"
});
setChartSpendings(pv => ({ ...pv, loaded: true, reload: false, ...chart.XCHART }));
} catch (e) {
setChartSpendings(pv => ({ ...pv, loaded: false, reload: false }));
}
};
//При необходимости перезагрузить
if (chartSpendings.reload) loadChart();
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [chartSpendings.reload, executeStored]);
//Возвращаем график
return { chartSpendings, handleReload };
};
//Хук таблицы ремотных ведомостей
const useTableRepairs = ({ storedArgs = [] }) => {
//Собственное состояние - таблица
const [dataGrid, setDataGrid] = useState({
dataLoaded: false,
filters: [],
orders: null,
pageNumber: 1,
morePages: true,
reloading: false
});
//Подключение к контексту взаимодействия с сервером
const { executeStored, SERV_DATA_TYPE_CLOB } = useContext(BackEndСtx);
//При изменении состояния фильтра
const handleFilterChanged = ({ filters }) => setDataGrid(pv => ({ ...pv, filters: [...filters], pageNumber: 1, reloading: true }));
//При изменении состояния сортировки
const handleOrderChanged = ({ orders }) => setDataGrid(pv => ({ ...pv, orders: [...orders], pageNumber: 1, reloading: true }));
//При изменении количества отображаемых страниц
const handlePagesCountChanged = () => setDataGrid(pv => ({ ...pv, pageNumber: pv.pageNumber + 1, reloading: true }));
//При необходимости перезагрузки таблицы
const handleReload = () => setDataGrid(pv => ({ ...pv, pageNumber: 1, reloading: true }));
//При подключении к странице
useEffect(() => {
//Загрузка данных графика с сервера
const loadDataGrid = async () => {
try {
const data = await executeStored({
stored: "UDO_PKG_P8PANELS_RPR_ANL.DATA_GRID",
args: {
CFILTERS: {
VALUE: object2Base64XML([...dataGrid.filters, ...storedArgs], { arrayNodeName: "filters" }),
SDATA_TYPE: SERV_DATA_TYPE_CLOB
},
CORDERS: { VALUE: object2Base64XML(dataGrid.orders, { arrayNodeName: "orders" }), SDATA_TYPE: SERV_DATA_TYPE_CLOB },
NPAGE_NUMBER: dataGrid.pageNumber,
NPAGE_SIZE: 10,
NINCLUDE_DEF: dataGrid.dataLoaded ? 0 : 1
},
attributeValueProcessor: (name, val) => (["DDOCDATE", "DDATEFACT_BEG", "DDATEFACT_END"].includes(name) ? formatDateRF(val) : val),
respArg: "COUT"
});
setDataGrid(pv => ({
...pv,
...data.XDATA_GRID,
columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef || [],
rows: pv.pageNumber == 1 ? [...(data.XDATA_GRID.rows || [])] : [...(pv.rows || []), ...(data.XDATA_GRID.rows || [])],
dataLoaded: true,
reloading: false,
morePages: (data.XDATA_GRID.rows || []).length >= 10
}));
} catch (e) {
console.log(e);
setDataGrid(pv => ({ ...pv, loaded: false, reload: false }));
}
};
//При необходимости перезагрузить
if (dataGrid.reloading) loadDataGrid();
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [dataGrid.reloading, executeStored]);
//Возвращаем график
return { dataGrid, handleReload, handleFilterChanged, handleOrderChanged, handlePagesCountChanged };
};
//----------------
//Интерфейс модуля
//----------------
export { useChartStatuses, useChartSpendings, useTableRepairs };