import React from 'react' import PropTypes from 'prop-types' import { NextComponentType, NextPageContext } from '../next-server/lib/utils' import { NextRouter } from './router' export type WithRouterProps = { router: NextRouter } export type ExcludeRouterProps

= Pick< P, Exclude > export default function withRouter< P extends WithRouterProps, C = NextPageContext >( ComposedComponent: NextComponentType ): React.ComponentClass> { class WithRouteWrapper extends React.Component> { static displayName?: string static getInitialProps?: any static contextTypes = { router: PropTypes.object, } context!: WithRouterProps render() { return ( ) } } WithRouteWrapper.getInitialProps = ComposedComponent.getInitialProps if (process.env.NODE_ENV !== 'production') { const name = ComposedComponent.displayName || ComposedComponent.name || 'Unknown' WithRouteWrapper.displayName = `withRouter(${name})` } return WithRouteWrapper }