UNPKG

@kit-data-manager/react-search-component

Version:

All-in-one component for rendering an elastic search UI for searching anything. Built-in support for visualizing related items in a graph and resolving unique identifiers.

47 lines 2.25 kB
"use client"; import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; import { useCallback, useState } from "react"; import { RelationsGraphModal } from "../../components/graph/RelationsGraphModal"; import { ReactFlowProvider } from "@xyflow/react"; import { RelationsGraphContext } from "./RelationsGraphContext"; export function RelationsGraphProvider(props) { const [state, setState] = useState({ nodes: [], options: {}, isOpen: false }); const openRelationsGraph = useCallback((nodes, options) => { setState({ nodes, isOpen: true, options: options ?? {} }); }, []); const openOrAddToRelationsGraph = useCallback((nodes, options) => { setState((prev) => ({ nodes: prev.nodes.concat(nodes).reduce((acc, node) => { const existingIndex = acc.findIndex((inner) => inner.id === node.id); const existing = existingIndex >= 0 ? acc[existingIndex] : null; if (existing) { existing.in = existing.in.concat(node.in); existing.out = existing.out.concat(node.out); existing.data = node.data; acc[existingIndex] = { ...existing }; return acc; } else return acc.concat(node); }, []), isOpen: true, options: options ?? prev.options ?? {} })); }, []); const onRelationsGraphOpenChange = useCallback((isOpen) => { setState(() => ({ isOpen, nodes: [], options: {} })); }, []); const closeRelationsGraph = useCallback(() => { onRelationsGraphOpenChange(false); }, [onRelationsGraphOpenChange]); return (_jsx(RelationsGraphContext.Provider, { value: { openRelationsGraph, closeRelationsGraph, openOrAddToRelationsGraph }, children: _jsxs(ReactFlowProvider, { children: [_jsx(RelationsGraphModal, { nodes: state.nodes, isOpen: state.isOpen, onOpenChange: onRelationsGraphOpenChange, resultView: props.resultView, options: state.options, dark: props.dark, nodeTypes: props.nodeTypes }), props.children] }) })); } //# sourceMappingURL=RelationsGraphProvider.js.map