Začneme s již připraveným projektem, který obsahuje hlavní stránku sociální sítě The Chirp. Tato stránka zobrazuje seznam příspěvků všech uživatelů. Vaším úkolem bude rozšířit tento web stránku zobrazující profil uživatele.
- Pro spuštění projektu budeme potřeba lokální API. To najdete v repoziáři ukazka-the-chirp-api. Repozitář si naklonujte a API spusťte příkazem
npx apidroid@latest
. - Prohlédněte si kolekce v API. Tentokrát máme kolekce hned dvě:
users
aposts
. Kolekceusers
obsahuje informace o uživatelích, kolekceposts
obsahuje všechny příspěvky. - Naklonujte si repozitář s frontendem ukazka-the-chirp. Otevřete jej ve VS Code a spusťte příkaz
npm install
, kterým nainstalujete potřebné závislosti. Poté spusťte příkaznpm run dev
, kterým spustíte vývojový server. - V prohlížeči si vyzkoušejte, jak aplikace funguje. Prohlédněte si její zdrojový kód a seznamte se s tím, jak je aplikace strukturovaná.
- Vytvořte novou stránku pro zobrazení profilu uživatele. Stránka bude dostupná na URL
/profil.html
. Bude tedy potřeba vytvořit nové souboryprofil.html
,profil.jsx
aprofil.css
. - Zatím na stránku vložte pouze nadpis
h1
s textemProfil uživatele
. Stránku si otevřete v prohlížeči a ověřte, že se nadpis zobrazuje. - V komponentě
Post
máte již připravený odkaz na prvku s třídoupost__handle
. Zatím nikam nevede. Sestavte URL odkazu tak, aby vedl na stránku s profilem uživatele a předal jí ID uživatele skrze search parametr?user=
. Například pro uživatele s ID 42 by URL měla vypadat takto:/profil.html?user=42
. - Na stránce s profilem uživatele získejte ID uživatele z URL. Načtěte z API informace o uživateli s tímto ID. Na stránce zobrazte jméno, handle a bio uživatele.
- Zobrazte také avatar uživatele. Cesta k obrázku je uložena v atributu
avatar
uživatele. Musíte tuto cestu složit s URL vašeho API stejně, jako to dělá komponentaPost
. - Nyní byste měli mít funkční zobrazení profilu každého uživatele kliknutím na jeho handle v seznamu příspěvků.
## Kuchtík
Podle následujícího zadání vytvořte aplikaci pro správu receptů. Aplikace bude mít dvě stránky, jedna bude v mřížce zobrazovat seznam receptů, druhá bude zobrazovat detail jednoho receptu, který si uživatel vybere na hlavní stránce. Aplikaci uživateli umožní přidávat nové recepty nebo mazat recepty již neaktuální.
Toto cvičení dělejte ve dvojicích v režimu takzvaného párového programování. To je způsob práce, kdy jeden programátor pracuje na svém počítači a druhý je pouze konzultant. Po nějakém čase si pak role prohoďte. Zadání cvičení je záměřně popsáno v obecných krocích, abyste měli prostor sami si rozymyslet a vzájmně prodiskutovat, jakým způsobem budete jednotlivé kroky řešit.
Co se týče vzhledu aplikace, můžete se inspirovat layoutem hlavní stránky, kterou pro nás laskavě vytvořila umělá inteligence Midjourny:
- Nejprve si rozmyslete jaká data bude vaše aplikace potřebovat. Jak mohou vypadat informace o receptu se můžete inspirovat třeba na webu Rohlik.cz. Výhoda tohoto webu je, že mají i hezké obrázky, které si můžete pro účely tohoto cvičení vypůjčit. Rozmyslete si, jaké informace budete potřebovat pro seznam receptů a jaké pro detail jednoho receptu. S bohatostí informací to zároveň nepřehánějte, abyste nestrávili většinu času hledáním obrázků a psaním textů.
- Jakmile máte rozmyšlenou datovou strukturu, založte si API backend pomocí
apidroid
. Založte na backendu kolekci s recepty a naplňte ji několika recepty, které budeme později zobrazovat na hlavní stránce. - Založte si Vite/JSX projekt pro frontend aplikace. Na hlavní stránce stáhněte z API seznam receptů a zobrazte je na stránce.
- Vytvořte komponentu
RecipeCard
, která bude zobrazovat jednu kartu s receptem. V této komponentě zobrazte název receptu, obrázek a popis. Vytvořte si pro tuto komponentu nějaké rozumné CSS styly. - Do stránky přidejte formulář, do kterého uživatel může zadat nový recept. Formulář osaďte spoluchačem události
submit
a pomocí požadavkuPOST
odešlete nový recept na server. Po úspěšném přidání receptu proveďte refresh stránky. - Na kartu receptu přidejte možnost smazání. Protože je na stránce více receptů, potřebujete poznat, který recept chce uživatel smazat. Na tlačitko pro mazání proto přidejte
data-id
atribut s ID receptu. - Na všechny tlačítka pro mazání navěsíte posluchače události. V posluchači události si přečtete ID receptu z vlastnosti
event.target.dataset.id
. Pomocí tohoto ID smažete recept na serveru. Nezapomeňte na refresh stránky. - Na karty receptu přidejte odkaz pro přechod na detail receptu. Vytvořte stránku pro detail receptu a pomocí search parametrů jí předejte
id
receptu, který má zobrazit. Zobrazte recept na stránce. - Na stránce s detaily receptu přidejte odkaz pro návrat na hlavní stránku, aby se uživatel mohl vrátit zpět na seznam receptů.