~cytrogen/masto-fe

ref: 20a89f1c8eefa0f766a4650be4d2e5f1fa92ee71 masto-fe/app/javascript/flavours/glitch/components/permalink.jsx -rw-r--r-- 1.1 KiB
20a89f1c — Cytrogen [feature] Bookmark folders UI 8 days ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import PropTypes from "prop-types";
import { PureComponent } from "react";

export default 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 (e.button === 0 && !(e.ctrlKey || e.metaKey)) {
      if (this.props.onInterceptClick && this.props.onInterceptClick()) {
        e.preventDefault();
        return;
      }

      if (this.context.router) {
        e.preventDefault();
        this.context.router.history.push(this.props.to);
      }
    }
  };

  render () {
    const {
      children,
      className,
      href,
      to,
      onInterceptClick,
      ...other
    } = this.props;

    return (
      <a target='_blank' href={href} onClick={this.handleClick} {...other} className={`permalink${className ? " " + className : ""}`}>
        {children}
      </a>
    );
  }

}