diff --git a/package.json b/package.json
index 89ff5fb..f7732e9 100644
--- a/package.json
+++ b/package.json
@@ -15,6 +15,7 @@
"babel-loader": "^5.3.2",
"babel-plugin-espower": "^1.0.0",
"babel-runtime": "^5.8.20",
+ "classnames": "^2.2.5",
"css-loader": "^0.18.0",
"eslint": "^1.3.1",
"eslint-plugin-react": "^3.3.2",
diff --git a/src/Icon.js b/src/Icon.js
index 7d111b7..246abd2 100644
--- a/src/Icon.js
+++ b/src/Icon.js
@@ -3,10 +3,9 @@
*/
import React, {PropTypes} from 'react';
+import classnames from 'classnames';
-export default class Icon extends React.Component {
-
- static propTypes = {
+const propTypes = {
name: PropTypes.string.isRequired,
className: PropTypes.string,
size: PropTypes.oneOf(['lg', '2x', '3x', '4x', '5x']),
@@ -18,48 +17,47 @@ export default class Icon extends React.Component {
stack: PropTypes.oneOf(['1x', '2x']),
inverse: PropTypes.bool,
Component: PropTypes.oneOfType([PropTypes.string, PropTypes.func]),
- };
+};
- static defaultProps = {
+const defaultProps = {
Component: 'span',
- };
+ className: '',
+ size: null,
+ rotate: null,
+ flip: null,
+ fixedWidth: false,
+ spin: false,
+ pulse: false,
+ stack: null,
+ inverse: false,
+};
- render() {
- let {
- Component,
- name, size, rotate, flip, spin, fixedWidth, stack, inverse,
- pulse, className, ...props
- } = this.props;
- let classNames = `fa fa-${name}`;
- if (size) {
- classNames = `${classNames} fa-${size}`;
- }
- if (rotate) {
- classNames = `${classNames} fa-rotate-${rotate}`;
- }
- if (flip) {
- classNames = `${classNames} fa-flip-${flip}`;
- }
- if (fixedWidth) {
- classNames = `${classNames} fa-fw`;
- }
- if (spin) {
- classNames = `${classNames} fa-spin`;
- }
- if (pulse) {
- classNames = `${classNames} fa-pulse`;
- }
+function Icon(props) {
+ const {
+ Component,
+ name, size, rotate, flip, spin, fixedWidth, stack, inverse,
+ pulse, className, ...restProps
+ } = props;
- if (stack) {
- classNames = `${classNames} fa-stack-${stack}`;
- }
- if (inverse) {
- classNames = `${classNames} fa-inverse`;
- }
+ const iconClassNames = classnames(
+ `fa fa-${name}`,
+ className,
+ {
+ [`fa-${size}`]: size,
+ [`fa-rotate-${rotate}`]: rotate,
+ [`fa-flip-${flip}`]: flip,
+ [`fa-stack-${stack}`]: stack,
+ 'fa-fw': fixedWidth,
+ 'fa-spin': spin,
+ 'fa-pulse': pulse,
+ 'fa-inverse': inverse,
+ },
+ );
- if (className) {
- classNames = `${classNames} ${className}`;
- }
- return ;
- }
+ return ;
}
+
+Icon.propTypes = propTypes;
+Icon.defaultProps = defaultProps;
+
+export default Icon;
diff --git a/src/IconStack.js b/src/IconStack.js
index faf4534..eb85584 100644
--- a/src/IconStack.js
+++ b/src/IconStack.js
@@ -3,39 +3,41 @@
*/
import React, {PropTypes} from 'react';
+import classnames from 'classnames';
-export default class IconStack extends React.Component {
-
- static propTypes = {
+const propTypes = {
className: PropTypes.string,
size: PropTypes.oneOf(['lg', '2x', '3x', '4x', '5x']),
- children: PropTypes.node.isRequired
- };
-
- render() {
- let {
- className,
- size,
- children,
- ...props
- } = this.props;
-
- let classNames = ['fa-stack'];
-
- if (size) {
- classNames.push(`fa-${size}`);
- }
-
- if (className) {
- classNames.push(className);
- }
-
- const iconStackClassName = classNames.join(' ');
-
- return (
-
- {children}
-
- );
- }
+ children: PropTypes.node.isRequired,
+};
+
+const defaultProps = {
+ className: '',
+ size: null,
+};
+
+function IconStack(props) {
+ const {
+ className,
+ size,
+ children,
+ ...restProps
+ } = props;
+
+ const iconStackClassNames = classnames(
+ 'fa-stack',
+ className,
+ { [`fa-${size}`]: size, },
+ );
+
+ return (
+
+ {children}
+
+ );
}
+
+IconStack.propTypes = propTypes;
+IconStack.defaultProps = defaultProps;
+
+export default IconStack;