jandoubek / pvs-2020-lectures

Project for PVS lecture in fall 2020
0 stars 0 forks source link

Možnost hledat podle kreditů #21

Closed SachCZ closed 3 years ago

SachCZ commented 3 years ago

Já jako uživatel bych chtěl hledat podle kreditů tak, že můžu nastavit jejich rozsah.

Podmínka splnění: Chci najít předměty s rozsahem 3-6 kredity a najdu je.

pakk-minidose commented 3 years ago

Část řešení je v branchi credits-slider. Slider je naimplementovaný - možná bude chtít dolatit grafická stránka, ale to bych zatím nechal být. Hodnotu na slideru je možné číst v části kódu, ve které se sestavuje filtr.

Co je potřeba dodělat:

Co se týče hodnoty v kreditech, nechtěl jsem to cpát do stejného souboru jako data z rozvrhu, protože v rozvrzích to uvedeno není - nechám na zvážení, zda to tam prostě připsat. Reálně ta data budeme tahat ze dvou zdrojů, takže z tohoto pohledu by to neodpovídalo skutečnosti. Na druhou stránku obecně ta toy data nemusí ani teď odpovídat tomu, jak to bude nakonec vypadat.

Dokud nebudeme mít v databázi údaje o kreditech, nejde implementovat ani ten filtr. S implementací filtru budu potřebovat trochu poradit od někoho, kdo ví, jak ten filtr funguje teď.

SachCZ commented 3 years ago

Byl bych pro nacpat hodnoty v kreditech do stejného souboru a to i ve finální verzi. Myslím si, že by bylo ideální, kdyby ten json agregoval všechny relevantní informace a není podstatné jak vznikl. Prozatím jsem pro #26 .

SachCZ commented 3 years ago

Pro reálné filtrování pak budeš muset jít do souboru QueryForm.js. Zde je potřeba upravit řádek:

const [ceredits, setCredits] = useState(parseCredits(queryRoute.get("credits")));

aby vše fungovalo, tak bude nutné naimplementovat funkci parseCredits, která bere string typu "15-18" (doufám, že s pomlčkou v url není problém, to je třeba zkusit a případně udělat jinak) a vrátní array [15, 18]. Zde je také potřeba zařídit aby bylo vráceno [1, 40] pokud je string param prázdný.

Konečně pak ve funkci handle submit se tvoří query string, který by měl se zahrnutím kreditů vypadat takto:

/search?includes=pocitac&days=0&credits=15-18

Toho lze docílit nějak takto:

params += '&credits=' + ...; //Potreba parsnout [15, 18] na "15-18"

Pro filtrování výsledků slouží komponent ResultsPage.js. Bohužel je tam tam artefakt z dema funkce parseDays je tam copy pastnuta, což je ultra špatně a je potřeba ji vyndat do jiného souboru (např. utility.js).

Pro fitrování je nutné přidat řádky:

const credits = parseCredits(queryRoute.get("credits"));

a opět je nutné funkci parseCredits implementovat v souboru utility.js. Pokud toto budeš dělat, nezapomeň tu funkci z toho souboru exportnout, ať ji pak můžeš importnout.

Nakonec je potřeba přidat něco ve smyslu:

subjects = subjects.filter(subject => creditsInAreInRange(subject.credits, credits))

Snad je to srozumitelné, v každém případě ten kód pro slider vypadá dobře!

pakk-minidose commented 3 years ago

Přidal jsem možnost filtrování df4f6a1192ff918ee068d54d6be191a5c6f4aa5f. Odzkoušeno je to jenom by oko - asi to bude potřeba ještě zkontrolovat až bude hotové #23

Test se mi nepodařilo napsat - upřímně ta dokumentace pro Jest a testování v Reactu vypadá dost rozsáhle, asi bych si to nechal jako samostatný úkol (tj. naučit se testovat a napsat si test pro svůj komponent).

SachCZ commented 3 years ago

Otevři prosím pull request, linkni toto issue a pak to zavřeme s tím :+1:.