updated config panel

This commit is contained in:
ryanwong
2024-11-15 06:12:48 -05:00
parent 576dff4e39
commit 05895231b8
+36 -22
View File
@@ -18,6 +18,10 @@ interface Field {
export function ConfigPanel({ node, onClose, onUpdateNode }: ConfigPanelProps) { export function ConfigPanel({ node, onClose, onUpdateNode }: ConfigPanelProps) {
const { models } = useFlowStore(); const { models } = useFlowStore();
const [newField, setNewField] = useState<Field>({ name: "", type: "string" }); const [newField, setNewField] = useState<Field>({ name: "", type: "string" });
const [newQueryField, setNewQueryField] = useState<Field>({
name: "",
type: "string",
});
if (!node) return null; if (!node) return null;
@@ -47,7 +51,9 @@ export function ConfigPanel({ node, onClose, onUpdateNode }: ConfigPanelProps) {
}; };
const addField = (arrayName: string) => { const addField = (arrayName: string) => {
const array = [...(node.data[arrayName] || []), newField]; if (!newField.name.trim()) return;
const array = [...(node.data[arrayName] || []), { ...newField }];
onUpdateNode(node.id, { onUpdateNode(node.id, {
...node.data, ...node.data,
[arrayName]: array, [arrayName]: array,
@@ -199,20 +205,16 @@ export function ConfigPanel({ node, onClose, onUpdateNode }: ConfigPanelProps) {
<label className="block text-sm font-medium mb-1"> <label className="block text-sm font-medium mb-1">
Body Fields Body Fields
</label> </label>
{node.data.fields?.length > 0 && (
<div className="mb-2 p-2 bg-gray-50 rounded text-sm"> <div className="mb-2 p-2 bg-gray-50 rounded text-sm">
{node.data.fields && node.data.fields.length > 0 ? ( {node.data.fields.map((field: Field) => (
node.data.fields.map((field: Field) => (
<div key={field.name} className="text-gray-600"> <div key={field.name} className="text-gray-600">
{field.name}: {field.type} {field.name}: {field.type}
{field.validation ? ` (${field.validation})` : ""} {field.validation ? ` (${field.validation})` : ""}
</div> </div>
)) ))}
) : (
<div className="text-gray-500 italic">
No body fields defined
</div> </div>
)} )}
</div>
{(node.data.fields || []).map((field: Field, index: number) => ( {(node.data.fields || []).map((field: Field, index: number) => (
<div key={index} className="flex gap-1 mb-2"> <div key={index} className="flex gap-1 mb-2">
<input <input
@@ -267,7 +269,11 @@ export function ConfigPanel({ node, onClose, onUpdateNode }: ConfigPanelProps) {
<option value="date">Date</option> <option value="date">Date</option>
</select> </select>
<button <button
onClick={() => addField("fields")} onClick={() => {
if (newField.name.trim()) {
addField("fields");
}
}}
className="p-2 bg-blue-500 text-white rounded hover:bg-blue-600" className="p-2 bg-blue-500 text-white rounded hover:bg-blue-600"
> >
<Plus className="w-4 h-4" /> <Plus className="w-4 h-4" />
@@ -276,22 +282,18 @@ export function ConfigPanel({ node, onClose, onUpdateNode }: ConfigPanelProps) {
</div> </div>
<div className="mb-4"> <div className="mb-4">
<label className="block text-sm font-medium mb-1"> <label className="block text-sm font-medium mb-1">
Query Fields Query Parameters
</label> </label>
{node.data.queryFields?.length > 0 && (
<div className="mb-2 p-2 bg-gray-50 rounded text-sm"> <div className="mb-2 p-2 bg-gray-50 rounded text-sm">
{node.data.queryFields && node.data.queryFields.length > 0 ? ( {node.data.queryFields.map((field: Field) => (
node.data.queryFields.map((field: Field) => (
<div key={field.name} className="text-gray-600"> <div key={field.name} className="text-gray-600">
{field.name}: {field.type} {field.name}: {field.type}
{field.validation ? ` (${field.validation})` : ""} {field.validation ? ` (${field.validation})` : ""}
</div> </div>
)) ))}
) : (
<div className="text-gray-500 italic">
No query fields defined
</div> </div>
)} )}
</div>
{(node.data.queryFields || []).map( {(node.data.queryFields || []).map(
(field: Field, index: number) => ( (field: Field, index: number) => (
<div key={index} className="flex gap-1 mb-2"> <div key={index} className="flex gap-1 mb-2">
@@ -338,17 +340,17 @@ export function ConfigPanel({ node, onClose, onUpdateNode }: ConfigPanelProps) {
<div className="flex gap-1 mt-2"> <div className="flex gap-1 mt-2">
<input <input
type="text" type="text"
value={newField.name} value={newQueryField.name}
onChange={(e) => onChange={(e) =>
setNewField({ ...newField, name: e.target.value }) setNewQueryField({ ...newQueryField, name: e.target.value })
} }
className="flex-1 p-2 border rounded text-sm" className="flex-1 p-2 border rounded text-sm"
placeholder="New query param" placeholder="New query param"
/> />
<select <select
value={newField.type} value={newQueryField.type}
onChange={(e) => onChange={(e) =>
setNewField({ ...newField, type: e.target.value }) setNewQueryField({ ...newQueryField, type: e.target.value })
} }
className="w-20 p-2 border rounded text-sm" className="w-20 p-2 border rounded text-sm"
> >
@@ -358,7 +360,19 @@ export function ConfigPanel({ node, onClose, onUpdateNode }: ConfigPanelProps) {
<option value="date">Date</option> <option value="date">Date</option>
</select> </select>
<button <button
onClick={() => addField("queryFields")} onClick={() => {
if (newQueryField.name.trim()) {
const array = [
...(node.data.queryFields || []),
{ ...newQueryField },
];
onUpdateNode(node.id, {
...node.data,
queryFields: array,
});
setNewQueryField({ name: "", type: "string" });
}
}}
className="p-2 bg-blue-500 text-white rounded hover:bg-blue-600" className="p-2 bg-blue-500 text-white rounded hover:bg-blue-600"
> >
<Plus className="w-4 h-4" /> <Plus className="w-4 h-4" />