UNPKG

z-react-ui

Version:

z-react-ui,是一款基于 Dumi,由 React + TypeScript 开发的组件库 🎉。

79 lines (71 loc) 2.92 kB
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;