From 4c84589da416b2d50e7b5e7327c75c54ca045abb Mon Sep 17 00:00:00 2001 From: charlie Date: Thu, 1 Sep 2022 17:52:57 +0800 Subject: [PATCH] improve(ui): nested scroll container for left sidebar dynamic modules --- src/main/frontend/components/sidebar.cljs | 24 +++++++++++++++++------ src/main/frontend/components/sidebar.css | 14 ++++++++++++- 2 files changed, 31 insertions(+), 7 deletions(-) diff --git a/src/main/frontend/components/sidebar.cljs b/src/main/frontend/components/sidebar.cljs index 9ceae84d0..f0b8d7749 100644 --- a/src/main/frontend/components/sidebar.cljs +++ b/src/main/frontend/components/sidebar.cljs @@ -208,7 +208,7 @@ href :href}] [:div {:class class} - [:a.item.group.flex.items-center.px-2.py-2.text-sm.font-medium.rounded-md + [:a.item.group.flex.items-center.text-sm.font-medium.rounded-md {:on-click on-click-handler :class (when active "active") :href href} @@ -218,7 +218,14 @@ (rum/defc sidebar-nav [route-match close-modal-fn left-sidebar-open? srs-open?] (let [default-home (get-default-home-if-valid) - route-name (get-in route-match [:data :name])] + route-name (get-in route-match [:data :name]) + on-contents-scroll #(when-let [^js el (.-target %)] + (let [top (.-scrollTop el) + cls (.-classList el) + cls' "is-scrolled"] + (if (> top 2) + (.add cls cls') + (.remove cls cls'))))] [:div.left-sidebar-inner.flex-1.flex.flex-col.min-h-0 {:on-click #(when-let [^js target (and (util/sm-breakpoint?) (.-target %))] @@ -226,14 +233,15 @@ [".favorites .bd" ".recent .bd" ".dropdown-wrapper" ".nav-header"]) (close-modal-fn)))} - [:div.flex.flex-col.pb-4.wrap.gap-4.relative + [:div.flex.flex-col.wrap.gap-1.relative (when (mobile-util/native-platform?) [:div.fake-bar.absolute [:button {:on-click state/toggle-left-sidebar!} (ui/icon "menu-2" {:style {:fontSize ui/icon-size}})]]) - [:nav.px-4.flex.flex-col.gap-1 {:aria-label "Navigation menu"} + [:nav.px-4.flex.flex-col.gap-1 + {:aria-label "Navigation menu"} (repo/repos-dropdown) [:div.nav-header.flex.gap-1.flex-col @@ -276,9 +284,13 @@ :active (and (not srs-open?) (= route-name :all-pages)) :icon "files"})]] - (when left-sidebar-open? (favorites t)) + [:div.nav-contents-container.flex.flex-col.gap-1.pt-1 + {:on-scroll on-contents-scroll} + (when left-sidebar-open? + (favorites t)) - (when (and left-sidebar-open? (not config/publishing?)) (recent-pages t)) + (when (and left-sidebar-open? (not config/publishing?)) + (recent-pages t))] [:footer.px-2 {:class "new-page"} (when-not config/publishing? diff --git a/src/main/frontend/components/sidebar.css b/src/main/frontend/components/sidebar.css index 597e43db4..d8ab6ffcc 100644 --- a/src/main/frontend/components/sidebar.css +++ b/src/main/frontend/components/sidebar.css @@ -88,7 +88,6 @@ > .wrap { height: calc(100vh - var(--ls-headbar-inner-top-padding) - 50px); margin-top: 40px; - padding-bottom: 60px; width: 100%; > .fake-bar { @@ -123,6 +122,8 @@ } a.item { + @apply px-2 py-2 sm:py-1.5; + user-select: none; transition: background-color .3s; @@ -146,6 +147,17 @@ } } + .nav-contents-container { + @apply h-full flex-grow-0 flex-grow-0 + overflow-x-hidden overflow-y-auto; + + padding-bottom: 60px; + + &.is-scrolled { + border-top: 1px solid var(--ls-tertiary-border-color); + } + } + .nav-content-item { &-inner { border-radius: 8px;