import React from 'react'; import { Sidebar } from '@/components/layout/Sidebar'; import { Header } from '@/components/layout/Header'; import { CreatePlatformModal } from '@/components/modals/CreatePlatformModal'; import { EditPlatformModal } from '@/components/modals/EditPlatformModal'; import { PlatformCard } from '@/components/cards/PlatformCard'; import { DeletePlatformConfirmationModal } from '@/components/modals/DeletePlatformConfirmationModal'; import { usePlatformQuery, Platform } from '@/hooks/use-query/usePlatformQuery'; import { useSearch } from '@/hooks/useSearch.ts'; import '@/styles/cards.css'; export const PlatformsPage = () => { const [createPlatformOpen, setCreatePlatformOpen] = React.useState(false); const [selectedPlatform, setSelectedPlatform] = React.useState(null); const [deleteConfirmationOpen, setDeleteConfirmationOpen] = React.useState(false); const [platformToDelete, setPlatformToDelete] = React.useState<{ id: string; name: string } | null>(null); const [searchTerm, setSearchTerm] = React.useState(''); const [isSidebarOpen, setIsSidebarOpen] = React.useState(false); const openCreatePlatform = () => setCreatePlatformOpen(true); const closeCreatePlatform = () => setCreatePlatformOpen(false); const selectPlatform = (platform: Platform) => setSelectedPlatform(platform); const { platforms, deletePlatform, isLoading } = usePlatformQuery(); const filteredPlatforms = useSearch(platforms, searchTerm) as Platform[]; const handleDelete = async (platformId: string, platformName: string) => { setPlatformToDelete({ id: platformId, name: platformName }); setDeleteConfirmationOpen(true); }; const handleConfirmDelete = async () => { if (platformToDelete) { try { await deletePlatform(platformToDelete.id); setDeleteConfirmationOpen(false); setPlatformToDelete(null); } catch (error) { console.error('Error deleting platform:', error); throw error; } } }; return (
setIsSidebarOpen(false)} />
setIsSidebarOpen(true)} /> {isLoading ? (
) : filteredPlatforms.length === 0 ? (
{searchTerm ? 'No platforms found matching your search.' : 'No platforms have been created yet.'}
) : (
{filteredPlatforms.map((platform) => ( selectPlatform(platform)} onDelete={() => handleDelete(platform.ID, platform.PlatformName)} /> ))}
)}
{createPlatformOpen && ( )} {selectedPlatform && ( setSelectedPlatform(null)} /> )} {deleteConfirmationOpen && platformToDelete && ( { setDeleteConfirmationOpen(false); setPlatformToDelete(null); }} onConfirm={handleConfirmDelete} /> )}
); };