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-07-10 15:01:35 +00:00
|
|
|
import { io_getItemsForTopic } from "../db/jsonlines.js"
|
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-07-10 15:01:35 +00:00
|
|
|
$: {
|
|
|
|
let data = io_getItemsForTopic(topicname);
|
|
|
|
items = data;
|
|
|
|
filteredItems = data;
|
|
|
|
}
|
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-08-15 09:42:51 +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) => {
|
2022-12-26 01:04:11 +00:00
|
|
|
if(query.sortby == 'rating') { return ((a.rating || 0) - (b.rating || 0)) };
|
2022-05-24 14:31:52 +00:00
|
|
|
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-06-08 12:41:55 +00:00
|
|
|
<div>
|
|
|
|
<SearchForm {alltopics} on:queryChanged={handleQueryChanged} hideTopic={true} hideFormat={true}/>
|
|
|
|
|
|
|
|
<ItemList items={filteredItems}/>
|
|
|
|
</div>
|
|
|
|
|
2022-05-23 17:30:22 +00:00
|
|
|
|