Add deriveEvent
This commit is contained in:
@@ -1,6 +1,10 @@
|
|||||||
import {readable, derived, type Readable} from 'svelte/store'
|
import {readable, derived, type Readable} from 'svelte/store'
|
||||||
|
import {type SubscribeRequest} from "@welshman/net"
|
||||||
import {indexBy, type Maybe, now} from '@welshman/lib'
|
import {indexBy, type Maybe, now} from '@welshman/lib'
|
||||||
import {withGetter} from '@welshman/store'
|
import {getIdFilters} from '@welshman/util'
|
||||||
|
import type {TrustedEvent} from '@welshman/util'
|
||||||
|
import {withGetter, deriveEvents} from '@welshman/store'
|
||||||
|
import {repository, loadOne} from './core'
|
||||||
import {getFreshness, setFreshness} from './freshness'
|
import {getFreshness, setFreshness} from './freshness'
|
||||||
|
|
||||||
export const collection = <T, LoadArgs extends any[]>({
|
export const collection = <T, LoadArgs extends any[]>({
|
||||||
@@ -57,3 +61,21 @@ export const collection = <T, LoadArgs extends any[]>({
|
|||||||
|
|
||||||
return {indexStore, deriveItem, loadItem, getItem}
|
return {indexStore, deriveItem, loadItem, getItem}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const deriveEvent = (idOrAddress: string, request: Partial<SubscribeRequest> = {}) => {
|
||||||
|
let attempted = false
|
||||||
|
|
||||||
|
const filters = getIdFilters([idOrAddress])
|
||||||
|
|
||||||
|
return derived(
|
||||||
|
deriveEvents(repository, {filters, includeDeleted: true}),
|
||||||
|
(events: TrustedEvent[]) => {
|
||||||
|
if (!attempted && events.length === 0) {
|
||||||
|
loadOne({...request, filters})
|
||||||
|
attempted = true
|
||||||
|
}
|
||||||
|
|
||||||
|
return events[0]
|
||||||
|
},
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|||||||
@@ -93,7 +93,7 @@ export const adapter = <Source, Target>({
|
|||||||
})
|
})
|
||||||
|
|
||||||
export const throttled = <T>(delay: number, store: Readable<T>) =>
|
export const throttled = <T>(delay: number, store: Readable<T>) =>
|
||||||
custom(set => store.subscribe(throttle(delay, set)))
|
custom<T>(set => store.subscribe(throttle(delay, set)))
|
||||||
|
|
||||||
// Event related stores
|
// Event related stores
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user