speedup loading some pages (reduce data amount of trail lists) (#236)
* speedup loading some pages (reduce data amount of trail lists) * optimize code * fix save bio, if no tileset defined
This commit is contained in:
@@ -13,7 +13,7 @@ const SettingsCreateSchema = z.object({
|
|||||||
lon: z.number()
|
lon: z.number()
|
||||||
}).optional().nullable(),
|
}).optional().nullable(),
|
||||||
category: z.string().optional(),
|
category: z.string().optional(),
|
||||||
tilesets: z.array(z.object({ name: z.string(), url: z.string().url() })).optional(),
|
tilesets: z.array(z.object({ name: z.string(), url: z.string().url() })).optional().nullable(),
|
||||||
terrain: z.object({ terrain: z.string().url(), hillshading: z.string().url() }).optional().nullable(),
|
terrain: z.object({ terrain: z.string().url(), hillshading: z.string().url() }).optional().nullable(),
|
||||||
user: z.string().optional(),
|
user: z.string().optional(),
|
||||||
privacy: z.object({
|
privacy: z.object({
|
||||||
|
|||||||
@@ -36,3 +36,34 @@ export interface ListFilter {
|
|||||||
shared?: boolean;
|
shared?: boolean;
|
||||||
sortOrder?: "+" | "-"
|
sortOrder?: "+" | "-"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const enum ExpandType {
|
||||||
|
None = 0,
|
||||||
|
Trails = 1 << 0,
|
||||||
|
Waypoints = 1 << 1,
|
||||||
|
TrailCategories = 1 << 2,
|
||||||
|
ListShares = 1 << 3,
|
||||||
|
All = ~(~0 << 4),
|
||||||
|
}
|
||||||
|
|
||||||
|
export function ExpandTypeToString(e: ExpandType) : string {
|
||||||
|
|
||||||
|
if (e == ExpandType.None)
|
||||||
|
return "";
|
||||||
|
|
||||||
|
var ret = "";
|
||||||
|
if ((e & ExpandType.Trails) === ExpandType.Trails) {
|
||||||
|
ret += "trails,";
|
||||||
|
}
|
||||||
|
if ((e & ExpandType.Waypoints) === ExpandType.Waypoints) {
|
||||||
|
ret += "trails.waypoints,";
|
||||||
|
}
|
||||||
|
if ((e & ExpandType.TrailCategories) === ExpandType.TrailCategories) {
|
||||||
|
ret += "trails.category,";
|
||||||
|
}
|
||||||
|
if ((e & ExpandType.ListShares) === ExpandType.ListShares) {
|
||||||
|
ret += "list_share_via_list,";
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret.slice(0, -1);
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
import { List, type ListFilter } from "$lib/models/list";
|
import { List, type ListFilter, ExpandType, ExpandTypeToString } from "$lib/models/list";
|
||||||
import type { Trail } from "$lib/models/trail";
|
import type { Trail } from "$lib/models/trail";
|
||||||
import { pb } from "$lib/pocketbase";
|
import { pb } from "$lib/pocketbase";
|
||||||
import { type ListResult } from "pocketbase";
|
import { type ListResult } from "pocketbase";
|
||||||
@@ -11,7 +11,9 @@ let lists: List[] = []
|
|||||||
export const list: Writable<List | null> = writable(null)
|
export const list: Writable<List | null> = writable(null)
|
||||||
export const listTrail: Writable<Trail | null> = writable(null);
|
export const listTrail: Writable<Trail | null> = writable(null);
|
||||||
|
|
||||||
export async function lists_index(filter?: ListFilter, page: number = 1, perPage: number = 5, f: (url: RequestInfo | URL, config?: RequestInit) => Promise<Response> = fetch) {
|
export async function lists_index(filter?: ListFilter, page: number = 1, perPage: number = 5,
|
||||||
|
f: (url: RequestInfo | URL, config?: RequestInit) => Promise<Response> = fetch,
|
||||||
|
e: ExpandType = ExpandType.All) {
|
||||||
const filterText = filter ? buildFilterText(filter) : ""
|
const filterText = filter ? buildFilterText(filter) : ""
|
||||||
|
|
||||||
const r = await f('/api/v1/list?' + new URLSearchParams({
|
const r = await f('/api/v1/list?' + new URLSearchParams({
|
||||||
@@ -19,7 +21,7 @@ export async function lists_index(filter?: ListFilter, page: number = 1, perPage
|
|||||||
perPage: perPage.toString(),
|
perPage: perPage.toString(),
|
||||||
page: page.toString(),
|
page: page.toString(),
|
||||||
filter: filterText,
|
filter: filterText,
|
||||||
expand: "trails,trails.waypoints,trails.category,list_share_via_list"
|
expand: ExpandTypeToString(e),
|
||||||
}), {
|
}), {
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
})
|
})
|
||||||
@@ -92,9 +94,11 @@ export async function lists_search_filter(filter: ListFilter, page: number = 1,
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function lists_show(id: string, f: (url: RequestInfo | URL, config?: RequestInit) => Promise<Response> = fetch) {
|
export async function lists_show(id: string, f: (url: RequestInfo | URL, config?: RequestInit) => Promise<Response> = fetch
|
||||||
|
, e: ExpandType = ExpandType.All) {
|
||||||
|
|
||||||
const r = await f(`/api/v1/list/${id}?` + new URLSearchParams({
|
const r = await f(`/api/v1/list/${id}?` + new URLSearchParams({
|
||||||
expand: "trails,trails.waypoints,trails.category,list_share_via_list"
|
expand: ExpandTypeToString(e)
|
||||||
}), {
|
}), {
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import type { List, ListFilter } from "$lib/models/list";
|
import { ExpandType, type List, type ListFilter } from "$lib/models/list";
|
||||||
import { lists_index, lists_show } from "$lib/stores/list_store";
|
import { lists_index, lists_show } from "$lib/stores/list_store";
|
||||||
import { APIError } from "$lib/util/api_util";
|
import { APIError } from "$lib/util/api_util";
|
||||||
import { error, type Load, type NumericRange } from "@sveltejs/kit";
|
import { error, type Load, type NumericRange } from "@sveltejs/kit";
|
||||||
@@ -17,7 +17,7 @@ export const load: Load = async ({ params, fetch, url }) => {
|
|||||||
let lists: ListResult<List>;
|
let lists: ListResult<List>;
|
||||||
if (url.searchParams.get("list")) {
|
if (url.searchParams.get("list")) {
|
||||||
try {
|
try {
|
||||||
const list = await lists_show(url.searchParams.get("list") ?? "", fetch)
|
const list = await lists_show(url.searchParams.get("list") ?? "", fetch, ExpandType.None)
|
||||||
|
|
||||||
lists = { items: [list], page: 1, perPage: 1, totalItems: 1, totalPages: 1 }
|
lists = { items: [list], page: 1, perPage: 1, totalItems: 1, totalPages: 1 }
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import { ExpandType } from "$lib/models/list";
|
||||||
import { Trail } from "$lib/models/trail";
|
import { Trail } from "$lib/models/trail";
|
||||||
import { pb } from "$lib/pocketbase";
|
import { pb } from "$lib/pocketbase";
|
||||||
import { categories_index } from "$lib/stores/category_store";
|
import { categories_index } from "$lib/stores/category_store";
|
||||||
@@ -10,7 +11,7 @@ export const load: Load = async ({ params, fetch }) => {
|
|||||||
return error(400, "Bad Request")
|
return error(400, "Bad Request")
|
||||||
}
|
}
|
||||||
const categories = await categories_index(fetch)
|
const categories = await categories_index(fetch)
|
||||||
const lists = await lists_index({ q: "", author: pb.authStore.record?.id ?? "" }, 1, -1, fetch)
|
const lists = await lists_index({ q: "", author: pb.authStore.record?.id ?? "" }, 1, -1, fetch, ExpandType.None)
|
||||||
|
|
||||||
let trail: Trail;
|
let trail: Trail;
|
||||||
if (params.id === "new") {
|
if (params.id === "new") {
|
||||||
|
|||||||
Reference in New Issue
Block a user