|
@@ -3,6 +3,8 @@
|
|
|
(:require [cljs-bean.core :as bean]
|
|
|
[dommy.core :as dom]
|
|
|
[frontend.components.container :as container]
|
|
|
+ [frontend.rum :as r]
|
|
|
+ [frontend.util :as util]
|
|
|
[logseq.shui.hooks :as hooks]
|
|
|
[logseq.shui.silkhq :as silkhq]
|
|
|
[mobile.state :as mobile-state]
|
|
@@ -23,38 +25,51 @@
|
|
|
(rum/defc left-sidebar
|
|
|
[]
|
|
|
(let [*ref (hooks/use-ref nil)
|
|
|
- [detent set-detent!] (mobile-state/use-left-sidebar-detent)
|
|
|
- [inertOutside setInertOutside!] (hooks/use-state false)]
|
|
|
+ [detent set-detent!] (r/use-atom mobile-state/*left-sidebar-detent)
|
|
|
+ [{:keys [open? _block]}] (mobile-state/use-singleton-modal)
|
|
|
+ [inertOutside setInertOutside!] (r/use-atom mobile-state/*left-sidebar-inert-outside?)]
|
|
|
+
|
|
|
(hooks/use-effect!
|
|
|
(fn []
|
|
|
- (set-detent! 1))
|
|
|
+ (when (zero? detent)
|
|
|
+ (set-detent! 1)))
|
|
|
[])
|
|
|
- (silkhq/persistent-sheet
|
|
|
- {:presented true
|
|
|
- :onPresentedChange (fn [_v])
|
|
|
- :activeDetent (if (= detent 0) 1 detent)
|
|
|
- :onActiveDetentChange (fn [_v])}
|
|
|
- (silkhq/persistent-sheet-portal
|
|
|
- (silkhq/persistent-sheet-view
|
|
|
- {:class "app-silk-sidebar-sheet-view"
|
|
|
- :contentPlacement "left"
|
|
|
- :detents ["25px" "min(90vw, 325px)"]
|
|
|
- :onTravel (fn [v]
|
|
|
- (let [{:keys [range]} (bean/->clj v)
|
|
|
- {:keys [start end]} range
|
|
|
- ref (.-current *ref)]
|
|
|
- (cond (and (= start 1) (= end 2))
|
|
|
- (do
|
|
|
- (dom/remove-class! ref "Sidebar-hidden")
|
|
|
- (setInertOutside! true))
|
|
|
|
|
|
- (and (= start 1) (= end 1))
|
|
|
- (do
|
|
|
- (dom/add-class! ref "Sidebar-hidden")
|
|
|
- (setInertOutside! false)))))
|
|
|
- :inertOutside inertOutside}
|
|
|
- (silkhq/persistent-sheet-content
|
|
|
- {:ref *ref
|
|
|
- :class "app-silk-sidebar-sheet-content Sidebar-content Sidebar-hidden"}
|
|
|
- (silkhq/persistent-sheet-expanded-content
|
|
|
- (sidebar-content))))))))
|
|
|
+ (when-not open?
|
|
|
+ (silkhq/persistent-sheet
|
|
|
+ {:presented true
|
|
|
+ :onPresentedChange (fn [_v])
|
|
|
+ :activeDetent detent
|
|
|
+ :onActiveDetentChange (fn [v]
|
|
|
+ (when (and v (not= v detent))
|
|
|
+ (set-detent! v)))}
|
|
|
+ (silkhq/persistent-sheet-portal
|
|
|
+ (silkhq/persistent-sheet-view
|
|
|
+ {:class "app-silk-sidebar-sheet-view"
|
|
|
+ :contentPlacement "left"
|
|
|
+ :detents ["25px" "min(90vw, 325px)"]
|
|
|
+ :onTravel (fn [v]
|
|
|
+ (when-not open?
|
|
|
+ (let [{:keys [range]} (bean/->clj v)
|
|
|
+ {:keys [start end]} range
|
|
|
+ ref (.-current *ref)]
|
|
|
+ (when ref
|
|
|
+ (cond (and (= start 1) (= end 2))
|
|
|
+ (do
|
|
|
+ (dom/remove-class! ref "Sidebar-hidden")
|
|
|
+ (setInertOutside! true))
|
|
|
+
|
|
|
+ (and (<= start 1) (<= end 1))
|
|
|
+ (do
|
|
|
+ (dom/add-class! ref "Sidebar-hidden")
|
|
|
+ (setInertOutside! false)))))))
|
|
|
+ :onClickOutside (fn [e]
|
|
|
+ (util/stop e)
|
|
|
+ (bean/->js {:dismiss false}))
|
|
|
+
|
|
|
+ :inertOutside inertOutside}
|
|
|
+ (silkhq/persistent-sheet-content
|
|
|
+ {:ref *ref
|
|
|
+ :class "app-silk-sidebar-sheet-content Sidebar-content Sidebar-hidden"}
|
|
|
+ (silkhq/persistent-sheet-expanded-content
|
|
|
+ (sidebar-content)))))))))
|