import type { JSX } from 'solid-js' import { redirectPage } from '@nanostores/router' import { clsx } from 'clsx' import { createEffect, createMemo, createSignal, Show } from 'solid-js' import { useMediaQuery } from '../../../context/mediaQuery' import { router } from '../../../stores/router' import { hideModal, useModalStore } from '../../../stores/ui' import { useEscKeyDownHandler } from '../../../utils/useEscKeyDownHandler' import { Icon } from '../../_shared/Icon' import styles from './Modal.module.scss' interface Props { name: string variant: 'narrow' | 'wide' | 'medium' children: JSX.Element onClose?: () => void noPadding?: boolean maxHeight?: boolean allowClose?: boolean isResponsive?: boolean } export const Modal = (props: Props) => { const { modal } = useModalStore() const [visible, setVisible] = createSignal(false) const allowClose = createMemo(() => props.allowClose !== false) const [isMobileView, setIsMobileView] = createSignal(false) const { mediaMatches } = useMediaQuery() const handleHide = () => { if (modal()) { if (allowClose()) { props.onClose?.() } else { redirectPage(router, 'home') } } hideModal() } useEscKeyDownHandler(handleHide) createEffect(() => { setVisible(modal() === props.name) }) createEffect(() => { if (props.isResponsive) { setIsMobileView(!mediaMatches.sm) } }) return (
event.stopPropagation()} >
{props.children}
) }