import './style.css' const API_BASE_URL = '/api' const grid = document.getElementById('allLogoGrid') const loading = document.getElementById('allLoading') const empty = document.getElementById('allEmpty') const loadMoreBtn = document.getElementById('loadMoreBtn') const searchInput = document.getElementById('allLogoSearch') let page = 1 const limit = 20 let query = '' let isLoading = false let hasMore = true async function loadPage(reset = false) { if (isLoading) return if (reset) { page = 1 hasMore = true grid.innerHTML = '' empty.classList.add('hidden') loading.classList.remove('hidden') } else { loadMoreBtn.disabled = true loadMoreBtn.textContent = 'Načítání...' } isLoading = true try { const url = new URL(`${API_BASE_URL}/logos`, window.location.origin) url.searchParams.set('sort', 'recent') url.searchParams.set('limit', String(limit)) url.searchParams.set('page', String(page)) if (query) url.searchParams.set('q', query) const resp = await fetch(url.toString().replace(window.location.origin, '')) if (!resp.ok) throw new Error('Failed to fetch logos') const data = await resp.json() if (reset) loading.classList.add('hidden') if (Array.isArray(data) && data.length > 0) { appendCards(data) page += 1 if (data.length < limit) { hasMore = false loadMoreBtn.classList.add('hidden') } else { loadMoreBtn.classList.remove('hidden') } } else { if (reset) empty.classList.remove('hidden') hasMore = false loadMoreBtn.classList.add('hidden') } } catch (_) { if (reset) { loading.classList.add('hidden') empty.classList.remove('hidden') } } finally { isLoading = false loadMoreBtn.disabled = false loadMoreBtn.textContent = 'Načíst další' } } function appendCards(items) { const html = items.map(logo => { const logoUrl = `${API_BASE_URL}/logos/${logo.id}` return `
${logo.club_type || 'fotbal'}