MCPcopy Create free account
hub / github.com/MCSManager/MCSManager / useMountComponent

Function useMountComponent

frontend/src/hooks/useMountComponent.ts:6–66  ·  view source on GitHub ↗
(data: Record<string, any> = {})

Source from the content-addressed store, hash-verified

4import { sleep } from "@/tools/common";
5
6export function useMountComponent(data: Record<string, any> = {}) {
7 let isOpen = false;
8 const mount = <T>(component: Component) => {
9 if (isOpen) return;
10 isOpen = true;
11 return new Promise<T>((resolve) => {
12 const div = document.createElement("div");
13 document.body.appendChild(div);
14 const app = createApp(component, {
15 ...data,
16 async destroyComponent(delay = 1000) {
17 await sleep(delay);
18 app.unmount();
19 div.remove();
20 isOpen = false;
21 },
22 emitResult(data: T) {
23 isOpen = false;
24 resolve(data);
25 }
26 });
27 app.mount(div);
28 });
29 };
30
31 const load = <T extends Component>(component: Component): T => {
32 const { component: mountedComponent } = loadApp<T>(component);
33 return mountedComponent;
34 };
35
36 const loadApp = <T extends Component>(
37 component: Component
38 ): { component: T; app: App; div: HTMLDivElement; destroyFc: () => void } => {
39 const div = document.createElement("div");
40 document.body.appendChild(div);
41 const app = createApp(component, {
42 ...data,
43 async destroyComponent(delay = 1000) {
44 await sleep(delay);
45 app.unmount();
46 div.remove();
47 }
48 });
49 const mountedComponent = app.mount(div);
50 return {
51 component: mountedComponent as any,
52 app: app,
53 div,
54 destroyFc: () => {
55 app.unmount();
56 div.remove();
57 }
58 };
59 };
60
61 return {
62 mount,
63 load,

Callers 15

openIframeModalFunction · 0.90
loadIframeModalFunction · 0.90
useDownloadFileDialogFunction · 0.90
useUploadFileDialogFunction · 0.90
useSelectInstancesFunction · 0.90
useCmdAssistantDialogFunction · 0.90
usePortEditDialogFunction · 0.90
useVolumeEditDialogFunction · 0.90
useDockerEnvEditDialogFunction · 0.90
useDockerLabelEditDialogFunction · 0.90

Calls

no outgoing calls

Tested by

no test coverage detected