z-react-ui
Version:
z-react-ui,是一款基于 Dumi,由 React + TypeScript 开发的组件库 🎉。
79 lines (71 loc) • 2.92 kB
JavaScript
import "antd/es/popover/style";
import _Popover from "antd/es/popover";
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
import React, { useCallback, useState } from 'react';
import { usePrefixCls } from '@/_hooks';
import { EmojiArr } from '@/_config/emoji';
import { chatEmojiPrefix, chatPrefix } from '@/_config'; // #----------- 上: ts类型定义 ----------- 分割线 ----------- 下: JS代码 -----------
var Emoji = function Emoji(_ref) {
var onClick = _ref.onClick,
onEmojiBtnClick = _ref.onEmojiBtnClick;
var prefixCls = usePrefixCls('chat-emoji');
var _useState = useState(false),
_useState2 = _slicedToArray(_useState, 2),
visible = _useState2[0],
setVisible = _useState2[1]; // 鼠标划过和离开表情
var handleEmojiConversion = useCallback(function (e, path) {
var target = e.target;
target.src = "".concat(chatEmojiPrefix, "/").concat(path);
}, []); // 点击表情
var handleClick = useCallback(function (e, emoji) {
onClick && onClick(emoji);
setVisible(false);
}, [onClick]); // 鼠标划过和离开表情按钮
var handleEmojiBtn = useCallback(function (e, path) {
var target = e.target;
target.src = "".concat(chatPrefix, "/").concat(path);
}, []); // 点击表情按钮
var handleEmojiClick = useCallback(function (e) {
handleEmojiBtn(e, 'toolbar_emoticon_down@2x.png');
onEmojiBtnClick && onEmojiBtnClick(e);
}, [onEmojiBtnClick]);
return /*#__PURE__*/React.createElement("div", {
className: prefixCls
}, /*#__PURE__*/React.createElement(_Popover, {
visible: visible,
onVisibleChange: function onVisibleChange(visible) {
return setVisible(visible);
},
content: /*#__PURE__*/React.createElement(React.Fragment, null, EmojiArr.map(function (item) {
return /*#__PURE__*/React.createElement("img", {
className: "".concat(prefixCls, "-img"),
key: item.src,
src: "".concat(chatEmojiPrefix, "/").concat(item.src),
alt: item.info,
onMouseEnter: function onMouseEnter(e) {
return handleEmojiConversion(e, item.hover);
},
onMouseLeave: function onMouseLeave(e) {
return handleEmojiConversion(e, item.src);
},
onClick: function onClick(e) {
return handleClick(e, item);
}
});
})),
overlayClassName: "".concat(prefixCls, "-overlay"),
trigger: "click",
placement: "top"
}, /*#__PURE__*/React.createElement("img", {
className: "".concat(prefixCls, "-img"),
onClick: handleEmojiClick,
onMouseEnter: function onMouseEnter(e) {
return handleEmojiBtn(e, 'toolbar_emoticon_hover@2x.png');
},
onMouseLeave: function onMouseLeave(e) {
return handleEmojiBtn(e, 'toolbar_emoticon_normal@2x.png');
},
src: "".concat(chatPrefix, "/toolbar_emoticon_normal@2x.png")
})));
};
export default Emoji;