mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-09-09 01:18:18 +00:00
Package booking new rules update, cascade delete option updates
This commit is contained in:
@@ -15,7 +15,7 @@ export default function ClassesPage() {
|
||||
const [filters, setFilters] = useState({ search: '' });
|
||||
const [showModal, setShowModal] = useState(false);
|
||||
const [editingClass, setEditingClass] = useState<any>(null);
|
||||
const [deleteConfirm, setDeleteConfirm] = useState<{ isOpen: boolean; class: any | null; error?: string }>({ isOpen: false, class: null });
|
||||
const [deleteConfirm, setDeleteConfirm] = useState<{ isOpen: boolean; class: any | null; error?: string; cascade?: boolean; cascadeChecked?: boolean }>({ isOpen: false, class: null });
|
||||
const [selectedCoachTypeId, setSelectedCoachTypeId] = useState<string>('');
|
||||
const queryClient = useQueryClient();
|
||||
|
||||
@@ -56,13 +56,18 @@ export default function ClassesPage() {
|
||||
});
|
||||
|
||||
const deleteMutation = useMutation({
|
||||
mutationFn: seatClassesApi.delete,
|
||||
mutationFn: ({ id, cascade }: { id: string; cascade?: boolean }) => seatClassesApi.delete(id, cascade),
|
||||
onSuccess: () => {
|
||||
queryClient.invalidateQueries({ queryKey: ['classes'] });
|
||||
},
|
||||
onError: (e: any) => {
|
||||
const msg = e?.response?.data?.message || e?.message || 'Failed to delete class';
|
||||
setDeleteConfirm(prev => ({ ...prev, error: Array.isArray(msg) ? msg.join(' ') : msg }));
|
||||
const isFkError = msg?.includes('Cannot delete') || e?.response?.status === 400;
|
||||
if (isFkError && !deleteConfirm.cascade) {
|
||||
setDeleteConfirm(prev => ({ ...prev, cascade: true, cascadeChecked: false, error: Array.isArray(msg) ? msg.join(' ') : msg }));
|
||||
} else {
|
||||
setDeleteConfirm(prev => ({ ...prev, error: Array.isArray(msg) ? msg.join(' ') : msg }));
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
@@ -99,7 +104,7 @@ export default function ClassesPage() {
|
||||
const confirmDelete = async () => {
|
||||
if (!deleteConfirm.class) return;
|
||||
try {
|
||||
await deleteMutation.mutateAsync(deleteConfirm.class.id);
|
||||
await deleteMutation.mutateAsync({ id: deleteConfirm.class.id, cascade: deleteConfirm.cascade && deleteConfirm.cascadeChecked });
|
||||
setDeleteConfirm({ isOpen: false, class: null });
|
||||
} catch {
|
||||
// error is set by onError handler
|
||||
@@ -239,7 +244,10 @@ export default function ClassesPage() {
|
||||
isDanger={true}
|
||||
isLoading={deleteMutation.isPending}
|
||||
error={deleteConfirm.error}
|
||||
warning="This class may be used by coaches and fare rules. Deleting it may impact seat assignments and pricing."
|
||||
warning={!deleteConfirm.cascade ? "This class may be used by coaches and fare rules. Deleting it may impact seat assignments and pricing." : undefined}
|
||||
cascadeWarning={deleteConfirm.cascade ? "This class has related fare rules that will also be permanently deleted." : undefined}
|
||||
cascadeChecked={deleteConfirm.cascadeChecked}
|
||||
onCascadeChange={(checked) => setDeleteConfirm(prev => ({ ...prev, cascadeChecked: checked }))}
|
||||
/>
|
||||
|
||||
{/* Add/Edit Modal */}
|
||||
|
||||
Reference in New Issue
Block a user