Malý repozitář pro WTL 3.I 2025/2026
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

110 lines
3.7 KiB

const inputId = document.getElementById("userId");
const btnNajdi = document.getElementById("btnNajdi");
const btnVse = document.getElementById("btnVse");
const stav = document.getElementById("stav");
const vysledek = document.getElementById("vysledek");
const postyKontejner = document.getElementById("posty-kontejner");
const btnPosty = document.getElementById("btnPosty");
let aktualniUserId = null;
// FUNKCE 1 : Načtení všech uživatelů
async function nactiVsechny() {
vysledek.innerHTML = "";
stav.innerText = "Načítám seznam všech uživatelů";
try{
const odpoved = await fetch("https://jsonplaceholder.typicode.com/users")
if (!odpoved.ok){
throw new Error("Nepodařilo se stáhnout seznam uživatelů")
}
const data = await odpoved.json();
//Vytvoření seznam (createElement/appendChild)
const ul = document.createElement("ul");
data.forEach(u => {
const li = document.createElement("li");
li.innerText = u.name
ul.appendChild(li);
});
vysledek.appendChild(ul)
stav.innerText = "Seznam Načten"
} catch (e) {
stav.innerText = "CHYBA:" + e.message;
}
}
async function nactiJednoho() {
const id = inputId.value;
vysledek.innerHTML = "";
postyKontejner.innerHTML = "";
btnPosty.disabled = true;
aktualniUserId = null;
stav.innerText = `Hledám uživatele s ID: ${id}`;
try{
const odpoved = await fetch(`https://jsonplaceholder.typicode.com/users/${id}`)
if(!odpoved.ok) {
throw new Error(`Uživatel s ID ${id} neexistuje (HTTP ${odpoved.status})`);
}
const u = await odpoved.json();
vysledek.innerHTML = `
<div class="user-card">
<h3>${u.name} (ID:${u.id})</h3>
<ul>
<li>${u.username}</li>
<li>${u.email}</li>
<li>${u.address.city}</li>
</ul>
</div>
`;//AltGR + ý = ` (Template literal)
stav.innerText = "Uživatel nalezen"
//aktivace vyhledávání postů
aktualniUserId = u.id;
btnPosty.disabled = false;
btnPosty.innerText = `Načíst příspvěky (autor: ${u.name})`
} catch (error) {
stav.innerText = "Došlo k chybě";
vysledek.innerHTML = `<p style="color:red">Chyba:${error.message}</p>`
console.error("Podropbnosti chyby:",error)
} finally {
console.log(`Pokus o načtení ID ${id} dokončen`);
}
}
async function nactiPosty() {
//Pojistka pokud nemame ID
if(!aktualniUserId) return;
postyKontejner.innerHTML = "<p>Načítám příspěvky</p>";
btnPosty.disabled = true; //zabráníme opakovanému klikání během načítaní
try {
const odpoved = await fetch(`https://jsonplaceholder.typicode.com/users/${aktualniUserId}/posts`)
if(!odpoved.ok) {
throw new Error(`Uživatel s ID ${id} neexistuje (HTTP ${odpoved.status})`);
}
const posty = await odpoved.json();
const html = posty.map(p => `
<div class="post">
<strong>${p.title}</strong>
<p>${p.body}</p>
</div>
`).join("");
postyKontejner.innerHTML = `<h4>Příspěvky autora (${posty.length})</h4>` +html;
stav.innerText = "Data načtena"
} catch(e){
postyKontejner.innerHTML = `<p style="color:red">chyba:${e.message}</p>`
} finally {
btnPosty.disabled = false
}
}
btnVse.addEventListener("click",nactiVsechny);
btnNajdi.addEventListener("click",nactiJednoho);
btnPosty.addEventListener("click",nactiPosty)