fix: render ContactModal via portal to fix centering when inside transformed ancestors

This commit is contained in:
chaulmark 2026-05-24 11:02:49 -06:00
parent 1c7995704d
commit 10ae434c26

View file

@ -1,7 +1,8 @@
'use client' 'use client'
import { motion, AnimatePresence } from 'framer-motion' import { motion, AnimatePresence } from 'framer-motion'
import { useState } from 'react' import { useState, useEffect } from 'react'
import { createPortal } from 'react-dom'
import { X } from 'lucide-react' import { X } from 'lucide-react'
import { useNotification } from '@/components/providers/notification-provider' import { useNotification } from '@/components/providers/notification-provider'
@ -26,6 +27,12 @@ const validateEmail = (email: string) => {
export default function ContactModal({ isOpen, onClose }: ContactModalProps) { export default function ContactModal({ isOpen, onClose }: ContactModalProps) {
const { showNotification } = useNotification() const { showNotification } = useNotification()
const [mounted, setMounted] = useState(false)
useEffect(() => {
setMounted(true)
}, [])
const [formData, setFormData] = useState({ const [formData, setFormData] = useState({
name: '', name: '',
email: '', email: '',
@ -105,7 +112,9 @@ export default function ContactModal({ isOpen, onClose }: ContactModalProps) {
} }
} }
return ( if (!mounted) return null
return createPortal(
<AnimatePresence> <AnimatePresence>
{isOpen && ( {isOpen && (
<motion.div <motion.div
@ -246,6 +255,7 @@ export default function ContactModal({ isOpen, onClose }: ContactModalProps) {
</motion.div> </motion.div>
</motion.div> </motion.div>
)} )}
</AnimatePresence> </AnimatePresence>,
document.body
) )
} }