UNPKG

@alifd/next

Version:

A configurable component library for web built on React.

345 lines (294 loc) 12.3 kB
'use strict'; exports.__esModule = true; exports.default = undefined; var _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties'); var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2); var _extends2 = require('babel-runtime/helpers/extends'); var _extends3 = _interopRequireDefault(_extends2); var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn'); var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); var _inherits2 = require('babel-runtime/helpers/inherits'); var _inherits3 = _interopRequireDefault(_inherits2); var _class, _temp2; var _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _overlay = require('../overlay'); var _overlay2 = _interopRequireDefault(_overlay); var _inner = require('./inner'); var _inner2 = _interopRequireDefault(_inner); var _zhCn = require('../locale/zh-cn'); var _zhCn2 = _interopRequireDefault(_zhCn); var _util = require('../util'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var noop = function noop() {}; var Popup = _overlay2.default.Popup; var pickOthers = _util.obj.pickOthers; /** * Drawer * @description 继承 Overlay.Popup 的 API,除非特别说明 * */ var Drawer = (_temp2 = _class = function (_Component) { (0, _inherits3.default)(Drawer, _Component); function Drawer() { var _temp, _this, _ret; (0, _classCallCheck3.default)(this, Drawer); for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } return _ret = (_temp = (_this = (0, _possibleConstructorReturn3.default)(this, _Component.call.apply(_Component, [this].concat(args))), _this), _this.getAlign = function (placement) { var align = void 0; switch (placement) { case 'top': align = 'tl tl'; break; case 'bottom': align = 'bl bl'; break; case 'left': align = 'tl tl'; break; case 'right': default: align = 'tr tr'; break; } return align; }, _this.getAnimation = function (placement) { if ('animation' in _this.props) { return _this.props.animation; } var animation = void 0; switch (placement) { case 'top': animation = { in: 'slideInDown', out: 'slideOutUp' }; break; case 'bottom': animation = { in: 'slideInUp', out: 'slideOutDown' }; break; case 'left': animation = { in: 'slideInLeft', out: 'slideOutLeft' }; break; case 'right': default: animation = { in: 'slideInRight', out: 'slideOutRight' }; break; } return animation; }, _this.getOverlayRef = function (ref) { _this.overlay = ref; }, _this.mapcloseableToConfig = function (closeable) { return ['esc', 'close', 'mask'].reduce(function (ret, option) { var key = option.charAt(0).toUpperCase() + option.substr(1); var value = typeof closeable === 'boolean' ? closeable : closeable.split(',').indexOf(option) > -1; if (option === 'esc' || option === 'mask') { ret['canCloseBy' + key] = value; } else { ret['canCloseBy' + key + 'Click'] = value; } return ret; }, {}); }, _this.handleVisibleChange = function (visible, reason, e) { var _this$props = _this.props, onClose = _this$props.onClose, onVisibleChange = _this$props.onVisibleChange; if (visible === false) { onClose && onClose(reason, e); } onVisibleChange && onVisibleChange(visible, reason, e); }, _temp), (0, _possibleConstructorReturn3.default)(_this, _ret); } Drawer.prototype.renderInner = function renderInner(closeable) { var _props = this.props, prefix = _props.prefix, className = _props.className, children = _props.children, title = _props.title, onClose = _props.onClose, locale = _props.locale, headerStyle = _props.headerStyle, bodyStyle = _props.bodyStyle, placement = _props.placement, rtl = _props.rtl; var others = pickOthers(Object.keys(Drawer.propTypes), this.props); return _react2.default.createElement( _inner2.default, (0, _extends3.default)({ prefix: prefix, title: title, className: className, locale: locale, closeable: closeable, rtl: rtl, headerStyle: headerStyle, bodyStyle: bodyStyle, placement: placement, onClose: onClose.bind(this, 'closeClick') }, others), children ); }; Drawer.prototype.render = function render() { var _props2 = this.props, prefix = _props2.prefix, style = _props2.style, width = _props2.width, height = _props2.height, trigger = _props2.trigger, triggerType = _props2.triggerType, animation = _props2.animation, hasMask = _props2.hasMask, visible = _props2.visible, placement = _props2.placement, onClose = _props2.onClose, onVisibleChange = _props2.onVisibleChange, closeable = _props2.closeable, closeMode = _props2.closeMode, rtl = _props2.rtl, popupContainer = _props2.popupContainer, others = (0, _objectWithoutProperties3.default)(_props2, ['prefix', 'style', 'width', 'height', 'trigger', 'triggerType', 'animation', 'hasMask', 'visible', 'placement', 'onClose', 'onVisibleChange', 'closeable', 'closeMode', 'rtl', 'popupContainer']); var newStyle = (0, _extends3.default)({ width: width, height: height }, style); var newCloseable = 'closeMode' in this.props ? Array.isArray(closeMode) ? closeMode.join(',') : closeMode : closeable; var _mapcloseableToConfig = this.mapcloseableToConfig(newCloseable), canCloseByCloseClick = _mapcloseableToConfig.canCloseByCloseClick, closeConfig = (0, _objectWithoutProperties3.default)(_mapcloseableToConfig, ['canCloseByCloseClick']); var newPopupProps = (0, _extends3.default)({ prefix: prefix, visible: visible, trigger: trigger, triggerType: triggerType, onVisibleChange: this.handleVisibleChange, animation: this.getAnimation(placement), hasMask: hasMask, align: this.getAlign(placement) }, closeConfig, { canCloseByOutSideClick: false, disableScroll: true, ref: this.getOverlayRef, rtl: rtl, target: 'viewport', style: newStyle, needAdjust: false, container: popupContainer }); var inner = this.renderInner(canCloseByCloseClick); return _react2.default.createElement( Popup, (0, _extends3.default)({}, newPopupProps, others), inner ); }; return Drawer; }(_react.Component), _class.displayName = 'Drawer', _class.propTypes = (0, _extends3.default)({}, Popup.propTypes || {}, { prefix: _propTypes2.default.string, pure: _propTypes2.default.bool, rtl: _propTypes2.default.bool, // 不建议使用trigger trigger: _propTypes2.default.element, triggerType: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.array]), /** * 宽度,仅在 placement是 left right 的时候生效 */ width: _propTypes2.default.oneOfType([_propTypes2.default.number, _propTypes2.default.string]), /** * 高度,仅在 placement是 top bottom 的时候生效 */ height: _propTypes2.default.oneOfType([_propTypes2.default.number, _propTypes2.default.string]), /** * [废弃]同closeMode, 控制对话框关闭的方式,值可以为字符串或者布尔值,其中字符串是由以下值组成: * **close** 表示点击关闭按钮可以关闭对话框 * **mask** 表示点击遮罩区域可以关闭对话框 * **esc** 表示按下 esc 键可以关闭对话框 * 如 'close' 或 'close,esc,mask' * 如果设置为 true,则以上关闭方式全部生效 * 如果设置为 false,则以上关闭方式全部失效 */ closeable: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.bool]), /** * 隐藏时是否保留子节点,不销毁 */ cache: _propTypes2.default.bool, /** * [推荐]控制对话框关闭的方式,值可以为字符串或者数组,其中字符串、数组均为以下值的枚举: * **close** 表示点击关闭按钮可以关闭对话框 * **mask** 表示点击遮罩区域可以关闭对话框 * **esc** 表示按下 esc 键可以关闭对话框 * 如 'close' 或 ['close','esc','mask'], [] * @version 1.21 */ closeMode: _propTypes2.default.oneOfType([_propTypes2.default.arrayOf(_propTypes2.default.oneOf(['close', 'mask', 'esc'])), _propTypes2.default.oneOf(['close', 'mask', 'esc'])]), /** * 对话框关闭时触发的回调函数 * @param {String} trigger 关闭触发行为的描述字符串 * @param {Object} event 关闭时事件对象 */ onClose: _propTypes2.default.func, /** * 对话框打开后的回调函数 */ afterOpen: _propTypes2.default.func, /** * 位于页面的位置 */ placement: _propTypes2.default.oneOf(['top', 'right', 'bottom', 'left']), /** * 标题 */ title: _propTypes2.default.node, /** * header上的样式 */ headerStyle: _propTypes2.default.object, /** * body上的样式 */ bodyStyle: _propTypes2.default.object, /** * 是否显示 */ visible: _propTypes2.default.bool, /** * 是否显示遮罩 */ hasMask: _propTypes2.default.bool, // 受控模式下(没有 trigger 的时候),只会在关闭时触发,相当于onClose onVisibleChange: _propTypes2.default.func, /** * 显示隐藏时动画的播放方式,支持 { in: 'enter-class', out: 'leave-class' } 的对象参数,如果设置为 false,则不播放动画。 请参考 Animate 组件的文档获取可用的动画名 * @default { in: 'expandInDown', out: 'expandOutUp' } */ animation: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.bool]), locale: _propTypes2.default.object, // for ConfigProvider popupContainer: _propTypes2.default.any }), _class.defaultProps = { prefix: 'next-', triggerType: 'click', trigger: null, closeable: true, onClose: noop, hasMask: true, placement: 'right', locale: _zhCn2.default.Drawer }, _temp2); Drawer.displayName = 'Drawer'; exports.default = Drawer; module.exports = exports['default'];