@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
JavaScript
"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