choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
77 lines (64 loc) • 2.17 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard")["default"];
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _react = _interopRequireWildcard(require("react"));
var _isNil = _interopRequireDefault(require("lodash/isNil"));
var List = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
var data = _ref.data,
prefixCls = _ref.prefixCls,
children = _ref.children,
height = _ref.height,
itemKey = _ref.itemKey;
var containerRef = (0, _react.useRef)(null);
var innerStyle = (0, _react.useMemo)(function () {
var style = {
display: 'flex',
flexDirection: 'column'
};
if (height) {
style.height = height;
style.overflow = 'hidden auto';
}
return style;
}, [height]);
var getKey = (0, _react.useCallback)(function (item) {
if (typeof itemKey === 'function') {
return itemKey(item);
}
return (0, _isNil["default"])(itemKey) ? undefined : item[itemKey];
}, [itemKey]);
var renderChild = (0, _react.useCallback)(function (child) {
return /*#__PURE__*/(0, _react.cloneElement)(children(child), {
key: getKey(child)
});
}, [children, getKey]);
var scrollTo = (0, _react.useCallback)(function (scroll) {
var current = containerRef.current;
if (current) {
if (current.scrollTo) {
current.scrollTo(0, scroll);
} else {
current.scrollTop = scroll;
}
}
}, [containerRef]);
(0, _react.useImperativeHandle)(ref, function () {
return {
scrollTo: scrollTo
};
}, [scrollTo]);
return /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-holder")
}, /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-holder-inner"),
style: innerStyle,
ref: containerRef
}, data.map(renderChild)));
});
var _default = /*#__PURE__*/(0, _react.memo)(List);
exports["default"] = _default;
//# sourceMappingURL=List.js.map
;