diff --git a/packages/app/src/collection.ts b/packages/app/src/collection.ts index e5039cc..72cf538 100644 --- a/packages/app/src/collection.ts +++ b/packages/app/src/collection.ts @@ -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 = ({ @@ -57,3 +61,21 @@ export const collection = ({ return {indexStore, deriveItem, loadItem, getItem} } + +export const deriveEvent = (idOrAddress: string, request: Partial = {}) => { + 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] + }, + ) +} diff --git a/packages/store/src/index.ts b/packages/store/src/index.ts index 783533f..2540476 100644 --- a/packages/store/src/index.ts +++ b/packages/store/src/index.ts @@ -93,7 +93,7 @@ export const adapter = ({ }) export const throttled = (delay: number, store: Readable) => - custom(set => store.subscribe(throttle(delay, set))) + custom(set => store.subscribe(throttle(delay, set))) // Event related stores