UNPKG

@douyinfe/semi-ui

Version:

A modern, comprehensive, flexible design system and UI library. Connect DesignOps & DevOps. Quickly build beautiful React apps. Maintained by Douyin-fe team.

127 lines (126 loc) 4.37 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _react = _interopRequireDefault(require("react")); var _classnames = _interopRequireDefault(require("classnames")); var _constants = require("@douyinfe/semi-foundation/lib/cjs/empty/constants"); require("@douyinfe/semi-foundation/lib/cjs/empty/empty.css"); var _typography = _interopRequireDefault(require("../typography")); var _baseComponent = _interopRequireDefault(require("../_base/baseComponent")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } var __rest = void 0 && (void 0).__rest || function (s, e) { var t = {}; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p]; if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]]; } return t; }; const prefixCls = _constants.cssClasses.PREFIX; class Empty extends _baseComponent.default { constructor(props) { super(props); this.observe = mutationsList => { for (const mutation of mutationsList) { if (mutation.type === 'attributes' && mutation.attributeName === 'theme-mode') { this.updateMode(); } } }; this.updateMode = () => { const val = this.body.getAttribute('theme-mode'); if (val !== this.state.mode) { this.setState({ mode: val }); } }; this.state = { mode: null }; } componentDidMount() { if (this.props.darkModeImage) { this.body = window.document.body; this.updateMode(); const config = { attributes: true, childList: false, subtree: false }; this.observer = new MutationObserver(this.observe); this.observer.observe(this.body, config); } } componentWillUnmount() { this.observer && this.observer.disconnect(); } render() { const _a = this.props, { className, image, description, style, title, imageStyle, children, layout, darkModeImage } = _a, rest = __rest(_a, ["className", "image", "description", "style", "title", "imageStyle", "children", "layout", "darkModeImage"]); const alt = typeof description === 'string' ? description : 'empty'; const imgSrc = this.state.mode === 'dark' && darkModeImage ? darkModeImage : image; let imageNode = null; if (typeof imgSrc === 'string') { imageNode = /*#__PURE__*/_react.default.createElement("img", { alt: alt, src: imgSrc }); } else if (imgSrc && 'id' in imgSrc) { imageNode = /*#__PURE__*/_react.default.createElement("svg", { "aria-hidden": "true" }, /*#__PURE__*/_react.default.createElement("use", { xlinkHref: `#${imgSrc.id}` })); } else { imageNode = imgSrc; } const wrapperCls = (0, _classnames.default)(className, prefixCls, { [`${prefixCls}-${layout}`]: layout }); const titleProps = imageNode ? { heading: 4 } : { heading: 6, style: { fontWeight: 400 } }; return /*#__PURE__*/_react.default.createElement("div", Object.assign({ className: wrapperCls, style: style }, this.getDataAttr(rest)), /*#__PURE__*/_react.default.createElement("div", { className: `${prefixCls}-image`, style: imageStyle, "x-semi-prop": "image,darkModeImage" }, imageNode), /*#__PURE__*/_react.default.createElement("div", { className: `${prefixCls}-content` }, title ? (/*#__PURE__*/_react.default.createElement(_typography.default.Title, Object.assign({}, titleProps, { className: `${prefixCls}-title`, "x-semi-prop": "title" }), title)) : null, description ? (/*#__PURE__*/_react.default.createElement("div", { className: `${prefixCls}-description`, "x-semi-prop": "description" }, description)) : null, children ? (/*#__PURE__*/_react.default.createElement("div", { className: `${prefixCls}-footer`, "x-semi-prop": "children" }, children)) : null)); } } exports.default = Empty; Empty.defaultProps = { layout: 'vertical' };