Changeset f46bf5c for pages/dashboard/user/+Page.tsx
- Timestamp:
- 12/29/25 03:57:17 (6 months ago)
- Branches:
- main
- Children:
- 958bc89
- Parents:
- dda6f51 (diff), b6e1b3c (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)links above to see all the changes relative to each parent. - File:
-
- 1 edited
-
pages/dashboard/user/+Page.tsx (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
-
pages/dashboard/user/+Page.tsx
rdda6f51 rf46bf5c 17 17 } from '@mui/material'; 18 18 import CloseIcon from '@mui/icons-material/Close'; 19 import DeleteIcon from '@mui/icons-material/Delete'; 19 20 20 21 import PersonIcon from '@mui/icons-material/Person'; … … 38 39 const [loading, setLoading] = useState(true); 39 40 const [error, setError] = useState<string | null>(null); 40 41 41 const [openMyBuildsDialog, setOpenMyBuildsDialog] = useState(false); 42 42 const [openFavoritesDialog, setOpenFavoritesDialog] = useState(false); 43 44 43 const [selectedBuildId, setSelectedBuildId] = useState<number | null>(null); 44 const [deleteDialog, setDeleteDialog] = useState<{ open: boolean, buildId: number | null, buildName: string }>({ open: false, buildId: null, buildName: '' }); 45 const [deleteLoading, setDeleteLoading] = useState(false); 45 46 46 47 const loadData = () => { … … 61 62 }, []); 62 63 63 const handleDelete = async (buildId: number) => { 64 if (!confirm("Are you sure you want to delete this build?")) return; 64 const openDeleteDialog = (buildId: number, buildName: string) => { 65 setDeleteDialog({ open: true, buildId, buildName }); 66 }; 67 68 const handleDelete = async () => { 69 if (!deleteDialog.buildId) return; 70 setDeleteLoading(true); 65 71 try { 66 await onDeleteBuild({buildId}); 67 loadData(); 72 await onDeleteBuild({buildId: deleteDialog.buildId}); 73 setDeleteDialog({ open: false, buildId: null, buildName: '' }); 74 loadData(); // refresh na user i favorite builds 68 75 setSelectedBuildId(null); 69 76 } catch (e) { 70 77 alert("Failed to delete build"); 78 } finally { 79 setDeleteLoading(false); 71 80 } 72 81 }; … … 86 95 variant="h6">{error}</Typography><Button 87 96 href="/auth/login" variant="contained">Login</Button></Container>; 88 // console.log("Current User ID passed to dialog:", data?.user?.id);89 97 90 98 return ( … … 150 158 <Grid item xs={12}> 151 159 <Paper elevation={3} sx={{p: 3, minHeight: '300px', bgcolor: '#1e1e1e'}}> 152 153 160 <Box sx={{ 154 161 display: 'flex', … … 185 192 {data.userBuilds.slice(0, 4).map((build: any) => ( 186 193 <Grid item xs={12} sm={6} md={4} key={build.id}> 187 <BuildCard 188 build={build} 189 onClick={() => setSelectedBuildId(build.id)} 190 /> 194 <Box sx={{ position: 'relative' }}> 195 <BuildCard 196 build={build} 197 onClick={() => setSelectedBuildId(build.id)} 198 /> 199 <Box sx={{ mt: 1, display: 'flex', justifyContent: 'center' }}> 200 <Button 201 variant="outlined" 202 color="error" 203 size="small" 204 startIcon={<DeleteIcon />} 205 onClick={(e) => { 206 e.stopPropagation(); 207 openDeleteDialog(build.id, build.name); 208 }} 209 sx={{ width: '100%' }} 210 > 211 Delete 212 </Button> 213 </Box> 214 </Box> 191 215 </Grid> 192 216 ))} … … 208 232 {data.userBuilds.map((build: any) => ( 209 233 <Grid item xs={12} sm={6} md={4} key={build.id}> 210 <BuildCard 211 build={build} 212 onClick={() => { 213 setOpenMyBuildsDialog(false); 214 setSelectedBuildId(build.id); 215 }} 216 /> 234 <Box sx={{ position: 'relative' }}> 235 <BuildCard 236 build={build} 237 onClick={() => { 238 setOpenMyBuildsDialog(false); 239 setSelectedBuildId(build.id); 240 }} 241 /> 242 <Box sx={{ mt: 1, display: 'flex', justifyContent: 'center' }}> 243 <Button 244 variant="outlined" 245 color="error" 246 size="small" 247 startIcon={<DeleteIcon />} 248 onClick={(e) => { 249 e.stopPropagation(); 250 openDeleteDialog(build.id, build.name); 251 }} 252 sx={{ width: '100%' }} 253 > 254 Delete 255 </Button> 256 </Box> 257 </Box> 217 258 </Grid> 218 259 ))} … … 252 293 </Dialog> 253 294 295 <Dialog open={deleteDialog.open} onClose={() => setDeleteDialog({ open: false, buildId: null, buildName: '' })}> 296 <DialogTitle>Delete Build</DialogTitle> 297 <DialogContent> 298 <Typography variant="h6" gutterBottom>{deleteDialog.buildName}</Typography> 299 <Typography color="text.secondary"> 300 Are you sure you want to permanently delete this build? This action cannot be undone. 301 </Typography> 302 </DialogContent> 303 <DialogActions> 304 <Button 305 onClick={() => setDeleteDialog({ open: false, buildId: null, buildName: '' })} 306 disabled={deleteLoading} 307 > 308 Cancel 309 </Button> 310 <Button 311 onClick={handleDelete} 312 variant="contained" 313 color="error" 314 disabled={deleteLoading} 315 startIcon={deleteLoading ? <CircularProgress size={20} /> : <DeleteIcon />} 316 > 317 {deleteLoading ? 'Deleting...' : 'Delete Build'} 318 </Button> 319 </DialogActions> 320 </Dialog> 321 254 322 </Grid> 255 323 </Grid> … … 265 333 }} 266 334 onClone={handleCloneWrapper} 335 isDashboardView={true} 267 336 /> 268 337 </Container>
Note:
See TracChangeset
for help on using the changeset viewer.
