"use client"; import { useEffect, useState } from "react"; import { X } from "lucide-react"; import { deleteWorkflowShare, listWorkflowShares, shareWorkflow, } from "@/app/lib/mikeApi"; import { useAuth } from "@/contexts/AuthContext"; import { EmailPillInput } from "../shared/EmailPillInput"; import { Modal } from "../shared/Modal"; interface Share { id: string; shared_with_email: string; allow_edit: boolean; created_at: string; } interface Props { workflowId: string; workflowName: string; onClose: () => void; } export function ShareWorkflowModal({ workflowId, workflowName, onClose, }: Props) { const [pendingEmails, setPendingEmails] = useState([]); const [allowEdit, setAllowEdit] = useState(false); const [existingShares, setExistingShares] = useState([]); const [loading, setLoading] = useState(true); const [saving, setSaving] = useState(false); const [error, setError] = useState(null); const { user } = useAuth(); const ownEmail = user?.email?.trim().toLowerCase() ?? null; useEffect(() => { listWorkflowShares(workflowId) .then(setExistingShares) .catch(() => {}) .finally(() => setLoading(false)); }, [workflowId]); async function handleRemoveShare(shareId: string) { await deleteWorkflowShare(workflowId, shareId).catch(() => {}); setExistingShares((prev) => prev.filter((s) => s.id !== shareId)); } async function handleConfirm() { const emails = ownEmail ? pendingEmails.filter((email) => email !== ownEmail) : pendingEmails; if (emails.length === 0) return; setSaving(true); setError(null); try { await shareWorkflow(workflowId, { emails, allow_edit: allowEdit }); const updated = await listWorkflowShares(workflowId); setExistingShares(updated); setPendingEmails([]); } catch (err) { setError( err instanceof Error && err.message ? err.message : "Unable to share this workflow. Please try again.", ); } finally { setSaving(false); } } return ( ownEmail && email === ownEmail ? "You cannot share a workflow with yourself." : null } placeholder="Add people by email…" autoFocus /> {error ? (
{error}
) : null} {/* Permission toggle */}
Allow editing by share recipients
{/* Existing access */}

People with access

{loading ? (
{[1, 2].map((i) => (
))}
) : existingShares.length === 0 ? (

None

) : (
{existingShares.map((share) => (
{share.shared_with_email}
{share.allow_edit ? "Can edit" : "Read-only"}
))}
)}
); }