UNPKG

zent

Version:

一套前端设计语言和基于React的实现

174 lines (130 loc) 5.81 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _defineProperty2 = require('babel-runtime/helpers/defineProperty'); var _defineProperty3 = _interopRequireDefault(_defineProperty2); var _extends2 = require('babel-runtime/helpers/extends'); var _extends3 = _interopRequireDefault(_extends2); var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _createClass2 = require('babel-runtime/helpers/createClass'); var _createClass3 = _interopRequireDefault(_createClass2); var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn'); var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); var _inherits2 = require('babel-runtime/helpers/inherits'); var _inherits3 = _interopRequireDefault(_inherits2); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _classnames = require('classnames'); var _classnames2 = _interopRequireDefault(_classnames); var _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); var _omit = require('lodash/omit'); var _omit2 = _interopRequireDefault(_omit); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } var BLACK_LIST = ['type', 'size', 'htmlType', 'block', 'component', 'disabled', 'loading', 'outline', 'bordered', 'className', 'prefix']; var BTN_BLACK_LIST = ['href', 'target'].concat(BLACK_LIST); var A_BLACK_LIST = ['href', 'target'].concat(BLACK_LIST); var Button = function (_ref) { (0, _inherits3['default'])(Button, _ref); function Button(props) { (0, _classCallCheck3['default'])(this, Button); var _this = (0, _possibleConstructorReturn3['default'])(this, (Button.__proto__ || Object.getPrototypeOf(Button)).call(this, props)); _this.handleClick = _this.handleClick.bind(_this); return _this; } // 处理点击事件 (0, _createClass3['default'])(Button, [{ key: 'handleClick', value: function handleClick(event) { if (this.props.disabled || this.props.loading) return; if (this.props.onClick) { this.props.onClick(event); } } // render a 标签 }, { key: 'renderLink', value: function renderLink(classNames) { var Node = this.props.component || 'a'; var disabled = this.props.disabled || this.props.loading; var _props = this.props, _props$href = _props.href, href = _props$href === undefined ? '' : _props$href, target = _props.target; var nodeProps = (0, _omit2['default'])(this.props, A_BLACK_LIST); return _react2['default'].createElement( Node, (0, _extends3['default'])({}, disabled ? {} : { href: href, target: target }, nodeProps, { className: classNames, onClick: this.handleClick }), this.props.children ); } // render button 标签 }, { key: 'renderButton', value: function renderButton(classNames) { var Node = this.props.component || 'button'; var disabled = this.props.disabled || this.props.loading; var htmlType = this.props.htmlType; var nodeProps = (0, _omit2['default'])(this.props, BTN_BLACK_LIST); return _react2['default'].createElement( Node, (0, _extends3['default'])({}, nodeProps, htmlType ? { type: htmlType } : {}, { className: classNames, disabled: disabled, onClick: this.handleClick }), this.props.children ); } }, { key: 'render', value: function render() { var _setClass; var renderer = this.props.href || this.props.target ? 'renderLink' : 'renderButton'; var _props2 = this.props, className = _props2.className, type = _props2.type, size = _props2.size, block = _props2.block, disabled = _props2.disabled, loading = _props2.loading, outline = _props2.outline, bordered = _props2.bordered, prefix = _props2.prefix; var classNames = (0, _classnames2['default'])((_setClass = {}, (0, _defineProperty3['default'])(_setClass, prefix + '-btn-' + type + (outline ? '-outline' : ''), type !== 'default'), (0, _defineProperty3['default'])(_setClass, prefix + '-btn-' + size, size !== 'medium'), (0, _defineProperty3['default'])(_setClass, prefix + '-btn-block', block), (0, _defineProperty3['default'])(_setClass, prefix + '-btn-loading', loading), (0, _defineProperty3['default'])(_setClass, prefix + '-btn-disabled', disabled), (0, _defineProperty3['default'])(_setClass, prefix + '-btn-border-transparent', !bordered), _setClass), prefix + '-btn', className); return this[renderer](classNames); } }]); return Button; }(_react.PureComponent || _react.Component); Button.propTypes = { type: _propTypes2['default'].oneOf(['default', 'primary', 'success', 'danger', 'link']), size: _propTypes2['default'].oneOf(['large', 'medium', 'small']), htmlType: _propTypes2['default'].oneOf(['button', 'submit', 'reset']), className: _propTypes2['default'].string, block: _propTypes2['default'].bool, component: _propTypes2['default'].oneOfType([_propTypes2['default'].string, _propTypes2['default'].func]), disabled: _propTypes2['default'].bool, loading: _propTypes2['default'].bool, outline: _propTypes2['default'].bool, bordered: _propTypes2['default'].bool, prefix: _propTypes2['default'].string }; Button.defaultProps = { type: 'default', size: 'medium', htmlType: 'button', className: '', block: false, disabled: false, loading: false, outline: false, bordered: true, prefix: 'zent' }; exports['default'] = Button;