11 changed files with 75 additions and 36 deletions
@ -0,0 +1,40 @@
|
||||
import PropTypes from 'prop-types'; |
||||
import { PureComponent } from 'react'; |
||||
|
||||
export class Permalink extends PureComponent { |
||||
|
||||
static contextTypes = { |
||||
router: PropTypes.object, |
||||
}; |
||||
|
||||
static propTypes = { |
||||
className: PropTypes.string, |
||||
href: PropTypes.string.isRequired, |
||||
to: PropTypes.string.isRequired, |
||||
children: PropTypes.node, |
||||
onInterceptClick: PropTypes.func, |
||||
}; |
||||
|
||||
handleClick = e => { |
||||
if (this.props.onInterceptClick && this.props.onInterceptClick()) { |
||||
e.preventDefault(); |
||||
return; |
||||
} |
||||
|
||||
if (this.context.router && e.button === 0 && !(e.ctrlKey || e.metaKey)) { |
||||
e.preventDefault(); |
||||
this.context.router.history.push(this.props.to); |
||||
} |
||||
} |
||||
|
||||
render () { |
||||
const { href, children, className, onInterceptClick, ...other } = this.props; |
||||
|
||||
return ( |
||||
<a target='_blank' href={href} onClick={this.handleClick} {...other} className={`permalink${className ? ' ' + className : ''}`}> |
||||
{children} |
||||
</a> |
||||
); |
||||
} |
||||
|
||||
} |
||||
Loading…
Reference in new issue