import React, {useEffect, useState} from 'react'; import { Container, Paper, Typography, Box, Avatar, Divider, Button, CircularProgress, IconButton, Dialog, DialogTitle, DialogContent, DialogActions } from '@mui/material'; import CloseIcon from '@mui/icons-material/Close'; import DeleteIcon from '@mui/icons-material/Delete'; 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 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 [deleteDialog, setDeleteDialog] = useState<{ open: boolean, buildId: number | null, buildName: string }>({ open: false, buildId: null, buildName: '' }); const [deleteLoading, setDeleteLoading] = useState(false); 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 openDeleteDialog = (buildId: number, buildName: string) => { setDeleteDialog({ open: true, buildId, buildName }); }; const handleDelete = async () => { if (!deleteDialog.buildId) return; setDeleteLoading(true); try { await onDeleteBuild({buildId: deleteDialog.buildId}); setDeleteDialog({ open: false, buildId: null, buildName: '' }); loadData(); setSelectedBuildId(null); } catch (e) { alert("Failed to delete build"); } finally { setDeleteLoading(false); } }; if (loading) return ; if (error || !data) return {error}; return ( {data.user.username} {data.user.email} Favorited Builds {data.favoriteBuilds.length > 6 && ( )} {data.favoriteBuilds.length === 0 ? ( You haven't favorited any builds yet. ) : ( {data.favoriteBuilds.slice(0, 6).map((build: any) => ( setSelectedBuildId(build.id)} /> ))} )} My Builds {data.userBuilds.length > 6 && ( )} {data.userBuilds.length === 0 ? ( You haven't created any builds yet. ) : ( {data.userBuilds.slice(0, 6).map((build: any) => ( setSelectedBuildId(build.id)} /> ))} )} setOpenMyBuildsDialog(false)} maxWidth="xl" fullWidth> All My Builds setOpenMyBuildsDialog(false)}> {data.userBuilds.map((build: any) => ( { setOpenMyBuildsDialog(false); setSelectedBuildId(build.id); }} /> ))} setOpenFavoritesDialog(false)} maxWidth="xl" fullWidth> All Favorited Builds setOpenFavoritesDialog(false)}> {data.favoriteBuilds.map((build: any) => ( { setOpenFavoritesDialog(false); setSelectedBuildId(build.id); }} /> ))} setDeleteDialog({ open: false, buildId: null, buildName: '' })}> Delete Build {deleteDialog.buildName} Are you sure you want to permanently delete this build? This action cannot be undone. { setSelectedBuildId(null); loadData(); }} isDashboardView={true} /> ); }