Home Reference Source Repository

src/components/segmented/Segmented.js

/**
 * @author haw
 * 分段控件
 */

import React, {
  PropTypes
} from 'react';
import config from '../util/config';
import {classNames} from '../util';
import Button from '../button';

const prefix = 'segmented';

/**
 * 分段控件
 * @param {Object} props 组件所使用的属性
 * @param {Object[]} [props.elements] 分段控件的元素项列表(每一项都应该是 `Button` 组件的 props)
 * @param {string} [props.color=''] 分段控件的样式,默认为主题颜色
 * @param {string} [props.size=''] 分段控件的大小,默认为正常的按钮大小
 */
export default function Segmented(props) {
  const {
    elements,
    size,
    color,
    className,
    children,
    ...rest
  } = props;
  let renderNode = children;
  let clazz = classNames(prefix, {
    [`${prefix}-${size}`]: !!size,
    [className]: className
  });

  if (elements) {
    renderNode = elements.map((item, i) => {
      const {
        children,
        ...rest
      } = item;

      return (
        <Button {...rest} color={color} key={i}>
          {children}
        </Button>
      );
    });
  }

  return (
    <div className={clazz} {...rest}>
      {renderNode}
    </div>
  );
}

Segmented.propTypes = {
  elements: PropTypes.arrayOf(PropTypes.object),
  color: PropTypes.oneOf(config.colors),
  size: PropTypes.oneOf(['', 'small']),
  className: PropTypes.string,
  children: PropTypes.node
};
Segmented.defaultProps = {
  color: '',
  size: ''
};