|
|
@@ -37,6 +37,7 @@
|
|
|
[frontend.search :as search]
|
|
|
[frontend.state :as state]
|
|
|
[frontend.ui :as ui]
|
|
|
+ [logseq.shui.ui :as shui-ui]
|
|
|
[frontend.util :as util]
|
|
|
[frontend.util.text :as text-util]
|
|
|
[goog.object :as gobj]
|
|
|
@@ -459,114 +460,119 @@
|
|
|
(db-async/<get-block (state/get-current-repo) page-name')
|
|
|
(assoc state ::page-name page-name')))}
|
|
|
[state {:keys [repo page-name preview? sidebar?] :as option}]
|
|
|
- (when-not (state/sub-async-query-loading (::page-name state))
|
|
|
+ (let [loading? (state/sub-async-query-loading (::page-name state))]
|
|
|
(when-let [path-page-name (get-path-page-name state page-name)]
|
|
|
(let [current-repo (state/sub :git/current-repo)
|
|
|
repo (or repo current-repo)
|
|
|
page-name (util/page-name-sanity-lc path-page-name)
|
|
|
- page (get-page-entity page-name)
|
|
|
- block-id (:block/uuid page)
|
|
|
- block? (some? (:block/page page))
|
|
|
- journal? (db/journal-page? page-name)
|
|
|
- db-based? (config/db-based-graph? repo)
|
|
|
- fmt-journal? (boolean (date/journal-title->int page-name))
|
|
|
- whiteboard? (:whiteboard? option) ;; in a whiteboard portal shape?
|
|
|
- whiteboard-page? (model/whiteboard-page? page-name) ;; is this page a whiteboard?
|
|
|
- route-page-name path-page-name
|
|
|
- page-name (:block/name page)
|
|
|
- page-original-name (:block/original-name page)
|
|
|
- title (or page-original-name page-name)
|
|
|
- today? (and
|
|
|
- journal?
|
|
|
- (= page-name (util/page-name-sanity-lc (date/journal-name))))
|
|
|
- *control-show? (::control-show? state)
|
|
|
- *all-collapsed? (::all-collapsed? state)
|
|
|
- *current-block-page (::current-page state)
|
|
|
- block-or-whiteboard? (or block? whiteboard?)
|
|
|
- home? (= :home (state/get-current-route))]
|
|
|
- (when (or page-name block-or-whiteboard?)
|
|
|
- [:div.flex-1.page.relative
|
|
|
- (merge (if (seq (:block/tags page))
|
|
|
- (let [page-names (model/get-page-names-by-ids (map :db/id (:block/tags page)))]
|
|
|
- {:data-page-tags (text-util/build-data-value page-names)})
|
|
|
- {})
|
|
|
-
|
|
|
- {:key path-page-name
|
|
|
- :class (util/classnames [{:is-journals (or journal? fmt-journal?)}])})
|
|
|
-
|
|
|
- (if (and whiteboard-page? (not sidebar?))
|
|
|
- [:div ((state/get-component :whiteboard/tldraw-preview) page-name)] ;; FIXME: this is not reactive
|
|
|
- [:div.relative
|
|
|
- (when (and (not sidebar?) (not block?))
|
|
|
- [:div.flex.flex-row.space-between
|
|
|
- (when (or (mobile-util/native-platform?) (util/mobile?))
|
|
|
- [:div.flex.flex-row.pr-2
|
|
|
- {:style {:margin-left -15}
|
|
|
- :on-mouse-over (fn [e]
|
|
|
- (page-mouse-over e *control-show? *all-collapsed?))
|
|
|
- :on-mouse-leave (fn [e]
|
|
|
- (page-mouse-leave e *control-show?))}
|
|
|
- (page-blocks-collapse-control title *control-show? *all-collapsed?)])
|
|
|
- (let [original-name (:block/original-name (db/entity [:block/name (util/page-name-sanity-lc page-name)]))]
|
|
|
- (when (and (not whiteboard?) original-name)
|
|
|
- (page-title page-name {:journal? journal?
|
|
|
- :fmt-journal? fmt-journal?
|
|
|
- :preview? preview?
|
|
|
- :*hover? (::hover-title? state)})))
|
|
|
- (when (not config/publishing?)
|
|
|
- (when config/lsp-enabled?
|
|
|
- [:div.flex.flex-row
|
|
|
- (plugins/hook-ui-slot :page-head-actions-slotted nil)
|
|
|
- (plugins/hook-ui-items :pagebar)]))])
|
|
|
-
|
|
|
- (cond
|
|
|
- (and db-based? (not block?))
|
|
|
- [:div.pb-4
|
|
|
- (db-page/page-info page (::hover-title? state))]
|
|
|
-
|
|
|
- (and (not db-based?) (not block?))
|
|
|
- [:div.pb-4])
|
|
|
-
|
|
|
- [:div
|
|
|
- (when (and block? (not sidebar?) (not whiteboard?))
|
|
|
- (let [config {:id "block-parent"
|
|
|
- :block? true}]
|
|
|
- [:div.mb-4
|
|
|
- (component-block/breadcrumb config repo block-id {:level-limit 3})]))
|
|
|
-
|
|
|
- (when (and db-based? (not block?) (not preview?))
|
|
|
- (db-page/page-properties-react page {:configure? false}))
|
|
|
-
|
|
|
- ;; blocks
|
|
|
- (let [_ (and block? page (reset! *current-block-page (:block/name (:block/page page))))
|
|
|
- _ (when (and block? (not page))
|
|
|
- (route-handler/redirect-to-page! @*current-block-page))]
|
|
|
- (page-blocks-cp repo page {:sidebar? sidebar? :whiteboard? whiteboard?}))]])
|
|
|
-
|
|
|
- (when today?
|
|
|
- (today-queries repo today? sidebar?))
|
|
|
-
|
|
|
- (when today?
|
|
|
- (scheduled/scheduled-and-deadlines page-name))
|
|
|
-
|
|
|
- (when-not block?
|
|
|
- (tagged-pages repo page-name page-original-name))
|
|
|
+ page (get-page-entity page-name)]
|
|
|
+ (when-not (and loading? (nil? page))
|
|
|
+ (let [block-id (:block/uuid page)
|
|
|
+ block? (some? (:block/page page))
|
|
|
+ journal? (db/journal-page? page-name)
|
|
|
+ db-based? (config/db-based-graph? repo)
|
|
|
+ fmt-journal? (boolean (date/journal-title->int page-name))
|
|
|
+ whiteboard? (:whiteboard? option) ;; in a whiteboard portal shape?
|
|
|
+ whiteboard-page? (model/whiteboard-page? page-name) ;; is this page a whiteboard?
|
|
|
+ route-page-name path-page-name
|
|
|
+ page-name (:block/name page)
|
|
|
+ page-original-name (:block/original-name page)
|
|
|
+ title (or page-original-name page-name)
|
|
|
+ today? (and
|
|
|
+ journal?
|
|
|
+ (= page-name (util/page-name-sanity-lc (date/journal-name))))
|
|
|
+ *control-show? (::control-show? state)
|
|
|
+ *all-collapsed? (::all-collapsed? state)
|
|
|
+ *current-block-page (::current-page state)
|
|
|
+ block-or-whiteboard? (or block? whiteboard?)
|
|
|
+ home? (= :home (state/get-current-route))]
|
|
|
+ (when (or page-name block-or-whiteboard?)
|
|
|
+ [:div.flex-1.page.relative
|
|
|
+ (merge (if (seq (:block/tags page))
|
|
|
+ (let [page-names (model/get-page-names-by-ids (map :db/id (:block/tags page)))]
|
|
|
+ {:data-page-tags (text-util/build-data-value page-names)})
|
|
|
+ {})
|
|
|
+
|
|
|
+ {:key path-page-name
|
|
|
+ :class (util/classnames [{:is-journals (or journal? fmt-journal?)}])})
|
|
|
+
|
|
|
+ (if (and whiteboard-page? (not sidebar?))
|
|
|
+ [:div ((state/get-component :whiteboard/tldraw-preview) page-name)] ;; FIXME: this is not reactive
|
|
|
+ [:div.relative
|
|
|
+ (when (and (not sidebar?) (not block?))
|
|
|
+ [:div.flex.flex-row.space-between
|
|
|
+ (when (or (mobile-util/native-platform?) (util/mobile?))
|
|
|
+ [:div.flex.flex-row.pr-2
|
|
|
+ {:style {:margin-left -15}
|
|
|
+ :on-mouse-over (fn [e]
|
|
|
+ (page-mouse-over e *control-show? *all-collapsed?))
|
|
|
+ :on-mouse-leave (fn [e]
|
|
|
+ (page-mouse-leave e *control-show?))}
|
|
|
+ (page-blocks-collapse-control title *control-show? *all-collapsed?)])
|
|
|
+ (let [original-name (:block/original-name (db/entity [:block/name (util/page-name-sanity-lc page-name)]))]
|
|
|
+ (when (and (not whiteboard?) original-name)
|
|
|
+ (page-title page-name {:journal? journal?
|
|
|
+ :fmt-journal? fmt-journal?
|
|
|
+ :preview? preview?
|
|
|
+ :*hover? (::hover-title? state)})))
|
|
|
+ (when (not config/publishing?)
|
|
|
+ (when config/lsp-enabled?
|
|
|
+ [:div.flex.flex-row
|
|
|
+ (plugins/hook-ui-slot :page-head-actions-slotted nil)
|
|
|
+ (plugins/hook-ui-items :pagebar)]))])
|
|
|
+
|
|
|
+ (cond
|
|
|
+ (and db-based? (not block?))
|
|
|
+ [:div.pb-4
|
|
|
+ (db-page/page-info page (::hover-title? state))]
|
|
|
+
|
|
|
+ (and (not db-based?) (not block?))
|
|
|
+ [:div.pb-4])
|
|
|
+
|
|
|
+ [:div
|
|
|
+ (when (and block? (not sidebar?) (not whiteboard?))
|
|
|
+ (let [config {:id "block-parent"
|
|
|
+ :block? true}]
|
|
|
+ [:div.mb-4
|
|
|
+ (component-block/breadcrumb config repo block-id {:level-limit 3})]))
|
|
|
+
|
|
|
+ (when (and db-based? (not block?) (not preview?))
|
|
|
+ (db-page/page-properties-react page {:configure? false}))
|
|
|
+
|
|
|
+ ;; blocks
|
|
|
+ (if loading?
|
|
|
+ [:div.space-y-2
|
|
|
+ (shui-ui/skeleton {:class "h-6 w-full"})
|
|
|
+ (shui-ui/skeleton {:class "h-6 w-full"})]
|
|
|
+ (let [_ (and block? page (reset! *current-block-page (:block/name (:block/page page))))
|
|
|
+ _ (when (and block? (not page))
|
|
|
+ (route-handler/redirect-to-page! @*current-block-page))]
|
|
|
+ (page-blocks-cp repo page {:sidebar? sidebar? :whiteboard? whiteboard?})))]])
|
|
|
+
|
|
|
+ (when today?
|
|
|
+ (today-queries repo today? sidebar?))
|
|
|
+
|
|
|
+ (when today?
|
|
|
+ (scheduled/scheduled-and-deadlines page-name))
|
|
|
+
|
|
|
+ (when-not block?
|
|
|
+ (tagged-pages repo page-name page-original-name))
|
|
|
|
|
|
;; referenced blocks
|
|
|
- (when-not block-or-whiteboard?
|
|
|
- (when page
|
|
|
- [:div {:key "page-references"}
|
|
|
- (rum/with-key
|
|
|
- (reference/references route-page-name)
|
|
|
- (str route-page-name "-refs"))]))
|
|
|
-
|
|
|
- (when-not block-or-whiteboard?
|
|
|
- (when (not journal?)
|
|
|
- (hierarchy/structures route-page-name)))
|
|
|
-
|
|
|
- (when-not (or block-or-whiteboard? sidebar? home?)
|
|
|
- [:div {:key "page-unlinked-references"}
|
|
|
- (reference/unlinked-references route-page-name)])])))))
|
|
|
+ (when-not block-or-whiteboard?
|
|
|
+ (when page
|
|
|
+ [:div {:key "page-references"}
|
|
|
+ (rum/with-key
|
|
|
+ (reference/references route-page-name)
|
|
|
+ (str route-page-name "-refs"))]))
|
|
|
+
|
|
|
+ (when-not block-or-whiteboard?
|
|
|
+ (when (not journal?)
|
|
|
+ (hierarchy/structures route-page-name)))
|
|
|
+
|
|
|
+ (when-not (or block-or-whiteboard? sidebar? home?)
|
|
|
+ [:div {:key "page-unlinked-references"}
|
|
|
+ (reference/unlinked-references route-page-name)])])))))))
|
|
|
|
|
|
(rum/defcs page < rum/static
|
|
|
[state option]
|