24 lines
906 B
TypeScript
24 lines
906 B
TypeScript
import useSWRSubscription from "swr/subscription"
|
|
import { filter } from "rxjs"
|
|
import type { BlockInfo } from "@polkadot-api/observable-client"
|
|
import { useUnstableProvider } from "./useUnstableProvider"
|
|
|
|
export const useBlocks = () => {
|
|
const { chainHead$, chainId } = useUnstableProvider()
|
|
const { data: blocks } = useSWRSubscription(
|
|
chainHead$ && chainId && chainId ? ["blocks", chainHead$, chainId] : null,
|
|
([_, chainHead$, chainId], { next }) => {
|
|
const subscription = chainHead$?.bestBlocks$
|
|
.pipe(filter(Boolean))
|
|
.subscribe({
|
|
next(blocks: BlockInfo[]) {
|
|
next(null, blocks)
|
|
},
|
|
error: next,
|
|
})
|
|
return () => subscription?.unsubscribe()
|
|
},
|
|
)
|
|
return { latest: blocks?.at(0), finalized: blocks?.at(-1) }
|
|
}
|