diff --git a/src/app/[locale]/admin/clubs/[club_id]/slot-definitions/SlotDefinitionsComponent.tsx b/src/app/[locale]/admin/clubs/[club_id]/slot-definitions/SlotDefinitionsComponent.tsx index 5ead518..2b06f68 100644 --- a/src/app/[locale]/admin/clubs/[club_id]/slot-definitions/SlotDefinitionsComponent.tsx +++ b/src/app/[locale]/admin/clubs/[club_id]/slot-definitions/SlotDefinitionsComponent.tsx @@ -7,6 +7,8 @@ import useTranslation from '@/src/hooks/useTranslation'; import { getSlotDefinitions, getMockSlotDefinitions, deleteSlotDefinition } from '@/src/lib/api/slot-definitions'; import type { SlotDefinition, SlotDefinitionError } from '@/src/types/slot-definitions'; import { DAY_NAMES, formatTime, calculateEndTime } from '@/src/types/slot-definitions'; +import { getAdminClubDetail } from '@/src/lib/api/admin-clubs'; +import type { Court } from '@/src/types/courts'; import SlotDefinitionForm from './SlotDefinitionForm'; import MaterialisationStatusPanel from './MaterialisationStatusPanel'; @@ -14,28 +16,28 @@ interface SlotDefinitionsComponentProps { clubId: number; } -// Mock courts data (will come from parent/API later) -const MOCK_COURTS = [ - { court_id: 101, name: 'Court 1' }, - { court_id: 102, name: 'Court 2' }, - { court_id: 103, name: 'Court 3' }, -]; - export default function SlotDefinitionsComponent({ clubId }: SlotDefinitionsComponentProps) { const { t, locale } = useTranslation(); const [definitions, setDefinitions] = useState([]); + const [courts, setCourts] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [showCreateModal, setShowCreateModal] = useState(false); const [editingDefinition, setEditingDefinition] = useState(undefined); useEffect(() => { - loadDefinitions(); + loadData(); }, [clubId]); - async function loadDefinitions() { + async function loadData() { setLoading(true); + // Fetch club detail to get courts with actual names + const clubResult = await getAdminClubDetail(clubId); + if (clubResult.success) { + setCourts(clubResult.data.courts); + } + // Use mock data for now (until backend is ready) const USE_MOCKS = true; @@ -59,6 +61,22 @@ export default function SlotDefinitionsComponent({ clubId }: SlotDefinitionsComp setLoading(false); } + async function loadDefinitions() { + // Reload just definitions (for after create/edit/delete) + const USE_MOCKS = true; + + if (USE_MOCKS) { + await new Promise(resolve => setTimeout(resolve, 300)); + setDefinitions(getMockSlotDefinitions()); + return; + } + + const result = await getSlotDefinitions(clubId); + if (result.success) { + setDefinitions(result.data); + } + } + function handleCreate() { setEditingDefinition(undefined); setShowCreateModal(true); @@ -277,7 +295,7 @@ export default function SlotDefinitionsComponent({ clubId }: SlotDefinitionsComp {showCreateModal && (