import React, {useEffect, useState} from 'react'; import { Container, Paper, Typography, Box, Avatar, Divider, Button, CircularProgress, IconButton, Grid, Dialog, DialogTitle, DialogContent, DialogActions } from '@mui/material'; import CloseIcon from '@mui/icons-material/Close'; import PersonIcon from '@mui/icons-material/Person'; import ComputerIcon from '@mui/icons-material/Computer'; import FavoriteIcon from '@mui/icons-material/Favorite'; import {getUserInfoAndData, onDeleteBuild} from "./userDashboard.telefunc"; import {onCloneBuild} from "../../+Layout.telefunc"; import BuildCard from "../../../components/BuildCard"; import BuildDetailsDialog from "../../../components/BuildDetailsDialog"; type DashboardData = { user: { username: string; email?: string; [key: string]: any }; userBuilds: any[]; favoriteBuilds: any[]; }; export default function UserDashboard() { const [data, setData] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [openMyBuildsDialog, setOpenMyBuildsDialog] = useState(false); const [openFavoritesDialog, setOpenFavoritesDialog] = useState(false); const [selectedBuildId, setSelectedBuildId] = useState(null); const loadData = () => { getUserInfoAndData() .then((result) => { setData(result); setLoading(false); }) .catch((err) => { console.error(err); setError("Failed to load dashboard. Please log in."); setLoading(false); }); }; useEffect(() => { loadData(); }, []); const handleDelete = async (buildId: number) => { if (!confirm("Are you sure you want to delete this build?")) return; try { await onDeleteBuild({buildId}); loadData(); setSelectedBuildId(null); } catch (e) { alert("Failed to delete build"); } }; const handleCloneWrapper = async (buildId: number) => { if (!data?.user) return alert("Please login to clone builds!"); if (confirm(`Clone this build to your dashboard?`)) { await onCloneBuild({buildId}); alert("Build cloned! Check your dashboard."); setSelectedBuildId(null); loadData(); } }; if (loading) return ; if (error || !data) return {error}; // console.log("Current User ID passed to dialog:", data?.user?.id); return ( {data.user.username} {data.user.email} Favorited Builds {data.favoriteBuilds.length > 4 && ( )} {data.favoriteBuilds.length === 0 ? ( You haven't favorited any builds yet. ) : ( {data.favoriteBuilds.slice(0, 4).map((build: any) => ( setSelectedBuildId(build.id)} /> ))} )} My Builds {data.userBuilds.length > 4 && ( )} {data.userBuilds.length === 0 ? ( You haven't created any builds yet. ) : ( {data.userBuilds.slice(0, 4).map((build: any) => ( setSelectedBuildId(build.id)} /> ))} )} setOpenMyBuildsDialog(false)} maxWidth="lg" fullWidth> All My Builds setOpenMyBuildsDialog(false)}> {data.userBuilds.map((build: any) => ( { setOpenMyBuildsDialog(false); setSelectedBuildId(build.id); }} /> ))} setOpenFavoritesDialog(false)} maxWidth="lg" fullWidth> All Favorited Builds setOpenFavoritesDialog(false)}> {data.favoriteBuilds.map((build: any) => ( { setOpenFavoritesDialog(false); setSelectedBuildId(build.id); }} /> ))} { setSelectedBuildId(null); loadData(); }} onClone={handleCloneWrapper} /> ); }