fix(react): IonNav works with react (#25565)

Resolves #24002 

Co-authored-by: Liam DeBeasi <liamdebeasi@icloud.com>
This commit is contained in:
Sean Perkins
2022-07-06 13:45:30 -04:00
committed by GitHub
parent ffb0311236
commit 420f9bbebd
9 changed files with 197 additions and 1 deletions

View File

@ -0,0 +1,38 @@
import { FrameworkDelegate } from '@ionic/core/components';
import { createPortal } from 'react-dom';
export const ReactDelegate = (
addView: (view: React.ReactPortal) => void,
removeView: (view: React.ReactPortal) => void
): FrameworkDelegate => {
let Component: React.ReactPortal;
const attachViewToDom = async (
parentElement: HTMLElement,
component: () => JSX.Element,
propsOrDataObj?: any,
cssClasses?: string[]
): Promise<any> => {
const div = document.createElement('div');
cssClasses && div.classList.add(...cssClasses);
parentElement.appendChild(div);
Component = createPortal(component(), div);
Component.props = propsOrDataObj;
addView(Component);
return Promise.resolve(div);
};
const removeViewFromDom = (): Promise<void> => {
Component && removeView(Component);
return Promise.resolve();
};
return {
attachViewToDom,
removeViewFromDom,
};
};