@forchange/aui
Version:
ai-boss 业务 ui 组件库
163 lines (140 loc) • 5.62 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var React = _interopRequireWildcard(require("react"));
var _debounce = require("../_util/debounce");
var _config = require("../style/config");
require("./style/content.css");
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; if (obj != null) { var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
function _defineProperty(obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true
});
} else {
obj[key] = value;
}
return obj;
}
class Content extends React.Component {
constructor(props) {
super(props);
_defineProperty(this, "scrollToBottom", () => {
if (this.state.chatContentRef.current) {
const {
scrollHeight,
clientHeight
} = this.state.chatContentRef.current;
this.state.chatContentRef.current.scrollTop = scrollHeight - clientHeight;
}
});
_defineProperty(this, "onScrollToTOP", node => {
node.addEventListener('scroll', (0, _debounce.debounce)(() => {
if (node.scrollTop <= 0) {
if (this.props.handleScrollToTop) {
this.props.handleScrollToTop();
}
}
}, 200));
});
_defineProperty(this, "onImageLoaded", () => {
this.scrollToBottom();
});
_defineProperty(this, "onImageErrored", () => {
this.scrollToBottom();
});
this.state = {
chatContentRef: React.createRef(),
className: 'chat-component-content'
};
}
componentDidMount() {
this.onScrollToTOP(this.state.chatContentRef.current);
this.scrollToBottom();
}
getSnapshotBeforeUpdate(prevProps, prevState) {
if (this.props.messageList.length !== prevProps.messageList.length) {
return true;
}
return null;
}
componentDidUpdate(prevProps, prevState, snapshot) {
if (snapshot) {
this.scrollToBottom();
}
} // 默认滚动到底部
render() {
const {
messageList
} = this.props;
const className = (0, _config.getPrefixCls)(this.state.className);
return React.createElement("section", {
ref: this.state.chatContentRef,
className: `${className}`
}, React.createElement("div", {
className: `${className}-container`
}, messageList.map((item, index) => React.createElement(React.Fragment, {
key: index
}, item.type === 'friend' && React.createElement("div", {
className: `${className}-container-left`
}, React.createElement("div", {
className: `${className}-container-left-info`
}, React.createElement("p", {
className: "user-info"
}, React.createElement("span", {
className: "name"
}, item.user.nickname), React.createElement("span", {
className: "time"
}, item.time)), React.createElement("div", {
className: "text-message"
}, React.createElement("p", {
className: "avatar"
}, React.createElement("img", {
src: item.user.avatar,
alt: "\u56FE\u7247\u52A0\u8F7D\u5931\u8D25"
})), item.content.type === 'text' && React.createElement("p", {
className: "info-text"
}, React.createElement("span", null, item.content.value)), item.content.type === 'image' && React.createElement(React.Fragment, null, React.createElement("div", {
className: "message-img"
}, React.createElement("img", {
onLoad: this.onImageLoaded,
onError: this.onImageErrored,
src: item.content.value,
alt: "\u56FE\u7247\u52A0\u8F7D\u5931\u8D25"
})))))), item.type === 'self' && React.createElement("div", {
className: `${className}-container-right`
}, React.createElement("p", {
className: "message-extra"
}, React.createElement("span", {
className: "name"
}, item.user.nickname), React.createElement("span", {
className: "time"
}, item.time)), React.createElement("div", {
className: "message-info"
}, item.content.type === 'text' && React.createElement("div", {
className: "info-text"
}, React.createElement("span", null, item.content.value)), item.content.type === 'image' && React.createElement(React.Fragment, null, item.content.status === 'fail' && React.createElement("div", {
className: "status"
}, React.createElement("span", null, "!")), React.createElement("div", {
className: "message-img"
}, React.createElement("img", {
onLoad: this.onImageLoaded,
onError: this.onImageErrored,
src: item.content.value,
alt: "\u6682\u65E0\u56FE\u7247"
}))), React.createElement("div", {
className: "info-img"
}, React.createElement("img", {
src: item.user.avatar,
alt: "\u6682\u65E0\u5934\u50CF"
}))))))));
}
}
var _default = Content;
exports.default = _default;