Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
ActionLink.js 1.39 KiB
import React from 'react'
import styled from 'styled-components'
import { th } from '@pubsweet/ui-toolkit'
import { Action, Icon } from '@pubsweet/ui'

import { paddingHelper } from './styledHelpers'

const ActionLink = ({
  to,
  icon,
  size,
  onClick,
  disabled,
  children,
  iconSize = 2,
  iconPosition = 'left',
  ...rest
}) => (
  <Root {...rest} to={to}>
    {icon &&
      iconPosition === 'left' && (
        <Icon onClick={onClick} secondary={to} size={iconSize} warning={!to}>
          {icon}
        </Icon>
      )}
    {to ? (
      <ExternalLink href={to} target="_blank">
        {children}
      </ExternalLink>
    ) : (
      <Action disabled={disabled} onClick={onClick} size={size}>
        {children}
      </Action>
    )}
    {icon &&
      iconPosition === 'right' && (
        <Icon onClick={onClick} secondary={to} size={iconSize} warning={!to}>
          {icon}
        </Icon>
      )}
  </Root>
)

export default ActionLink

// #region styles
const ExternalLink = styled.a`
  color: ${th('colorSecondary')};
  font-family: ${th('fontReading')};
  text-decoration: underline;

  &:hover {
    color: ${th('colorSecondary')};
    font-family: ${th('fontReading')};
    text-decoration: underline;
  }
`

const Root = styled.div`
  align-items: center;
  display: ${props => (props.to ? 'inline-flex' : 'flex')};
  ${paddingHelper};

  height: max-content;
  width: max-content;
`
// #endregion