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