mirror of
https://github.com/ionic-team/ionic-framework.git
synced 2025-08-16 18:17:31 +08:00
Master react (#18998)
* chore(): bump to beta 8 * fix(): IonFabButton href fix * fix(react): support components with href attributes * fix(): Prep work to break router out * fix(): breaking react-router and react-core into own packages * chore(): moving view stuff out of react-core * chore(): dev build 8-1 * chore(): update to react beta 8 * chore(): fixes to deps * fix(): removing IonAnchor in favor of IonRouterLink * chore(): beta 9 release * refactor(react): treeshake, minify, api * wip * fix(): react dev builds * fix(): fixes to get app builds working again * fix(): removing tgz file * feat(): adding platform helper methods * fix(): don't map attributes to props * chore(): add test app * feat(): copy css folder from core * chore(): move rollup node resolve to devDependencies * fix(): expose setupConfig() * perf(): improve treeshaking * fix(): removing crypto from generateUniqueId * fix(): adding missing rollup dp * fix(): test cleanup and fixes to make tests pass * chore(): moving react to packages folder * fix(): fixing react build due to move to packages * feat(): adding missing IonInfiniteScrollContent component * chore(): add automated testing using cypress * fix(): adding option onDidDismiss to controller components * 0.0.10 react * wip * fix(): removing deprecated React calls * fix(): exporting setupConfig from core * chore(): bump to 4.8.0-rc.0 * chore(): updating test-app deps and fixing test * chore(): updates to react readme
This commit is contained in:
81
packages/react-router/src/ReactRouter/NavManager.tsx
Normal file
81
packages/react-router/src/ReactRouter/NavManager.tsx
Normal file
@ -0,0 +1,81 @@
|
||||
import { RouterDirection } from '@ionic/core';
|
||||
import { NavContext, NavContextState } from '@ionic/react';
|
||||
import { Location as HistoryLocation, UnregisterCallback } from 'history';
|
||||
import React from 'react';
|
||||
import { RouteComponentProps } from 'react-router-dom';
|
||||
import { ViewManager } from './ViewManager';
|
||||
|
||||
interface NavManagerProps extends RouteComponentProps {
|
||||
findViewInfoByLocation: (location: HistoryLocation) => any;
|
||||
findViewInfoById: (id: string) => any;
|
||||
};
|
||||
interface NavManagerState extends NavContextState {};
|
||||
|
||||
export class NavManager extends React.Component<NavManagerProps, NavManagerState> {
|
||||
|
||||
listenUnregisterCallback: UnregisterCallback;
|
||||
|
||||
constructor(props: NavManagerProps) {
|
||||
super(props);
|
||||
this.state = {
|
||||
goBack: this.goBack.bind(this),
|
||||
hasIonicRouter: () => true,
|
||||
getHistory: this.getHistory.bind(this),
|
||||
getLocation: this.getLocation.bind(this),
|
||||
navigate: this.navigate.bind(this),
|
||||
getViewManager: this.getViewManager.bind(this),
|
||||
currentPath: this.props.location.pathname
|
||||
}
|
||||
|
||||
this.listenUnregisterCallback = this.props.history.listen((location: HistoryLocation) => {
|
||||
this.setState({
|
||||
currentPath: location.pathname
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
if(this.listenUnregisterCallback) {
|
||||
this.listenUnregisterCallback();
|
||||
}
|
||||
}
|
||||
|
||||
goBack(defaultHref?: string) {
|
||||
const { view: leavingView } = this.props.findViewInfoByLocation(this.props.location);
|
||||
if (leavingView) {
|
||||
const { view: enteringView } = this.props.findViewInfoById(leavingView.prevId);
|
||||
if (enteringView) {
|
||||
this.props.history.replace(enteringView.routeData.match.url, { direction: 'back' });
|
||||
} else {
|
||||
defaultHref && this.props.history.replace(defaultHref, { direction: 'back' });
|
||||
}
|
||||
} else {
|
||||
defaultHref && this.props.history.replace(defaultHref, { direction: 'back' });
|
||||
}
|
||||
}
|
||||
|
||||
getHistory() {
|
||||
return this.props.history as any;
|
||||
}
|
||||
|
||||
getLocation() {
|
||||
return this.props.location as any;
|
||||
}
|
||||
|
||||
navigate(path: string, direction?: RouterDirection) {
|
||||
this.props.history.push(path, { direction });
|
||||
}
|
||||
|
||||
getViewManager() {
|
||||
return ViewManager;
|
||||
}
|
||||
|
||||
render() {
|
||||
return (
|
||||
<NavContext.Provider value={this.state}>
|
||||
{this.props.children}
|
||||
</NavContext.Provider>
|
||||
);
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user