import React, { useState } from 'react'; import { Box, Container, Heading, VStack, SimpleGrid, Spinner, Text, Alert, AlertIcon, Tabs, TabList, TabPanels, Tab, TabPanel, Badge, useColorModeValue, } from '@chakra-ui/react'; import { useQuery } from '@tanstack/react-query'; import MainLayout from '../components/layout/MainLayout'; import PollCard from '../components/polls/PollCard'; import { getPolls, getPoll } from '../services/polls'; const PollsPage: React.FC = () => { const [tabIndex, setTabIndex] = useState(0); const bgSection = useColorModeValue('white', 'gray.800'); // Fetch all active polls const { data: polls, isLoading } = useQuery({ queryKey: ['polls'], queryFn: () => getPolls(), staleTime: 2 * 60 * 1000, }); // Get full data for each poll const { data: pollsData, isLoading: isLoadingPolls } = useQuery({ queryKey: ['polls-details', polls?.map((p) => p.id)], queryFn: async () => { if (!polls || polls.length === 0) return []; const promises = polls.map((poll) => getPoll(poll.id)); return await Promise.all(promises); }, enabled: !!polls && polls.length > 0, }); // Filter polls const featuredPolls = pollsData?.filter((p) => p.poll.featured) || []; const activePolls = pollsData?.filter((p) => p.is_active) || []; const allPolls = pollsData || []; if (isLoading || isLoadingPolls) { return ( Načítání anket... ); } if (!polls || polls.length === 0) { return ( Ankety a hlasování Momentálně nejsou k dispozici žádné ankety. Brzy přidáme nové! ); } return ( Ankety a hlasování Hlasujte v anketách a podělte se o svůj názor s ostatními fanoušky! Všechny {allPolls.length > 0 && ( {allPolls.length} )} Aktivní {activePolls.length > 0 && ( {activePolls.length} )} {featuredPolls.length > 0 && ( Zvýrazněné {featuredPolls.length} )} {/* All Polls */} {allPolls.map((pollResponse) => ( ))} {/* Active Polls */} {activePolls.length > 0 ? ( {activePolls.map((pollResponse) => ( ))} ) : ( Momentálně nejsou k dispozici žádné aktivní ankety. )} {/* Featured Polls */} {featuredPolls.length > 0 && ( {featuredPolls.map((pollResponse) => ( ))} )} ); }; export default PollsPage;