fixes sorting by difficulty

This commit is contained in:
Christian Beutel
2025-09-07 17:59:35 +02:00
parent 8cc7029243
commit 3b7f30908c
8 changed files with 41 additions and 11 deletions

View File

@@ -69,7 +69,7 @@ func documentFromTrailRecord(app core.App, r *core.Record, author *core.Record,
"elevation_gain": r.GetFloat("elevation_gain"),
"elevation_loss": r.GetFloat("elevation_loss"),
"duration": r.GetFloat("duration"),
"difficulty": r.Get("difficulty"),
"difficulty": difficultyToNumber(r.GetString("difficulty")),
"category": category,
"completed": logCount > 0,
"date": r.GetDateTime("date").Time().Unix(),
@@ -97,6 +97,19 @@ func documentFromTrailRecord(app core.App, r *core.Record, author *core.Record,
return document, nil
}
func difficultyToNumber(difficulty string) int32 {
switch difficulty {
case "easy":
return 0
case "moderate":
return 1
case "difficult":
return 2
}
return 0
}
func getPolyline(app core.App, r *core.Record) (string, error) {
gpxPath := r.GetString("gpx")
if len(gpxPath) == 0 {

View File

@@ -51,9 +51,9 @@
];
const difficultyItems: SelectItem[] = [
{ text: $_("easy"), value: "easy" },
{ text: $_("moderate"), value: "moderate" },
{ text: $_("difficult"), value: "difficult" },
{ text: $_("easy"), value: 0 },
{ text: $_("moderate"), value: 1 },
{ text: $_("difficult"), value: 2 },
];
let searchDropdownItems: SearchItem[] = $state([]);

View File

@@ -111,7 +111,7 @@ interface TrailFilter {
q: string,
category: string[],
tags: string[],
difficulty: ("easy" | "moderate" | "difficult")[]
difficulty: (0 | 1 | 2)[]
author?: string;
public?: boolean;
shared?: boolean;
@@ -169,7 +169,7 @@ interface TrailSearchResult {
elevation_gain: number;
elevation_loss: number;
duration: number;
difficulty: "easy" | "moderate" | "difficult";
difficulty: 0 | 1 | 2;
category: string;
completed: boolean;
date: number;

View File

@@ -457,7 +457,7 @@ export async function searchResultToTrailList(hits: Hits<TrailSearchResult>): Pr
created: new Date(h.created * 1000).toISOString(),
date: new Date(h.date * 1000).toISOString(),
description: h.description,
difficulty: h.difficulty,
difficulty: h.difficulty == 0 ? "easy" : h.difficulty == 1 ? "moderate" : "difficult",
distance: h.distance,
duration: h.duration,
elevation_gain: h.elevation_gain,

View File

@@ -11,7 +11,7 @@ export const load: ServerLoad = async ({ params, locals, fetch }) => {
q: "",
category: [],
tags: [],
difficulty: ["easy", "moderate", "difficult"],
difficulty: [0, 1, 2],
author: "",
public: true,
shared: true,

View File

@@ -12,7 +12,7 @@ export const load: Load = async ({ params, fetch, parent }) => {
q: "",
category: [],
tags: [],
difficulty: ["easy", "moderate", "difficult"],
difficulty: [0, 1, 2],
author: actor.id,
public: true,
shared: true,

View File

@@ -25,7 +25,24 @@
export const snapshot: Snapshot<TrailFilter> = {
capture: () => filter,
restore: (value) => {
filter = value;
const difficultyMap: Record<string, 0 | 1 | 2> = {
easy: 0,
moderate: 1,
difficult: 2,
};
// defensive copy
const migrated = { ...value };
if (Array.isArray(migrated.difficulty)) {
migrated.difficulty = migrated.difficulty.map((d: any) => {
if (typeof d === "string" && d in difficultyMap) {
return difficultyMap[d];
}
return d;
});
}
filter = migrated;
handleFilterUpdate();
},
};

View File

@@ -10,7 +10,7 @@ export const load: ServerLoad = async ({ params, locals, url, fetch }) => {
q: "",
category: [],
tags: [],
difficulty: ["easy", "moderate", "difficult"],
difficulty: [0, 1, 2],
author: "",
public: true,
shared: true,