import type { Statistic } from "@allurereport/core-api"; import cx from "clsx"; import type { FunctionComponent } from "preact"; import { useState } from "preact/hooks"; import type { ClassicRecursiveTree, ClassicStatus } from "types"; import TreeItem from "@/components/Tree/TreeItem"; import { route } from "@/stores/router"; import TreeHeader from "./TreeHeader"; import * as styles from "./styles.scss"; interface TreeProps { statistic?: Statistic; tree: ClassicRecursiveTree; name?: string; root?: boolean; statusFilter?: ClassicStatus; } const Tree: FunctionComponent = ({ tree, statusFilter, root, name, statistic }) => { const { params } = route.value; const { id: parentId, testResultId } = params; const [isOpened, setIsOpen] = useState( parentId === tree.nodeId || statistic === undefined || !!statistic.failed || !!statistic.broken, ); const toggleTree = () => { setIsOpen(!isOpened); }; const emptyTree = !tree?.trees?.length && !tree?.leaves?.length; if (emptyTree) { return null; } const treeContent = isOpened && (
{tree?.trees?.map?.((subTree) => ( ))} {tree?.leaves?.map?.((leaf) => ( ))}
); return (
{name && } {treeContent}
); }; export default Tree;