UNPKG

react-dynamic-virtual-tree

Version:

Library for visualizing nested lists with dynamically changing sizes.

48 lines (47 loc) 2.02 kB
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 }) })); };