fix: slide reactive blocks

pull/3924/head
Tienson Qin 2022-01-16 17:44:27 +08:00
parent 06299bb8b9
commit 7b7e2e16b0
2 changed files with 36 additions and 27 deletions

View File

@ -14,7 +14,6 @@
[frontend.state :as state] [frontend.state :as state]
[frontend.ui :as ui] [frontend.ui :as ui]
[frontend.util :as util] [frontend.util :as util]
[frontend.modules.outliner.tree :as outliner-tree]
[goog.object :as gobj] [goog.object :as gobj]
[medley.core :as medley] [medley.core :as medley]
[reitit.frontend.easy :as rfe] [reitit.frontend.easy :as rfe]
@ -100,21 +99,11 @@
(page-cp repo page-name)]]) (page-cp repo page-name)]])
:page-presentation :page-presentation
(let [page-name (get-in block-data [:page :block/name]) (let [page-name (get-in block-data [:page :block/name])]
journal? (:journal? block-data)
blocks (-> (db/get-page-blocks repo page-name)
(outliner-tree/blocks->vec-tree page-name))
blocks (if journal?
(rest blocks)
blocks)]
[[:a {:href (rfe/href :page {:name page-name})} [[:a {:href (rfe/href :page {:name page-name})}
(db-model/get-page-original-name page-name)] (db-model/get-page-original-name page-name)]
[:div.ml-2.slide.mt-2 [:div.ml-2.slide.mt-2
(slide/slide {:id "slide-reveal-js" (slide/slide page-name)]])
:slide? true
:sidebar? true
:page-name page-name}
blocks)]])
["" [:span]])) ["" [:span]]))

View File

@ -6,7 +6,11 @@
[frontend.ui :as ui] [frontend.ui :as ui]
[frontend.config :as config] [frontend.config :as config]
[frontend.components.block :as block] [frontend.components.block :as block]
[clojure.string :as string])) [clojure.string :as string]
[frontend.db-mixins :as db-mixins]
[frontend.db :as db]
[frontend.modules.outliner.tree :as outliner-tree]
[frontend.state :as state]))
(defn loaded? [] (defn loaded? []
js/window.Reveal) js/window.Reveal)
@ -43,15 +47,20 @@
[config block level] [config block level]
(let [deep-level? (>= level 2) (let [deep-level? (>= level 2)
children (:block/children block) children (:block/children block)
has-children? (seq children)] has-children? (seq children)
[:section (with-properties {:key (str "slide-block-" (:block/uuid block))} block) children (when (and has-children? (not deep-level?))
[:section.relative (map (fn [block]
(block/block-container config (dissoc block :block/children)) (block-container config block (inc level))) children))
(when (and has-children? deep-level?) block-el (block/block-container config (dissoc block :block/children))
[:span.opacity-30.text-xl "Hidden children"])] dom-attrs (with-properties {:key (str "slide-block-" (:block/uuid block))} block)]
(when (and has-children? (not deep-level?)) (if has-children?
(map (fn [block] [:section dom-attrs
(block-container config block (inc level))) children))])) [:section.relative
block-el
(when deep-level?
[:span.opacity-30.text-xl "Hidden children"])]
children]
[:section dom-attrs block-el])))
(defn slide-content (defn slide-content
[loading? style config blocks] [loading? style config blocks]
@ -66,7 +75,7 @@
[:div.slides [:div.slides
(map #(block-container config % 1) blocks)]]]) (map #(block-container config % 1) blocks)]]])
(rum/defc slide < rum/reactive (rum/defc slide < rum/reactive db-mixins/query
{:did-mount (fn [state] {:did-mount (fn [state]
(if (loaded?) (if (loaded?)
(do (do
@ -80,7 +89,18 @@
(reset! *loading? false) (reset! *loading? false)
(render!))))) (render!)))))
state)} state)}
[config blocks] [page-name]
(def blocks blocks) (let [loading? (rum/react *loading?)
(let [loading? (rum/react *loading?)] page (db/entity [:block/name page-name])
journal? (:journal? page)
repo (state/get-current-repo)
blocks (-> (db/get-page-blocks repo page-name)
(outliner-tree/blocks->vec-tree page-name))
blocks (if journal?
(rest blocks)
blocks)
config {:id "slide-reveal-js"
:slide? true
:sidebar? true
:page-name page-name}]
(slide-content loading? {:height 400} config blocks))) (slide-content loading? {:height 400} config blocks)))