UNPKG

react-toastify

Version:
3 lines (2 loc) 1.71 kB
var r=require("react"),t=require("react-toastify");function e(r){return null==r.id&&(r.id=Date.now().toString(36).substring(2,9)),r.createdAt||(r.createdAt=Date.now()),null==r.read&&(r.read=!1),r}function n(r,t){return t.createdAt-r.createdAt}exports.useNotificationCenter=function(d){void 0===d&&(d={});const i=r.useRef(d.sort||n),u=r.useRef(d.filter||null),[a,c]=r.useState(()=>d.data?u.current?d.data.filter(u.current).sort(i.current):[...d.data].sort(i.current):[]),s=r.useRef(a);return r.useEffect(()=>{s.current=a},[a]),r.useEffect(()=>t.toast.onChange(r=>{if("added"===r.status||"updated"===r.status){const t=e(r);if(u.current&&!u.current(t))return;c(r=>{let e=[];const n=r.findIndex(r=>r.id===t.id);return-1!==n?(e=r.slice(),Object.assign(e[n],t,{createdAt:Date.now()})):e=0===r.length?[t]:[t,...r],e.sort(i.current)})}}),[]),{notifications:a,clear:()=>{c([])},markAllAsRead:function(r){void 0===r&&(r=!0),c(t=>t.map(t=>(t.read=r,t)))},markAsRead:function(r,t){void 0===t&&(t=!0);let e=e=>(e.id===r&&(e.read=t),e);Array.isArray(r)&&(e=e=>(r.includes(e.id)&&(e.read=t),e)),c(r=>r.map(e))},add:r=>{if(s.current.find(t=>t.id===r.id))return null;const t=e(r);return c(r=>[...r,t].sort(i.current)),t.id},update:(r,t)=>{const e=s.current.findIndex(t=>t.id===r);return-1!==e?(c(r=>{const n=[...r];return Object.assign(n[e],t,{createdAt:t.createdAt||Date.now()}),n.sort(i.current)}),t.id):null},remove:r=>{c(t=>t.filter(Array.isArray(r)?t=>!r.includes(t.id):t=>t.id!==r))},find:r=>Array.isArray(r)?s.current.filter(t=>r.includes(t.id)):s.current.find(t=>t.id===r),sort:r=>{i.current=r,c(t=>t.slice().sort(r))},get unreadCount(){return a.reduce((r,t)=>t.read?r:r+1,0)}}}; //# sourceMappingURL=index.js.map