UNPKG

@shopify/polaris

Version:

Shopify’s product component library

35 lines (34 loc) 1.5 kB
import React from 'react'; import { ExternalSmallMinor } from '@shopify/polaris-icons'; import { BannerContext } from '../../utilities/banner-context'; import { classNames } from '../../utilities/css'; import { useI18n } from '../../utilities/i18n'; import { UnstyledLink } from '../UnstyledLink'; import { Icon } from '../Icon'; import styles from './Link.scss'; export function Link({ url, children, onClick, external, id, monochrome, }) { const i18n = useI18n(); let childrenMarkup = children; if (external && typeof children === 'string') { const iconLabel = i18n.translate('Polaris.Common.newWindowAccessibilityHint'); childrenMarkup = (<React.Fragment> {children} <span className={styles.IconLockup}> <span className={styles.IconLayout}> <Icon accessibilityLabel={iconLabel} source={ExternalSmallMinor}/> </span> </span> </React.Fragment>); } return (<BannerContext.Consumer> {(BannerContext) => { const shouldBeMonochrome = monochrome || BannerContext; const className = classNames(styles.Link, shouldBeMonochrome && styles.monochrome); return url ? (<UnstyledLink onClick={onClick} className={className} url={url} external={external} id={id}> {childrenMarkup} </UnstyledLink>) : (<button type="button" onClick={onClick} className={className} id={id}> {childrenMarkup} </button>); }} </BannerContext.Consumer>); }