Add notification store timeouts
This commit is contained in:
parent
6e9ece3cd7
commit
cc5920da12
|
@ -1,16 +1,17 @@
|
||||||
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
|
const timeoutIds = new Set()
|
||||||
let block = false
|
let block = false
|
||||||
|
|
||||||
const store = writable([], () => {
|
const store = writable([], () => {
|
||||||
return () => {
|
return () => {
|
||||||
clearTimeout(timeout)
|
timeoutIds.forEach(timeoutId => {
|
||||||
|
clearTimeout(timeoutId)
|
||||||
|
})
|
||||||
store.set([])
|
store.set([])
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -38,27 +39,28 @@ const createNotificationStore = () => {
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
const _id = id()
|
||||||
store.update(state => {
|
store.update(state => {
|
||||||
return [...state,
|
return [
|
||||||
{
|
...state,
|
||||||
id: generate(),
|
{
|
||||||
type,
|
id: _id,
|
||||||
message,
|
type,
|
||||||
icon,
|
message,
|
||||||
dismissable: !autoDismiss,
|
icon,
|
||||||
delay: get(store) != null,
|
dismissable: !autoDismiss,
|
||||||
}
|
delay: get(store) != null,
|
||||||
]})
|
}
|
||||||
clearTimeout(timeout)
|
]})
|
||||||
if (autoDismiss) {
|
if (autoDismiss) {
|
||||||
timeout = setTimeout(() => {
|
const timeoutId = setTimeout(() => {
|
||||||
store.set(null)
|
dismiss(_id)
|
||||||
}, NOTIFICATION_TIMEOUT)
|
}, NOTIFICATION_TIMEOUT)
|
||||||
|
timeoutIds.add(timeoutId)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const dismiss = id => {
|
const dismiss = id => {
|
||||||
clearTimeout(timeout)
|
|
||||||
store.update(state => {
|
store.update(state => {
|
||||||
return state.filter(n => n.id !== id)
|
return state.filter(n => n.id !== id)
|
||||||
})
|
})
|
||||||
|
@ -76,6 +78,10 @@ const createNotificationStore = () => {
|
||||||
dismiss,
|
dismiss,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function id() {
|
||||||
|
return "_" + Math.random().toString(36).slice(2, 9)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const notificationStore = createNotificationStore()
|
export const notificationStore = createNotificationStore()
|
||||||
|
|
Loading…
Reference in New Issue