|
|
@ -1,18 +1,12 @@ |
|
|
import { writable, get } from "svelte/store" |
|
|
import { writable, get } from "svelte/store" |
|
|
import { generate } from "shortid" |
|
|
|
|
|
import { routeStore } from "./routes" |
|
|
import { routeStore } from "./routes" |
|
|
|
|
|
|
|
|
const NOTIFICATION_TIMEOUT = 3000 |
|
|
const NOTIFICATION_TIMEOUT = 3000 |
|
|
|
|
|
|
|
|
const createNotificationStore = () => { |
|
|
const createNotificationStore = () => { |
|
|
let timeout |
|
|
|
|
|
let block = false |
|
|
let block = false |
|
|
|
|
|
|
|
|
const store = writable(null, () => { |
|
|
const store = writable([]) |
|
|
return () => { |
|
|
|
|
|
clearTimeout(timeout) |
|
|
|
|
|
} |
|
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
const blockNotifications = (timeout = 1000) => { |
|
|
const blockNotifications = (timeout = 1000) => { |
|
|
block = true |
|
|
block = true |
|
|
@ -37,26 +31,31 @@ const createNotificationStore = () => { |
|
|
}) |
|
|
}) |
|
|
return |
|
|
return |
|
|
} |
|
|
} |
|
|
|
|
|
const _id = id() |
|
|
store.set({ |
|
|
store.update(state => { |
|
|
id: generate(), |
|
|
return [ |
|
|
type, |
|
|
...state, |
|
|
message, |
|
|
{ |
|
|
icon, |
|
|
id: _id, |
|
|
dismissable: !autoDismiss, |
|
|
type, |
|
|
delay: get(store) != null, |
|
|
message, |
|
|
|
|
|
icon, |
|
|
|
|
|
dismissable: !autoDismiss, |
|
|
|
|
|
delay: get(store) != null, |
|
|
|
|
|
}, |
|
|
|
|
|
] |
|
|
}) |
|
|
}) |
|
|
clearTimeout(timeout) |
|
|
|
|
|
if (autoDismiss) { |
|
|
if (autoDismiss) { |
|
|
timeout = setTimeout(() => { |
|
|
setTimeout(() => { |
|
|
store.set(null) |
|
|
dismiss(_id) |
|
|
}, NOTIFICATION_TIMEOUT) |
|
|
}, NOTIFICATION_TIMEOUT) |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
const dismiss = () => { |
|
|
const dismiss = id => { |
|
|
clearTimeout(timeout) |
|
|
store.update(state => { |
|
|
store.set(null) |
|
|
return state.filter(n => n.id !== id) |
|
|
|
|
|
}) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
return { |
|
|
return { |
|
|
@ -71,6 +70,10 @@ const createNotificationStore = () => { |
|
|
dismiss, |
|
|
dismiss, |
|
|
}, |
|
|
}, |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
function id() { |
|
|
|
|
|
return "_" + Math.random().toString(36).slice(2, 9) |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
export const notificationStore = createNotificationStore() |
|
|
export const notificationStore = createNotificationStore() |
|
|
|