'use client' import { useEffect } from 'react' import { Dialog, Modal, ModalOverlay } from 'react-aria-components' import { useIntl } from 'react-intl' import usePopStateHandler from '@scandic-hotels/common/hooks/usePopStateHandler' import useSetOverflowVisibleOnRA from '@scandic-hotels/common/hooks/useSetOverflowVisibleOnRA' import { IconButton } from '../../IconButton' import { MaterialIcon } from '../../Icons/MaterialIcon' import { Typography } from '../../Typography' import SidePeekSEO from '../SidePeekSEO' import styles from './sidePeekSelfControlled.module.css' interface SidePeekSelfControlledProps extends React.PropsWithChildren { title: string isOpen: boolean onClose: () => void } export default function SidePeekSelfControlled({ children, isOpen, onClose, title, }: SidePeekSelfControlledProps) { const intl = useIntl() function handleClose(moveBack = false) { if (moveBack) { window.history.back() } else { onClose() } } // Only register popstate handler when open usePopStateHandler(() => handleClose(), isOpen) useEffect(() => { if (isOpen) { window.history.pushState(null, '', window.location.href) } }, [isOpen]) return ( <> handleClose(true)} isOpen={isOpen} > {children} ) } function KeepBodyVisible() { const toggle = useSetOverflowVisibleOnRA() useEffect(() => { toggle(true) return () => toggle(false) }, [toggle]) return null }