Add deriveEvent

This commit is contained in:
Jon Staab
2024-09-04 16:52:08 -07:00
parent eb1a219ca5
commit 89e1569359
2 changed files with 24 additions and 2 deletions
+23 -1
View File
@@ -1,6 +1,10 @@
import {readable, derived, type Readable} from 'svelte/store'
import {type SubscribeRequest} from "@welshman/net"
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'
export const collection = <T, LoadArgs extends any[]>({
@@ -57,3 +61,21 @@ export const collection = <T, LoadArgs extends any[]>({
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]
},
)
}