1. Zadání

Co je cílem zadání?

  • Definice hierarchického datového modelu s využitím abstraktní bázové třídy a polymorfismu pro ukládání různorodých úkolů do jednotné kolekce.
  • Asynchronní naplnění počátečního stavu aplikace stažením a deserializací dat ze vzdáleného rozhraní REST API.
  • Rozdělení sdílené kolekce do vizuálně nezávislých sloupců pomocí dynamického filtrování a prioritního řazení prostřednictvím dotazů LINQ.
  • Implementace uživatelského rozhraní s podporou technologie Drag & Drop pro vizuální přesun objektů mezi jednotlivými zónami.
  • Zajištění správy vnitřního stavu komponenty, kdy modifikace textového atributu objektu vyvolá automatické překreslení a přesun prvku v aplikaci.

Zadání

Vytvořte abstraktní bázovou třídu PracovniUkol, která bude obsahovat vlastnosti Id, Nazev a Stav (s výchozí hodnotou "Nové"), virtuální vlastnost JeKriticky s výchozí hodnotou false a abstraktní metodu ZiskejTypUkolu(). Z této bázové třídy následně odvoďte dvě specializované třídy: ExterniUkol (přepisuje vlastnosti Stav) a KritickaChyba (přepisuje vlastnost JeKriticky).

V Razor komponentě vytvořte interaktivní agilní nástěnku s následující funkcionalitou:

  1. Inicializace dat: Při spuštění komponenty asynchronně stáhněte data ze služby https://jsonplaceholder.typicode.com/todos. Prvních několik záznamů převeďte na instance typu ExterniUkol a vložte je do hlavní sdílené kolekce úkolů.
  2. Rozložení sloupců: Vizuálně rozdělte obrazovku do tří sloupců: Nové, Probíhá a Dokončeno. Zajistěte, aby každý sloupec pomocí technologie LINQ vykresloval pouze úkoly s odpovídajícím stavem. A úkoly se daly mezi jednotlivými sloupci přetahovat pomocí Drag & Drop.
  3. Řazení s prioritou: Ve sloupci Nové řaďte kritické chyby nad ostatní úkoly.
  4. Formulář: Nad nástěnku přidejte jednoduchý textový vstup a tlačítko, kterým uživatel do systému manuálně přidá novou instanci typu KritickaChyba.

Příklad, jak by mohla stránka vypadat:

Pokud se okno nenačetlo, klikněte zde.