From feb3c6862513d15c5d02b50a93ea02399425e1a4 Mon Sep 17 00:00:00 2001 From: Aman Harwara Date: Fri, 27 Jan 2023 22:09:39 +0530 Subject: [PATCH] refactor: hide challenge modal illustration when shrinked because of keyboard --- .../ChallengeModal/ChallengeModal.tsx | 14 ++++++- .../Components/Modal/ModalOverlay.tsx | 37 ++++++++++--------- 2 files changed, 33 insertions(+), 18 deletions(-) diff --git a/packages/web/src/javascripts/Components/ChallengeModal/ChallengeModal.tsx b/packages/web/src/javascripts/Components/ChallengeModal/ChallengeModal.tsx index a1fbe9ac6..8128c5199 100644 --- a/packages/web/src/javascripts/Components/ChallengeModal/ChallengeModal.tsx +++ b/packages/web/src/javascripts/Components/ChallengeModal/ChallengeModal.tsx @@ -22,6 +22,7 @@ import { classNames } from '@standardnotes/utils' import ModalOverlay from '../Modal/ModalOverlay' import Modal from '../Modal/Modal' import { MutuallyExclusiveMediaQueryBreakpoints, useMediaQuery } from '@/Hooks/useMediaQuery' +import { useAutoElementRect } from '@/Hooks/useElementRect' type Props = { application: WebApplication @@ -214,6 +215,11 @@ const ChallengeModal: FunctionComponent = ({ const isFullScreenBlocker = challenge.reason === ChallengeReason.ApplicationUnlock const isMobileOverlay = isMobileScreen && !isFullScreenBlocker + const [modalElement, setModalElement] = useState(null) + const modalElementRect = useAutoElementRect(modalElement, { + updateOnWindowResize: true, + }) + return ( = ({ onDismiss={cancelChallenge} dangerouslyBypassFocusLock={bypassModalFocusLock} key={challenge.id} + ref={setModalElement} > = ({ )}
- +
{challenge.heading}
{challenge.subheading && (
{challenge.subheading}
diff --git a/packages/web/src/javascripts/Components/Modal/ModalOverlay.tsx b/packages/web/src/javascripts/Components/Modal/ModalOverlay.tsx index 51836c494..92703e69e 100644 --- a/packages/web/src/javascripts/Components/Modal/ModalOverlay.tsx +++ b/packages/web/src/javascripts/Components/Modal/ModalOverlay.tsx @@ -1,6 +1,7 @@ +import { mergeRefs } from '@/Hooks/mergeRefs' import { DialogOverlay, DialogOverlayProps } from '@reach/dialog' import { classNames } from '@standardnotes/snjs' -import { ReactNode } from 'react' +import { ForwardedRef, forwardRef, ReactNode } from 'react' import { useModalAnimation } from '../Modal/useModalAnimation' type Props = { @@ -10,23 +11,25 @@ type Props = { className?: string } & DialogOverlayProps -const ModalOverlay = ({ isOpen, onDismiss, children, className, ...props }: Props) => { - const [isMounted, setElement] = useModalAnimation(isOpen) +const ModalOverlay = forwardRef( + ({ isOpen, onDismiss, children, className, ...props }: Props, ref: ForwardedRef) => { + const [isMounted, setElement] = useModalAnimation(isOpen) - if (!isMounted) { - return null - } + if (!isMounted) { + return null + } - return ( - - {children} - - ) -} + return ( + + {children} + + ) + }, +) export default ModalOverlay