fix: whiteboard links

pull/11196/head
Tienson Qin 2024-04-03 18:45:25 +08:00
parent c018f1517d
commit a78c20eeed
3 changed files with 37 additions and 28 deletions

View File

@ -159,7 +159,8 @@
{:will-mount (fn [state]
(let [page-e (second (:rum/args state))
page-name (:block/name page-e)]
(when (and (db/journal-page? page-name)
(when (and page-name
(db/journal-page? page-name)
(>= (date/journal-title->int page-name)
(date/journal-title->int (date/today))))
(state/pub-event! [:journal/insert-template page-name])))

View File

@ -10,6 +10,7 @@
[frontend.db :as db]
[frontend.extensions.pdf.assets :as pdf-assets]
[frontend.handler.editor :as editor-handler]
[frontend.handler.page :as page-handler]
[frontend.handler.assets :as assets-handler]
[frontend.handler.route :as route-handler]
[frontend.handler.whiteboard :as whiteboard-handler]
@ -139,17 +140,21 @@
(state/sidebar-add-block! (state/get-current-repo)
(:db/id (model/get-page uuid))
(keyword type)))
:redirectToPage (fn [block-uuid-str]
(when (and block-uuid-str (common-util/uuid-string? block-uuid-str))
(let [block-id (parse-uuid block-uuid-str)
page (model/get-block-page (state/get-current-repo) block-id)
:redirectToPage (fn [page-name-or-uuid] ; FIXME whiteboard link refs should store UUIDs instead of page names
(when page-name-or-uuid
(let [block-id (parse-uuid page-name-or-uuid)
page (if block-id
(model/get-block-page (state/get-current-repo) block-id)
(db/get-page page-name-or-uuid))
whiteboard? (model/whiteboard-page? page)]
(when page
(if whiteboard?
(route-handler/redirect-to-page! (:block/uuid page)
(when (not= block-id (:block/uuid page))
{:block-id block-id}))
(route-handler/redirect-to-page! (model/get-redirect-page-name (:block/name page))))))))})
(p/let [new-page (when (nil? page)
(page-handler/<create! page-name-or-uuid {:redirect? false}))
page' (or new-page page)]
(route-handler/redirect-to-page! (if whiteboard?
(:block/uuid page')
(model/get-redirect-page-name (:block/name page')))
(when (and block-id (not= block-id (:block/uuid page')))
{:block-id block-id}))))))})
(defonce *transact-result (atom nil))

View File

@ -70,32 +70,35 @@
:path-params {:name (str page-name)}}))
(defn redirect-to-page!
"Must ensure `page-name` is dereferenced (not an alias), or it will create a
wrong new page with that name (#3511). page-name can be a block name or uuid"
"`page-name` can be a block uuid or name, prefer to use uuid than name when possible"
([page-name]
(redirect-to-page! page-name {}))
([page-name {:keys [anchor push click-from-recent? block-id new-whiteboard?]
:or {click-from-recent? false}}]
(when (or (uuid? page-name)
(and (string? page-name) (not (string/blank? page-name))))
;; Always skip onboarding when loading an existing whiteboard
(when-not new-whiteboard? (state/set-onboarding-whiteboard! true))
(when-let [db-id (:db/id (db/get-page page-name))]
(recent-handler/add-page-to-recent! db-id click-from-recent?))
(if (and (= (str page-name) (state/get-current-page)) block-id)
(state/focus-whiteboard-shape block-id)
(let [m (cond->
(default-page-route (str page-name))
(let [page (db/get-page page-name)
whiteboard? (db/whiteboard-page? page)]
;; Always skip onboarding when loading an existing whiteboard
(when-not new-whiteboard? (state/set-onboarding-whiteboard! true))
(when-let [db-id (:db/id page)]
(recent-handler/add-page-to-recent! db-id click-from-recent?))
(if (and whiteboard? (= (str page-name) (state/get-current-page)) block-id)
(state/focus-whiteboard-shape block-id)
(let [m (cond->
(default-page-route (str page-name))
block-id
(assoc :query-params {:block-id anchor})
block-id
(assoc :query-params (if whiteboard?
{:block-id block-id}
{:anchor (str "ls-block-" block-id)}))
anchor
(assoc :query-params {:anchor anchor})
anchor
(assoc :query-params {:anchor anchor})
(boolean? push)
(assoc :push push))]
(redirect! m))))))
(boolean? push)
(assoc :push push))]
(redirect! m)))))))
(defn get-title
[name path-params]