Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | 19x 19x 19x 92x 87x 81x 81x 41x 81x 76x 5x | import { ReactElement, useEffect, useState } from "react"; import { PortalTarget, ToastCard } from "components"; import { useToast } from "hooks/useToast"; export default function Toast(): ReactElement | null { const [targetNode, setTargetNode] = useState<Element | null>(); const { toasts } = useToast(); useEffect(() => { setTargetNode(document.querySelector("#toast")); }, []); if (targetNode === undefined || !toasts.length) { return null; } return ( <PortalTarget targetId="toast"> <section> {toasts.map(({ id, variant, message, displayTime }) => ( <ToastCard key={id} id={id} variant={variant} message={message} displayTime={displayTime} /> ))} <style jsx>{` section { max-width: 400px; width: fit-content; position: fixed; left: 50%; bottom: 90px; transform: translate(-50%, -50%); margin: 0 auto; } :global(#toast) { position: relative; z-index: 993332323233232399; } @media screen and (max-width: 500px) { section { max-width: calc(100% -2rem); width: max-content; } } `}</style> </section> </PortalTarget> ); } |