import React, {useEffect, useState} from 'react'; import { Container, Paper, Typography, Box, Avatar, Divider, Button, CircularProgress, Card, CardContent, CardActionArea, IconButton } from '@mui/material'; import Grid from '@mui/material/Grid'; import {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 DeleteIcon from '@mui/icons-material/Delete'; import EditIcon from '@mui/icons-material/Edit'; import {getUserInfoAndData, onDeleteBuild} from "./userDashboard.telefunc"; 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 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(); } catch (e) { alert("Failed to delete build"); } }; if (loading) return ; if (error || !data) return {error}; // @ts-ignore return ( {data.user.username} {data.user.email} {/**/} Favorited Builds {data.favoriteBuilds.length === 0 ? ( You haven't favorited any builds yet. ) : ( {data.favoriteBuilds.map((build: any) => ( ))} )} My Builds {data.userBuilds.length > 4 && ( )} {data.userBuilds.length === 0 ? ( You haven't created any builds yet. ) : ( {data.userBuilds.slice(0, 3).map((build: any) => ( handleDelete(build.id)} isOwner={true} /> ))} )} setOpenMyBuildsDialog(false)} maxWidth="md" fullWidth> All My Builds setOpenMyBuildsDialog(false)}> {data.userBuilds.map((build: any) => ( handleDelete(build.id)} isOwner={true} /> ))} ); } function BuildCard({build, onDelete, isOwner}: { build: any, onDelete?: () => void, isOwner?: boolean }) { return ( {build.name || `Build #${build.id}`} Created: {build.createdAt ? new Date(build.createdAt).toLocaleDateString() : 'Unknown'} {isOwner && ( )} ); }