mirror of
https://github.com/browseros-ai/BrowserOS.git
synced 2026-05-21 12:55:09 +00:00
* fix: move suspense boundary closer to corresponding pages * fix: pre-resolve the client via singleton to speed up the clientPromise * feat: apply theme background faster with plain script * chore: update biome version * feat: make rpc client persist promise with useMemo and remove loading text * fix: replace dvh with vh * fix: replace dvh with vh in create graph
30 lines
711 B
TypeScript
30 lines
711 B
TypeScript
import { createContext, type FC, type ReactNode, use, useMemo } from 'react'
|
|
import { getClient, type RpcClient } from './getClient'
|
|
|
|
const RpcClientContext = createContext<Promise<RpcClient> | null>(null)
|
|
|
|
/**
|
|
* @public
|
|
*/
|
|
export const RpcClientProvider: FC<{ children: ReactNode }> = ({
|
|
children,
|
|
}) => {
|
|
const clientPromise = useMemo(() => getClient(), [])
|
|
return (
|
|
<RpcClientContext.Provider value={clientPromise}>
|
|
{children}
|
|
</RpcClientContext.Provider>
|
|
)
|
|
}
|
|
|
|
/**
|
|
* @public
|
|
*/
|
|
export function useRpcClient(): RpcClient {
|
|
const promise = use(RpcClientContext)
|
|
if (!promise) {
|
|
throw new Error('useRpcClient must be used within RpcClientProvider')
|
|
}
|
|
return use(promise)
|
|
}
|