fix: parse compatibility graph web urls

This commit is contained in:
Tienson Qin
2026-05-25 18:40:49 +08:00
parent ae2ba48c81
commit 25e12de14f
3 changed files with 44 additions and 0 deletions

View File

@@ -106,11 +106,17 @@
hash-url (hash-route-url parsed-url)
graph-id (or (some-> hash-url .-searchParams (.get "graph-id"))
(.get (.-searchParams parsed-url) "graph-id"))
graph-identifier (when (string/blank? graph-id)
(or (some-> hash-url .-searchParams (.get "graph"))
(.get (.-searchParams parsed-url) "graph")))
route (or (some-> hash-url .-pathname path-parts route-from-path-parts)
(route-from-path-parts (path-parts (.-pathname parsed-url))))]
(cond-> {}
(not (string/blank? graph-id))
(assoc :graph-id graph-id)
(not (string/blank? graph-identifier))
(assoc :graph-identifier graph-identifier)
route
(assoc :route route))))

View File

@@ -3,6 +3,7 @@
[frontend.common.idb :as idb]
[frontend.handler.graph]
[frontend.state :as state]
[frontend.util.url :as url-util]
[logseq.common.graph-registry :as graph-registry]
[promesa.core :as p]))
@@ -78,6 +79,24 @@
:graph-id "tab-uuid"}
"logseq_db_current"))))))
(deftest resolve-startup-repo-prefers-compatibility-url-graph-test
(let [resolve-f (some-> (resolve 'frontend.handler.graph/resolve-startup-repo) deref)]
(is (fn? resolve-f) "Startup repo resolver should exist")
(when resolve-f
(is (= "logseq_db_work"
(resolve-f [{:repo "logseq_db_work"
:graph-name "work"
:graph-id "work-uuid"}
{:repo "logseq_db_tab"
:graph-name "tab"
:graph-id "tab-uuid"}]
[{:url "logseq_db_current"}]
(url-util/parse-web-url-target
"https://logseq.com/#/page/Home?graph=work")
{:repo "logseq_db_tab"
:graph-id "tab-uuid"}
"logseq_db_current"))))))
(deftest resolve-startup-repo-uses-tab-graph-id-before-global-current-test
(let [resolve-f (some-> (resolve 'frontend.handler.graph/resolve-startup-repo) deref)]
(is (fn? resolve-f) "Startup repo resolver should exist")

View File

@@ -36,3 +36,22 @@
:route {:to :page
:page-id "00000001-2026-0520-0000-000000000000"}}
(parse-f "http://localhost:3001/#/page/00000001-2026-0520-0000-000000000000?graph-id=dc4b7cbd-65f7-4e76-9591-dcb3d14f11cf"))))))
(deftest parse-web-url-target-reads-compatibility-graph-identifier-test
(let [parse-f (some-> (resolve 'frontend.util.url/parse-web-url-target) deref)]
(is (fn? parse-f) "Web URL target parser should exist")
(when parse-f
(is (= {:graph-identifier "work"}
(parse-f "https://logseq.com/#/?graph=work")))
(is (= {:graph-identifier "work"
:route {:to :page
:page-id "Home"}}
(parse-f "https://logseq.com/#/page/Home?graph=work")))
(is (= {:graph-identifier "work"
:route {:to :page
:page-id "Home"}}
(parse-f "https://logseq.com/?graph=work#/page/Home")))
(is (= {:graph-id "remote-graph-uuid"
:route {:to :page
:page-id "Home"}}
(parse-f "https://logseq.com/#/page/Home?graph=work&graph-id=remote-graph-uuid"))))))