From da3af5e1e28d149afe812e441603d690acb47abe Mon Sep 17 00:00:00 2001 From: Denis Bardadym Date: Fri, 15 Jul 2022 18:30:23 +0200 Subject: [PATCH] Return back filter for network diagram --- src/network/main.tsx | 32 ++++++++++++++++++++++++-------- src/sidebar.tsx | 16 ++++++++++++++-- 2 files changed, 38 insertions(+), 10 deletions(-) diff --git a/src/network/main.tsx b/src/network/main.tsx index a31cc9d..e818aae 100644 --- a/src/network/main.tsx +++ b/src/network/main.tsx @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/no-empty-function */ import { FunctionalComponent } from "preact"; import { useContext, useEffect, useMemo, useState } from "preact/hooks"; import { scaleSqrt } from "d3-scale"; @@ -7,6 +8,8 @@ import { forceCollide, forceLink, forceManyBody, forceSimulation, forceX, forceY import { ModuleUID } from "../../types/types"; import { COLOR_BASE } from "../color"; +import { useFilter } from "../use-filter"; +import { SideBar } from "../sidebar"; import { Chart } from "./chart"; import createRainbowColor from "./color"; @@ -28,6 +31,8 @@ export const Main: FunctionalComponent = () => { const [excludedNodes, setExcludedNodes] = useState([]); const [selectedNode, setSelectedNode] = useState(); + const { getModuleFilterMultiplier, setExcludeFilter, setIncludeFilter } = useFilter(); + const getColor = (node: NodeInfo) => { if (selectedNode != null) { if (node.uid === selectedNode || data.nodeMetas[selectedNode].importedBy.some(({ uid }) => node.uid === uid)) { @@ -45,6 +50,8 @@ export const Main: FunctionalComponent = () => { for (const node of nodes) { //if (node.renderedLength === 0) continue; if (excludedNodes.includes(node.uid)) continue; + const filterMultiplier = getModuleFilterMultiplier(node); + if (filterMultiplier === 0) continue; const nodeGroup = nodeGroups[node.uid]; @@ -61,7 +68,7 @@ export const Main: FunctionalComponent = () => { }); } return newNodes; - }, [excludedNodes, groupLayers, nodeGroups, nodes, sizeScale]); + }, [excludedNodes, getModuleFilterMultiplier, groupLayers, nodeGroups, nodes, sizeScale]); const links = useMemo(() => { const nodesCache: Record = Object.fromEntries(processedNodes.map((d) => [d.uid, d])); @@ -116,12 +123,21 @@ export const Main: FunctionalComponent = () => { }, [nodeGroups, height, links, processedNodes, width]); return ( - setExcludedNodes([...excludedNodes, node.uid])} - links={links} - getColor={getColor} - onNodeSelect={(uid) => setSelectedNode(uid === selectedNode ? undefined : uid)} - /> + <> + {}} + onExcludeChange={setExcludeFilter} + onIncludeChange={setIncludeFilter} + /> + setExcludedNodes([...excludedNodes, node.uid])} + links={links} + getColor={getColor} + onNodeSelect={(uid) => setSelectedNode(uid === selectedNode ? undefined : uid)} + /> + ); }; diff --git a/src/sidebar.tsx b/src/sidebar.tsx index 9c6be60..4661787 100644 --- a/src/sidebar.tsx +++ b/src/sidebar.tsx @@ -61,11 +61,23 @@ export const SideBar: FunctionalComponent = ({
- +
- +