import { Typography } from "@material-ui/core"; import { TypographyProps } from "@material-ui/core/Typography"; import { makeStyles } from "@saleor/macaw-ui"; import classNames from "classnames"; import React from "react"; import { Link as RouterLink } from "react-router-dom"; const useStyles = makeStyles( theme => ({ primary: { color: theme.palette.textHighlighted.active }, root: { cursor: "pointer", display: "inline" }, secondary: { color: theme.palette.primary.main }, underline: { textDecoration: "underline" }, noUnderline: { textDecoration: "none" }, disabled: { cursor: "default", color: theme.palette.textHighlighted.inactive } }), { name: "Link" } ); const isExternalURL = url => /^https?:\/\//.test(url); interface LinkProps extends React.AnchorHTMLAttributes { href?: string; color?: "primary" | "secondary"; underline?: boolean; typographyProps?: TypographyProps; onClick?: () => void; disabled?: boolean; } const Link: React.FC = props => { const { className, children, color = "primary", underline = false, onClick, disabled, href, ...linkProps } = props; const classes = useStyles(props); const commonLinkProps = { className: classNames(className, { [classes.root]: true, [classes[color]]: true, [classes.underline]: underline, [classes.noUnderline]: !underline, [classes.disabled]: disabled }), onClick: event => { if (disabled || !onClick) { return; } event.preventDefault(); onClick(); }, ...linkProps }; return ( <> {!!href && !isExternalURL(href) ? ( {children} ) : ( {children} )} ); }; Link.displayName = "Link"; export default Link;