30 lines
758 B
TypeScript
30 lines
758 B
TypeScript
import {History, Location} from 'history'
|
|
import {withRouter, match as Match} from 'react-router'
|
|
import React from 'react'
|
|
|
|
export interface WithHistoryProps {
|
|
history: History
|
|
location: Location
|
|
match: Match
|
|
}
|
|
|
|
export function withHistory<T extends {history: History}>(
|
|
Component: React.ComponentType<T>,
|
|
) {
|
|
class HistoryProvider extends React.PureComponent<WithHistoryProps & T> {
|
|
render() {
|
|
const {history, children} = this.props
|
|
return (
|
|
<Component history={history} {...this.props}>
|
|
{children}
|
|
</Component>
|
|
)
|
|
}
|
|
}
|
|
|
|
// stop TypeScript from complaining that we're using a private variable
|
|
const HP: React.ComponentType<WithHistoryProps & T> = HistoryProvider
|
|
|
|
return withRouter(HP)
|
|
}
|