@ant-design/x
Version:
Craft AI-driven interfaces effortlessly
43 lines (40 loc) • 1.45 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = useDisplayData;
var _rcUtil = require("rc-util");
var _react = _interopRequireDefault(require("react"));
function useDisplayData(items) {
const [displayCount, setDisplayCount] = _react.default.useState(items.length);
const displayList = _react.default.useMemo(() => items.slice(0, displayCount), [items, displayCount]);
const displayListLastKey = _react.default.useMemo(() => {
const lastItem = displayList[displayList.length - 1];
return lastItem ? lastItem.key : null;
}, [displayList]);
// When `items` changed, we replaced with latest one
_react.default.useEffect(() => {
if (displayList.length && displayList.every((item, index) => item.key === items[index]?.key)) {
return;
}
if (displayList.length === 0) {
setDisplayCount(1);
} else {
// Find diff index
for (let i = 0; i < displayList.length; i += 1) {
if (displayList[i].key !== items[i]?.key) {
setDisplayCount(i);
break;
}
}
}
}, [items]);
// Continue to show if last one finished typing
const onTypingComplete = (0, _rcUtil.useEvent)(key => {
if (key === displayListLastKey) {
setDisplayCount(displayCount + 1);
}
});
return [displayList, onTypingComplete];
}