@flexis/ui
Version:
Styleless React Components
54 lines • 5.09 kB
JavaScript
import React, { PureComponent, Children, cloneElement } from 'react';
import PropTypes from 'prop-types';
import { AlignSideVariant, AlignSideValues } from '../common/types';
import { style, classes } from './Link.st.css';
const safeTargetBlankRel = 'noopener noreferrer';
let Link = /** @class */ (() => {
class Link extends PureComponent {
render() {
const { className, elementRef, icon, flexIcon, alignIcon, rel, target, children, linkElement: LinkElement, linkElementCustomProps, ...props } = this.props;
const iconOnly = !Children.count(children);
const leftAligned = alignIcon === AlignSideVariant.Left;
let linkIcon = null;
if (typeof icon !== 'undefined') {
linkIcon = cloneElement(icon, {
className: style(classes.icon, {
[`${alignIcon}Align`]: Boolean(alignIcon) && !iconOnly
}, icon.props.className)
});
}
return (<LinkElement ref={elementRef} {...props} className={style(classes.root, {
withIcon: Boolean(linkIcon),
flexIcon
}, className)} {...linkElementCustomProps} target={target} rel={target === '_blank' && typeof rel === 'undefined'
? safeTargetBlankRel
: rel}>
{linkIcon ? (<div className={classes.iconContainer}>
{leftAligned && linkIcon}
{!iconOnly && (<span>{children}</span>)}
{!leftAligned && linkIcon}
</div>) : children}
</LinkElement>);
}
}
Link.propTypes = {
elementRef: PropTypes.func,
icon: PropTypes.element,
flexIcon: PropTypes.bool,
alignIcon: PropTypes.oneOf(AlignSideValues),
rel: PropTypes.string,
target: PropTypes.string,
children: PropTypes.node,
linkElement: PropTypes.any,
linkElementCustomProps: PropTypes.object
};
Link.defaultProps = {
flexIcon: false,
alignIcon: AlignSideVariant.Left,
linkElement: 'a',
linkElementCustomProps: {}
};
return Link;
})();
export default Link;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGluay5qc3giLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9MaW5rL0xpbmsudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLEVBS2IsYUFBYSxFQUNiLFFBQVEsRUFDUixZQUFZLEVBQ1osTUFBTSxPQUFPLENBQUM7QUFDZixPQUFPLFNBQVMsTUFBTSxZQUFZLENBQUM7QUFJbkMsT0FBTyxFQUVOLGdCQUFnQixFQUNoQixlQUFlLEVBQ2YsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQ04sS0FBSyxFQUNMLE9BQU8sRUFDUCxNQUFNLGVBQWUsQ0FBQztBQW1CdkIsTUFBTSxrQkFBa0IsR0FBRyxxQkFBcUIsQ0FBQztBQUVqRDtJQUFBLE1BQXFCLElBQUssU0FBUSxhQUFxQjtRQXFCdEQsTUFBTTtZQUVMLE1BQU0sRUFDTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLElBQUksRUFDSixRQUFRLEVBQ1IsU0FBUyxFQUNULEdBQUcsRUFDSCxNQUFNLEVBQ04sUUFBUSxFQUNSLFdBQVcsRUFBRSxXQUFXLEVBQ3hCLHNCQUFzQixFQUN0QixHQUFHLEtBQUssRUFDUixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDZixNQUFNLFFBQVEsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDM0MsTUFBTSxXQUFXLEdBQUcsU0FBUyxLQUFLLGdCQUFnQixDQUFDLElBQUksQ0FBQztZQUN4RCxJQUFJLFFBQVEsR0FBc0IsSUFBSSxDQUFDO1lBRXZDLElBQUksT0FBTyxJQUFJLEtBQUssV0FBVyxFQUFFO2dCQUNoQyxRQUFRLEdBQUcsWUFBWSxDQUN0QixJQUFJLEVBQ0o7b0JBQ0MsU0FBUyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFO3dCQUM5QixDQUFDLEdBQUcsU0FBUyxPQUFPLENBQUMsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRO3FCQUN0RCxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO2lCQUN4QixDQUNELENBQUM7YUFDRjtZQUVELE9BQU8sQ0FDTixDQUFDLFdBQVcsQ0FDWCxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FDaEIsSUFBSSxLQUFLLENBQUMsQ0FDVixTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRTtnQkFDOUIsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUM7Z0JBQzNCLFFBQVE7YUFDUixFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQ2QsSUFBSSxzQkFBc0IsQ0FBQyxDQUMzQixNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FDZixHQUFHLENBQUMsQ0FBQyxNQUFNLEtBQUssUUFBUSxJQUFJLE9BQU8sR0FBRyxLQUFLLFdBQVc7Z0JBQ3JELENBQUMsQ0FBQyxrQkFBa0I7Z0JBQ3BCLENBQUMsQ0FBQyxHQUFHLENBQ0wsQ0FFRDtJQUFBLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUNYLENBQUMsR0FBRyxDQUNILFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FFakM7TUFBQSxDQUFDLFdBQVcsSUFBSSxRQUFRLENBQ3hCO01BQUEsQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUNiLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQ3ZCLENBQ0Q7TUFBQSxDQUFDLENBQUMsV0FBVyxJQUFJLFFBQVEsQ0FDMUI7S0FBQSxFQUFFLEdBQUcsQ0FBQyxDQUNOLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FDYjtHQUFBLEVBQUUsV0FBVyxDQUFDLENBQ2QsQ0FBQztRQUNILENBQUM7O0lBN0VNLGNBQVMsR0FBRztRQUNsQixVQUFVLEVBQWMsU0FBUyxDQUFDLElBQUk7UUFDdEMsSUFBSSxFQUFvQixTQUFTLENBQUMsT0FBTztRQUN6QyxRQUFRLEVBQWdCLFNBQVMsQ0FBQyxJQUFJO1FBQ3RDLFNBQVMsRUFBZSxTQUFTLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQztRQUN4RCxHQUFHLEVBQXFCLFNBQVMsQ0FBQyxNQUFNO1FBQ3hDLE1BQU0sRUFBa0IsU0FBUyxDQUFDLE1BQU07UUFDeEMsUUFBUSxFQUFnQixTQUFTLENBQUMsSUFBSTtRQUN0QyxXQUFXLEVBQWEsU0FBUyxDQUFDLEdBQUc7UUFDckMsc0JBQXNCLEVBQUUsU0FBUyxDQUFDLE1BQU07S0FDeEMsQ0FBQztJQUVLLGlCQUFZLEdBQUc7UUFDckIsUUFBUSxFQUFnQixLQUFLO1FBQzdCLFNBQVMsRUFBZSxnQkFBZ0IsQ0FBQyxJQUFJO1FBQzdDLFdBQVcsRUFBYSxHQUFHO1FBQzNCLHNCQUFzQixFQUFFLEVBQUU7S0FDMUIsQ0FBQztJQTZESCxXQUFDO0tBQUE7ZUFoRm9CLElBQUkifQ==