import React, { ReactElement, MouseEvent } from 'react';
import css from '../../utils/css';
import Icon, { IconName } from '../Icon';
import {
StyledLink,
StyledRouterLink,
StyledIconWrapper,
} from './StyledLinkButton';
import { CommonProps } from '../common';
export interface LinkButtonProps extends CommonProps {
/**
* Disable state of button.
*/
disabled?: boolean;
/**
* Specify filename which will be downloaded when the hyperlink is clicked on.
*/
download?: string;
/**
* Specifies the URL of the page the link goes to.
*/
href: string;
/**
* Icon name to render before the text.
*/
icon?: IconName;
/**
* Visual intent color to apply to button.
*/
intent?:
| 'primary'
| 'danger'
| 'success'
| 'warning'
| 'error'
| 'subdued-text';
/**
* Set the handler to handle `click` event.
*/
onClick?: (e: MouseEvent) => void;
/**
* Specifies the [relationship](https://www.w3schools.com/tags/att_a_rel.asp) between the current document and the linked document.
*/
rel?: string;
/**
* Icon name to render after the text.
*/
rightIcon?: IconName;
/**
* Size of button. `inherit` let button inherit font-size from its parents, useful for inline link.
*/
size?: 'small' | 'medium' | 'large' | 'inherit';
/**
* Specifies where to open the linked document.
*/
target?: '_blank' | '_parent' | '_self' | '_top';
/**
* Button label.
*/
text: string | ReactElement;
/**
* Indicate if LinkButton is compatible with routing using react-router. A Link component will be rendered instead of an usual HTML a tag.
*/
withRouter?: boolean;
}
const renderContent = (
text: string | ReactElement,
icon?: IconName,
rightIcon?: IconName
): ReactElement => (
<>
{icon !== undefined && (
)}
{text}
{rightIcon !== undefined && (
)}
>
);
const LinkButton = ({
text,
href,
onClick,
rel,
target,
intent = 'primary',
disabled = false,
download,
size = 'medium',
withRouter = false,
icon,
rightIcon,
id,
className,
style,
sx = {},
'data-test-id': dataTestId,
}: LinkButtonProps): ReactElement => {
return withRouter === true ? (
{renderContent(text, icon, rightIcon)}
) : (
{renderContent(text, icon, rightIcon)}
);
};
export default LinkButton;