@musica-sacra/notifications
Version:
Complex notification system for MusicaSacra apps
3 lines (2 loc) • 3.8 kB
JavaScript
;var t=require("react/jsx-runtime"),n=require("react");function e(t,n,e){if(e||2===arguments.length)for(var o,r=0,i=n.length;r<i;r++)!o&&r in n||(o||(o=Array.prototype.slice.call(n,0,r)),o[r]=n[r]);return t.concat(o||Array.prototype.slice.call(n))}"function"==typeof SuppressedError&&SuppressedError;const o=[];for(let t=0;t<256;++t)o.push((t+256).toString(16).slice(1));let r;const i=new Uint8Array(16);var c={randomUUID:"undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};function a(t,n,e){if(c.randomUUID&&!t)return c.randomUUID();const a=(t=t||{}).random??t.rng?.()??function(){if(!r){if("undefined"==typeof crypto||!crypto.getRandomValues)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");r=crypto.getRandomValues.bind(crypto)}return r(i)}();if(a.length<16)throw new Error("Random bytes length must be >= 16");return a[6]=15&a[6]|64,a[8]=63&a[8]|128,function(t,n=0){return(o[t[n+0]]+o[t[n+1]]+o[t[n+2]]+o[t[n+3]]+"-"+o[t[n+4]]+o[t[n+5]]+"-"+o[t[n+6]]+o[t[n+7]]+"-"+o[t[n+8]]+o[t[n+9]]+"-"+o[t[n+10]]+o[t[n+11]]+o[t[n+12]]+o[t[n+13]]+o[t[n+14]]+o[t[n+15]]).toLowerCase()}(a)}var u=Object.freeze({INFO:"info",WARNING:"warning",ERROR:"error",SUCCESS:"success",LOADING:"loading"}),s=n.createContext({notifications:[],addNotification:function(){return""},removeNotification:function(){}});var f=n.memo(function(e){var o=e.id,r=e.message,i=e.timeout,c=e.className,a=n.useContext(s).removeNotification;console.log("logging rerenders",o),console.log("logging timeout",i);var u=n.useRef(null);return n.useEffect(function(){return u.current=setTimeout(function(){a(o)},i),console.log("logging timeoutref",u.current),function(){u.current&&clearTimeout(u.current)}},[]),t.jsx("div",{className:c,onClick:function(){a(o)},children:r})});function l(n){var e=n.notifications,o=function(t){return{bem:function(n){for(var e=[],o=1;o<arguments.length;o++)e[o-1]=arguments[o];var r=[],i=function(t){t&&!r.includes(t)&&r.push(t)},c=function(n,e){void 0===e&&(e=!0);for(var o=0,r=Object.entries(n);o<r.length;o++){var c=r[o],a=c[0];c[1]&&i(a===t?t:e?"".concat(t,"__").concat(a):a)}};n===t||("string"==typeof n&&""!==n&&i("".concat(t,"__").concat(n)),"object"==typeof n&&c(n)),r.push(t);for(var a=0,u=e;a<u.length;a++){var s=u[a];s===t||("string"==typeof s&&""!==s&&i(s),"object"==typeof s&&c(s,!1)),i(t)}return r.join(" ")},element:function(n){return"string"==typeof n&&""!==n?"".concat(t,"__").concat(n):"object"==typeof n?Object.entries(n).filter(function(t){return t[1]}).map(function(n){var e=n[0];return"".concat(t,"__").concat(e)}).join(" "):t},modifier:function(n){return"string"==typeof n&&""!==n?"".concat(t,"--").concat(n):"object"==typeof n?Object.entries(n).filter(function(t){return t[1]}).map(function(n){var e=n[0];return"".concat(t,"--").concat(e)}).join(" "):""},base:t}}("ms-notifications").bem;return t.jsx("div",{className:o(),children:e.map(function(n){var e,r=n.id,i=n.message,c=n.type,a=n.timeout;return t.jsx(f,{id:r,timeout:a,message:i,className:o((e={notification:!0},e["notification--".concat(c)]=!0,e))},r)})})}exports.NotificationTypes=u,exports.Notifications=l,exports.NotificationsContext=s,exports.NotificationsContextProvider=function(o){var r=o.children,i=n.useState([]),c=i[0],f=i[1],d=n.useCallback(function(t,n,o){void 0===t&&(t="Hello there... General KENOBII!"),void 0===n&&(n=u.INFO),void 0===o&&(o=5e3);var r=a();return f(function(i){return e(e([],i,!0),[{type:n,message:t,timeout:o,id:r}],!1)}),r},[]),p=n.useCallback(function(t){f(function(n){return n.filter(function(n){return n.id!==t})})},[]);return t.jsxs(s.Provider,{value:{notifications:c,addNotification:d,removeNotification:p},children:[t.jsx(l,{notifications:c}),r]})};
//# sourceMappingURL=index.js.map