UNPKG

6.3 kBJavaScriptView Raw
1import _extends from 'babel-runtime/helpers/extends';
2import _classCallCheck from 'babel-runtime/helpers/classCallCheck';
3import _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';
4import _inherits from 'babel-runtime/helpers/inherits';
5
6var _class, _temp2;
7
8import React, { Component } from 'react';
9import PropTypes from 'prop-types';
10import { polyfill } from 'react-lifecycles-compat';
11import classNames from 'classnames';
12import nextLocale from '../locale/zh-cn';
13import Icon from '../icon';
14import Animate from '../animate';
15import ConfigProvider from '../config-provider';
16import { obj } from '../util';
17
18var noop = function noop() {};
19
20/**
21 * Message
22 */
23var Message = (_temp2 = _class = function (_Component) {
24 _inherits(Message, _Component);
25
26 function Message() {
27 var _temp, _this, _ret;
28
29 _classCallCheck(this, Message);
30
31 for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
32 args[_key] = arguments[_key];
33 }
34
35 return _ret = (_temp = (_this = _possibleConstructorReturn(this, _Component.call.apply(_Component, [this].concat(args))), _this), _this.state = {
36 visible: typeof _this.props.visible === 'undefined' ? _this.props.defaultVisible : _this.props.visible
37 }, _this.onClose = function () {
38 if (!('visible' in _this.props)) {
39 _this.setState({
40 visible: false
41 });
42 }
43 _this.props.onClose(false);
44 }, _temp), _possibleConstructorReturn(_this, _ret);
45 }
46
47 Message.getDerivedStateFromProps = function getDerivedStateFromProps(props) {
48 if ('visible' in props) {
49 return {
50 visible: props.visible
51 };
52 }
53
54 return {};
55 };
56
57 Message.prototype.render = function render() {
58 var _classNames;
59
60 /* eslint-disable no-unused-vars */
61 var _props = this.props,
62 prefix = _props.prefix,
63 pure = _props.pure,
64 className = _props.className,
65 style = _props.style,
66 type = _props.type,
67 shape = _props.shape,
68 size = _props.size,
69 title = _props.title,
70 children = _props.children,
71 defaultVisible = _props.defaultVisible,
72 propsVisible = _props.visible,
73 icon = _props.iconType,
74 closeable = _props.closeable,
75 onClose = _props.onClose,
76 afterClose = _props.afterClose,
77 animation = _props.animation,
78 rtl = _props.rtl,
79 locale = _props.locale;
80
81 var others = _extends({}, obj.pickOthers(Object.keys(Message.propTypes), this.props));
82 /* eslint-enable */
83 var visible = this.state.visible;
84
85 var messagePrefix = prefix + 'message';
86
87 var classes = classNames((_classNames = {}, _classNames[messagePrefix] = true, _classNames[prefix + 'message-' + type] = type, _classNames['' + prefix + shape] = shape, _classNames['' + prefix + size] = size, _classNames[prefix + 'title-content'] = !!title, _classNames[prefix + 'only-content'] = !title && !!children, _classNames[className] = className, _classNames));
88
89 var newChildren = visible ? React.createElement(
90 'div',
91 _extends({ role: 'alert', style: style }, others, { className: classes, dir: rtl ? 'rtl' : undefined }),
92 closeable ? React.createElement(
93 'a',
94 {
95 role: 'button',
96 'aria-label': locale.closeAriaLabel,
97 className: messagePrefix + '-close',
98 onClick: this.onClose
99 },
100 React.createElement(Icon, { type: 'close' })
101 ) : null,
102 icon !== false ? React.createElement(Icon, {
103 className: messagePrefix + '-symbol ' + (!icon && messagePrefix + '-symbol-icon'),
104 type: icon
105 }) : null,
106 title ? React.createElement(
107 'div',
108 { className: messagePrefix + '-title' },
109 title
110 ) : null,
111 children ? React.createElement(
112 'div',
113 { className: messagePrefix + '-content' },
114 children
115 ) : null
116 ) : null;
117
118 if (animation) {
119 return React.createElement(
120 Animate.Expand,
121 { animationAppear: false, afterLeave: afterClose },
122 newChildren
123 );
124 }
125
126 return newChildren;
127 };
128
129 return Message;
130}(Component), _class.propTypes = {
131 prefix: PropTypes.string,
132 pure: PropTypes.bool,
133 className: PropTypes.string,
134 style: PropTypes.object,
135 /**
136 * 反馈类型
137 */
138 type: PropTypes.oneOf(['success', 'warning', 'error', 'notice', 'help', 'loading']),
139 /**
140 * 反馈外观
141 */
142 shape: PropTypes.oneOf(['inline', 'addon', 'toast']),
143 /**
144 * 反馈大小
145 */
146 size: PropTypes.oneOf(['medium', 'large']),
147 /**
148 * 标题
149 */
150 title: PropTypes.node,
151 /**
152 * 内容
153 */
154 children: PropTypes.node,
155 /**
156 * 默认是否显示
157 */
158 defaultVisible: PropTypes.bool,
159 /**
160 * 当前是否显示
161 */
162 visible: PropTypes.bool,
163 /**
164 * 显示的图标类型,会覆盖内部设置的IconType,传false不显示图标
165 */
166 iconType: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),
167 /**
168 * 显示关闭按钮
169 */
170 closeable: PropTypes.bool,
171 /**
172 * 关闭按钮的回调
173 */
174 onClose: PropTypes.func,
175 /**
176 * 关闭之后调用的函数
177 */
178 afterClose: PropTypes.func,
179 /**
180 * 是否开启展开收起动画
181 */
182 animation: PropTypes.bool,
183 locale: PropTypes.object,
184 rtl: PropTypes.bool
185}, _class.defaultProps = {
186 prefix: 'next-',
187 pure: false,
188 type: 'success',
189 shape: 'inline',
190 size: 'medium',
191 defaultVisible: true,
192 closeable: false,
193 onClose: noop,
194 afterClose: noop,
195 animation: true,
196 locale: nextLocale.Message
197}, _temp2);
198Message.displayName = 'Message';
199
200
201export default ConfigProvider.config(polyfill(Message));
\No newline at end of file