react-dynamic-virtual-tree
Version:
Library for visualizing nested lists with dynamically changing sizes.
48 lines (47 loc) • 2.02 kB
JavaScript
import { jsx as _jsx } from "react/jsx-runtime";
import { createContext, useCallback, useEffect, useState } from "react";
import { Layer, ListItem, VirtualTree } from "../../virtualTree";
import { Wrapper } from "./index";
export var ROOT_ID = "root";
export var VirtualTreeContext = createContext({
root: new VirtualTree(),
offset: [0, 0],
ready: false,
setReady: function () { },
listItem: new ListItem(ROOT_ID),
layer: new Layer(new ListItem(ROOT_ID)),
setListItem: function () { },
setLayer: function () { },
reInit: function () { },
});
export var VirtualTreeProvider = function (_a) {
var children = _a.children, height = _a.height, className = _a.className;
var _b = useState(true), draw = _b[0], setDraw = _b[1];
var _c = useState([0, 0]), offset = _c[0], setOffset = _c[1];
var _d = useState(false), ready = _d[0], setReady = _d[1];
var _e = useState(new ListItem(ROOT_ID)), listItem = _e[0], setListItem = _e[1];
var _f = useState(new Layer(listItem)), layer = _f[0], setLayer = _f[1];
var root = useState(new VirtualTree())[0];
useEffect(function () {
return root.onOffset(setOffset);
}, []);
var reInit = useCallback(function (listItem, layer) {
setListItem(listItem);
setLayer(layer);
setReady(false);
setOffset([0, 0]);
setDraw(false);
}, []);
useEffect(function () {
setDraw(true);
}, [listItem]);
useEffect(function () {
return listItem.onChildrenReady(function () {
listItem.height = 0;
root.update(listItem);
root.ready();
setReady(true);
});
}, []);
return (_jsx(VirtualTreeContext.Provider, { value: { root: root, offset: offset, ready: ready, setReady: setReady, layer: layer, listItem: listItem, setListItem: setListItem, setLayer: setLayer, reInit: reInit }, children: _jsx(Wrapper, { virtualTree: root, height: height, className: className, children: draw && children }) }));
};