UNPKG

react-dynamic-virtual-tree

Version:

Library for visualizing nested lists with dynamically changing sizes.

62 lines (61 loc) 2.53 kB
var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime"; import { useContext, useMemo } from "react"; import { VirtualTreeContext } from "./virtualTreeContext"; export var getLevel = function (layer, level) { if (level === void 0) { level = 0; } if (layer.parent) { return getLevel(layer.parent, level + 1); } else { return level; } }; export var LayerComponent = function (_a) { var children = _a.children, layer = _a.layer, listItem = _a.listItem, getComponentProps = _a.getComponentProps; var _b = useContext(VirtualTreeContext), offset = _b.offset, root = _b.root, ready = _b.ready; var onInitHeight = function (height) { var level = getLevel(layer); var layers = layer.getLayersByLevel(level + 1); layers.forEach(function (layer) { layer.listItem.height = height; }); }; var visibleSlice = useMemo(function () { return root.getSlice.apply(root, offset); }, [offset]); var getProps = function (index) { return { layer: layer.children[index], listItem: listItem.children[index], props: getComponentProps ? getComponentProps(index) : undefined, onInitHeight: onInitHeight, sample: false, }; }; var getSampleProps = function () { return __assign(__assign({}, getProps(0)), { sample: true }); }; var isVisible = function (item) { return !!visibleSlice.find(function (visibleItem) { return visibleItem.compare(item); }); }; var noProps = function (index) { return getComponentProps !== undefined && getComponentProps(index) === undefined; }; var Component = useMemo(function () { return children; }, []); return (_jsxs(_Fragment, { children: [!ready && layer.children.length !== 0 && children(getSampleProps()), layer.children.map(function (item, index) { return isVisible(item.listItem) && !noProps(index) && item.listItem.height > 0 ? (_jsx(Component, __assign({}, getProps(index)), item.listItem.id)) : null; })] })); };