chore: delete implementation in product collection

This commit is contained in:
Rodolfo Ruiz
2025-09-06 20:34:46 -06:00
parent efdb48919f
commit b3209a4019
3 changed files with 46 additions and 3 deletions

View File

@@ -52,4 +52,15 @@ export default class ProductsApi {
if (!res.ok) throw new Error(`Delete error ${res.status}: ${await res.text()}`); if (!res.ok) throw new Error(`Delete error ${res.status}: ${await res.text()}`);
return res.json(); return res.json();
} }
async changeStatusVariant(payload) {
// If your API is change status, reuse updateVariant.
const res = await fetch(`${this.baseUrl}/ChangeStatus`, {
method: 'PATCH',
headers: this.headers(),
body: JSON.stringify(payload),
});
if (!res.ok) throw new Error(`ChangeStatus error ${res.status}: ${await res.text()}`);
return res.json();
}
} }

View File

@@ -370,8 +370,8 @@ export default function Categories() {
<DialogTitle>Delete Category</DialogTitle> <DialogTitle>Delete Category</DialogTitle>
<DialogContent> <DialogContent>
<Box sx={{ display: 'flex', gap: 1, mt: 2, mb: 1 }}> <Box sx={{ display: 'flex', gap: 1, mt: 2, mb: 1 }}>
<Button onClick={() => setConfirmOpen(false)}>Cancel</Button> <Button onClick={() => setConfirmOpen(false)} className='button-transparent'>Cancel</Button>
<Button color="error" variant="contained" onClick={confirmDelete}>Delete</Button> <Button color="error" variant="contained" onClick={confirmDelete} className="button-gold">Delete</Button>
</Box> </Box>
</DialogContent> </DialogContent>
</Dialog> </Dialog>

View File

@@ -55,6 +55,8 @@ export default function ProductCollections() {
const [viewOnly, setViewOnly] = useState(false); const [viewOnly, setViewOnly] = useState(false);
const [confirmOpen, setConfirmOpen] = useState(false);
// Tags // Tags
const [loadingTags, setLoadingTags] = useState(true); const [loadingTags, setLoadingTags] = useState(true);
const [typeMap, setTypeMap] = useState({}); const [typeMap, setTypeMap] = useState({});
@@ -167,6 +169,26 @@ export default function ProductCollections() {
} }
}, [statusFilter, rawRows]); }, [statusFilter, rawRows]);
const handleDeleteClick = (row) => {
setEditRow(row);
setConfirmOpen(true);
};
const confirmDelete = async () => {
try {
if (!editRow?.id) return;
await api.changeStatusVariant({ mongoId: editRow.id, status: 'Inactive' });
await load();
toast.success('Deleted successfully');
} catch (err) {
console.error(err);
toast.error(err?.message || 'Delete failed');
} finally {
setConfirmOpen(false);
setEditRow(null);
}
};
const columns = [ const columns = [
{ {
field: 'actions', field: 'actions',
@@ -212,7 +234,7 @@ export default function ProductCollections() {
borderRadius: 2, borderRadius: 2,
p: 1, p: 1,
}} }}
onClick={() => { setEditRow(params.row); setViewOnly(false); handleDeleteClick(params?.row); }} onClick={() => { setViewOnly(false); handleDeleteClick(params?.row); }}
> >
<DeleteRoundedIcon fontSize="small" /> <DeleteRoundedIcon fontSize="small" />
</IconButton> </IconButton>
@@ -362,6 +384,16 @@ export default function ProductCollections() {
/> />
</DialogContent> </DialogContent>
</Dialog> </Dialog>
<Dialog open={confirmOpen} onClose={() => setConfirmOpen(false)}>
<DialogTitle>Delete Product Collection</DialogTitle>
<DialogContent>
<Box sx={{ display: 'flex', gap: 1, mt: 2, mb: 1 }}>
<Button onClick={() => setConfirmOpen(false)} className='button-transparent'>Cancel</Button>
<Button color="error" variant="contained" onClick={confirmDelete} className="button-gold">Delete</Button>
</Box>
</DialogContent>
</Dialog>
</Box> </Box>
); );
} }