import React, { useMemo, useState } from 'react'; import { Copy, Pencil, Plus, Search, Star, Trash2 } from 'lucide-react'; import { Button, ModalShell, StatusBadge } from '../ui'; import { cn } from '../../utils/classNames'; import { useIsWorkflowsModalOpen, useSetIsWorkflowsModalOpen } from '../../contexts/UIContext'; import { useWorkflows, type Workflow } from '../../contexts/WorkflowsContext'; import { useApplyWorkflow } from '../../hooks/useApplyWorkflow'; import WorkflowBuilder from './WorkflowBuilder'; interface WorkflowRowProps { workflow: Workflow; onApply: (workflow: Workflow) => void; onEdit: (workflow: Workflow) => void; onDuplicate: (id: string) => void; onDelete: (id: string) => void; onTogglePin: (id: string) => void; } const iconButton = 'flex h-7 w-7 items-center justify-center rounded-md text-app-muted transition-colors hover:bg-app-surface-hover hover:text-app-text focus:outline-none focus-visible:ring-2 focus-visible:ring-brand'; const WorkflowRow: React.FC = ({ workflow, onApply, onEdit, onDuplicate, onDelete, onTogglePin }) => (
{workflow.scope === 'user' && ( )} {workflow.scope === 'user' && ( )}
); const WorkflowsLibraryModal: React.FC = () => { const open = useIsWorkflowsModalOpen(); const setOpen = useSetIsWorkflowsModalOpen(); const { workflows, duplicateWorkflow, deleteWorkflow, togglePin } = useWorkflows(); const applyWorkflow = useApplyWorkflow(); const [query, setQuery] = useState(''); const [builder, setBuilder] = useState<{ active: boolean; workflow: Workflow | null }>({ active: false, workflow: null }); const close = () => { setBuilder({ active: false, workflow: null }); setQuery(''); setOpen(false); }; const filtered = useMemo(() => { const q = query.trim().toLowerCase(); if (!q) return workflows; return workflows.filter((workflow) => `${workflow.title} ${workflow.description ?? ''} ${workflow.template}`.toLowerCase().includes(q), ); }, [workflows, query]); const pinned = filtered.filter((workflow) => workflow.pinned); const rest = filtered.filter((workflow) => !workflow.pinned); const apply = (workflow: Workflow) => { applyWorkflow(workflow); close(); }; const rowProps = { onApply: apply, onEdit: (workflow: Workflow) => setBuilder({ active: true, workflow }), onDuplicate: (id: string) => duplicateWorkflow(id), onDelete: (id: string) => deleteWorkflow(id), onTogglePin: togglePin, }; return ( {builder.active ? ( setBuilder({ active: false, workflow: null })} /> ) : (
setQuery(e.target.value)} placeholder="Search workflows" aria-label="Search workflows" className="w-full rounded-md border border-app-border bg-app-surface py-2 pl-9 pr-3 text-sm text-app-text outline-none transition placeholder:text-app-muted focus:border-brand focus:ring-2 focus:ring-brand/20" />
{filtered.length === 0 ? (

No workflows match "{query}".

) : query.trim() ? (
{filtered.map((workflow) => )}
) : (
{pinned.length > 0 && (

Pinned

{pinned.map((workflow) => )}
)}

All workflows

{rest.map((workflow) => )}
)}
)}
); }; export default WorkflowsLibraryModal;