/* Парус 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 };