Changes in pages/dashboard/admin/+Page.tsx [5af32f0:b6e1b3c]
- File:
-
- 1 edited
-
pages/dashboard/admin/+Page.tsx (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
pages/dashboard/admin/+Page.tsx
r5af32f0 rb6e1b3c 19 19 import BuildCard from '../../../components/BuildCard'; 20 20 import BuildDetailsDialog from '../../../components/BuildDetailsDialog'; 21 import DeleteIcon from "@mui/icons-material/Delete"; 22 import {onDeleteBuild} from "../user/userDashboard.telefunc"; 21 23 22 24 export default function AdminDashboard() { … … 24 26 const [loading, setLoading] = useState(true); 25 27 const [selectedBuildId, setSelectedBuildId] = useState<number | null>(null); 26 27 // Build approval dialog state 28 const [deleteDialog, setDeleteDialog] = useState<{ open: boolean, buildId: number | null, buildName: string }>({ open: false, buildId: null, buildName: '' }); 29 const [deleteLoading, setDeleteLoading] = useState(false); 30 28 31 const [buildApprovalDialog, setBuildApprovalDialog] = useState<{ 29 32 open: boolean, … … 107 110 } catch (e) { 108 111 alert("Failed to update suggestion"); 112 } 113 }; 114 115 const openDeleteDialog = (buildId: number, buildName: string) => { 116 setDeleteDialog({ open: true, buildId, buildName }); 117 }; 118 119 const handleDelete = async () => { 120 if (!deleteDialog.buildId) return; 121 setDeleteLoading(true); 122 try { 123 await onDeleteBuild({buildId: deleteDialog.buildId}); 124 setDeleteDialog({ open: false, buildId: null, buildName: '' }); 125 loadData(); // refresh na user i favorite builds 126 setSelectedBuildId(null); 127 } catch (e) { 128 alert("Failed to delete build"); 129 } finally { 130 setDeleteLoading(false); 109 131 } 110 132 }; … … 253 275 <Grid container spacing={2}> 254 276 {data.userBuilds.slice(0, 4).map((build: any) => ( 255 <Grid item xs={12} md={3} key={build.id}> 256 <BuildCard 257 build={build} 258 onClick={() => setSelectedBuildId(build.id)} 259 /> 277 <Grid item xs={12} sm={6} md={4} key={build.id}> 278 <Box sx={{ position: 'relative' }}> 279 <BuildCard 280 build={build} 281 onClick={() => setSelectedBuildId(build.id)} 282 /> 283 <Box sx={{ mt: 1, display: 'flex', justifyContent: 'center' }}> 284 <Button 285 variant="outlined" 286 color="error" 287 size="small" 288 startIcon={<DeleteIcon />} 289 onClick={(e) => { 290 e.stopPropagation(); 291 openDeleteDialog(build.id, build.name); 292 }} 293 sx={{ width: '100%' }} 294 > 295 Delete 296 </Button> 297 </Box> 298 </Box> 260 299 </Grid> 261 300 ))} … … 329 368 </Dialog> 330 369 370 <Dialog open={deleteDialog.open} onClose={() => setDeleteDialog({ open: false, buildId: null, buildName: '' })}> 371 <DialogTitle>Delete Build</DialogTitle> 372 <DialogContent> 373 <Typography variant="h6" gutterBottom>{deleteDialog.buildName}</Typography> 374 <Typography color="text.secondary"> 375 Are you sure you want to permanently delete this build? This action cannot be undone. 376 </Typography> 377 </DialogContent> 378 <DialogActions> 379 <Button 380 onClick={() => setDeleteDialog({ open: false, buildId: null, buildName: '' })} 381 disabled={deleteLoading} 382 > 383 Cancel 384 </Button> 385 <Button 386 onClick={handleDelete} 387 variant="contained" 388 color="error" 389 disabled={deleteLoading} 390 startIcon={deleteLoading ? <CircularProgress size={20} /> : <DeleteIcon />} 391 > 392 {deleteLoading ? 'Deleting...' : 'Delete Build'} 393 </Button> 394 </DialogActions> 395 </Dialog> 396 331 397 <BuildDetailsDialog 332 398 open={!!selectedBuildId} … … 335 401 onClose={() => setSelectedBuildId(null)} 336 402 onClone={() => alert("Clone disabled in admin view")} 403 isDashboardView={true} 337 404 /> 338 405 </Container>
Note:
See TracChangeset
for help on using the changeset viewer.
