@nutui/nutui-react
Version:
京东风格的轻量级移动端 React 组件库,支持一套代码生成 H5 和小程序
171 lines (170 loc) • 7.38 kB
JavaScript
import { _ as _call_super } from "@swc/helpers/_/_call_super";
import { _ as _class_call_check } from "@swc/helpers/_/_class_call_check";
import { _ as _create_class } from "@swc/helpers/_/_create_class";
import { _ as _define_property } from "@swc/helpers/_/_define_property";
import { _ as _inherits } from "@swc/helpers/_/_inherits";
import { _ as _object_spread } from "@swc/helpers/_/_object_spread";
import { _ as _object_spread_props } from "@swc/helpers/_/_object_spread_props";
import * as React from "react";
import classNames from "classnames";
import { Failure, Loading, Success, Tips } from "@nutui/icons-react";
import { render, unmount } from "../../utils/render";
import Overlay from "../overlay/index";
var classPrefix = 'nut-toast';
var _React_PureComponent;
var Notification = /*#__PURE__*/ function(_superClass) {
"use strict";
_inherits(Notification, _superClass);
function Notification(props) {
_class_call_check(this, Notification);
var _this;
_this = _call_super(this, Notification, [
props
]), _define_property(_this, "closeTimer", void 0);
_this.close = _this.close.bind(_this);
_this.startCloseTimer = _this.startCloseTimer.bind(_this);
_this.clearCloseTimer = _this.clearCloseTimer.bind(_this);
_this.clickCover = _this.clickCover.bind(_this);
_this.state = {
show: true
};
return _this;
}
_create_class(Notification, [
{
key: "close",
value: function close() {
this.setState({
show: false
});
this.clearCloseTimer();
if (this.props.id) {
var element = document.getElementById(this.props.id);
element && element.parentNode && element.parentNode.removeChild(element);
}
this.props.onClose && this.props.onClose();
}
},
{
key: "startCloseTimer",
value: function startCloseTimer() {
var _this = this;
var duration = this.props.duration;
if (duration) {
this.closeTimer = window.setTimeout(function() {
_this.close();
}, duration * 1000);
}
}
},
{
key: "clearCloseTimer",
value: function clearCloseTimer() {
if (this.closeTimer) {
clearTimeout(this.closeTimer);
this.closeTimer = -1;
}
}
},
{
key: "clickCover",
value: function clickCover() {
var closeOnOverlayClick = this.props.closeOnOverlayClick;
if (closeOnOverlayClick) {
this.close();
}
}
},
{
key: "renderIcon",
value: function renderIcon() {
var icon = this.props.icon;
if (typeof icon === 'string') {
var iconNode = {
success: /*#__PURE__*/ React.createElement(Success, null),
fail: /*#__PURE__*/ React.createElement(Failure, null),
warn: /*#__PURE__*/ React.createElement(Tips, null),
loading: /*#__PURE__*/ React.createElement(Loading, {
className: "nut-icon-loading"
})
}[icon];
return /*#__PURE__*/ React.createElement("p", {
className: "".concat(classPrefix, "-icon-wrapper")
}, iconNode);
}
return icon;
}
},
{
key: "componentDidMount",
value: function componentDidMount() {
this.startCloseTimer();
}
},
{
key: "componentWillUnmount",
value: function componentWillUnmount() {
this.clearCloseTimer();
}
},
{
key: "render",
value: function render() {
var _this = this;
var _this_props = this.props, id = _this_props.id, icon = _this_props.icon, title = _this_props.title, content = _this_props.content, position = _this_props.position, size = _this_props.size, closeOnOverlayClick = _this_props.closeOnOverlayClick, lockScroll = _this_props.lockScroll, style = _this_props.style, className = _this_props.className, contentClassName = _this_props.contentClassName, contentStyle = _this_props.contentStyle, wordBreak = _this_props.wordBreak, zIndex = _this_props.zIndex;
var show = this.state.show;
var classes = classNames({
'nut-toast-has-icon': icon
});
return /*#__PURE__*/ React.createElement(Overlay, {
visible: show,
style: style,
zIndex: zIndex,
className: "".concat(classPrefix, "-overlay-default ").concat(className),
onClick: function() {
return _this.clickCover();
},
closeOnOverlayClick: closeOnOverlayClick,
lockScroll: lockScroll
}, /*#__PURE__*/ React.createElement("div", {
className: "".concat(classPrefix, " ").concat(classes),
id: "toast-".concat(id)
}, /*#__PURE__*/ React.createElement("div", {
className: classNames("".concat(classPrefix, "-inner"), "".concat(classPrefix, "-").concat(position), contentClassName, "".concat(classPrefix, "-inner-").concat(size), "".concat(classPrefix, "-inner-").concat(wordBreak), _define_property({}, "".concat(classPrefix, "-inner-descrption"), content)),
style: _object_spread({}, contentStyle)
}, this.renderIcon(), title && /*#__PURE__*/ React.createElement("div", {
className: "".concat(classPrefix, "-title")
}, title), content && /*#__PURE__*/ React.createElement("span", {
className: "".concat(classPrefix, "-text")
}, content))));
}
}
]);
return Notification;
}(_React_PureComponent = React.PureComponent);
_define_property(Notification, "newInstance", void 0);
export { Notification as default };
Notification.newInstance = function(properties, callback) {
var ref = function ref(instance) {
if (called) {
return;
}
called = true;
callback({
component: instance,
destroy: function destroy() {
unmount(element);
element && element.parentNode && element.parentNode.removeChild(element);
}
});
};
var element = document.createElement('div');
var id = properties.id ? properties.id : "".concat(Date.now());
element.id = id;
properties.id = id;
document.body.appendChild(element);
var called = false;
render(/*#__PURE__*/ React.createElement(Notification, _object_spread_props(_object_spread({}, properties), {
ref: ref
})), element);
};