@nutui/nutui-react
Version:
京东风格的轻量级移动端 React 组件库,支持一套代码生成 H5 和小程序
135 lines (134 loc) • 5.81 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "CollapseItem", {
enumerable: true,
get: function() {
return CollapseItem;
}
});
var _interop_require_default = require("@swc/helpers/_/_interop_require_default");
var _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard");
var _async_to_generator = require("@swc/helpers/_/_async_to_generator");
var _define_property = require("@swc/helpers/_/_define_property");
var _object_spread = require("@swc/helpers/_/_object_spread");
var _object_spread_props = require("@swc/helpers/_/_object_spread_props");
var _object_without_properties = require("@swc/helpers/_/_object_without_properties");
var _sliced_to_array = require("@swc/helpers/_/_sliced_to_array");
var _ts_generator = require("@swc/helpers/_/_ts_generator");
var _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
var _classnames = /*#__PURE__*/ _interop_require_default._(require("classnames"));
var _typings = require("../../utils/typings");
var _context = /*#__PURE__*/ _interop_require_default._(require("../collapse/context"));
var _userefstate = require("../../hooks/use-ref-state");
var defaultProps = (0, _object_spread_props._)((0, _object_spread._)({}, _typings.ComponentDefaults), {
title: null,
name: '',
expandIcon: null,
disabled: false,
extra: null
});
var CollapseItem = function CollapseItem(props) {
var _ref = (0, _object_spread._)({}, defaultProps, props), children = _ref.children, title = _ref.title, name = _ref.name, disabled = _ref.disabled, expandIcon = _ref.expandIcon, rotate = _ref.rotate, extra = _ref.extra, style = _ref.style, className = _ref.className, rest = (0, _object_without_properties._)(_ref, [
"children",
"title",
"name",
"disabled",
"expandIcon",
"rotate",
"extra",
"style",
"className"
]);
var classPrefix = 'nut-collapse-item';
var context = (0, _react.useContext)(_context.default);
var wrapperRef = (0, _react.useRef)(null);
var contentRef = (0, _react.useRef)(null);
var expanded = (0, _react.useMemo)(function() {
if (context) {
return context.isOpen(name);
}
return false;
}, [
name,
context.isOpen
]);
var iconStyle = (0, _react.useMemo)(function() {
return expanded ? {
transform: "translateY(-50%) rotate(".concat(rotate || context.rotate, "deg)")
} : {
transform: 'translateY(-50%)'
};
}, [
expanded,
rotate
]);
var _useState = (0, _sliced_to_array._)((0, _react.useState)(0), 2), tran = _useState[0], setTran = _useState[1];
var _useRefState = (0, _sliced_to_array._)((0, _userefstate.useRefState)(0), 2), currentHeight = _useRefState[0], setCurrentHeight = _useRefState[1];
var _useState1 = (0, _sliced_to_array._)((0, _react.useState)(0), 2), wrapperHeight = _useState1[0], setWrapperHeight = _useState1[1];
var updateRectHeight = /*#__PURE__*/ function() {
var _ref = (0, _async_to_generator._)(function() {
var height;
return (0, _ts_generator._)(this, function(_state) {
height = contentRef.current.offsetHeight;
setCurrentHeight(height);
setWrapperHeight(expanded ? height : 0);
setTimeout(function() {
setTran(1);
});
return [
2
];
});
});
return function updateRectHeight() {
return _ref.apply(this, arguments);
};
}();
(0, _react.useEffect)(function() {
updateRectHeight();
}, [
children,
expanded
]);
var toggle = function toggle() {
var end = !expanded ? currentHeight.current : 0;
setWrapperHeight(end);
};
var handleClick = function handleClick() {
if (!disabled) {
context.updateValue(name);
toggle();
}
};
var _obj;
return /*#__PURE__*/ _react.default.createElement("div", (0, _object_spread._)({
className: (0, _classnames.default)(classPrefix, className),
style: style
}, rest), /*#__PURE__*/ _react.default.createElement("div", {
className: (0, _classnames.default)("".concat(classPrefix, "-header"), (0, _define_property._)({}, "".concat(classPrefix, "-header-disabled"), disabled)),
onClick: handleClick
}, /*#__PURE__*/ _react.default.createElement("div", {
className: "".concat(classPrefix, "-title")
}, title), /*#__PURE__*/ _react.default.createElement("div", {
className: "".concat(classPrefix, "-extra")
}, extra), /*#__PURE__*/ _react.default.createElement("div", {
className: "".concat(classPrefix, "-icon-box")
}, /*#__PURE__*/ _react.default.createElement("div", {
className: "".concat(classPrefix, "-icon"),
style: iconStyle
}, expandIcon || context.expandIcon))), /*#__PURE__*/ _react.default.createElement("div", {
className: (0, _classnames.default)((_obj = {}, (0, _define_property._)(_obj, "".concat(classPrefix, "-content-wrapper"), true), (0, _define_property._)(_obj, "".concat(classPrefix, "-content-wrapper-tran"), true), _obj)),
style: tran ? {
height: wrapperHeight
} : {},
ref: wrapperRef
}, /*#__PURE__*/ _react.default.createElement("div", {
className: "".concat(classPrefix, "-content")
}, /*#__PURE__*/ _react.default.createElement("div", {
ref: contentRef,
className: "".concat(classPrefix, "-content-text")
}, children))));
};
CollapseItem.displayName = 'NutCollapseItem';
;