WEBAPP: Флаг "isDataFound" для хуков высокоуровневых компонентов (Гант, Циклограмма, Индикатор, Таблица, График)

This commit is contained in:
Mim 2026-04-09 19:04:25 +03:00
parent 5483e5c39f
commit 4bf3bfb3fa
7 changed files with 53 additions and 9 deletions

View File

@ -1541,6 +1541,7 @@ const MyPanel = () => {
**Результат:** объект для работы с компонентом `P8PDataGrid`. Возвращаемый объект имеет следующие свойства:\
`dataGrid` - объект, хранит информацию о таблице, загруженной с помощью хранимой процедуры\
`isDataLoaded` - логический, признак успешной загрузки и обработки данных из хранимой процедуры\
`isDataFound` - логический, признак наличия значимых сведений (бизнес-даных) в данных, полученных из хранимой процедуры\
`isLoading` - логический, признак выполнения загрузки данных из хранимой процедуры\
`handleFilterChanged` - функция, изменение состояния фильтров таблицы. Сигнатура функции `f({filters})`, результат функции не интерпретируется\
`handleOrderChanged` - функция, изменение состояния сортировок таблицы. Сигнатура функции `f({orders})`, результат функции не интерпретируется\
@ -2005,6 +2006,7 @@ const MyPanel = () => {
**Результат:** объект для работы с компонентом `P8PChart`. Возвращаемый объект имеет следующие свойства:\
`chart` - объект, хранит информацию о графике, загруженном с помощью хранимой процедуры\
`isDataLoaded` - логический, признак успешной загрузки и обработки данных из хранимой процедуры\
`isDataFound` - логический, признак наличия значимых сведений (бизнес-даных) в данных, полученных из хранимой процедуры\
`isLoading` - логический, признак выполнения загрузки данных из хранимой процедуры\
`doReload` - функция, принудительное обновление данных графика, сигнатура функции `f()`, результат функции не интерпретируется
@ -2240,6 +2242,7 @@ const MyPanel = () => {
**Результат:** объект для работы с компонентом `P8PGantt`. Возвращаемый объект имеет следующие свойства:\
`gantt` - объект, хранит информацию о диаграмме Ганта, загруженной с помощью хранимой процедуры\
`isDataLoaded` - логический, признак успешной загрузки и обработки данных из хранимой процедуры\
`isDataFound` - логический, признак наличия значимых сведений (бизнес-даных) в данных, полученных из хранимой процедуры\
`isLoading` - логический, признак выполнения загрузки данных из хранимой процедуры\
`doReload` - функция, принудительное обновление данных диаграммы Ганта, сигнатура функции `f()`, результат функции не интерпретируется
@ -2731,6 +2734,7 @@ const MyPanel = () => {
**Результат:** объект для работы с компонентом `P8PCyclogram`. Возвращаемый объект имеет следующие свойства:\
`cyclogram` - объект, хранит информацию о циклограмме, загруженной с помощью хранимой процедуры\
`isDataLoaded` - логический, признак успешной загрузки и обработки данных из хранимой процедуры\
`isDataFound` - логический, признак наличия значимых сведений (бизнес-даных) в данных, полученных из хранимой процедуры\
`isLoading` - логический, признак выполнения загрузки данных из хранимой процедуры\
`doReload` - функция, принудительное обновление данных циклограммы, сигнатура функции `f()`, результат функции не интерпретируется
@ -3204,6 +3208,7 @@ const MyPanel = () => {
**Результат:** объект для работы с компонентом `P8PIndicator`. Возвращаемый объект имеет следующие свойства:\
`indicator` - объект, хранит информацию об индикаторе, загруженном с помощью хранимой процедуры\
`isDataLoaded` - логический, признак успешной загрузки и обработки данных из хранимой процедуры\
`isDataFound` - логический, признак наличия значимых сведений (бизнес-даных) в данных, полученных из хранимой процедуры\
`isLoading` - логический, признак выполнения загрузки данных из хранимой процедуры\
`doReload` - функция, принудительное обновление данных индикатора, сигнатура функции `f()`, результат функции не интерпретируется

View File

@ -43,6 +43,9 @@ const useP8PChart = ({
//Собственное состояние - признак загрузки данных
const [isDataLoaded, setIsDataLoaded] = useState(false);
//Собственное состояние - признак наличия бизнес-данных в загруженных
const [isDataFound, setIsDataFound] = useState(false);
//Собственное состояние - флаг загрузки
const [isLoading, setLoading] = useState(false);
@ -66,8 +69,13 @@ const useP8PChart = ({
//Загрузка данных графика с сервера
const loadData = useCallback(async () => {
try {
//Поднимаем флаг начала загрузки данных
setLoading(true);
//Получаем данные с сервера БД
const data = await executeStored({ stored, respArg, args: { ...refStoredArgs.current }, ...refExecuteStoredArgs.current });
//Устанавливаем флаг наличия бизнес-данных
setIsDataFound(data[contentNodeName]?.datasets?.[0]?.data?.length > 0);
//Устанавливаем бизнес-данные
setChart(pv => ({ ...pv, ...data[contentNodeName] }));
//Устанавливаем признак загрузки данных с учетом возможных ошибок
setIsDataLoaded(!isRespErr(data));
@ -126,7 +134,7 @@ const useP8PChart = ({
}, [isAllowDataLoad, reload, loadData]);
//Возвращаем данные графика
return { chart, isDataLoaded, isLoading, doReload };
return { chart, isDataLoaded, isDataFound, isLoading, doReload };
};
//----------------

View File

@ -47,6 +47,9 @@ const useP8PCyclogram = ({
//Собственное состояние - признак загрузки данных
const [isDataLoaded, setIsDataLoaded] = useState(false);
//Собственное состояние - признак наличия бизнес-данных в загруженных
const [isDataFound, setIsDataFound] = useState(false);
//Собственное состояние - флаг загрузки
const [isLoading, setLoading] = useState(false);
@ -70,7 +73,9 @@ const useP8PCyclogram = ({
//Загрузка данных циклограммы с сервера
const loadData = useCallback(async () => {
try {
//Поднимаем флаг начала загрузки данных
setLoading(true);
//Получаем данные с сервера БД
const data = await executeStored({
stored,
args: { ...refStoredArgs.current },
@ -78,6 +83,9 @@ const useP8PCyclogram = ({
respArg,
...refExecuteStoredArgs.current
});
//Устанавливаем флаг наличия бизнес-данных
setIsDataFound(data[contentNodeName]?.tasks?.length > 0);
//Устанавливаем бизнес-данные
setCyclogram(pv => ({ ...pv, ...data[contentNodeName] }));
//Устанавливаем признак загрузки данных с учетом возможных ошибок
setIsDataLoaded(!isRespErr(data));
@ -135,7 +143,7 @@ const useP8PCyclogram = ({
}, [isAllowDataLoad, reload, loadData]);
//Возвращаем данные циклограммы
return { cyclogram, isDataLoaded, isLoading, doReload };
return { cyclogram, isDataLoaded, isDataFound, isLoading, doReload };
};
//----------------

View File

@ -10,6 +10,7 @@
import { useReducer, useCallback, useEffect, useContext, useRef, useMemo } from "react"; //Классы React
import { BackEndCtx } from "../context/backend"; //Контекст взаимодействия с сервером
import { object2Base64XML } from "../core/utils"; //Вспомогательные функции
import config from "../../app.config"; //Настройки приложения
import { DG_AT, INITIAL_STATE, dataGridReducer } from "./p8p_data_grid_reducer"; //Редьюсер состояния
//---------
@ -17,7 +18,7 @@ import { DG_AT, INITIAL_STATE, dataGridReducer } from "./p8p_data_grid_reducer";
//---------
//Константы - значения по умолчанию
const DG_PAGE_SIZE_DEF = 10; //Размер страницы
const DG_PAGE_SIZE_DEF = config.SYSTEM.PAGE_SIZE; //Размер страницы
const DG_NODE_NAME_DEF = "XDATA_GRID"; //Наименование узла, содержащего информацию о таблице
const FILTERS_NODE_NAME_DEF = "filters"; //Наименование узла отборов
const ORDERS_NODE_NAME_DEF = "orders"; //Наименование узла сортировок
@ -85,8 +86,9 @@ const useP8PDataGrid = ({
//Загрузка данных таблицы с сервера
const loadData = useCallback(async () => {
try {
//Начинаем загрузку
//Поднимаем флаг начала загрузки данных
setIsLoading(true);
//Получаем данные с сервера БД
const data = await executeStored({
stored,
args: {
@ -103,7 +105,7 @@ const useP8PDataGrid = ({
respArg,
...refExecuteStoredArgs.current
});
//Устанавливаем полученные данные и признак загрузки данных с учетом возможных ошибок
//Устанавливаем полученные бизнес-данные, признак загрузки данных с учетом возможных ошибок, признак наличия бизнес-данных
setDataGrid(data[contentNodeName], pageSize, isRespErr(data));
} catch (e) {
//Если произошла ошибка - данные не загружены
@ -189,6 +191,7 @@ const useP8PDataGrid = ({
return {
dataGrid: state.dataGrid,
isDataLoaded: state.isDataLoaded,
isDataFound: state.isDataFound,
isLoading: state.isLoading,
handleFilterChanged,
handleOrderChanged,

View File

@ -32,9 +32,10 @@ const INITIAL_STATE = ({ initFilters, initOrders }) => ({
pagesCount: 0,
fixedColumns: 0,
fixedHeader: false,
morePages: true
morePages: false
},
isDataLoaded: false,
isDataFound: false,
isLoading: false,
reload: true
});
@ -65,7 +66,10 @@ const handlers = {
: [...(state.dataGrid.groups || [])],
morePages: dataGridData.morePages && (dataGridData.rows || []).length >= pageSize
},
isDataLoaded: isError === true ? false : true
isDataLoaded: isError === true ? false : true,
isDataFound:
(state.dataGrid.pageNumber == 1 && dataGridData?.rows?.length > 0) ||
(state.dataGrid.pageNumber != 1 && state.dataGrid.rows.length > 0)
};
},
//Установка фильтра таблицы

View File

@ -48,6 +48,9 @@ const useP8PGantt = ({
//Собственное состояние - признак загрузки данных
const [isDataLoaded, setIsDataLoaded] = useState(false);
//Собственное состояние - признак наличия бизнес-данных в загруженных
const [isDataFound, setIsDataFound] = useState(false);
//Собственное состояние - флаг загрузки
const [isLoading, setLoading] = useState(false);
@ -71,7 +74,9 @@ const useP8PGantt = ({
//Загрузка данных диаграммы ганта с сервера
const loadData = useCallback(async () => {
try {
//Поднимаем флаг начала загрузки данных
setLoading(true);
//Получаем данные с сервера БД
const data = await executeStored({
stored,
args: { ...refStoredArgs.current },
@ -80,6 +85,9 @@ const useP8PGantt = ({
respArg,
...refExecuteStoredArgs.current
});
//Устанавливаем флаг наличия бизнес-данных
setIsDataFound(data[contentNodeName]?.tasks?.length > 0);
//Устанавливаем бизнес-данные
setGantt(pv => ({ ...pv, ...data[contentNodeName] }));
//Устанавливаем признак загрузки данных с учетом возможных ошибок
setIsDataLoaded(!isRespErr(data));
@ -138,7 +146,7 @@ const useP8PGantt = ({
}, [isAllowDataLoad, reload, loadData]);
//Возвращаем данные диаграммы ганта
return { gantt, isDataLoaded, isLoading, doReload };
return { gantt, isDataLoaded, isDataFound, isLoading, doReload };
};
//----------------

View File

@ -50,6 +50,9 @@ const useP8PIndicator = ({
//Собственное состояние - признак загрузки данных
const [isDataLoaded, setIsDataLoaded] = useState(false);
//Собственное состояние - признак наличия бизнес-данных в загруженных
const [isDataFound, setIsDataFound] = useState(false);
//Собственное состояние - флаг загрузки
const [isLoading, setLoading] = useState(false);
@ -73,8 +76,13 @@ const useP8PIndicator = ({
//Загрузка данных индикатора с сервера
const loadData = useCallback(async () => {
try {
//Поднимаем флаг начала загрузки данных
setLoading(true);
//Получаем данные с сервера БД
const data = await executeStored({ stored, respArg, args: { ...refStoredArgs.current }, ...refExecuteStoredArgs.current });
//Устанавливаем флаг наличия бизнес-данных
setIsDataFound(data[contentNodeName]?.caption && data[contentNodeName]?.value != undefined);
//Устанавливаем бизнес-данные
setIndicator(pv => ({ ...pv, ...data[contentNodeName] }));
//Устанавливаем признак загрузки данных с учетом возможных ошибок
setIsDataLoaded(!isRespErr(data));
@ -133,7 +141,7 @@ const useP8PIndicator = ({
}, [isAllowDataLoad, reload, loadData]);
//Возвращаем данные индикатора
return { indicator, isDataLoaded, isLoading, doReload };
return { indicator, isDataLoaded, isDataFound, isLoading, doReload };
};
//----------------