import React, { HTMLAttributes, ReactNode, useState } from 'react'; import styled from 'styled-components'; import { createPortal } from 'react-dom'; import { createRoot } from 'react-dom/client'; import Cha from '../icons/cha.svg'; import './index.scss'; const getRoot = () => { const el = document.getElementById('ui-notification-pop'); if (el) { return el; } const newEl = document.createElement('div'); newEl.setAttribute('id', 'ui-notification-pop'); document.body.appendChild(newEl); return newEl; }; const root = getRoot(); let oldDiv: HTMLDivElement | null = null; export const openNotification = (vNode: ReactNode, delay = 3000) => { const div = document.createElement('div'); root.insertBefore(div, oldDiv); oldDiv = div; const dom = createRoot(div as HTMLElement); dom.render(createPortal(vNode, div)); setTimeout(() => { dom.unmount(); div.remove(); oldDiv = null; }, delay); }; export interface NotificationProps extends HTMLAttributes { children?: React.ReactNode; } const NotificationStyled = styled.div` position: relative; line-height: 1.5em; font-size: 14px; display: flex; max-width: 300px; flex-direction: column; gap: 10px; padding: 20px; background-color: white; box-shadow: 0 2px 5px 2px rgba(0, 0, 0, 0.1); > .u1-button { position: absolute; top: 15px; right: 15px; cursor: pointer; } `; const Notification: React.FC = (props) => { const { children, ...rest } = props; const [show, setShow] = useState(true); return ( {children}
setShow(false)}>
); }; Notification.defaultProps = { children: '' }; export default Notification;