Enhance deletion processes with event-check validations.
Added validation to prevent deletion of shipments, dewars, pucks, or samples if they have associated events. Updated frontend components to handle and display error messages based on API responses for improved user feedback.
This commit is contained in:
@ -78,13 +78,27 @@ const ShipmentDetails: React.FC<ShipmentDetailsProps> = ({
|
||||
const confirmed = window.confirm('Are you sure you want to delete this dewar?');
|
||||
if (confirmed && selectedShipment) {
|
||||
try {
|
||||
const updatedShipment = await ShipmentsService.removeDewarFromShipmentShipmentsShipmentIdRemoveDewarDewarIdDelete(selectedShipment.id, dewarId);
|
||||
const updatedShipment = await ShipmentsService.removeDewarFromShipmentShipmentsShipmentIdRemoveDewarDewarIdDelete(
|
||||
selectedShipment.id,
|
||||
dewarId
|
||||
);
|
||||
setSelectedShipment(updatedShipment);
|
||||
setLocalSelectedDewar(null);
|
||||
refreshShipments();
|
||||
} catch (error) {
|
||||
console.error('Failed to delete dewar:', error);
|
||||
alert('Failed to delete dewar. Please try again.');
|
||||
alert('Dewar deleted successfully!');
|
||||
} catch (error: any) {
|
||||
console.error('Full error object:', error);
|
||||
|
||||
let errorMessage = 'Failed to delete dewar. Please try again.';
|
||||
|
||||
if (error instanceof ApiError && error.body) {
|
||||
console.error('API error body:', error.body);
|
||||
errorMessage = error.body.detail || errorMessage;
|
||||
} else if (error.message) {
|
||||
errorMessage = error.message;
|
||||
}
|
||||
|
||||
alert(`Failed to delete dewar: ${errorMessage}`);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
@ -2,7 +2,7 @@ import React, { useState } from 'react';
|
||||
import { Button, Box, Typography, IconButton } from '@mui/material';
|
||||
import { Add as AddIcon, Delete as DeleteIcon, UploadFile as UploadFileIcon, Refresh as RefreshIcon } from '@mui/icons-material';
|
||||
import UploadDialog from './UploadDialog';
|
||||
import { Dewar, Shipment, ShipmentsService } from '../../openapi';
|
||||
import {ApiError, Dewar, Shipment, ShipmentsService} from '../../openapi';
|
||||
import { SxProps } from '@mui/material';
|
||||
import bottleGrey from '/src/assets/icons/bottle-svgrepo-com-grey.svg';
|
||||
import bottleYellow from '/src/assets/icons/bottle-svgrepo-com-yellow.svg';
|
||||
@ -39,21 +39,34 @@ const ShipmentPanel: React.FC<ShipmentPanelProps> = ({
|
||||
|
||||
const handleDeleteShipment = async () => {
|
||||
if (selectedShipment) {
|
||||
const confirmed = window.confirm(`Are you sure you want to delete the shipment: ${selectedShipment.shipment_name}?`);
|
||||
if (confirmed) {
|
||||
await deleteShipment(selectedShipment.id);
|
||||
}
|
||||
const confirmDelete = window.confirm(
|
||||
`Are you sure you want to delete the shipment: ${selectedShipment.shipment_name}?`
|
||||
);
|
||||
|
||||
if (!confirmDelete) return;
|
||||
|
||||
// Try to delete the shipment
|
||||
await deleteShipment(selectedShipment.id);
|
||||
}
|
||||
};
|
||||
|
||||
const deleteShipment = async (shipmentId: number) => {
|
||||
if (!shipmentId) return;
|
||||
|
||||
try {
|
||||
await ShipmentsService.deleteShipmentShipmentsShipmentIdDelete(shipmentId);
|
||||
refreshShipments();
|
||||
selectShipment(null);
|
||||
} catch (error) {
|
||||
console.error('Failed to delete shipment:', error);
|
||||
alert("Shipment deleted successfully.");
|
||||
} catch (error: any) {
|
||||
console.error("Failed to delete shipment:", error);
|
||||
|
||||
let errorMessage = "Failed to delete shipment.";
|
||||
if (error instanceof ApiError && error.body) {
|
||||
errorMessage = error.body.detail || errorMessage;
|
||||
}
|
||||
|
||||
alert(errorMessage);
|
||||
}
|
||||
};
|
||||
|
||||
|
Reference in New Issue
Block a user