Spaces:
Running
Running
import { useReactFlow } from "@xyflow/react"; | |
import React from "react"; | |
// @ts-ignore | |
import Triangle from "~icons/tabler/triangle-inverted-filled.jsx"; | |
import LynxKiteNode from "./LynxKiteNode"; | |
import NodeGroupParameter from "./NodeGroupParameter"; | |
import NodeParameter from "./NodeParameter"; | |
export type UpdateOptions = { delay?: number }; | |
function NodeWithParams(props: any) { | |
const reactFlow = useReactFlow(); | |
const metaParams = props.data.meta?.params; | |
const [collapsed, setCollapsed] = React.useState(props.collapsed); | |
function setParam(name: string, newValue: any, opts: UpdateOptions) { | |
reactFlow.updateNodeData(props.id, (prevData: any) => ({ | |
...prevData, | |
params: { ...prevData.data.params, [name]: newValue }, | |
__execution_delay: opts.delay || 0, | |
})); | |
} | |
function deleteParam(name: string, opts: UpdateOptions) { | |
if (props.data.params[name] === undefined) { | |
return; | |
} | |
delete props.data.params[name]; | |
reactFlow.updateNodeData(props.id, { | |
params: { ...props.data.params }, | |
__execution_delay: opts.delay || 0, | |
}); | |
} | |
const params = props.data?.params ? Object.entries(props.data.params) : []; | |
return ( | |
<LynxKiteNode {...props}> | |
{props.collapsed && ( | |
<div | |
className="params-expander" | |
onClick={() => setCollapsed(!collapsed)} | |
> | |
<Triangle className={`flippy ${collapsed ? "flippy-90" : ""}`} /> | |
</div> | |
)} | |
{!collapsed && | |
params.map(([name, value]) => | |
metaParams?.[name]?.type === "group" ? ( | |
<NodeGroupParameter | |
key={name} | |
value={value} | |
meta={metaParams?.[name]} | |
setParam={(name: string, value: any, opts?: UpdateOptions) => | |
setParam(name, value, opts || {}) | |
} | |
deleteParam={(name: string, opts?: UpdateOptions) => | |
deleteParam(name, opts || {}) | |
} | |
/> | |
) : ( | |
<NodeParameter | |
name={name} | |
key={name} | |
value={value} | |
meta={metaParams?.[name]} | |
onChange={(value: any, opts?: UpdateOptions) => | |
setParam(name, value, opts || {}) | |
} | |
/> | |
), | |
)} | |
{props.children} | |
</LynxKiteNode> | |
); | |
} | |
export default NodeWithParams; | |