fixes sorting by difficulty
This commit is contained in:
@@ -69,7 +69,7 @@ func documentFromTrailRecord(app core.App, r *core.Record, author *core.Record,
|
|||||||
"elevation_gain": r.GetFloat("elevation_gain"),
|
"elevation_gain": r.GetFloat("elevation_gain"),
|
||||||
"elevation_loss": r.GetFloat("elevation_loss"),
|
"elevation_loss": r.GetFloat("elevation_loss"),
|
||||||
"duration": r.GetFloat("duration"),
|
"duration": r.GetFloat("duration"),
|
||||||
"difficulty": r.Get("difficulty"),
|
"difficulty": difficultyToNumber(r.GetString("difficulty")),
|
||||||
"category": category,
|
"category": category,
|
||||||
"completed": logCount > 0,
|
"completed": logCount > 0,
|
||||||
"date": r.GetDateTime("date").Time().Unix(),
|
"date": r.GetDateTime("date").Time().Unix(),
|
||||||
@@ -97,6 +97,19 @@ func documentFromTrailRecord(app core.App, r *core.Record, author *core.Record,
|
|||||||
return document, nil
|
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) {
|
func getPolyline(app core.App, r *core.Record) (string, error) {
|
||||||
gpxPath := r.GetString("gpx")
|
gpxPath := r.GetString("gpx")
|
||||||
if len(gpxPath) == 0 {
|
if len(gpxPath) == 0 {
|
||||||
|
|||||||
@@ -51,9 +51,9 @@
|
|||||||
];
|
];
|
||||||
|
|
||||||
const difficultyItems: SelectItem[] = [
|
const difficultyItems: SelectItem[] = [
|
||||||
{ text: $_("easy"), value: "easy" },
|
{ text: $_("easy"), value: 0 },
|
||||||
{ text: $_("moderate"), value: "moderate" },
|
{ text: $_("moderate"), value: 1 },
|
||||||
{ text: $_("difficult"), value: "difficult" },
|
{ text: $_("difficult"), value: 2 },
|
||||||
];
|
];
|
||||||
|
|
||||||
let searchDropdownItems: SearchItem[] = $state([]);
|
let searchDropdownItems: SearchItem[] = $state([]);
|
||||||
|
|||||||
@@ -111,7 +111,7 @@ interface TrailFilter {
|
|||||||
q: string,
|
q: string,
|
||||||
category: string[],
|
category: string[],
|
||||||
tags: string[],
|
tags: string[],
|
||||||
difficulty: ("easy" | "moderate" | "difficult")[]
|
difficulty: (0 | 1 | 2)[]
|
||||||
author?: string;
|
author?: string;
|
||||||
public?: boolean;
|
public?: boolean;
|
||||||
shared?: boolean;
|
shared?: boolean;
|
||||||
@@ -169,7 +169,7 @@ interface TrailSearchResult {
|
|||||||
elevation_gain: number;
|
elevation_gain: number;
|
||||||
elevation_loss: number;
|
elevation_loss: number;
|
||||||
duration: number;
|
duration: number;
|
||||||
difficulty: "easy" | "moderate" | "difficult";
|
difficulty: 0 | 1 | 2;
|
||||||
category: string;
|
category: string;
|
||||||
completed: boolean;
|
completed: boolean;
|
||||||
date: number;
|
date: number;
|
||||||
|
|||||||
@@ -457,7 +457,7 @@ export async function searchResultToTrailList(hits: Hits<TrailSearchResult>): Pr
|
|||||||
created: new Date(h.created * 1000).toISOString(),
|
created: new Date(h.created * 1000).toISOString(),
|
||||||
date: new Date(h.date * 1000).toISOString(),
|
date: new Date(h.date * 1000).toISOString(),
|
||||||
description: h.description,
|
description: h.description,
|
||||||
difficulty: h.difficulty,
|
difficulty: h.difficulty == 0 ? "easy" : h.difficulty == 1 ? "moderate" : "difficult",
|
||||||
distance: h.distance,
|
distance: h.distance,
|
||||||
duration: h.duration,
|
duration: h.duration,
|
||||||
elevation_gain: h.elevation_gain,
|
elevation_gain: h.elevation_gain,
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ export const load: ServerLoad = async ({ params, locals, fetch }) => {
|
|||||||
q: "",
|
q: "",
|
||||||
category: [],
|
category: [],
|
||||||
tags: [],
|
tags: [],
|
||||||
difficulty: ["easy", "moderate", "difficult"],
|
difficulty: [0, 1, 2],
|
||||||
author: "",
|
author: "",
|
||||||
public: true,
|
public: true,
|
||||||
shared: true,
|
shared: true,
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ export const load: Load = async ({ params, fetch, parent }) => {
|
|||||||
q: "",
|
q: "",
|
||||||
category: [],
|
category: [],
|
||||||
tags: [],
|
tags: [],
|
||||||
difficulty: ["easy", "moderate", "difficult"],
|
difficulty: [0, 1, 2],
|
||||||
author: actor.id,
|
author: actor.id,
|
||||||
public: true,
|
public: true,
|
||||||
shared: true,
|
shared: true,
|
||||||
|
|||||||
@@ -25,7 +25,24 @@
|
|||||||
export const snapshot: Snapshot<TrailFilter> = {
|
export const snapshot: Snapshot<TrailFilter> = {
|
||||||
capture: () => filter,
|
capture: () => filter,
|
||||||
restore: (value) => {
|
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();
|
handleFilterUpdate();
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ export const load: ServerLoad = async ({ params, locals, url, fetch }) => {
|
|||||||
q: "",
|
q: "",
|
||||||
category: [],
|
category: [],
|
||||||
tags: [],
|
tags: [],
|
||||||
difficulty: ["easy", "moderate", "difficult"],
|
difficulty: [0, 1, 2],
|
||||||
author: "",
|
author: "",
|
||||||
public: true,
|
public: true,
|
||||||
shared: true,
|
shared: true,
|
||||||
|
|||||||
Reference in New Issue
Block a user