rc-adminlte
Version:
AdminLTE template ported to React
69 lines (63 loc) • 1.84 kB
JSX
import React from 'react';
import PropTypes from 'prop-types';
import Ionicon from 'react-ionicons';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import './Infobox2.css';
import { Colors } from '../PropTypes';
import { splitIcon } from '../Utilities';
const Infobox2 = ({
id, color, title, subTitle, text, footerText, icon, footerIcon, onFooterClick, to,
}) => {
const isIonIcon = icon.startsWith('ion') || icon.startsWith('ios');
let iconLocal;
if (!isIonIcon) {
const faIconClass = splitIcon(icon);
iconLocal = <FontAwesomeIcon icon={faIconClass} size="sm" />;
} else {
iconLocal = <Ionicon icon={icon} fontSize="90px" color="rgba(0,0,0,0.15)" />;
}
const localFooterIcon = splitIcon(footerIcon);
return (
<div id={id} className={`small-box bg-${color}`}>
<div className="inner">
<h3>
{title}
{subTitle && <sup style={{ fontSize: '20px' }}>{subTitle}</sup>}
</h3>
<p>{text}</p>
</div>
<div className={`icon ${isIonIcon ? ' icon-ion' : ''}`}>
{iconLocal}
</div>
<a href={to} onClick={onFooterClick} className="small-box-footer">
{footerText}
{' '}
<FontAwesomeIcon icon={localFooterIcon} />
</a>
</div>
);
};
Infobox2.propTypes = {
id: PropTypes.string,
color: PropTypes.oneOf(Colors),
title: PropTypes.string,
subTitle: PropTypes.string,
text: PropTypes.string,
footerText: PropTypes.string,
icon: PropTypes.string.isRequired,
footerIcon: PropTypes.string,
onFooterClick: PropTypes.func,
to: PropTypes.string,
};
Infobox2.defaultProps = {
id: undefined,
color: null,
title: null,
subTitle: null,
text: null,
footerText: null,
footerIcon: 'fas-arrow-alt-circle-right',
onFooterClick: null,
to: '/',
};
export default Infobox2;