"use client"; import { useState, useEffect } from "react"; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { Button } from "@/components/ui/button"; import { Textarea } from "@/components/ui/textarea"; import { Markdown } from "@/components/ui/markdown"; import { Label } from "@/components/ui/label"; import { Feature } from "@/store/app-store"; import { Check, RefreshCw, Edit2, Eye, Loader2 } from "lucide-react"; interface PlanApprovalDialogProps { open: boolean; onOpenChange: (open: boolean) => void; feature: Feature | null; planContent: string; onApprove: (editedPlan?: string) => void; onReject: (feedback?: string) => void; isLoading?: boolean; viewOnly?: boolean; } export function PlanApprovalDialog({ open, onOpenChange, feature, planContent, onApprove, onReject, isLoading = false, viewOnly = false, }: PlanApprovalDialogProps) { const [isEditMode, setIsEditMode] = useState(false); const [editedPlan, setEditedPlan] = useState(planContent); const [showRejectFeedback, setShowRejectFeedback] = useState(false); const [rejectFeedback, setRejectFeedback] = useState(""); // Reset state when dialog opens or plan content changes useEffect(() => { if (open) { setEditedPlan(planContent); setIsEditMode(false); setShowRejectFeedback(false); setRejectFeedback(""); } }, [open, planContent]); const handleApprove = () => { // Only pass edited plan if it was modified const wasEdited = editedPlan !== planContent; onApprove(wasEdited ? editedPlan : undefined); }; const handleReject = () => { if (showRejectFeedback) { onReject(rejectFeedback.trim() || undefined); } else { setShowRejectFeedback(true); } }; const handleCancelReject = () => { setShowRejectFeedback(false); setRejectFeedback(""); }; const handleClose = (open: boolean) => { if (!open && !isLoading) { onOpenChange(false); } }; return ( {viewOnly ? "View Plan" : "Review Plan"} {viewOnly ? "View the generated plan for this feature." : "Review the generated plan before implementation begins."} {feature && ( Feature: {feature.description.slice(0, 150)} {feature.description.length > 150 ? "..." : ""} )}
{/* Mode Toggle - Only show when not in viewOnly mode */} {!viewOnly && (
)} {/* Plan Content */}
{isEditMode && !viewOnly ? (