From a9466a84acbccfa2658238153dcfbc21b275a48d Mon Sep 17 00:00:00 2001 From: Alex Andreev Date: Mon, 15 Mar 2021 10:58:41 +0300 Subject: [PATCH] Fix intersection observer root along with layout refactoring Signed-off-by: Alex Andreev --- .../components/+extensions/extensions.tsx | 2 +- .../components/+preferences/preferences.tsx | 3 +- .../components/layout/page-layout.scss | 52 +++++++++---------- .../components/layout/page-layout.tsx | 21 ++++---- .../components/scroll-spy/scroll-spy.tsx | 5 +- 5 files changed, 42 insertions(+), 41 deletions(-) diff --git a/src/renderer/components/+extensions/extensions.tsx b/src/renderer/components/+extensions/extensions.tsx index f30168145a..c14a6988b6 100644 --- a/src/renderer/components/+extensions/extensions.tsx +++ b/src/renderer/components/+extensions/extensions.tsx @@ -487,7 +487,7 @@ export class Extensions extends React.Component { return ( - +

Lens Extensions

Add new features and functionality via Lens Extensions. diff --git a/src/renderer/components/+preferences/preferences.tsx b/src/renderer/components/+preferences/preferences.tsx index 9fe45ef420..1681ebf596 100644 --- a/src/renderer/components/+preferences/preferences.tsx +++ b/src/renderer/components/+preferences/preferences.tsx @@ -32,7 +32,6 @@ export class Preferences extends React.Component { render() { const { preferences } = userStore; const header =

Preferences

; - const rootMargin = "80px 0px -80%"; let defaultShell = process.env.SHELL || process.env.PTYSHELL; if (!defaultShell) { @@ -44,7 +43,7 @@ export class Preferences extends React.Component { } return ( - ( + ( .content-scrollable-area { - > .content-wrapper { - grid-template-columns: var(--nav-width) 1fr; + grid-template-columns: var(--nav-column-width) 1fr; + + > .content { + > * { + width: 100%; + padding-left: 1px; // Fix visual content crop + padding-right: calc(var(--nav-column-width) - var(--nav-width)); } } } @@ -47,33 +51,29 @@ padding: var(--spacing); background-color: var(--layoutTabsBackground); height: var(--header-height); + grid-column-start: 1; + grid-column-end: 4; + margin-bottom: 24px; } - > .content-scrollable-area { + > .content-navigation { + display: flex; + justify-content: flex-end; + overflow-y: auto; + + ul.TreeView { + width: var(--nav-width); + padding-right: 24px; + } + } + + > .content { overflow: auto; - > .content-wrapper { - display: grid; - grid-template-columns: none; - column-gap: 24px; + > * { width: var(--width); - min-width: var(--min-width); - max-width: var(--max-width); - padding: var(--wrapper-padding); margin: 0 auto; - - .content-navigation { - > ul { - position: fixed; - width: var(--nav-width); - height: calc(100vh - var(--header-height) - var(--wrapper-padding) - var(--bottom-bar-height)); - overflow-y: auto; - } - - .is-mac & > ul { - height: calc(100vh - var(--header-height-mac) - var(--wrapper-padding) - var(--bottom-bar-height)); - } - } + padding-bottom: 24px; } } diff --git a/src/renderer/components/layout/page-layout.tsx b/src/renderer/components/layout/page-layout.tsx index cbdb7ef434..8ffc2a8f4c 100644 --- a/src/renderer/components/layout/page-layout.tsx +++ b/src/renderer/components/layout/page-layout.tsx @@ -75,16 +75,17 @@ export class PageLayout extends React.Component { /> )}
-
-
- { navigation && ( - - )} -
- {children} -
+ { navigation && ( + + )} +
+
+ {children}
diff --git a/src/renderer/components/scroll-spy/scroll-spy.tsx b/src/renderer/components/scroll-spy/scroll-spy.tsx index 4264c80f31..565eabc9ba 100644 --- a/src/renderer/components/scroll-spy/scroll-spy.tsx +++ b/src/renderer/components/scroll-spy/scroll-spy.tsx @@ -5,10 +5,11 @@ import { NavigationTree } from "../tree-view"; interface Props extends React.DOMAttributes { render: (data: NavigationTree[]) => JSX.Element + htmlFor?: string // Id of the element to put observers on rootMargin?: string // https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API#creating_an_intersection_observer } -export const ScrollSpy = observer(({ render, rootMargin = "0px 0px -80%" }: Props) => { +export const ScrollSpy = observer(({ render, htmlFor, rootMargin = "0px 0px -100% 0px" }: Props) => { const parent = useRef(); const sections = useRef>(); const [tree, setTree] = useState([]); @@ -64,7 +65,7 @@ export const ScrollSpy = observer(({ render, rootMargin = "0px 0px -80%" }: Prop const observeSections = () => { const options: IntersectionObserverInit = { - threshold: [0], + root: document.getElementById(htmlFor) || getSectionsParentElement(), rootMargin };