From feb25dfe8e0883213d1a202b436a17fb066c35f2 Mon Sep 17 00:00:00 2001 From: Toby Brown Date: Mon, 22 Jan 2024 18:28:20 +0000 Subject: [PATCH] we're takin' shape! --- components/slack/arrows.js | 43 ++++++++++++++++++++++++++++--- components/slack/preventScroll.js | 32 +++++++++++++++++++++++ components/slack/project.js | 1 - pages/slack.js | 6 ++++- 4 files changed, 77 insertions(+), 5 deletions(-) create mode 100644 components/slack/preventScroll.js diff --git a/components/slack/arrows.js b/components/slack/arrows.js index 2b8c329d..11983879 100644 --- a/components/slack/arrows.js +++ b/components/slack/arrows.js @@ -1,21 +1,58 @@ import { VisibilityContext } from 'react-horizontal-scrolling-menu' import { useContext } from 'react' +import Icon from '@hackclub/icons' +import { Link } from 'theme-ui' export function LeftArrow() { const { scrollPrev } = useContext(VisibilityContext) - return + return ( + scrollPrev()} + sx={{ + borderRadius: 100, + boxShadow: 'none', + backgroundColor: 'black', + padding: '8px', + cursor: 'pointer', + placeItems: 'center', + display: 'flex', + mr: 2 + }} + > + + + ) } export function RightArrow() { const { scrollNext } = useContext(VisibilityContext) - return + return ( + scrollNext()} + sx={{ + borderRadius: 100, + boxShadow: 'none', + backgroundColor: 'black', + padding: '8px', + cursor: 'pointer', + placeItems: 'center', + display: 'flex' + }} + > + + + ) } export default function Arrows() { return (
diff --git a/components/slack/preventScroll.js b/components/slack/preventScroll.js new file mode 100644 index 00000000..fcab0744 --- /dev/null +++ b/components/slack/preventScroll.js @@ -0,0 +1,32 @@ +import { useCallback, useEffect, useState } from 'react' + +const preventDefault = ev => { + if (ev.preventDefault) { + ev.preventDefault() + } + ev.returnValue = false +} + +const enableBodyScroll = () => { + document && document.removeEventListener('wheel', preventDefault, false) +} +const disableBodyScroll = () => { + document && + document.addEventListener('wheel', preventDefault, { + passive: false + }) +} + +export default function usePreventScroll() { + const [hidden, setHidden] = useState(false) + + useEffect(() => { + hidden ? disableBodyScroll() : enableBodyScroll() + + return enableBodyScroll + }, [hidden]) + + const disableScroll = useCallback(() => setHidden(true), []) + const enableScroll = useCallback(() => setHidden(false), []) + return { disableScroll, enableScroll } +} diff --git a/components/slack/project.js b/components/slack/project.js index b6e3002f..f10aa648 100644 --- a/components/slack/project.js +++ b/components/slack/project.js @@ -22,7 +22,6 @@ export default function Project({ title, description, color, img, itemId }) { height: '100%', transition: '700ms cubic-bezier(0.075, 0.02, 0.165, 1)', transformOrigin: 'center', - opacity: isVisible ? 1 : 0.25, mx: 16, ml: `${itemId === 0 ? '26vw' : '0'}` }} diff --git a/pages/slack.js b/pages/slack.js index 01c99fc7..7d95ffab 100644 --- a/pages/slack.js +++ b/pages/slack.js @@ -16,9 +16,11 @@ import Header from '../components/slack/header' import Project from '../components/slack/project' import Quote from '../components/slack/quote' import Arrows from '../components/slack/arrows' +import usePreventScroll from '../components/slack/preventScroll' const SlackPage = () => { const nameInputRef = useRef(null) + const { disableScroll, enableScroll } = usePreventScroll() return ( <> @@ -80,8 +82,10 @@ const SlackPage = () => { {projects.map(project => (