UNPKG

@nutui/nutui-react

Version:

京东风格的轻量级移动端 React 组件库,支持一套代码生成 H5 和小程序

171 lines (170 loc) 7.38 kB
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); };