117 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			117 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /*
 | ||
|     Парус 8 - Панели мониторинга - Редактор запросов
 | ||
|     Пользовательские хуки для работы с запросами
 | ||
| */
 | ||
| 
 | ||
| //---------------------
 | ||
| //Подключение библиотек
 | ||
| //---------------------
 | ||
| 
 | ||
| import { useState, useContext, useEffect, useCallback } from "react"; //Классы React
 | ||
| import { BackEndСtx } from "../../../../context/backend"; //Контекст взаимодействия с сервером
 | ||
| 
 | ||
| //-----------
 | ||
| //Тело модуля
 | ||
| //-----------
 | ||
| 
 | ||
| //Работа с запросами
 | ||
| const useQueries = () => {
 | ||
|     //Собственное состояние - флаг инициализированности
 | ||
|     const [isInit, setInit] = useState(false);
 | ||
| 
 | ||
|     //Собственное состояние - флаг загрузки
 | ||
|     const [isLoading, setLoading] = useState(false);
 | ||
| 
 | ||
|     //Собственное состояние - флаг необходимости обновления
 | ||
|     const [refresh, setRefresh] = useState(true);
 | ||
| 
 | ||
|     //Собственное состояние - данные
 | ||
|     const [data, setData] = useState(null);
 | ||
| 
 | ||
|     //Подключение к контексту взаимодействия с сервером
 | ||
|     const { executeStored } = useContext(BackEndСtx);
 | ||
| 
 | ||
|     //Обновление данных
 | ||
|     const doRefresh = () => setRefresh(true);
 | ||
| 
 | ||
|     //Добавление запроса
 | ||
|     const insertQuery = useCallback(
 | ||
|         async (code, name) => {
 | ||
|             await executeStored({ stored: "PKG_P8PANELS_QE.QUERY_INSERT", args: { SCODE: code, SNAME: name }, loader: false });
 | ||
|             setRefresh(true);
 | ||
|         },
 | ||
|         [executeStored]
 | ||
|     );
 | ||
| 
 | ||
|     //Изменение запроса
 | ||
|     const updateQuery = useCallback(
 | ||
|         async (query, code, name) => {
 | ||
|             await executeStored({ stored: "PKG_P8PANELS_QE.QUERY_UPDATE", args: { NRN: query, SCODE: code, SNAME: name }, loader: false });
 | ||
|             setRefresh(true);
 | ||
|         },
 | ||
|         [executeStored]
 | ||
|     );
 | ||
| 
 | ||
|     //Удаление запроса
 | ||
|     const deleteQuery = useCallback(
 | ||
|         async query => {
 | ||
|             await executeStored({ stored: "PKG_P8PANELS_QE.QUERY_DELETE", args: { NRN: query }, loader: false });
 | ||
|             setRefresh(true);
 | ||
|         },
 | ||
|         [executeStored]
 | ||
|     );
 | ||
| 
 | ||
|     //Установка флага готовности запроса
 | ||
|     const setQueryReady = useCallback(
 | ||
|         async (query, ready) => {
 | ||
|             await executeStored({ stored: "PKG_P8PANELS_QE.QUERY_READY_SET", args: { NRN: query, NREADY: ready }, loader: false });
 | ||
|             setRefresh(true);
 | ||
|         },
 | ||
|         [executeStored]
 | ||
|     );
 | ||
| 
 | ||
|     //Установка флага публичности запроса
 | ||
|     const setQueryPbl = useCallback(
 | ||
|         async (query, pbl) => {
 | ||
|             await executeStored({ stored: "PKG_P8PANELS_QE.QUERY_PBL_SET", args: { NRN: query, NPBL: pbl }, loader: false });
 | ||
|             setRefresh(true);
 | ||
|         },
 | ||
|         [executeStored]
 | ||
|     );
 | ||
| 
 | ||
|     //При необходимости получить/обновить данные
 | ||
|     useEffect(() => {
 | ||
|         //Загрузка данных с сервера
 | ||
|         const loadData = async () => {
 | ||
|             try {
 | ||
|                 setLoading(true);
 | ||
|                 const data = await executeStored({
 | ||
|                     stored: "PKG_P8PANELS_QE.QUERY_LIST",
 | ||
|                     respArg: "COUT",
 | ||
|                     isArray: name => ["XQUERY"].includes(name),
 | ||
|                     attributeValueProcessor: (name, val) => (["code", "name"].includes(name) ? undefined : val),
 | ||
|                     loader: true
 | ||
|                 });
 | ||
|                 setData(data?.XQUERIES?.XQUERY || []);
 | ||
|                 setInit(true);
 | ||
|             } finally {
 | ||
|                 setRefresh(false);
 | ||
|                 setLoading(false);
 | ||
|             }
 | ||
|         };
 | ||
|         //Если надо обновить
 | ||
|         if (refresh)
 | ||
|             //Получим данные
 | ||
|             loadData();
 | ||
|     }, [refresh, executeStored]);
 | ||
| 
 | ||
|     //Возвращаем интерфейс хука
 | ||
|     return [data, insertQuery, updateQuery, deleteQuery, setQueryReady, setQueryPbl, doRefresh, isLoading, isInit];
 | ||
| };
 | ||
| 
 | ||
| //----------------
 | ||
| //Интерфейс модуля
 | ||
| //----------------
 | ||
| 
 | ||
| export { useQueries };
 |