diff --git a/packages/react-router/src/ReactRouter/StackManager.tsx b/packages/react-router/src/ReactRouter/StackManager.tsx index 9d96592f72..f281f47255 100644 --- a/packages/react-router/src/ReactRouter/StackManager.tsx +++ b/packages/react-router/src/ReactRouter/StackManager.tsx @@ -55,7 +55,6 @@ export class StackManager extends React.PureComponent { this.forceUpdate(); }); + return ( {React.cloneElement(ionRouterOutlet as any, { @@ -179,6 +179,9 @@ export class StackManager extends React.PureComponent { + /* + This spec tests that setting a ref on an IonRouterOutlet works + */ + + it('/outlet-ref, page should contain the id of the ion-router-outlet', () => { + cy.visit(`http://localhost:${port}/outlet-ref`) + cy.get('div').contains('main-outlet') + cy.ionPageVisible('main') + }) + +}) diff --git a/packages/react-router/test-app/src/App.tsx b/packages/react-router/test-app/src/App.tsx index 6190584fcc..f1dc4763c6 100644 --- a/packages/react-router/test-app/src/App.tsx +++ b/packages/react-router/test-app/src/App.tsx @@ -33,6 +33,7 @@ import NestedOutlet from './pages/nested-outlet/NestedOutlet'; import NestedOutlet2 from './pages/nested-outlet/NestedOutlet2'; import ReplaceAction from './pages/replace-action/Replace'; import TabsContext from './pages/tab-context/TabContext'; +import { OutletRef } from './pages/outlet-ref/OutletRef'; debugger; const App: React.FC = () => { return ( @@ -47,6 +48,7 @@ const App: React.FC = () => { + ); diff --git a/packages/react-router/test-app/src/pages/Main.tsx b/packages/react-router/test-app/src/pages/Main.tsx index a436cd9cfc..9a3ca9f7cd 100644 --- a/packages/react-router/test-app/src/pages/Main.tsx +++ b/packages/react-router/test-app/src/pages/Main.tsx @@ -38,6 +38,9 @@ const Main: React.FC = () => { Tab Context + + Outlet Ref + diff --git a/packages/react-router/test-app/src/pages/outlet-ref/OutletRef.tsx b/packages/react-router/test-app/src/pages/outlet-ref/OutletRef.tsx new file mode 100644 index 0000000000..7941bac9d5 --- /dev/null +++ b/packages/react-router/test-app/src/pages/outlet-ref/OutletRef.tsx @@ -0,0 +1,42 @@ +import React, { useRef, useEffect } from 'react'; +import { IonRouterOutlet, IonPage, IonHeader, IonToolbar, IonTitle, IonContent } from '@ionic/react'; +import { Route } from 'react-router'; + +interface OutletRefProps { +} + +export const OutletRef: React.FC = () => { + + const ref = useRef(null); + + useEffect(() => { + console.log(ref); + }, []); + + return ( + + { + return
; + }} /> + + ); +}; + + + +const Main: React.FC<{ outletId?: string; }> = ({ outletId }) => { + return ( + + + + Main + + + +
{outletId}
+
+
+ ); +}; + +export default Main; diff --git a/packages/react/src/components/IonRouterOutlet.tsx b/packages/react/src/components/IonRouterOutlet.tsx index 7407f759ff..df008757b6 100644 --- a/packages/react/src/components/IonRouterOutlet.tsx +++ b/packages/react/src/components/IonRouterOutlet.tsx @@ -46,7 +46,7 @@ class IonRouterOutletContainer extends React.Component ) : ( - + {children} diff --git a/packages/react/src/components/inner-proxies.ts b/packages/react/src/components/inner-proxies.ts index 3dc2b8e6a6..1de5c12766 100644 --- a/packages/react/src/components/inner-proxies.ts +++ b/packages/react/src/components/inner-proxies.ts @@ -6,7 +6,10 @@ import { /*@__PURE__*/ createReactComponent } from './createComponent'; export const IonTabButtonInner = /*@__PURE__*/createReactComponent void; }, HTMLIonTabButtonElement>('ion-tab-button'); export const IonTabBarInner = /*@__PURE__*/createReactComponent('ion-tab-bar'); export const IonBackButtonInner = /*@__PURE__*/createReactComponent, HTMLIonBackButtonElement>('ion-back-button'); -export const IonRouterOutletInner = /*@__PURE__*/createReactComponent void; }, HTMLIonRouterOutletElement>('ion-router-outlet'); +export const IonRouterOutletInner = /*@__PURE__*/createReactComponent void; + forwardedRef?: React.RefObject; +}, HTMLIonRouterOutletElement>('ion-router-outlet'); // ionicons export const IonIconInner = /*@__PURE__*/createReactComponent('ion-icon'); diff --git a/packages/react/src/routing/OutletPageManager.tsx b/packages/react/src/routing/OutletPageManager.tsx index f775114539..af9a5bbf28 100644 --- a/packages/react/src/routing/OutletPageManager.tsx +++ b/packages/react/src/routing/OutletPageManager.tsx @@ -9,7 +9,7 @@ import { StackContext } from './StackContext'; interface OutletPageManagerProps { className?: string; - forwardedRef?: React.RefObject; + forwardedRef?: React.RefObject; routeInfo?: RouteInfo; StackManager: any; }