Tour package booking, app release, new endpoints, more updates and fixes

This commit is contained in:
Stephanos A
2026-07-05 00:28:06 +03:00
parent 868639084c
commit 595be6e123
68 changed files with 2773 additions and 787 deletions

View File

@@ -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 }>({ isOpen: false, class: null });
const [deleteConfirm, setDeleteConfirm] = useState<{ isOpen: boolean; class: any | null; error?: string }>({ isOpen: false, class: null });
const [selectedCoachTypeId, setSelectedCoachTypeId] = useState<string>('');
const queryClient = useQueryClient();
@@ -60,6 +60,10 @@ export default function ClassesPage() {
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 handleSubmit = async (e: React.FormEvent<HTMLFormElement>) => {
@@ -89,13 +93,16 @@ export default function ClassesPage() {
};
const handleDelete = (cls: any) => {
setDeleteConfirm({ isOpen: true, class: cls });
setDeleteConfirm({ isOpen: true, class: cls, error: undefined });
};
const confirmDelete = async () => {
if (deleteConfirm.class) {
if (!deleteConfirm.class) return;
try {
await deleteMutation.mutateAsync(deleteConfirm.class.id);
setDeleteConfirm({ isOpen: false, class: null });
} catch {
// error is set by onError handler
}
};
@@ -230,6 +237,8 @@ export default function ClassesPage() {
message={`Are you sure you want to delete ${deleteConfirm.class?.name}?`}
confirmText="Delete"
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."
/>