MCPcopy Create free account
hub / github.com/effect-app/libs / useAtomStreamQuery

Function useAtomStreamQuery

packages/vue/src/query.ts:375–416  ·  view source on GitHub ↗
(
  atom: () => Atom.Writable<Atom.PullResult<A, E>, void>
)

Source from the content-addressed store, hash-verified

373 return {
374 result,
375 data,
376 awaitResult,
377 refetch,
378 refresh,
379 registry,
380 atom: atomRef
381 }
382}
383
384export const useAtomSuspense = <A, E>(
385 atom: () => Atom.Atom<AsyncResult.AsyncResult<A, E>>
386): Promise<SuspenseQueryView<A, E>> => {
387 const [{ view, data }, isMounted, signal] = useScopedSuspenseSetup(() => {
388 const view = useAtomQuery(atom)
389 const data = latestDefined(() => view.data.value, "atom suspense")
390 return { view, data }
391 })
392
393 const eff = Effect.gen(function*() {
394 const exit = yield* view.awaitResult().pipe(Effect.exit)
395 if (!isMounted.value) {
396 return yield* Effect.interrupt
397 }
398 if (Exit.isFailure(exit)) {
399 return yield* Exit.failCause(exit.cause)
400 }
401
402 const fetch = (_options?: RefetchOptions) => view.refetch()
403 const handle = {
404 awaitResult: view.awaitResult,
405 refetch: view.refetch,
406 refresh: view.refresh,
407 registry: view.registry,
408 atom: view.atom
409 }
410 return Object.assign(
411 [
412 view.result,
413 data,
414 fetch,
415 handle
416 ] as const,
417 {
418 ...view,
419 data

Callers 1

useStreamQueryNewFunction · 0.85

Calls 6

injectRegistryFunction · 0.85
computedFunction · 0.85
mapMethod · 0.65
valueMethod · 0.65
atMethod · 0.65
useAtomValueFunction · 0.50

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…