"use client" import { useState, useEffect } from "react" import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select" import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from "@/components/ui/dialog" import { Loader2, CheckCircle2, Package, FolderKanban, Globe } from "lucide-react" import { SidebarNavigation } from "@/components/sidebar-navigation" import { DataTable } from "@/components/data-table" import { fetchProjects, fetchAllPackages, createPackage, type Project, type Package as PackageType, type PackageCreate } from "@/lib/api" export default function CreatePackagePage() { const [packages, setPackages] = useState([]) const [projects, setProjects] = useState([]) const [isLoading, setIsLoading] = useState(true) const [isModalOpen, setIsModalOpen] = useState(false) const [isSubmitting, setIsSubmitting] = useState(false) const [success, setSuccess] = useState(false) const [error, setError] = useState(null) const [loadingProjects, setLoadingProjects] = useState(false) // Form fields const [selectedProjectId, setSelectedProjectId] = useState("") const [name, setName] = useState("") const [region, setRegion] = useState("") // Load packages and projects const loadPackages = async () => { try { setIsLoading(true) setError(null) const data = await fetchAllPackages() setPackages(data) } catch (err) { setError("Failed to load packages. Please check if the backend is running.") } finally { setIsLoading(false) } } const loadProjects = async () => { try { setLoadingProjects(true) const data = await fetchProjects() setProjects(data) } catch (err) { setError("Failed to load projects.") } finally { setLoadingProjects(false) } } useEffect(() => { loadPackages() loadProjects() }, []) const resetForm = () => { setSelectedProjectId("") setName("") setRegion("") setError(null) } const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() if (!selectedProjectId) { setError("Please select a project first") return } if (!name.trim()) { setError("Package name is required") return } setIsSubmitting(true) setError(null) try { const data: PackageCreate = { project_id: selectedProjectId, name: name.trim(), region: region.trim() || null, } await createPackage(data) setSuccess(true) // Refresh packages list await loadPackages() setTimeout(() => { resetForm() setSuccess(false) setIsModalOpen(false) }, 2000) } catch (err) { setError(err instanceof Error ? err.message : "Failed to create package") } finally { setIsSubmitting(false) } } const getProjectName = (projectId: string) => { return projects.find(p => p.id === projectId)?.name || projectId } const selectedProject = projects.find(p => p.id === selectedProjectId) const columns = [ { key: "name", header: "Package Name", render: (pkg: PackageType) => (
{pkg.name}
) }, { key: "project_id", header: "Project", render: (pkg: PackageType) => getProjectName(pkg.project_id) }, { key: "region", header: "Region", }, { key: "created_at", header: "Created", render: (pkg: PackageType) => new Date(pkg.created_at).toLocaleDateString() }, ] return (
{/* Header */}

Packages

Manage project packages

{/* Error Message */} {error && !isModalOpen && (
!

{error}

)} {/* Data Table */}
setIsModalOpen(true)} addButtonText="Add New Package" isLoading={isLoading} />
{/* Footer */}

Sentient Geeks Pvt. Ltd.

{/* Modal Dialog */} Create New Package Select a project and fill in the package details {/* Success Message in Modal */} {success && (

Package created successfully!

)} {/* Error Message in Modal */} {error && (
!

{error}

)}
{/* Step 1: Select Project */}
1

Select Project

{selectedProject && (
Selected: {selectedProject.name} {selectedProject.corridor_name && ` • ${selectedProject.corridor_name}`}
)}
{/* Step 2: Package Info */}
2

Package Information

setName(e.target.value)} placeholder="e.g., Package A - Section 1" className="h-11" required />
setRegion(e.target.value)} placeholder="e.g., Delhi, Haryana, Punjab" className="h-11" />
{/* Submit Button */}
) }