import { useState } from "react" import type { FlowDef_Input } from "@/client" import { Button } from "@/components/ui/button" import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog" import { Switch } from "@/components/ui/switch" import { BoundarySections } from "./FlowBoundary" import { PANEL_SECTION, PanelTitle, SidePanel } from "./SidePanel" /** * The flow's own settings, in the same panel its nodes use — down to where the * name sits and how confirming a new one works. */ export function FlowPanel({ open, definition, nodeCount, onChange, onDelete, hasDraft, enabled, toggling, onToggleEnabled, onClose, }: { open: boolean definition: FlowDef_Input nodeCount: number onChange: (next: FlowDef_Input) => void onDelete: () => void hasDraft: boolean enabled: boolean toggling: boolean onToggleEnabled: (next: boolean) => void onClose: () => void }) { const [confirmOpen, setConfirmOpen] = useState(false) return ( <> onChange({ ...definition, title })} /> } footer={ } >
Running

{enabled ? "The engine runs this flow: subscriptions, schedules and webhooks are live." : "Stopped. Nothing of this flow is subscribed, scheduled or reachable."}

Contents

{definition.name} namespaces every message in here.{" "} {nodeCount === 0 ? "No nodes yet." : `${nodeCount} node${nodeCount === 1 ? "" : "s"}.`}

{hasDraft ? (
Unpublished changes

The engine is still running the last published version of this flow. The bar below publishes it, or throws the edit away.

) : null}
Delete {definition.title || definition.name}? This removes the flow and the code of its{" "} {nodeCount === 1 ? "node" : `${nodeCount} nodes`}. Its history stays in the flow store's git repository. ) }