import * as React from 'react'; import * as PropTypes from 'prop-types'; import RcSwitch from 'rc-switch'; import classNames from 'classnames'; import omit from 'omit.js'; import Wave from '../_util/wave'; import Icon from '../icon'; export interface SwitchProps { prefixCls?: string; size?: 'small' | 'default'; className?: string; checked?: boolean; defaultChecked?: boolean; onChange?: (checked: boolean) => any; checkedChildren?: React.ReactNode; unCheckedChildren?: React.ReactNode; disabled?: boolean; loading?: boolean; autoFocus?: boolean; } export default class Switch extends React.Component { static defaultProps = { prefixCls: 'ant-switch', }; static propTypes = { prefixCls: PropTypes.string, // HACK: https://github.com/ant-design/ant-design/issues/5368 // size=default and size=large are the same size: PropTypes.oneOf(['small', 'default', 'large']), className: PropTypes.string, }; private rcSwitch: typeof RcSwitch; focus() { this.rcSwitch.focus(); } blur() { this.rcSwitch.blur(); } saveSwitch = (node: typeof RcSwitch) => { this.rcSwitch = node; } render() { const { prefixCls, size, loading, className = '' } = this.props; const classes = classNames(className, { [`${prefixCls}-small`]: size === 'small', [`${prefixCls}-loading`]: loading, }); const loadingIcon = loading ? ( ) : null; return ( ); } }