import React, { useState } from "react";
import { Card, CardContent } from "@/components/ui/card";
import { Button } from "@/components/ui/button";
import { Progress } from "@/components/ui/progress";
import { Tabs, TabsList, TabsTrigger, TabsContent } from "@/components/ui/tabs";
import { CheckCircle, Clock, Target, PlusCircle, Search } from "lucide-react";
import { Input } from "@/components/ui/input";
import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter } from "@/components/ui/dialog";
const MilestoneTracker = () => {
const location = useLocation();
const initialCareer = location.state?.career || "";
const [careerClusters, setCareerClusters] = useState({});
const [selectedCluster, setSelectedCluster] = useState(null);
const [selectedSubdivision, setSelectedSubdivision] = useState(null);
const [selectedCareer, setSelectedCareer] = useState(initialCareer);
const [filteredClusters, setFilteredClusters] = useState([]);
const [activeTab, setActiveTab] = useState("career");
const [customMilestones, setCustomMilestones] = useState({ career: [], financial: [], retirement: [] });
const [isDialogOpen, setIsDialogOpen] = useState(false);
const [newMilestone, setNewMilestone] = useState("");
const [careerSearch, setCareerSearch] = useState("");
const [filteredCareers, setFilteredCareers] = useState(careerClusters);
useEffect(() => {
const fetchUserProfile = async () => {
try {
const response = await fetch("/api/user/profile", {
method: "GET",
credentials: "include", // Ensure cookies/session are sent
});
if (response.ok) {
const data = await response.json();
setIsPremiumUser(data.is_premium === 1); // Expecting { is_premium: 0 or 1 }
} else {
setIsPremiumUser(false); // Default to false if there's an error
}
} catch (error) {
console.error("Error fetching user profile:", error);
setIsPremiumUser(false);
}
};
fetchUserProfile();
}, []);
if (isPremiumUser === null) {
return
Loading...
; // Show loading state while fetching
}
if (!isPremiumUser) {
return (
Access Restricted
Upgrade to Aptiva Premium to access the Milestone Tracker.
);
}
useEffect(() => {
fetch("/data/career_clusters.json")
.then((response) => response.json())
.then((data) => {
setCareerClusters(data);
setFilteredClusters(Object.keys(data));
})
.catch((error) => console.error("Error loading career clusters:", error));
}, []);
const handleAddMilestone = () => {
if (newMilestone.trim() !== "") {
setCustomMilestones((prev) => ({
...prev,
[activeTab]: [...prev[activeTab], { title: newMilestone, status: "upcoming", progress: 0 }],
}));
setNewMilestone("");
setIsDialogOpen(false);
}
};
const handleCareerSearch = (e) => {
const query = e.target.value.toLowerCase();
setCareerSearch(query);
setFilteredCareers(
careerClusters.filter((career) => career.toLowerCase().includes(query))
);
};
return (
Milestone Tracker
{/* Career Cluster Selection */}
Search & Select a Career Cluster
{filteredClusters.map((cluster, index) => (
{
setSelectedCluster(cluster);
setSelectedSubdivision(null);
setSelectedCareer(null);
}}
>
{cluster}
))}
{/* Subdivision Selection within Cluster */}
{selectedCluster && careerClusters[selectedCluster] && (
Select a Specialization in {selectedCluster}
{Object.keys(careerClusters[selectedCluster]).map((subdivision, index) => (
{
setSelectedSubdivision(subdivision);
setSelectedCareer(null);
}}
>
{subdivision}
))}
)}
{/* Career Selection within Subdivision */}
{selectedSubdivision && careerClusters[selectedCluster][selectedSubdivision] && (
Select a Career in {selectedSubdivision}
{Object.keys(careerClusters[selectedCluster][selectedSubdivision]).map((career, index) => (
setSelectedCareer(career)}
>
{career}
))}
)}
{/* Milestone Tracker Section */}
Career
Financial
Retirement
{/* Add Milestone Section */}
{/* Display User-Added Milestones */}
{customMilestones[activeTab].map((milestone, index) => (
{milestone.status === "completed" && }
{milestone.status === "in-progress" && }
{milestone.status === "upcoming" && }
{milestone.title}
))}
);
};
export default MilestoneTracker;