choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
57 lines (52 loc) • 1.62 kB
JavaScript
import React, { cloneElement, forwardRef, memo, useCallback, useImperativeHandle, useMemo, useRef } from 'react';
import isNil from 'lodash/isNil';
var List = /*#__PURE__*/forwardRef(function (_ref, ref) {
var data = _ref.data,
prefixCls = _ref.prefixCls,
children = _ref.children,
height = _ref.height,
itemKey = _ref.itemKey;
var containerRef = useRef(null);
var innerStyle = useMemo(function () {
var style = {
display: 'flex',
flexDirection: 'column'
};
if (height) {
style.height = height;
style.overflow = 'hidden auto';
}
return style;
}, [height]);
var getKey = useCallback(function (item) {
if (typeof itemKey === 'function') {
return itemKey(item);
}
return isNil(itemKey) ? undefined : item[itemKey];
}, [itemKey]);
var renderChild = useCallback(function (child) {
return /*#__PURE__*/cloneElement(children(child), {
key: getKey(child)
});
}, [children, getKey]);
var scrollTo = useCallback(function (scroll) {
var current = containerRef.current;
if (current) {
current.scrollTo(0, scroll);
}
}, [containerRef]);
useImperativeHandle(ref, function () {
return {
scrollTo: scrollTo
};
}, [scrollTo]);
return /*#__PURE__*/React.createElement("div", {
className: "".concat(prefixCls, "-holder")
}, /*#__PURE__*/React.createElement("div", {
className: "".concat(prefixCls, "-holder-inner"),
style: innerStyle,
ref: containerRef
}, data.map(renderChild)));
});
export default /*#__PURE__*/memo(List);
//# sourceMappingURL=List.js.map