import React, { useCallback, useEffect, useMemo, useState } from 'react'; import { Box, Button, HStack, Spinner, Stack } from '@chakra-ui/react'; import { GrTechnology, GrDocumentUpload } from 'react-icons/gr'; import { GiWaterDivinerStick } from 'react-icons/gi'; import Node from './Node'; import { useLoadingContext } from '../contexts/LoadingContext'; import { executeAlgorithm } from '../utils/algorithm-executor'; import TestSetFileReader from './TestSetFileReader'; import Predicter from './Predicter'; /** * @typedef {import('../utils/decision-tree.js').DecisionTreeBuilder} DecisionTreeBuilder */ const logTree = root => console.log('ROOT', root); /** * @param {Object} props * @param {DecisionTreeBuilder} props.options */ const Tree = ({ options }) => { // const root = useMemo(() => { // //return dt.TSPDecisionTree(options) // var t0 = performance.now(); // var r = buildDecisionTree(options); // var t1 = performance.now(); // console.log('Call to doSomething took ' + (t1 - t0) + ' milliseconds.'); // return r; // }, [options]); const [root, setRoot] = useState(null); const [testSet, setTestSet] = useState([]); const { isLoading, setIsLoading } = useLoadingContext(); useEffect(() => { setRoot(null); setIsLoading(true); let terminated = false; executeAlgorithm(options) .then(value => { if (terminated) { return; } setRoot(value); }) .catch(e => console.error(e)) .finally(() => { if (!terminated) setIsLoading(false); terminated = true; }); return () => { if (terminated) { return; } terminated = true; }; }, [options, setIsLoading]); useEffect(() => logTree(root), [root]); const requestChildChange = newRoot => setRoot(newRoot); function handleGetTestSet({ data }) { setTestSet(data); console.log(data); } function predict(root) { console.log('predict'); } return (
{isLoading && }

Tree nodes:

{!root ? (

No tree to show

) : ( {}} requestChildChange={requestChildChange} side={true} /> {/* {}} requestChildChange={requestChildChange} side={true} /> */} )}
); }; export default Tree;