MCPcopy Index your code
hub / github.com/ionic-team/ionic-framework / ReactDelegate

Function ReactDelegate

packages/react/src/framework-delegate.tsx:10–53  ·  view source on GitHub ↗
(
  addView: (view: React.ReactElement) => void,
  removeView: (view: React.ReactElement) => void
)

Source from the content-addressed store, hash-verified

8type ReactComponent = (props?: any) => JSX.Element;
9
10export const ReactDelegate = (
11 addView: (view: React.ReactElement) => void,
12 removeView: (view: React.ReactElement) => void
13): FrameworkDelegate => {
14 const refMap = new WeakMap<HTMLElement, React.ReactElement>();
15 const reactDelegateId = `react-delegate-${generateId()}`;
16 // Incrementing counter to generate unique keys for each view
17 let id = 0;
18
19 const attachViewToDom = async (
20 parentElement: HTMLElement,
21 component: ReactComponent,
22 propsOrDataObj?: any,
23 cssClasses?: string[]
24 ): Promise<any> => {
25 const div = document.createElement('div');
26 cssClasses && div.classList.add(...cssClasses);
27 parentElement.appendChild(div);
28
29 const componentWithProps = component(propsOrDataObj);
30 const key = `${reactDelegateId}-${id++}`;
31 const hostComponent = createPortal(componentWithProps, div, key);
32
33 refMap.set(div, hostComponent);
34
35 addView(hostComponent);
36
37 return Promise.resolve(div);
38 };
39
40 const removeViewFromDom = (_container: any, component: HTMLElement): Promise<void> => {
41 const hostComponent = refMap.get(component);
42 hostComponent && removeView(hostComponent);
43
44 component.remove();
45
46 return Promise.resolve();
47 };
48
49 return {
50 attachViewToDom,
51 removeViewFromDom,
52 };
53};

Callers 1

IonNavInternalFunction · 0.90

Calls 1

generateIdFunction · 0.90

Tested by

no test coverage detected