forked from TelegramOrg/Telegram-web-z
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathuseModuleLoader.ts
31 lines (23 loc) · 874 Bytes
/
useModuleLoader.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import { useEffect } from '../lib/teact/teact';
import type { BundleModules, Bundles } from '../util/moduleLoader';
import { getModuleFromMemory, loadModule, addLoadListener } from '../util/moduleLoader';
import useForceUpdate from './useForceUpdate';
const useModuleLoader = <B extends Bundles, M extends BundleModules<B>>(
bundleName: B, moduleName: M, noLoad = false, autoUpdate = false,
) => {
const module = getModuleFromMemory(bundleName, moduleName);
const forceUpdate = useForceUpdate();
useEffect(() => {
if (!autoUpdate) {
return undefined;
}
return addLoadListener(forceUpdate);
}, [autoUpdate, forceUpdate]);
useEffect(() => {
if (!noLoad && !module) {
loadModule(bundleName).then(forceUpdate);
}
}, [bundleName, forceUpdate, module, moduleName, noLoad]);
return module;
};
export default useModuleLoader;