From ec33723bdc315d40afcf8ea33db5b6eec51c469f Mon Sep 17 00:00:00 2001
From: Christian Beutel <>
Date: Sun, 4 Feb 2024 22:48:04 +0100
Subject: [PATCH] adds trails page
---
.../1707047370_updated_waypoints.js | 18 ++
web/package-lock.json | 6 +
web/package.json | 1 +
.../lib/components/base/double_slider.svelte | 54 ++++
web/src/lib/components/base/dropdown.svelte | 2 +-
.../lib/components/base/radio_group.svelte | 41 +++
web/src/lib/components/base/search.svelte | 110 ++++++++
web/src/lib/components/base/slider.svelte | 52 ++++
web/src/lib/components/base/text_field.svelte | 8 +-
web/src/lib/components/nav_bar.svelte | 2 +-
.../lib/components/trail/trail_card.svelte | 7 +-
web/src/lib/models/trail.ts | 20 +-
web/src/lib/stores/trail_store.ts | 4 +-
web/src/lib/util/country_code_util.ts | 247 ++++++++++++++++++
web/src/lib/util/format_util.ts | 2 +-
web/src/routes/+page.svelte | 73 ++++--
web/src/routes/trail/edit/[id]/+page.svelte | 12 +-
web/src/routes/trails/+page.svelte | 162 ++++++++++++
web/src/routes/trails/+page.ts | 8 +
19 files changed, 799 insertions(+), 30 deletions(-)
create mode 100644 db/pb_migrations/1707047370_updated_waypoints.js
create mode 100644 web/src/lib/components/base/double_slider.svelte
create mode 100644 web/src/lib/components/base/radio_group.svelte
create mode 100644 web/src/lib/components/base/search.svelte
create mode 100644 web/src/lib/components/base/slider.svelte
create mode 100644 web/src/lib/util/country_code_util.ts
create mode 100644 web/src/routes/trails/+page.svelte
create mode 100644 web/src/routes/trails/+page.ts
diff --git a/db/pb_migrations/1707047370_updated_waypoints.js b/db/pb_migrations/1707047370_updated_waypoints.js
new file mode 100644
index 00000000..39b1b45b
--- /dev/null
+++ b/db/pb_migrations/1707047370_updated_waypoints.js
@@ -0,0 +1,18 @@
+///
+migrate((db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("goeo2ubp103rzp9")
+
+ collection.updateRule = "@request.auth.id != \"\" && @collection.trails.waypoints.id ?= id && (@collection.trails.author = @request.auth.id)"
+ collection.deleteRule = "@request.auth.id != \"\" && @collection.trails.waypoints.id ?= id && (@collection.trails.author = @request.auth.id)"
+
+ return dao.saveCollection(collection)
+}, (db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("goeo2ubp103rzp9")
+
+ collection.updateRule = "@request.auth.id != \"\" && @collection.trails.waypoints ?= id && (@collection.trails.author = @request.auth.id)"
+ collection.deleteRule = "@request.auth.id != \"\" && @collection.trails.waypoints ?= id && (@collection.trails.author = @request.auth.id)"
+
+ return dao.saveCollection(collection)
+})
diff --git a/web/package-lock.json b/web/package-lock.json
index 55e7f205..5bcdbfc3 100644
--- a/web/package-lock.json
+++ b/web/package-lock.json
@@ -16,6 +16,7 @@
"leaflet-gpx": "^1.7.0",
"leaflet.awesome-markers": "^2.0.5",
"meilisearch": "^0.37.0",
+ "nouislider": "^15.7.1",
"photoswipe": "^5.4.3",
"pocketbase": "^0.21.0",
"yup": "^1.3.3"
@@ -2247,6 +2248,11 @@
"node": ">=0.10.0"
}
},
+ "node_modules/nouislider": {
+ "version": "15.7.1",
+ "resolved": "https://registry.npmjs.org/nouislider/-/nouislider-15.7.1.tgz",
+ "integrity": "sha512-5N7C1ru/i8y3dg9+Z6ilj6+m1EfabvOoaRa7ztpxBSKKRZso4vA52DGSbBJjw5XLtFr/LZ9SgGAXqyVtlVHO5w=="
+ },
"node_modules/npm-run-path": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.2.0.tgz",
diff --git a/web/package.json b/web/package.json
index 68e86445..31da8b41 100644
--- a/web/package.json
+++ b/web/package.json
@@ -39,6 +39,7 @@
"leaflet-gpx": "^1.7.0",
"leaflet.awesome-markers": "^2.0.5",
"meilisearch": "^0.37.0",
+ "nouislider": "^15.7.1",
"photoswipe": "^5.4.3",
"pocketbase": "^0.21.0",
"yup": "^1.3.3"
diff --git a/web/src/lib/components/base/double_slider.svelte b/web/src/lib/components/base/double_slider.svelte
new file mode 100644
index 00000000..baad92dd
--- /dev/null
+++ b/web/src/lib/components/base/double_slider.svelte
@@ -0,0 +1,54 @@
+
+
+
+
+
diff --git a/web/src/lib/components/base/dropdown.svelte b/web/src/lib/components/base/dropdown.svelte
index cafa6287..2a8cf09c 100644
--- a/web/src/lib/components/base/dropdown.svelte
+++ b/web/src/lib/components/base/dropdown.svelte
@@ -30,7 +30,7 @@
diff --git a/web/src/lib/components/base/radio_group.svelte b/web/src/lib/components/base/radio_group.svelte
new file mode 100644
index 00000000..755c077d
--- /dev/null
+++ b/web/src/lib/components/base/radio_group.svelte
@@ -0,0 +1,41 @@
+
+
+
+
+{#each items as item, i}
+
+ handleRadioChange(i)}
+ />
+
+
+{/each}
diff --git a/web/src/lib/components/base/search.svelte b/web/src/lib/components/base/search.svelte
new file mode 100644
index 00000000..d6e9befb
--- /dev/null
+++ b/web/src/lib/components/base/search.svelte
@@ -0,0 +1,110 @@
+
+
+
+
+
+
+
+
+ {#if value.length > 0}
+
+ {/if}
+
(searching = true)}
+ >
+
+ {#if dropDownOpen}
+
+ {#each items as item}
+
+
+
+ {/each}
+
+ {/if}
+
diff --git a/web/src/lib/components/base/slider.svelte b/web/src/lib/components/base/slider.svelte
new file mode 100644
index 00000000..8d2f7d82
--- /dev/null
+++ b/web/src/lib/components/base/slider.svelte
@@ -0,0 +1,52 @@
+
+
+
+
+
diff --git a/web/src/lib/components/base/text_field.svelte b/web/src/lib/components/base/text_field.svelte
index d1f1b1af..bd92c2d3 100644
--- a/web/src/lib/components/base/text_field.svelte
+++ b/web/src/lib/components/base/text_field.svelte
@@ -6,8 +6,8 @@
export let error: string = "";
export let icon: string = "";
export let extraClasses: string = "";
- export let type: "text" | "password" = "text";
-
+ export let type: "text" | "password" | "search" = "text";
+ export let autocomplete: "on" | "off" = "on"
function typeAction(node: HTMLInputElement) {
node.type = type;
}
@@ -28,9 +28,13 @@
class="bg-gray-50 border rounded-md p-3 transition-colors focus:border-primary focus:outline-none focus:ring-0 w-full {extraClasses}"
class:border-red-400={error.length > 0}
class:bg-red-50={error.length > 0}
+ {autocomplete}
use:typeAction
bind:value
on:change
+ on:input
+ on:focusin
+ on:focusout
{placeholder}
/>
diff --git a/web/src/lib/components/nav_bar.svelte b/web/src/lib/components/nav_bar.svelte
index 748987e4..90ca0e8e 100644
--- a/web/src/lib/components/nav_bar.svelte
+++ b/web/src/lib/components/nav_bar.svelte
@@ -21,7 +21,7 @@
{#if $currentUser}