UNPKG

@jengaui/alert-dialog

Version:

Jenga UI Alert Dialog component in React

9 lines (6 loc) 1.41 kB
import { a } from './chunk-TSF5PAES.js'; import { createContext, useState, useRef, useMemo, useContext } from 'react'; import h from 'tiny-invariant'; import { jsxs, jsx } from 'react/jsx-runtime'; var d=createContext(null);function y(t){let[u,a$1]=useState(null),D=useRef(0),A=useMemo(()=>({open:(c,m={})=>{let{onDismiss:r,...f}=c,{cancelToken:l}=m,n=++D.current,e={props:null,meta:{id:n,isClosed:!1,isVisible:!0}},s=()=>{var i;e.meta.isClosed||(e.meta.isClosed=!0,(i=m.cancelToken)==null||i.removeEventListener("abort",s),a$1(o=>(o==null?void 0:o.meta.id)!==n?o:{props:o.props,meta:{...o.meta,isVisible:!1}}),setTimeout(()=>a$1(o=>(o==null?void 0:o.meta.id)!==n?o:null),300));};return l!=null&&l.aborted?new Promise(()=>{}):(l==null||l.addEventListener("abort",s,{once:!0}),e.meta.promise=new Promise((i,o)=>{e.meta.resolve=p=>{s(),i(p);},e.meta.reject=p=>{s(),o(p);};}),e.props={...f,onDismiss:i=>{r==null||r(i),e.meta.reject(void 0);}},a$1(i=>i!==null?(e.meta.reject(new Error("Another dialog is already opened. It's a bad practice to open more than one <AlertDialog /> at the same time")),i):e),e.meta.promise)}}),[]);return jsxs(d.Provider,{value:A,children:[jsx(a,{openedDialog:u}),t.children]})}function L(){let t=useContext(d);return h(t!==null,"You can't use DialogApi outside of <Root /> component. Please, check if your component is descendant of <Root/> component"),t} export { y as a, L as b };