@jannie-shao/components-antd4
Version:
62 lines • 2.3 kB
JavaScript
import React, { useState, useEffect, useRef, useCallback } from 'react';
import classnames from 'classnames';
import { rootPrefix } from "../style/config";
import { checkShow } from "./util";
var prefix = rootPrefix + "-tab-more";
var TabMore = function TabMore(_ref) {
var _ref$className = _ref.className,
className = _ref$className === void 0 ? '' : _ref$className,
children = _ref.children,
_ref$lineClamp = _ref.lineClamp,
lineClamp = _ref$lineClamp === void 0 ? 1 : _ref$lineClamp,
_ref$iconToShow = _ref.iconToShow,
iconToShow = _ref$iconToShow === void 0 ? '+ Show More' : _ref$iconToShow,
_ref$iconToHide = _ref.iconToHide,
iconToHide = _ref$iconToHide === void 0 ? '- Hide More' : _ref$iconToHide;
var compDropContent = useRef();
var _useState = useState(false),
show = _useState[0],
setShow = _useState[1];
var _useState2 = useState(false),
drop = _useState2[0],
setDrop = _useState2[1];
var resetShow = useCallback(function (entry) {
var showNow = checkShow(entry.target, lineClamp);
setShow(showNow);
!showNow && setDrop(false);
}, [lineClamp]);
useEffect(function () {
if (compDropContent !== null && compDropContent !== void 0 && compDropContent.current) {
var obser = new ResizeObserver(function (entries) {
entries.forEach(function (entry) {
resetShow(entry);
});
});
obser.observe(compDropContent === null || compDropContent === void 0 ? void 0 : compDropContent.current);
return function cleanUp() {
obser.disconnect();
};
}
return null;
}, [children]);
return /*#__PURE__*/React.createElement("div", {
className: classnames(prefix, className)
}, /*#__PURE__*/React.createElement("div", {
ref: compDropContent,
className: prefix + "-content " + (drop ? '' : 'hidden'),
style: {
WebkitLineClamp: lineClamp
}
}, children), show && !drop && /*#__PURE__*/React.createElement("div", {
className: prefix + "-btn",
onClick: function onClick() {
return setDrop(true);
}
}, iconToShow), drop && /*#__PURE__*/React.createElement("div", {
className: prefix + "-btn",
onClick: function onClick() {
return setDrop(false);
}
}, iconToHide));
};
export default TabMore;