adds loaders for trail cards and lists

This commit is contained in:
Christian Beutel
2024-12-02 20:21:25 +01:00
parent a5a7532559
commit 4d6657b64e
10 changed files with 150 additions and 76 deletions

View File

@@ -3,17 +3,21 @@
import { page } from "$app/stores";
import TrailFilterPanel from "$lib/components/trail/trail_filter_panel.svelte";
import TrailList from "$lib/components/trail/trail_list.svelte";
import type { TrailFilter } from "$lib/models/trail";
import { categories } from "$lib/stores/category_store";
import { trails, trails_search_filter } from "$lib/stores/trail_store";
import type { Trail, TrailFilter } from "$lib/models/trail";
import { trails_search_filter } from "$lib/stores/trail_store";
import { onMount } from "svelte";
import { _ } from "svelte-i18n";
let filterExpanded: boolean = true;
let loading: boolean = false;
const filter: TrailFilter = $page.data.filter;
const pagination: { page: number; totalPages: number } =
$page.data.pagination;
const pagination: { page: number; totalPages: number } = {
page: 1,
totalPages: 1,
};
let trails: Trail[] = [];
onMount(() => {
if (window.innerWidth < 768) {
@@ -22,14 +26,18 @@
});
async function handleFilterUpdate() {
loading = true;
const response = await trails_search_filter(filter, pagination.page);
trails = response.trails;
pagination.page = response.page;
pagination.totalPages = response.totalPages;
loading = false;
}
async function paginate(page: number) {
pagination.page = page;
const response = await trails_search_filter(filter, page);
trails = response.trails;
$page.url.searchParams.set("page", page.toString());
goto(`?${$page.url.searchParams.toString()}`);
}
@@ -50,7 +58,8 @@
></TrailFilterPanel>
<TrailList
{filter}
trails={$trails}
{loading}
{trails}
{pagination}
on:update={() => handleFilterUpdate()}
on:pagination={(e) => paginate(e.detail)}

View File

@@ -1,4 +1,4 @@
import type { TrailFilter } from "$lib/models/trail";
import type { Trail, TrailFilter } from "$lib/models/trail";
import { categories_index } from "$lib/stores/category_store";
import { trails_get_filter_values, trails_search_filter } from "$lib/stores/trail_store";
import type { ServerLoad } from "@sveltejs/kit";
@@ -32,13 +32,10 @@ export const load: ServerLoad = async ({ params, locals, url, fetch }) => {
if (paramCategory) {
filter.category.push(paramCategory);
}
const page = url.searchParams.get("page") ?? "1";
const response = await trails_search_filter(filter, parseInt(page), fetch);
const categories = await categories_index(fetch)
return {
categories,
filter: filter, pagination: { page: response.page, totalPages: response.totalPages }
filter: filter
};
};