zp-bee
Version:
zp-bee,是一款基于 Dumi,由 React + TypeScript 开发的组件库 🎉。
135 lines (120 loc) • 5.59 kB
JavaScript
"use strict";
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _react = _interopRequireWildcard(require("react"));
var _beeRect = require("../bee-rect");
var BeeLayout = function BeeLayout(_ref) {
var children = _ref.children,
btnChildren = _ref.btnChildren,
_ref$hiddenHeight = _ref.hiddenHeight,
hiddenHeight = _ref$hiddenHeight === void 0 ? 26 : _ref$hiddenHeight,
_ref$showHidden = _ref.showHidden,
showHidden = _ref$showHidden === void 0 ? false : _ref$showHidden,
_ref$showTime = _ref.showTime,
showTime = _ref$showTime === void 0 ? true : _ref$showTime,
_ref$fixCount = _ref.fixCount,
fixCount = _ref$fixCount === void 0 ? 1 : _ref$fixCount;
var _useState = (0, _react.useState)(showHidden),
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
expanded = _useState2[0],
setExpanded = _useState2[1];
var contentWrapper = (0, _react.useRef)();
var contentRect = (0, _beeRect.useRect)(contentWrapper);
var childrenArray = (0, _react.useMemo)(function () {
return _react.default.Children.toArray(children);
}, [children]);
var renderedItemsCount = (0, _react.useRef)(childrenArray.length);
var _useState3 = (0, _react.useState)({}),
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
forceUpdate = _useState4[1];
var minWidth = (0, _react.useMemo)(function () {
var timeWidth = showTime ? 320 : 0;
return fixCount * 230 + timeWidth;
}, [showTime, fixCount]);
(0, _react.useEffect)(function () {
if (contentRect) {
var width = contentRect.width,
height = contentRect.height;
if (width && height) {
var renderCount = renderedItemsCount.current;
if (height > hiddenHeight + 16) {
renderCount = childrenArray.length;
} else {
var timeWidth = showTime ? 320 : 0;
renderCount = Math.floor((width - timeWidth) / 230);
if (renderCount < fixCount) renderCount = fixCount;
}
if (renderCount !== renderedItemsCount.current) {
renderedItemsCount.current = renderCount;
forceUpdate({});
}
}
}
}, [contentRect, hiddenHeight, childrenArray.length, showTime, fixCount]);
var onExpand = (0, _react.useCallback)(function () {
setExpanded(function (c) {
return !c;
});
}, []);
return /*#__PURE__*/_react.default.createElement("div", {
className: "bee-layout-container"
}, /*#__PURE__*/_react.default.createElement("div", {
ref: contentWrapper,
className: "bee-content-wrap",
style: expanded ? {} : {
height: "".concat(hiddenHeight, "px"),
minWidth: "".concat(minWidth, "px")
}
}, childrenArray.slice(0, renderedItemsCount.current), /*#__PURE__*/_react.default.createElement("div", {
className: "bee-btn-wrap",
style: expanded ? {} : {
display: 'none'
}
}, !showHidden && /*#__PURE__*/_react.default.createElement("div", {
className: "bee-toggle-expand",
onClick: onExpand
}, /*#__PURE__*/_react.default.createElement("a", {
className: "bee-toggle-label"
}, "\u70B9\u51FB\u6536\u8D77"), /*#__PURE__*/_react.default.createElement("svg", {
viewBox: "0 0 1024 1024",
width: "1em",
height: "1em"
}, /*#__PURE__*/_react.default.createElement("path", {
d: "M512 483.84a28.16 28.16 0 0 0-20.48 8.32l-226.56 228.48a28.16 28.16 0 0 0 0 39.68 27.52 27.52 0 0 0 40.32 0L512 552.32l208 206.72a28.16 28.16 0 0 0 39.68 0 28.8 28.8 0 0 0 8.32-20.48 26.88 26.88 0 0 0-8.32-19.84L532.48 491.52A27.52 27.52 0 0 0 512 483.84z",
fill: "#44507E"
}), /*#__PURE__*/_react.default.createElement("path", {
d: "M491.52 264.32L264.32 492.8a28.8 28.8 0 0 0 40.32 40.32L512 324.48l207.36 206.72a28.8 28.8 0 0 0 40.32 0A28.16 28.16 0 0 0 768 512a27.52 27.52 0 0 0-8.32-19.84L531.84 264.32a28.8 28.8 0 0 0-40.32 0z",
fill: "#44507E"
}))), /*#__PURE__*/_react.default.createElement("div", {
className: "bee-btn-action"
}, btnChildren))), /*#__PURE__*/_react.default.createElement("div", {
className: "bee-btn-wrap",
style: expanded ? {
display: 'none'
} : {}
}, /*#__PURE__*/_react.default.createElement("div", {
className: "bee-toggle-expand",
onClick: onExpand
}, /*#__PURE__*/_react.default.createElement("a", {
className: "bee-toggle-label"
}, "\u66F4\u591A\u9009\u9879"), /*#__PURE__*/_react.default.createElement("svg", {
viewBox: "0 0 1024 1024",
width: "1em",
height: "1em"
}, /*#__PURE__*/_react.default.createElement("path", {
d: "M512 540.16a25.6 25.6 0 0 0 19.84-8.32l228.48-227.2a28.8 28.8 0 0 0-40.32-40.32L512 471.68 304.64 264.32a28.8 28.8 0 0 0-40.32 0 27.52 27.52 0 0 0-8.32 19.84 28.16 28.16 0 0 0 8.32 20.48l227.2 227.2a25.6 25.6 0 0 0 20.48 8.32z",
fill: "#44507E"
}), /*#__PURE__*/_react.default.createElement("path", {
d: "M531.2 759.68l228.48-227.84a28.16 28.16 0 0 0 0-39.68 27.52 27.52 0 0 0-40.32 0L512 699.52 304.64 492.16a27.52 27.52 0 0 0-40.32 0 27.52 27.52 0 0 0 0 39.68l227.2 227.84a28.16 28.16 0 0 0 39.68 0z",
fill: "#44507E"
}))), /*#__PURE__*/_react.default.createElement("div", {
className: "bee-btn-action"
}, btnChildren)));
};
var _default = BeeLayout;
exports.default = _default;