react-cool-portal
Advanced tools
Comparing version 1.0.2 to 1.0.3
@@ -1,1 +0,1 @@ | ||
import{useRef as t,useEffect as n,useState as r,useCallback as e}from"react";import{createPortal as o}from"react-dom";function i(t,n){return function(t){if(Array.isArray(t))return t}(t)||function(t,n){if("undefined"==typeof Symbol||!(Symbol.iterator in Object(t)))return;var r=[],e=!0,o=!1,i=void 0;try{for(var u,c=t[Symbol.iterator]();!(e=(u=c.next()).done)&&(r.push(u.value),!n||r.length!==n);e=!0);}catch(t){o=!0,i=t}finally{try{e||null==c.return||c.return()}finally{if(o)throw i}}return r}(t,n)||function(t,n){if(!t)return;if("string"==typeof t)return u(t,n);var r=Object.prototype.toString.call(t).slice(8,-1);"Object"===r&&t.constructor&&(r=t.constructor.name);if("Map"===r||"Set"===r)return Array.from(r);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return u(t,n)}(t,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function u(t,n){(null==n||n>t.length)&&(n=t.length);for(var r=0,e=new Array(n);r<n;r++)e[r]=t[r];return e}var c=function(r){var e=t(r);return n((function(){e.current=r}),[r]),e},a=function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:100,r=setTimeout((function(){clearTimeout(r),t()}),n)},d=function(t,e,u,c){return function(d){var f=d.children,l=i(r(null),2),m=l[0],v=l[1];return n((function(){return v(document.getElementById(t)||function(t){var n=document.createElement("div");return n.setAttribute("id",t),document.body.appendChild(n),n}(t)),function(){m&&a((function(){""===m.innerHTML&&m.remove()}))}}),[m]),n((function(){if(e&&m){var t=function(t){m.contains(t.target)||u(t)},n=function(t){27===t.keyCode&&c(t)};return u&&document.addEventListener("click",t),c&&document.addEventListener("keydown",n),function(){u&&document.removeEventListener("click",t),c&&document.removeEventListener("keydown",n)}}}),[m]),e&&m&&o(f,m)}},f="react-cool-portal",l=!0;export default function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},o=n.containerId,u=void 0===o?"react-cool-portal":o,f=n.defaultShow,l=void 0===f||f,m=n.clickOutsideToHide,v=void 0===m||m,s=n.escToHide,y=void 0===s||s,h=n.internalShowHide,p=void 0===h||h,b=n.onShow,g=n.onHide,w=r(l),S=i(w,2),A=S[0],E=S[1],k=t(!1),T=c(b),H=c(g),I=t(l),L=e((function(){v&&(k.current=!0,a((function(){k.current=!1})))}),[v]),j=e((function(t){L(),I.current||(E(!0),I.current=!0,T.current&&T.current(t))}),[L]),O=e((function(t){L(),I.current&&(E(!1),I.current=!1,H.current&&H.current(t))}),[L]),x=e((function(t){I.current?O(t):j(t)}),[O,j]),C=e((function(t){k.current||O(t)}),[O]),M=e(d(u,!p||A,v&&C,y&&C),[p&&A]);return{Portal:M,isShow:A,show:j,hide:O,toggle:x}}export{f as defaultContainerId,l as initShow}; | ||
import{useRef,useEffect,useState,useCallback}from"react";import{createPortal as createPortal$1}from"react-dom";function _slicedToArray(e,t){return _arrayWithHoles(e)||_iterableToArrayLimit(e,t)||_unsupportedIterableToArray(e,t)||_nonIterableRest()}function _arrayWithHoles(e){if(Array.isArray(e))return e}function _iterableToArrayLimit(e,t){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e)){var r=[],n=!0,o=!1,a=void 0;try{for(var u,i=e[Symbol.iterator]();!(n=(u=i.next()).done)&&(r.push(u.value),!t||r.length!==t);n=!0);}catch(e){o=!0,a=e}finally{try{n||null==i.return||i.return()}finally{if(o)throw a}}return r}}function _unsupportedIterableToArray(e,t){if(e){if("string"==typeof e)return _arrayLikeToArray(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(r):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?_arrayLikeToArray(e,t):void 0}}function _arrayLikeToArray(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var useLatest=function(e){var t=useRef(e);return useEffect((function(){t.current=e}),[e]),t},delay=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:100,r=setTimeout((function(){clearTimeout(r),e()}),t)},createEl=function(e){var t=document.createElement("div");return t.setAttribute("id",e),document.body.appendChild(t),t},createPortal=function(e,t,r,n){return function(o){var a=o.children,u=_slicedToArray(useState(null),2),i=u[0],c=u[1];return useEffect((function(){return c(document.getElementById(e)||createEl(e)),function(){i&&delay((function(){""===i.innerHTML&&i.remove()}))}}),[i]),useEffect((function(){if(t&&i){var e=function(e){i.contains(e.target)||r(e)},o=function(e){27===e.keyCode&&n(e)};return r&&document.addEventListener("click",e),n&&document.addEventListener("keydown",o),function(){r&&document.removeEventListener("click",e),n&&document.removeEventListener("keydown",o)}}}),[i]),t&&i&&createPortal$1(a,i)}},defaultContainerId="react-cool-portal",initShow=!0,usePortal=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.containerId,r=void 0===t?defaultContainerId:t,n=e.defaultShow,o=void 0===n?initShow:n,a=e.clickOutsideToHide,u=void 0===a||a,i=e.escToHide,c=void 0===i||i,l=e.internalShowHide,d=void 0===l||l,f=e.onShow,s=e.onHide,y=useState(o),m=_slicedToArray(y,2),v=m[0],b=m[1],h=useRef(!1),p=useLatest(f),A=useLatest(s),k=useRef(o),S=useCallback((function(){u&&(h.current=!0,delay((function(){h.current=!1})))}),[u]),T=useCallback((function(e){S(),k.current||(b(!0),k.current=!0,p.current&&p.current(e))}),[S]),w=useCallback((function(e){S(),k.current&&(b(!1),k.current=!1,A.current&&A.current(e))}),[S]),_=useCallback((function(e){k.current?w(e):T(e)}),[w,T]),C=useCallback((function(e){h.current||w(e)}),[w]),E=useCallback(createPortal(r,!d||v,u&&C,c&&C),[d&&v]);return{Portal:E,isShow:v,show:T,hide:w,toggle:_}};export default usePortal;export{defaultContainerId,initShow}; |
{ | ||
"name": "react-cool-portal", | ||
"version": "1.0.2", | ||
"version": "1.0.3", | ||
"description": "React hook for Portals, which renders modals, dropdowns, tooltips etc. to <body> or else.", | ||
@@ -5,0 +5,0 @@ "license": "MIT", |
29452
55