import PropTypes from "prop-types";
import { __RouterContext } from "react-router";
import hoistStatics from "hoist-non-react-statics";
export const WithRouterPropTypes = {
  match: PropTypes.object.isRequired,
  location: PropTypes.object.isRequired,
  history: PropTypes.object.isRequired,
};
export const WithOptionalRouterPropTypes = {
  match: PropTypes.object,
  location: PropTypes.object,
  history: PropTypes.object,
};
// This is copied from https://github.com/remix-run/react-router/blob/v5.3.4/packages/react-router/modules/withRouter.js
// but does not fail if called outside of a React Router context
export function withOptionalRouter(Component) {
  const displayName = `withRouter(${Component.displayName || Component.name})`;
  const C = props => {
    const { wrappedComponentRef, ...remainingProps } = props;
    return (
      <__RouterContext.Consumer>
        {context => {
          if(context)
            return (
              
            );
          else
            return (
              
            );
        }}
      
    );
  };
  C.displayName = displayName;
  C.WrappedComponent = Component;
  C.propTypes = {
    ...Component.propTypes,
    wrappedComponentRef: PropTypes.oneOfType([
      PropTypes.string,
      PropTypes.func,
      PropTypes.object
    ])
  };
  return hoistStatics(C, Component);
}