From b64e5db68bbef2258bb91ce0699e06acdb264cbd Mon Sep 17 00:00:00 2001 From: Hossein Mehrabi Date: Fri, 2 Jun 2023 16:43:03 +0330 Subject: [PATCH] fix: fix scrolling issues, glitchy navbar, and scroll down button position --- .../components/mdx/HeroInfo/HeroInfo.tsx | 38 ++----------------- .../client/components/mdx/HeroModel/index.tsx | 29 +++++++++++++- .../ScrollToBottom/ScrollToBottom.tsx | 22 ++++++----- .../{Button => mdx}/ScrollToBottom/index.ts | 0 .../ScrollToBottom/styles.module.scss | 4 ++ .../src/client/components/mdx/index.ts | 1 + 6 files changed, 49 insertions(+), 45 deletions(-) rename packages/logos-docusaurus-theme/src/client/components/{Button => mdx}/ScrollToBottom/ScrollToBottom.tsx (57%) rename packages/logos-docusaurus-theme/src/client/components/{Button => mdx}/ScrollToBottom/index.ts (100%) rename packages/logos-docusaurus-theme/src/client/components/{Button => mdx}/ScrollToBottom/styles.module.scss (59%) diff --git a/packages/logos-docusaurus-theme/src/client/components/mdx/HeroInfo/HeroInfo.tsx b/packages/logos-docusaurus-theme/src/client/components/mdx/HeroInfo/HeroInfo.tsx index 07ac44a..a76ed20 100644 --- a/packages/logos-docusaurus-theme/src/client/components/mdx/HeroInfo/HeroInfo.tsx +++ b/packages/logos-docusaurus-theme/src/client/components/mdx/HeroInfo/HeroInfo.tsx @@ -1,10 +1,8 @@ import clsx from 'clsx' -import React, { PropsWithChildren, useEffect, useRef, useState } from 'react' +import React, { PropsWithChildren } from 'react' import { useHero } from '../Hero/Hero.context' +import { ScrollToBottom } from '../index' import './HeroInfo.scss' -import { useScrollY } from '../../../lib/useScrollY' -import { calcScrollThreshold, mapFloat } from '../../../lib/ui.utils' -import { ScrollToBottom } from '@logos-theme/components/Button/ScrollToBottom' export type HeroInfoProps = PropsWithChildren< React.HTMLAttributes @@ -12,9 +10,6 @@ export type HeroInfoProps = PropsWithChildren< size?: 'medium' | 'large' | 'small' } -const calcMaxOffsetY = () => { - return window.innerHeight * 0.1 -} export const HeroInfo: React.FC = ({ size: sizeProp, className, @@ -23,43 +18,16 @@ export const HeroInfo: React.FC = ({ }) => { const ctx = useHero() const size = sizeProp ? sizeProp : ctx ? ctx.size : 'medium' - const scrollY = useScrollY() - const ref = useRef() - const [initialMarginBottom, setInitialMarginBottom] = useState( - null, - ) - - const getMarginBottom = () => { - const offsetY = mapFloat( - scrollY, - 0, - calcScrollThreshold(), - 0, - calcMaxOffsetY(), - ) - return initialMarginBottom ? initialMarginBottom - offsetY : 0 - } - - useEffect(() => { - if (typeof window === 'undefined' || !(ref && ref.current)) return - setInitialMarginBottom( - parseFloat(window.getComputedStyle(ref.current).marginBottom), - ) - }, []) return ( <>
{children}
- + ) } diff --git a/packages/logos-docusaurus-theme/src/client/components/mdx/HeroModel/index.tsx b/packages/logos-docusaurus-theme/src/client/components/mdx/HeroModel/index.tsx index ce6d0e7..353ac83 100644 --- a/packages/logos-docusaurus-theme/src/client/components/mdx/HeroModel/index.tsx +++ b/packages/logos-docusaurus-theme/src/client/components/mdx/HeroModel/index.tsx @@ -1,9 +1,36 @@ import React from 'react' +import { calcScrollThreshold, mapFloat } from '../../../lib/ui.utils' +import { useScrollY } from '../../../lib/useScrollY' import { HeroModel as Model, HeroModelProps } from './HeroModel' +const calcMaxOffsetY = () => { + return window.innerHeight * 0.1 +} + export const HeroModel: React.FC = (props) => { if (typeof window === 'undefined') return null - return + + const scrollY = useScrollY() + const offsetY = mapFloat( + scrollY, + 0, + calcScrollThreshold(), + 0, + calcMaxOffsetY(), + ) + + return ( +
+ +
+ ) // return ( // // {() => { diff --git a/packages/logos-docusaurus-theme/src/client/components/Button/ScrollToBottom/ScrollToBottom.tsx b/packages/logos-docusaurus-theme/src/client/components/mdx/ScrollToBottom/ScrollToBottom.tsx similarity index 57% rename from packages/logos-docusaurus-theme/src/client/components/Button/ScrollToBottom/ScrollToBottom.tsx rename to packages/logos-docusaurus-theme/src/client/components/mdx/ScrollToBottom/ScrollToBottom.tsx index e40a855..58d923f 100644 --- a/packages/logos-docusaurus-theme/src/client/components/Button/ScrollToBottom/ScrollToBottom.tsx +++ b/packages/logos-docusaurus-theme/src/client/components/mdx/ScrollToBottom/ScrollToBottom.tsx @@ -3,20 +3,25 @@ import clsx from 'clsx' import React, { HTMLProps } from 'react' import styles from './styles.module.scss' -type TProps = { - bottom: number -} +type TProps = {} export const ScrollToBottom = ( props: TProps & HTMLProps, ): JSX.Element => { - const { children, className, bottom, ...rest } = props + const { children, className, ...rest } = props const handleScrollToBottom = () => { - window.scrollTo({ - top: document.body.scrollHeight, - behavior: 'smooth', - }) + const article = document.querySelector('.main-wrapper article') + const secondElement = article?.children?.[1] + + if (!secondElement) + return void window.scrollTo({ + top: document.body.scrollHeight, + behavior: 'smooth', + }) + ;(secondElement as HTMLElement)?.scrollIntoView?.({ behavior: 'smooth' }) + + return } return ( @@ -24,7 +29,6 @@ export const ScrollToBottom = ( onClick={handleScrollToBottom} size="small" className={clsx(styles.scrollToBottom, className)} - style={{ bottom: -(bottom - 16) }} {...(rest as any)} > diff --git a/packages/logos-docusaurus-theme/src/client/components/Button/ScrollToBottom/index.ts b/packages/logos-docusaurus-theme/src/client/components/mdx/ScrollToBottom/index.ts similarity index 100% rename from packages/logos-docusaurus-theme/src/client/components/Button/ScrollToBottom/index.ts rename to packages/logos-docusaurus-theme/src/client/components/mdx/ScrollToBottom/index.ts diff --git a/packages/logos-docusaurus-theme/src/client/components/Button/ScrollToBottom/styles.module.scss b/packages/logos-docusaurus-theme/src/client/components/mdx/ScrollToBottom/styles.module.scss similarity index 59% rename from packages/logos-docusaurus-theme/src/client/components/Button/ScrollToBottom/styles.module.scss rename to packages/logos-docusaurus-theme/src/client/components/mdx/ScrollToBottom/styles.module.scss index 69731c1..58e043c 100644 --- a/packages/logos-docusaurus-theme/src/client/components/Button/ScrollToBottom/styles.module.scss +++ b/packages/logos-docusaurus-theme/src/client/components/mdx/ScrollToBottom/styles.module.scss @@ -4,4 +4,8 @@ z-index: 100; position: absolute; background: rgb(var(--lsd-surface-primary)) !important; + + bottom: calc( + var(--ifm-navbar-height) + var(--logos-hero-info-height) - 100vh + 16px + ); } diff --git a/packages/logos-docusaurus-theme/src/client/components/mdx/index.ts b/packages/logos-docusaurus-theme/src/client/components/mdx/index.ts index 7d0f06c..e5b8e6f 100644 --- a/packages/logos-docusaurus-theme/src/client/components/mdx/index.ts +++ b/packages/logos-docusaurus-theme/src/client/components/mdx/index.ts @@ -9,4 +9,5 @@ export * from './HeroDescription' export * from './HeroInfo' export * from './HeroModel' export * from './HeroTitle' +export * from './ScrollToBottom' export * from './Showcase'