diff --git a/db/pb_migrations/1706901300_updated_users.js b/db/pb_migrations/1706901300_updated_users.js
new file mode 100644
index 00000000..9461dbcb
--- /dev/null
+++ b/db/pb_migrations/1706901300_updated_users.js
@@ -0,0 +1,31 @@
+///
+migrate((db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("_pb_users_auth_")
+
+ // remove
+ collection.schema.removeField("users_name")
+
+ return dao.saveCollection(collection)
+}, (db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("_pb_users_auth_")
+
+ // add
+ collection.schema.addField(new SchemaField({
+ "system": false,
+ "id": "users_name",
+ "name": "name",
+ "type": "text",
+ "required": false,
+ "presentable": false,
+ "unique": false,
+ "options": {
+ "min": null,
+ "max": null,
+ "pattern": ""
+ }
+ }))
+
+ return dao.saveCollection(collection)
+})
diff --git a/db/pb_migrations/1706905108_updated_trails.js b/db/pb_migrations/1706905108_updated_trails.js
new file mode 100644
index 00000000..b0e1d7b7
--- /dev/null
+++ b/db/pb_migrations/1706905108_updated_trails.js
@@ -0,0 +1,27 @@
+///
+migrate((db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("e864strfxo14pm4")
+
+ // add
+ collection.schema.addField(new SchemaField({
+ "system": false,
+ "id": "ehrmydva",
+ "name": "public",
+ "type": "bool",
+ "required": false,
+ "presentable": false,
+ "unique": false,
+ "options": {}
+ }))
+
+ return dao.saveCollection(collection)
+}, (db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("e864strfxo14pm4")
+
+ // remove
+ collection.schema.removeField("ehrmydva")
+
+ return dao.saveCollection(collection)
+})
diff --git a/db/pb_migrations/1706905430_updated_trails.js b/db/pb_migrations/1706905430_updated_trails.js
new file mode 100644
index 00000000..a924fba6
--- /dev/null
+++ b/db/pb_migrations/1706905430_updated_trails.js
@@ -0,0 +1,48 @@
+///
+migrate((db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("e864strfxo14pm4")
+
+ // update
+ collection.schema.addField(new SchemaField({
+ "system": false,
+ "id": "1utgul91",
+ "name": "author",
+ "type": "relation",
+ "required": true,
+ "presentable": false,
+ "unique": false,
+ "options": {
+ "collectionId": "_pb_users_auth_",
+ "cascadeDelete": true,
+ "minSelect": null,
+ "maxSelect": 1,
+ "displayFields": null
+ }
+ }))
+
+ return dao.saveCollection(collection)
+}, (db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("e864strfxo14pm4")
+
+ // update
+ collection.schema.addField(new SchemaField({
+ "system": false,
+ "id": "1utgul91",
+ "name": "author",
+ "type": "relation",
+ "required": false,
+ "presentable": false,
+ "unique": false,
+ "options": {
+ "collectionId": "_pb_users_auth_",
+ "cascadeDelete": false,
+ "minSelect": null,
+ "maxSelect": 1,
+ "displayFields": null
+ }
+ }))
+
+ return dao.saveCollection(collection)
+})
diff --git a/db/pb_migrations/1706907701_updated_trails.js b/db/pb_migrations/1706907701_updated_trails.js
new file mode 100644
index 00000000..451c78cb
--- /dev/null
+++ b/db/pb_migrations/1706907701_updated_trails.js
@@ -0,0 +1,24 @@
+///
+migrate((db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("e864strfxo14pm4")
+
+ collection.listRule = "author = @request.auth.id || public = true"
+ collection.viewRule = "author = @request.auth.id || public = true"
+ collection.createRule = "@request.auth.id != \"\" && (@request.data.author = @request.auth.id)"
+ collection.updateRule = "author = @request.auth.id "
+ collection.deleteRule = "author = @request.auth.id "
+
+ return dao.saveCollection(collection)
+}, (db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("e864strfxo14pm4")
+
+ collection.listRule = ""
+ collection.viewRule = ""
+ collection.createRule = ""
+ collection.updateRule = ""
+ collection.deleteRule = ""
+
+ return dao.saveCollection(collection)
+})
diff --git a/db/pb_migrations/1706907926_updated_waypoints.js b/db/pb_migrations/1706907926_updated_waypoints.js
new file mode 100644
index 00000000..53b9b3c5
--- /dev/null
+++ b/db/pb_migrations/1706907926_updated_waypoints.js
@@ -0,0 +1,24 @@
+///
+migrate((db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("goeo2ubp103rzp9")
+
+ collection.listRule = "@request.auth.id != \"\" && @collection.trails.waypoints = id && (@collection.trails.author = @request.auth.id || @collection.trails.public = true)"
+ collection.viewRule = "@request.auth.id != \"\" && @collection.trails.waypoints = id && (@collection.trails.author = @request.auth.id || @collection.trails.public = true)"
+ collection.createRule = "@request.auth.id != \"\""
+ 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)
+}, (db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("goeo2ubp103rzp9")
+
+ collection.listRule = ""
+ collection.viewRule = ""
+ collection.createRule = ""
+ collection.updateRule = ""
+ collection.deleteRule = ""
+
+ return dao.saveCollection(collection)
+})
diff --git a/db/pb_migrations/1706907953_updated_summit_logs.js b/db/pb_migrations/1706907953_updated_summit_logs.js
new file mode 100644
index 00000000..f18b2332
--- /dev/null
+++ b/db/pb_migrations/1706907953_updated_summit_logs.js
@@ -0,0 +1,24 @@
+///
+migrate((db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("dd2l9a4vxpy2ni8")
+
+ collection.listRule = "@request.auth.id != \"\" && @collection.trails.waypoints = id && (@collection.trails.author = @request.auth.id || @collection.trails.public = true)"
+ collection.viewRule = "@request.auth.id != \"\" && @collection.trails.waypoints = id && (@collection.trails.author = @request.auth.id || @collection.trails.public = true)"
+ collection.createRule = "@request.auth.id != \"\""
+ 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)
+}, (db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("dd2l9a4vxpy2ni8")
+
+ collection.listRule = ""
+ collection.viewRule = ""
+ collection.createRule = ""
+ collection.updateRule = ""
+ collection.deleteRule = ""
+
+ return dao.saveCollection(collection)
+})
diff --git a/db/pb_migrations/1706908030_updated_summit_logs.js b/db/pb_migrations/1706908030_updated_summit_logs.js
new file mode 100644
index 00000000..1cb8ca1d
--- /dev/null
+++ b/db/pb_migrations/1706908030_updated_summit_logs.js
@@ -0,0 +1,22 @@
+///
+migrate((db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("dd2l9a4vxpy2ni8")
+
+ collection.listRule = "@request.auth.id != \"\" && @collection.trails.summit_logs ?= id && (@collection.trails.author = @request.auth.id || @collection.trails.public = true)"
+ collection.viewRule = "@request.auth.id != \"\" && @collection.trails.summit_logs ?= id && (@collection.trails.author = @request.auth.id || @collection.trails.public = true)"
+ 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)
+}, (db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("dd2l9a4vxpy2ni8")
+
+ collection.listRule = "@request.auth.id != \"\" && @collection.trails.waypoints = id && (@collection.trails.author = @request.auth.id || @collection.trails.public = true)"
+ collection.viewRule = "@request.auth.id != \"\" && @collection.trails.waypoints = id && (@collection.trails.author = @request.auth.id || @collection.trails.public = true)"
+ 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/db/pb_migrations/1706908043_updated_waypoints.js b/db/pb_migrations/1706908043_updated_waypoints.js
new file mode 100644
index 00000000..368e99a7
--- /dev/null
+++ b/db/pb_migrations/1706908043_updated_waypoints.js
@@ -0,0 +1,22 @@
+///
+migrate((db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("goeo2ubp103rzp9")
+
+ collection.listRule = "@request.auth.id != \"\" && @collection.trails.waypoints ?= id && (@collection.trails.author = @request.auth.id || @collection.trails.public = true)"
+ collection.viewRule = "@request.auth.id != \"\" && @collection.trails.waypoints ?= id && (@collection.trails.author = @request.auth.id || @collection.trails.public = true)"
+ 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)
+}, (db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("goeo2ubp103rzp9")
+
+ collection.listRule = "@request.auth.id != \"\" && @collection.trails.waypoints = id && (@collection.trails.author = @request.auth.id || @collection.trails.public = true)"
+ collection.viewRule = "@request.auth.id != \"\" && @collection.trails.waypoints = id && (@collection.trails.author = @request.auth.id || @collection.trails.public = true)"
+ 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/db/pb_migrations/1706908165_updated_waypoints.js b/db/pb_migrations/1706908165_updated_waypoints.js
new file mode 100644
index 00000000..fc8af541
--- /dev/null
+++ b/db/pb_migrations/1706908165_updated_waypoints.js
@@ -0,0 +1,16 @@
+///
+migrate((db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("goeo2ubp103rzp9")
+
+ collection.listRule = "@request.auth.id != \"\""
+
+ return dao.saveCollection(collection)
+}, (db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("goeo2ubp103rzp9")
+
+ collection.listRule = "@request.auth.id != \"\" && @collection.trails.waypoints ?= id && (@collection.trails.author = @request.auth.id || @collection.trails.public = true)"
+
+ return dao.saveCollection(collection)
+})
diff --git a/db/pb_migrations/1706908193_updated_waypoints.js b/db/pb_migrations/1706908193_updated_waypoints.js
new file mode 100644
index 00000000..79f56578
--- /dev/null
+++ b/db/pb_migrations/1706908193_updated_waypoints.js
@@ -0,0 +1,18 @@
+///
+migrate((db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("goeo2ubp103rzp9")
+
+ collection.listRule = "@request.auth.id != \"\" && @collection.trails.waypoints ?= id && (@collection.trails.author = @request.auth.id || @collection.trails.public = true)"
+ collection.viewRule = "@request.auth.id != \"\" "
+
+ return dao.saveCollection(collection)
+}, (db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("goeo2ubp103rzp9")
+
+ collection.listRule = "@request.auth.id != \"\""
+ collection.viewRule = "@request.auth.id != \"\" && @collection.trails.waypoints ?= id && (@collection.trails.author = @request.auth.id || @collection.trails.public = true)"
+
+ return dao.saveCollection(collection)
+})
diff --git a/db/pb_migrations/1706908206_updated_waypoints.js b/db/pb_migrations/1706908206_updated_waypoints.js
new file mode 100644
index 00000000..ec9ae38b
--- /dev/null
+++ b/db/pb_migrations/1706908206_updated_waypoints.js
@@ -0,0 +1,16 @@
+///
+migrate((db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("goeo2ubp103rzp9")
+
+ collection.viewRule = ""
+
+ return dao.saveCollection(collection)
+}, (db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("goeo2ubp103rzp9")
+
+ collection.viewRule = "@request.auth.id != \"\" "
+
+ return dao.saveCollection(collection)
+})
diff --git a/db/pb_migrations/1706908221_updated_waypoints.js b/db/pb_migrations/1706908221_updated_waypoints.js
new file mode 100644
index 00000000..1087c63f
--- /dev/null
+++ b/db/pb_migrations/1706908221_updated_waypoints.js
@@ -0,0 +1,16 @@
+///
+migrate((db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("goeo2ubp103rzp9")
+
+ collection.viewRule = "@request.auth.id != \"\" && @collection.trails.waypoints ?= id && (@collection.trails.author = @request.auth.id || @collection.trails.public = true)"
+
+ return dao.saveCollection(collection)
+}, (db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("goeo2ubp103rzp9")
+
+ collection.viewRule = ""
+
+ return dao.saveCollection(collection)
+})
diff --git a/db/pb_migrations/1706908229_updated_summit_logs.js b/db/pb_migrations/1706908229_updated_summit_logs.js
new file mode 100644
index 00000000..fa9d3725
--- /dev/null
+++ b/db/pb_migrations/1706908229_updated_summit_logs.js
@@ -0,0 +1,16 @@
+///
+migrate((db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("dd2l9a4vxpy2ni8")
+
+ collection.viewRule = ""
+
+ return dao.saveCollection(collection)
+}, (db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("dd2l9a4vxpy2ni8")
+
+ collection.viewRule = "@request.auth.id != \"\" && @collection.trails.summit_logs ?= id && (@collection.trails.author = @request.auth.id || @collection.trails.public = true)"
+
+ return dao.saveCollection(collection)
+})
diff --git a/db/pb_migrations/1706908236_updated_waypoints.js b/db/pb_migrations/1706908236_updated_waypoints.js
new file mode 100644
index 00000000..1dd7eb43
--- /dev/null
+++ b/db/pb_migrations/1706908236_updated_waypoints.js
@@ -0,0 +1,16 @@
+///
+migrate((db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("goeo2ubp103rzp9")
+
+ collection.viewRule = ""
+
+ return dao.saveCollection(collection)
+}, (db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("goeo2ubp103rzp9")
+
+ collection.viewRule = "@request.auth.id != \"\" && @collection.trails.waypoints ?= id && (@collection.trails.author = @request.auth.id || @collection.trails.public = true)"
+
+ return dao.saveCollection(collection)
+})
diff --git a/db/pb_migrations/1706908260_updated_summit_logs.js b/db/pb_migrations/1706908260_updated_summit_logs.js
new file mode 100644
index 00000000..e255892b
--- /dev/null
+++ b/db/pb_migrations/1706908260_updated_summit_logs.js
@@ -0,0 +1,16 @@
+///
+migrate((db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("dd2l9a4vxpy2ni8")
+
+ collection.listRule = ""
+
+ return dao.saveCollection(collection)
+}, (db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("dd2l9a4vxpy2ni8")
+
+ collection.listRule = "@request.auth.id != \"\" && @collection.trails.summit_logs ?= id && (@collection.trails.author = @request.auth.id || @collection.trails.public = true)"
+
+ return dao.saveCollection(collection)
+})
diff --git a/db/pb_migrations/1706908281_updated_waypoints.js b/db/pb_migrations/1706908281_updated_waypoints.js
new file mode 100644
index 00000000..1087c63f
--- /dev/null
+++ b/db/pb_migrations/1706908281_updated_waypoints.js
@@ -0,0 +1,16 @@
+///
+migrate((db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("goeo2ubp103rzp9")
+
+ collection.viewRule = "@request.auth.id != \"\" && @collection.trails.waypoints ?= id && (@collection.trails.author = @request.auth.id || @collection.trails.public = true)"
+
+ return dao.saveCollection(collection)
+}, (db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("goeo2ubp103rzp9")
+
+ collection.viewRule = ""
+
+ return dao.saveCollection(collection)
+})
diff --git a/db/pb_migrations/1706908311_updated_waypoints.js b/db/pb_migrations/1706908311_updated_waypoints.js
new file mode 100644
index 00000000..810d8d25
--- /dev/null
+++ b/db/pb_migrations/1706908311_updated_waypoints.js
@@ -0,0 +1,16 @@
+///
+migrate((db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("goeo2ubp103rzp9")
+
+ collection.viewRule = "@request.auth.id != \"\" && @collection.trails.waypoints ?= id "
+
+ return dao.saveCollection(collection)
+}, (db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("goeo2ubp103rzp9")
+
+ collection.viewRule = "@request.auth.id != \"\" && @collection.trails.waypoints ?= id && (@collection.trails.author = @request.auth.id || @collection.trails.public = true)"
+
+ return dao.saveCollection(collection)
+})
diff --git a/db/pb_migrations/1706908342_updated_waypoints.js b/db/pb_migrations/1706908342_updated_waypoints.js
new file mode 100644
index 00000000..77d3a868
--- /dev/null
+++ b/db/pb_migrations/1706908342_updated_waypoints.js
@@ -0,0 +1,16 @@
+///
+migrate((db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("goeo2ubp103rzp9")
+
+ collection.viewRule = ""
+
+ return dao.saveCollection(collection)
+}, (db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("goeo2ubp103rzp9")
+
+ collection.viewRule = "@request.auth.id != \"\" && @collection.trails.waypoints ?= id "
+
+ return dao.saveCollection(collection)
+})
diff --git a/db/pb_migrations/1706908372_updated_waypoints.js b/db/pb_migrations/1706908372_updated_waypoints.js
new file mode 100644
index 00000000..8ee07f24
--- /dev/null
+++ b/db/pb_migrations/1706908372_updated_waypoints.js
@@ -0,0 +1,16 @@
+///
+migrate((db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("goeo2ubp103rzp9")
+
+ collection.listRule = ""
+
+ return dao.saveCollection(collection)
+}, (db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("goeo2ubp103rzp9")
+
+ collection.listRule = "@request.auth.id != \"\" && @collection.trails.waypoints ?= id && (@collection.trails.author = @request.auth.id || @collection.trails.public = true)"
+
+ return dao.saveCollection(collection)
+})
diff --git a/db/pb_migrations/1706908432_updated_waypoints.js b/db/pb_migrations/1706908432_updated_waypoints.js
new file mode 100644
index 00000000..66d85093
--- /dev/null
+++ b/db/pb_migrations/1706908432_updated_waypoints.js
@@ -0,0 +1,18 @@
+///
+migrate((db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("goeo2ubp103rzp9")
+
+ collection.listRule = "@request.auth.id != \"\" && @collection.trails.waypoints ?= id && (@collection.trails.author = @request.auth.id || @collection.trails.public = true)"
+ collection.viewRule = "@request.auth.id != \"\" && @collection.trails.waypoints ?= id && (@collection.trails.author = @request.auth.id || @collection.trails.public = true)"
+
+ return dao.saveCollection(collection)
+}, (db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("goeo2ubp103rzp9")
+
+ collection.listRule = ""
+ collection.viewRule = ""
+
+ return dao.saveCollection(collection)
+})
diff --git a/db/pb_migrations/1706908739_updated_trails.js b/db/pb_migrations/1706908739_updated_trails.js
new file mode 100644
index 00000000..4589475f
--- /dev/null
+++ b/db/pb_migrations/1706908739_updated_trails.js
@@ -0,0 +1,16 @@
+///
+migrate((db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("e864strfxo14pm4")
+
+ collection.viewRule = ""
+
+ return dao.saveCollection(collection)
+}, (db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("e864strfxo14pm4")
+
+ collection.viewRule = "author = @request.auth.id || public = true"
+
+ return dao.saveCollection(collection)
+})
diff --git a/db/pb_migrations/1706908748_updated_trails.js b/db/pb_migrations/1706908748_updated_trails.js
new file mode 100644
index 00000000..6b2df0c0
--- /dev/null
+++ b/db/pb_migrations/1706908748_updated_trails.js
@@ -0,0 +1,16 @@
+///
+migrate((db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("e864strfxo14pm4")
+
+ collection.viewRule = "author = @request.auth.id || public = true"
+
+ return dao.saveCollection(collection)
+}, (db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("e864strfxo14pm4")
+
+ collection.viewRule = ""
+
+ return dao.saveCollection(collection)
+})
diff --git a/db/pb_migrations/1706908846_updated_waypoints.js b/db/pb_migrations/1706908846_updated_waypoints.js
new file mode 100644
index 00000000..1a67deb0
--- /dev/null
+++ b/db/pb_migrations/1706908846_updated_waypoints.js
@@ -0,0 +1,16 @@
+///
+migrate((db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("goeo2ubp103rzp9")
+
+ collection.viewRule = "@request.auth.id != \"\" && (@collection.trails.waypoints ?= id && (@collection.trails.author = @request.auth.id || @collection.trails.public = true))"
+
+ return dao.saveCollection(collection)
+}, (db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("goeo2ubp103rzp9")
+
+ collection.viewRule = "@request.auth.id != \"\" && @collection.trails.waypoints ?= id && (@collection.trails.author = @request.auth.id || @collection.trails.public = true)"
+
+ return dao.saveCollection(collection)
+})
diff --git a/db/pb_migrations/1706908854_updated_waypoints.js b/db/pb_migrations/1706908854_updated_waypoints.js
new file mode 100644
index 00000000..a3d8362a
--- /dev/null
+++ b/db/pb_migrations/1706908854_updated_waypoints.js
@@ -0,0 +1,16 @@
+///
+migrate((db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("goeo2ubp103rzp9")
+
+ collection.listRule = "@request.auth.id != \"\" && (@collection.trails.waypoints ?= id && (@collection.trails.author = @request.auth.id || @collection.trails.public = true))"
+
+ return dao.saveCollection(collection)
+}, (db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("goeo2ubp103rzp9")
+
+ collection.listRule = "@request.auth.id != \"\" && @collection.trails.waypoints ?= id && (@collection.trails.author = @request.auth.id || @collection.trails.public = true)"
+
+ return dao.saveCollection(collection)
+})
diff --git a/db/pb_migrations/1706908926_updated_waypoints.js b/db/pb_migrations/1706908926_updated_waypoints.js
new file mode 100644
index 00000000..fb599ef9
--- /dev/null
+++ b/db/pb_migrations/1706908926_updated_waypoints.js
@@ -0,0 +1,18 @@
+///
+migrate((db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("goeo2ubp103rzp9")
+
+ collection.listRule = "@request.auth.id != \"\" && @collection.trails.waypoints ?= id "
+ collection.viewRule = "@request.auth.id != \"\" && @collection.trails.waypoints ?= id "
+
+ return dao.saveCollection(collection)
+}, (db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("goeo2ubp103rzp9")
+
+ collection.listRule = "@request.auth.id != \"\" && (@collection.trails.waypoints ?= id && (@collection.trails.author = @request.auth.id || @collection.trails.public = true))"
+ collection.viewRule = "@request.auth.id != \"\" && (@collection.trails.waypoints ?= id && (@collection.trails.author = @request.auth.id || @collection.trails.public = true))"
+
+ return dao.saveCollection(collection)
+})
diff --git a/db/pb_migrations/1706908971_updated_waypoints.js b/db/pb_migrations/1706908971_updated_waypoints.js
new file mode 100644
index 00000000..ae2fde82
--- /dev/null
+++ b/db/pb_migrations/1706908971_updated_waypoints.js
@@ -0,0 +1,18 @@
+///
+migrate((db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("goeo2ubp103rzp9")
+
+ collection.listRule = "@request.auth.id != \"\" && @collection.trails.waypoints.id ?= id "
+ collection.viewRule = "@request.auth.id != \"\" && @collection.trails.waypoints.id ?= id "
+
+ return dao.saveCollection(collection)
+}, (db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("goeo2ubp103rzp9")
+
+ collection.listRule = "@request.auth.id != \"\" && @collection.trails.waypoints ?= id "
+ collection.viewRule = "@request.auth.id != \"\" && @collection.trails.waypoints ?= id "
+
+ return dao.saveCollection(collection)
+})
diff --git a/db/pb_migrations/1706909005_updated_waypoints.js b/db/pb_migrations/1706909005_updated_waypoints.js
new file mode 100644
index 00000000..f42f4dca
--- /dev/null
+++ b/db/pb_migrations/1706909005_updated_waypoints.js
@@ -0,0 +1,18 @@
+///
+migrate((db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("goeo2ubp103rzp9")
+
+ collection.listRule = "@request.auth.id != \"\" && @collection.trails.waypoints.id ?= id && (@collection.trails.author = @request.auth.id || @collection.trails.public = true)"
+ collection.viewRule = "@request.auth.id != \"\" && @collection.trails.waypoints.id ?= id && (@collection.trails.author = @request.auth.id || @collection.trails.public = true)"
+
+ return dao.saveCollection(collection)
+}, (db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("goeo2ubp103rzp9")
+
+ collection.listRule = "@request.auth.id != \"\" && @collection.trails.waypoints.id ?= id "
+ collection.viewRule = "@request.auth.id != \"\" && @collection.trails.waypoints.id ?= id "
+
+ return dao.saveCollection(collection)
+})
diff --git a/db/pb_migrations/1706909055_updated_summit_logs.js b/db/pb_migrations/1706909055_updated_summit_logs.js
new file mode 100644
index 00000000..230676b3
--- /dev/null
+++ b/db/pb_migrations/1706909055_updated_summit_logs.js
@@ -0,0 +1,22 @@
+///
+migrate((db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("dd2l9a4vxpy2ni8")
+
+ collection.listRule = "@request.auth.id != \"\" && @collection.trails.summit_logs.id ?= id && (@collection.trails.author = @request.auth.id || @collection.trails.public = true)"
+ collection.viewRule = "@request.auth.id != \"\" && @collection.trails.summit_logs.id ?= id && (@collection.trails.author = @request.auth.id || @collection.trails.public = true)"
+ collection.updateRule = "@request.auth.id != \"\" && @collection.trails.summit_logs.id ?= id && (@collection.trails.author = @request.auth.id)"
+ collection.deleteRule = "@request.auth.id != \"\" && @collection.trails.summit_logs.id ?= id && (@collection.trails.author = @request.auth.id)"
+
+ return dao.saveCollection(collection)
+}, (db) => {
+ const dao = new Dao(db)
+ const collection = dao.findCollectionByNameOrId("dd2l9a4vxpy2ni8")
+
+ collection.listRule = ""
+ collection.viewRule = ""
+ 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/src/app.d.ts b/web/src/app.d.ts
index a8fd724c..30bb06c3 100644
--- a/web/src/app.d.ts
+++ b/web/src/app.d.ts
@@ -12,6 +12,7 @@ declare global {
// interface Platform {}
interface Locals {
pb: PocketBase
+ user: AuthModel | null
}
}
}
diff --git a/web/src/hooks.client.ts b/web/src/hooks.client.ts
new file mode 100644
index 00000000..78ecc118
--- /dev/null
+++ b/web/src/hooks.client.ts
@@ -0,0 +1,8 @@
+import { pb } from '$lib/pocketbase'
+import { currentUser } from '$lib/stores/user_store'
+
+pb.authStore.loadFromCookie(document.cookie)
+pb.authStore.onChange(() => {
+ currentUser.set(pb.authStore.model)
+ document.cookie = pb.authStore.exportToCookie({ httpOnly: false })
+}, true)
\ No newline at end of file
diff --git a/web/src/hooks.server.ts b/web/src/hooks.server.ts
index 2d3fd75a..c7ef0c5f 100644
--- a/web/src/hooks.server.ts
+++ b/web/src/hooks.server.ts
@@ -1,23 +1,31 @@
-import PocketBase from 'pocketbase';
+import { createInstance } from '$lib/pocketbase'
+import type { Handle } from '@sveltejs/kit'
-export async function handle({ event, resolve }) {
- event.locals.pb = new PocketBase('http://127.0.0.1:8090');
+export const handle: Handle = async ({ event, resolve }) => {
+ const pb = createInstance()
- // load the store data from the request cookie string
- event.locals.pb.authStore.loadFromCookie(event.request.headers.get('cookie') || '');
-
- try {
- // get an up-to-date auth store state by verifying and refreshing the loaded auth model (if any)
- event.locals.pb.authStore.isValid && await event.locals.pb.collection('users').authRefresh();
- } catch (_) {
- // clear the auth store on failed refresh
- event.locals.pb.authStore.clear();
+ // load the store data from the request cookie string
+ pb.authStore.loadFromCookie(event.request.headers.get('cookie') || '')
+ try {
+ // get an up-to-date auth store state by verifying and refreshing the loaded auth model (if any)
+ if (pb.authStore.isValid) {
+ await pb.collection('users').authRefresh()
}
+ } catch (_) {
+ // clear the auth store on failed refresh
+ pb.authStore.clear()
+ }
- const response = await resolve(event);
+ event.locals.pb = pb
+ event.locals.user = pb.authStore.model
- // send back the default 'pb_auth' cookie to the client with the latest store state
- response.headers.append('set-cookie', event.locals.pb.authStore.exportToCookie());
+ const response = await resolve(event)
- return response;
+ // send back the default 'pb_auth' cookie to the client with the latest store state
+ response.headers.set(
+ 'set-cookie',
+ pb.authStore.exportToCookie({ httpOnly: false })
+ )
+
+ return response
}
\ No newline at end of file
diff --git a/web/src/lib/components/avatar.svelte b/web/src/lib/components/avatar.svelte
deleted file mode 100644
index 72e9c37d..00000000
--- a/web/src/lib/components/avatar.svelte
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/lib/components/base/dropdown.svelte b/web/src/lib/components/base/dropdown.svelte
index 5a7040ed..cafa6287 100644
--- a/web/src/lib/components/base/dropdown.svelte
+++ b/web/src/lib/components/base/dropdown.svelte
@@ -1,7 +1,8 @@
{#if label.length}
-
+
{label}
-
+
{/if}
{#if icon.length > 0}
@@ -19,10 +25,10 @@
{/if}
0}
class:bg-red-50={error.length > 0}
- type="text"
+ use:typeAction
bind:value
on:change
{placeholder}
diff --git a/web/src/lib/components/base/toast.svelte b/web/src/lib/components/base/toast.svelte
index 84c8b030..9a8fb94a 100644
--- a/web/src/lib/components/base/toast.svelte
+++ b/web/src/lib/components/base/toast.svelte
@@ -1,27 +1,44 @@
{#if $toast}
-
- {$toast.text}
+
+ {$toast.text}
+
+
+ Close modal
+
{/if}
+
+
diff --git a/web/src/lib/components/base/toggle.svelte b/web/src/lib/components/base/toggle.svelte
new file mode 100644
index 00000000..193a072e
--- /dev/null
+++ b/web/src/lib/components/base/toggle.svelte
@@ -0,0 +1,18 @@
+
+
+
+
+
+ {label}
+
+
+
+ {error}
+
diff --git a/web/src/lib/components/footer.svelte b/web/src/lib/components/footer.svelte
index 578b8d9b..807c5c35 100644
--- a/web/src/lib/components/footer.svelte
+++ b/web/src/lib/components/footer.svelte
@@ -1,5 +1,5 @@
diff --git a/web/src/lib/components/logo_text.svelte b/web/src/lib/components/logo/logo_text.svelte
similarity index 100%
rename from web/src/lib/components/logo_text.svelte
rename to web/src/lib/components/logo/logo_text.svelte
diff --git a/web/src/lib/components/logo_text_light.svelte b/web/src/lib/components/logo/logo_text_light.svelte
similarity index 100%
rename from web/src/lib/components/logo_text_light.svelte
rename to web/src/lib/components/logo/logo_text_light.svelte
diff --git a/web/src/lib/components/logo/logo_text_two_line.svelte b/web/src/lib/components/logo/logo_text_two_line.svelte
new file mode 100644
index 00000000..e26f7c26
--- /dev/null
+++ b/web/src/lib/components/logo/logo_text_two_line.svelte
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/web/src/lib/components/nav_bar.svelte b/web/src/lib/components/nav_bar.svelte
index 906f79ab..748987e4 100644
--- a/web/src/lib/components/nav_bar.svelte
+++ b/web/src/lib/components/nav_bar.svelte
@@ -1,18 +1,47 @@
-
-
- Trails
- Map
- Categories
- Favorites
-
-
+ {#if $currentUser}
+
+ Trails
+ Map
+ Categories
+ Favorites
+
+
+
New Trail
+
handleDropdownClick(e.detail)}
+ >
+
+
+
+ {:else}
+ Login
+ {/if}
diff --git a/web/src/lib/components/summit_log/summit_log_modal.svelte b/web/src/lib/components/summit_log/summit_log_modal.svelte
index 0ba136af..f73c4f5f 100644
--- a/web/src/lib/components/summit_log/summit_log_modal.svelte
+++ b/web/src/lib/components/summit_log/summit_log_modal.svelte
@@ -22,7 +22,7 @@
closeModal!();
},
});
- $: form.set(util.cloneDeep($summitLog));
+ $: form.set(util.cloneDeep($summitLog));
= writable();
+export const toast: Writable = writable();
+
+
+export function show_toast(newToast: Toast, duration: number = 3000) {
+ toast.set(newToast);
+
+ setTimeout(() => toast.set(null), duration);
+}
diff --git a/web/src/lib/stores/trail_store.ts b/web/src/lib/stores/trail_store.ts
index 18f97f32..1b3bb95f 100644
--- a/web/src/lib/stores/trail_store.ts
+++ b/web/src/lib/stores/trail_store.ts
@@ -1,11 +1,12 @@
-import { pb } from "$lib/constants";
-import { Trail } from "$lib/models/trail";
-import { getFileURL } from "$lib/util/file_util";
-import { writable, type Writable } from "svelte/store";
-import { waypoints_create, waypoints_delete } from "./waypoint_store";
-import { summit_logs_create, summit_logs_delete } from "./summit_log_store";
-import type { Waypoint } from "$lib/models/waypoint";
import type { SummitLog } from "$lib/models/summit_log";
+import { Trail } from "$lib/models/trail";
+import type { Waypoint } from "$lib/models/waypoint";
+import { pb } from "$lib/pocketbase";
+import { getFileURL } from "$lib/util/file_util";
+import { util } from "$lib/vendor/svelte-form-lib/util";
+import { writable, type Writable } from "svelte/store";
+import { summit_logs_create, summit_logs_delete, summit_logs_update } from "./summit_log_store";
+import { waypoints_create, waypoints_delete, waypoints_update } from "./waypoint_store";
export const trails: Writable = writable([])
export const trail: Writable = writable(new Trail(""));
@@ -25,7 +26,7 @@ export async function trails_index() {
}
export async function trails_show(id: string, loadGPX?: boolean) {
- const response: Trail = await pb.collection('trails').getOne(id, { expand: "category,waypoints,summit_logs" })
+ const response: Trail = await pb.collection('trails').getOne(id, { expand: "category,waypoints,summit_logs" })
if (loadGPX) {
const gpxData: string = await fetchGPX(response);
@@ -45,6 +46,11 @@ export async function trails_show(id: string, loadGPX?: boolean) {
}
export async function trails_create(trail: Trail, formData: { [key: string]: any; } | FormData) {
+
+ if (!pb.authStore.model) {
+ throw new Error("Unauthenticated");
+ ;
+ }
formData.set("category", trail.expand.category!.id);
for (const file of trail._photoFiles) {
@@ -62,6 +68,13 @@ export async function trails_create(trail: Trail, formData: { [key: string]: any
const model = await summit_logs_create(summitLog);
formData.append("summit_logs", model.id!);
}
+
+ if (!formData.get("public")) {
+ formData.set("public", 0);
+ }
+
+ formData.append("author", pb.authStore.model!.id);
+
let model = await pb
.collection("trails")
.create(formData);
@@ -93,6 +106,13 @@ export async function trails_update(oldTrail: Trail, newTrail: Trail, formData:
formData.append("waypoints+", model.id!);
}
+ for (const updatedWaypoint of waypointUpdates.updated) {
+ const model = await waypoints_update({
+ ...updatedWaypoint,
+ marker: undefined,
+ });
+ }
+
for (const deletedWaypoint of waypointUpdates.deleted) {
const success = await waypoints_delete(deletedWaypoint.id!);
}
@@ -104,6 +124,10 @@ export async function trails_update(oldTrail: Trail, newTrail: Trail, formData:
formData.append("summit_logs+", model.id!);
}
+ for (const updatedSummitLog of summitLogUpdates.updated) {
+ const model = await summit_logs_update(updatedSummitLog);
+ }
+
for (const deletedSummitLog of summitLogUpdates.deleted) {
const success = await summit_logs_delete(deletedSummitLog.id!);
}
@@ -122,6 +146,10 @@ export async function trails_update(oldTrail: Trail, newTrail: Trail, formData:
formData.delete("gpx");
}
+ if (!formData.get("public")) {
+ formData.set("public", 0);
+ }
+
const thumbnailIndex = newTrail.photos.findIndex(
(p) => p == newTrail.thumbnail,
);
@@ -137,7 +165,7 @@ export async function trails_update(oldTrail: Trail, newTrail: Trail, formData:
model = await pb
.collection("trails")
- .update(model.id!, { thumbnail: thumbnail });
+ .update(model.id!, { thumbnail: thumbnail }, { expand: "category,waypoints,summit_logs" });
trail.set(model);
@@ -145,10 +173,21 @@ export async function trails_update(oldTrail: Trail, newTrail: Trail, formData:
}
-export async function trails_delete(id: string) {
+export async function trails_delete(trail: Trail) {
+ if (trail.expand.waypoints) {
+ for (const waypoint of trail.expand.waypoints) {
+ waypoints_delete(waypoint.id!);
+ }
+ }
+ if (trail.expand.summit_logs) {
+ for (const summit_log of trail.expand.summit_logs) {
+ summit_logs_delete(summit_log.id!);
+ }
+ }
+
const success = await pb
.collection("trails")
- .delete(id);
+ .delete(trail.id!);
return success;
}
@@ -173,12 +212,22 @@ function setFileURLs(trail: Trail) {
}
function compareObjectArrays(oldArray: T[], newArray: T[]) {
- const newObjects = newArray.filter(newObj => !oldArray.find(oldObj => oldObj.id === newObj.id));
+ const newObjects = [];
+ const updatedObjects = [];
+ for (const newObj of newArray) {
+ const oldObj = oldArray.find(oldObj => oldObj.id === newObj.id)
+ if (!oldObj) {
+ newObjects.push(newObj);
+ } else if (!util.deepEqual(newObj, oldObj)) {
+ updatedObjects.push(newObj);
+ }
+ }
const deletedObjects = oldArray.filter(oldObj => !newArray.find(newObj => newObj.id === oldObj.id));
return {
added: newObjects,
- deleted: deletedObjects
+ deleted: deletedObjects,
+ updated: updatedObjects
};
}
diff --git a/web/src/lib/stores/user_store.ts b/web/src/lib/stores/user_store.ts
new file mode 100644
index 00000000..6a4cf76d
--- /dev/null
+++ b/web/src/lib/stores/user_store.ts
@@ -0,0 +1,25 @@
+import { pb } from "$lib/pocketbase";
+import { type AuthModel } from 'pocketbase';
+import { writable, type Writable } from "svelte/store";
+
+export type User = {
+ username?: string,
+ email?: string,
+ password: string,
+}
+
+export const currentUser: Writable = writable()
+
+export async function users_create(user: User) {
+ const model = await pb.collection('users').create({ ...user, passwordConfirm: user.password });
+
+ return model;
+}
+
+export async function login(user: User) {
+ const authData = await pb.collection('users').authWithPassword(user.email ?? user.username!, user.password);
+}
+
+export async function logout() {
+ pb.authStore.clear();
+}
\ No newline at end of file
diff --git a/web/src/lib/stores/waypoint_store.ts b/web/src/lib/stores/waypoint_store.ts
index 919798e4..809128d8 100644
--- a/web/src/lib/stores/waypoint_store.ts
+++ b/web/src/lib/stores/waypoint_store.ts
@@ -1,4 +1,4 @@
-import { pb } from "$lib/constants";
+import { pb } from "$lib/pocketbase";
import { Waypoint } from "$lib/models/waypoint";
import { writable, type Writable } from "svelte/store";
@@ -13,6 +13,14 @@ export async function waypoints_create(bodyParams?: { [key: string]: any; } | Fo
return model;
}
+export async function waypoints_update(updatedWaypoint: Waypoint) {
+ const model = await pb
+ .collection("waypoints")
+ .update(updatedWaypoint.id!, updatedWaypoint);
+
+ return model;
+}
+
export async function waypoints_delete(id: string) {
const success = await pb
.collection("waypoints")
diff --git a/web/src/lib/util/file_util.ts b/web/src/lib/util/file_util.ts
index 18b56c7f..494370bf 100644
--- a/web/src/lib/util/file_util.ts
+++ b/web/src/lib/util/file_util.ts
@@ -1,4 +1,4 @@
-import { pb } from "$lib/constants";
+import { pb } from "$lib/pocketbase";
import type { FileOptions } from "pocketbase";
export function getFileURL(record: { [key: string]: any; }, filename?: string, options?: FileOptions) {
diff --git a/web/src/routes/+layout.svelte b/web/src/routes/+layout.svelte
index ab49ce5c..1db1e56a 100644
--- a/web/src/routes/+layout.svelte
+++ b/web/src/routes/+layout.svelte
@@ -1,7 +1,7 @@
+
+
+
+
diff --git a/web/src/routes/register/+page.svelte b/web/src/routes/register/+page.svelte
new file mode 100644
index 00000000..a387ac0c
--- /dev/null
+++ b/web/src/routes/register/+page.svelte
@@ -0,0 +1,98 @@
+
+
+
+
+
diff --git a/web/src/routes/trail/edit/[id]/+page.svelte b/web/src/routes/trail/edit/[id]/+page.svelte
index 5bb925e7..a79d5bcf 100644
--- a/web/src/routes/trail/edit/[id]/+page.svelte
+++ b/web/src/routes/trail/edit/[id]/+page.svelte
@@ -3,6 +3,7 @@
import Select from "$lib/components/base/select.svelte";
import TextField from "$lib/components/base/text_field.svelte";
import Textarea from "$lib/components/base/textarea.svelte";
+ import Toggle from "$lib/components/base/toggle.svelte";
import PhotoCard from "$lib/components/photo_card.svelte";
import SummitLogCard from "$lib/components/summit_log/summit_log_card.svelte";
import SummitLogModal from "$lib/components/summit_log/summit_log_modal.svelte";
@@ -13,7 +14,7 @@
import { Waypoint } from "$lib/models/waypoint";
import { categories } from "$lib/stores/category_store";
import { summitLog } from "$lib/stores/summit_log_store";
- import { toast } from "$lib/stores/toast_store";
+ import { show_toast } from "$lib/stores/toast_store";
import {
trail,
trails_create,
@@ -84,9 +85,19 @@
await trails_update($trail, submittedTrail, formData);
}
- toast.set({type: "success", "icon": "check", "text": "Trail saved successfully!"})
+ show_toast({
+ type: "success",
+ icon: "check",
+ text: "Trail saved successfully.",
+ });
} catch (e) {
console.error(e);
+
+ show_toast({
+ type: "error",
+ icon: "close",
+ text: "Error saving trail.",
+ });
} finally {
loading = false;
}
@@ -304,6 +315,7 @@
e: CustomEvent<{ text: string; value: string }>,
) {
if (e.detail.value === "edit") {
+ currentSummitLog.date = format(currentSummitLog.date, "yyyy-MM-dd");
summitLog.set(currentSummitLog);
openSummitLogModal();
} else if (e.detail.value === "delete") {
@@ -375,12 +387,15 @@
label="Describe your trail"
bind:value={$form.description}
>
- ({ text: c.name, value: c }))}
- >
+ {#if $form.expand.category}
+ ({ text: c.name, value: c.id }))}
+ >
+ {/if}
+
Waypoints
-
- Category
- {$trail.expand.category.name}
-
+ {#if $trail.expand.category}
+
+ Category
+ {$trail.expand.category.name}
+
+ {/if}
{#if $trail.tags && $trail.tags.length > 0}
@@ -206,9 +233,11 @@
{/if}
{#if activeTab == 3}
- {#each $trail.expand.summit_logs ?? [] as log}
-
- {/each}
+
+ {#each $trail.expand.summit_logs ?? [] as log}
+
+ {/each}
+
{/if}
{
- await trails_show(params.id!, true)
+ try {
+ await trails_show(params.id!, true)
+ }catch(e) {
+
+ }
};
\ No newline at end of file