learndb/src/TopicDetail.svelte

52 wiersze
1.5 KiB
Svelte
Czysty Zwykły widok Historia

2022-05-08 12:02:37 +00:00
<script>
2022-05-30 20:45:34 +00:00
import ItemList from "./ItemList.svelte"
2022-05-11 14:08:38 +00:00
import TopicMasonryGrid from "./TopicMasonryGrid.svelte"
2022-05-30 20:45:34 +00:00
2022-05-23 19:58:05 +00:00
import SearchForm from "./SearchForm.svelte"
2022-05-08 12:02:37 +00:00
2022-05-19 15:51:06 +00:00
export let topicname;
2022-05-23 17:50:08 +00:00
export let alltopics;
2022-05-08 12:02:37 +00:00
let items = [];
2022-05-24 14:31:52 +00:00
let filteredItems = [];
let query = {
text: "",
topic: "",
level: "",
2022-06-03 13:35:57 +00:00
tag: "",
2022-05-24 14:31:52 +00:00
sortby: "rating"
};
2022-05-08 12:02:37 +00:00
2022-05-19 15:51:06 +00:00
$: fetch(`/learn/items.json?_shape=array&topics__contains=${topicname}`)
2022-05-08 12:02:37 +00:00
.then(r => r.json())
.then(data => {
items = data;
2022-05-24 14:31:52 +00:00
filteredItems = data;
2022-05-16 17:24:19 +00:00
});
2022-05-24 14:31:52 +00:00
function handleQueryChanged(event){
2022-06-03 13:35:57 +00:00
// console.log("queryChanged: ", event.detail);
2022-05-24 14:31:52 +00:00
query = event.detail;
}
$: filteredItems = items.filter(item => {
if(query.text && !item.name.toLowerCase().includes(query.text.toLowerCase())){ return false; }
if(query.level && item.difficulty != query.level){ return false; }
2022-06-03 13:35:57 +00:00
if(query.tag && !item.tags.includes(query.tag)){ return false; }
2022-05-24 14:31:52 +00:00
return true;
}).sort((a,b) => {
if(query.sortby == 'rating') { return (a.rating - b.rating) };
if(query.sortby == 'year') { return (a.year - b.year)};
if(query.sortby == 'name') { return a.name.localeCompare(b.name)};
});
2022-05-08 12:02:37 +00:00
</script>
2022-05-23 17:50:08 +00:00
<TopicMasonryGrid {topicname} {alltopics}/>
2022-05-08 12:02:37 +00:00
2022-05-30 11:18:19 +00:00
<SearchForm {alltopics} on:queryChanged={handleQueryChanged} hideTopic={true} hideFormat={true}/>
2022-05-23 17:30:22 +00:00
2022-05-30 20:45:34 +00:00
<ItemList items={filteredItems}/>