forked from CITKParus/P8-Panels
45 lines
1.6 KiB
JavaScript
45 lines
1.6 KiB
JavaScript
/*
|
|
Парус 8 - Панели мониторинга - Редактор панелей
|
|
Компоненты: Хуки компонентов
|
|
*/
|
|
|
|
//---------------------
|
|
//Подключение библиотек
|
|
//---------------------
|
|
|
|
import { useState, useEffect } from "react"; //Классы React
|
|
|
|
//-----------
|
|
//Тело модуля
|
|
//-----------
|
|
|
|
//Отложенная загрузка модуля компонента (как альтернативу можно применять React.lazy)
|
|
const useComponentModule = ({ path = null, module = "view" } = {}) => {
|
|
//Собственное состояние - импортированный модуль компонента
|
|
const [componentModule, setComponentModule] = useState(null);
|
|
|
|
//Собственное состояние - флаг готовности
|
|
const [init, setInit] = useState(false);
|
|
|
|
//При подмонтировании к странице
|
|
useEffect(() => {
|
|
//Динамическая загрузка модуля компонента из библиотеки
|
|
const importComponentModule = async () => {
|
|
setInit(false);
|
|
const moduleContent = await import(`./${path}/${module}`);
|
|
setComponentModule(moduleContent);
|
|
setInit(true);
|
|
};
|
|
if (path) importComponentModule();
|
|
}, [path, module]);
|
|
|
|
//Возвращаем интерфейс хука
|
|
return [componentModule, init];
|
|
};
|
|
|
|
//----------------
|
|
//Интерфейс модуля
|
|
//----------------
|
|
|
|
export { useComponentModule };
|