UNPKG

@tanstack/solid-router

Version:

Modern and scalable routing for Solid applications

43 lines • 1.52 kB
import * as Solid from 'solid-js'; import { TSR_DEFERRED_PROMISE, defer } from '@tanstack/router-core'; export function useAwaited({ promise: _promise, }) { const promise = defer(_promise); const data = Solid.createMemo(async () => await promise); return [data(), promise]; } function InnerAwait(props) { return (<Solid.Show when={props.ready()}> {(_) => { const state = props.deferred[TSR_DEFERRED_PROMISE]; if (state.status === 'error') { throw state.error; } if (state.status === 'pending') { // A streamed promise can settle before defer()'s .then records it; seroval marks it synchronously. const streamed = props.deferred; if (streamed.s === 2) { throw streamed.v; } if (streamed.s === 1) { return props.children(streamed.v); } } return props.children(state.data); }} </Solid.Show>); } export function Await(props) { const deferred = defer(props.promise); const ready = Solid.createMemo(async () => { await deferred; return true; }); const inner = (<InnerAwait deferred={deferred} ready={ready}> {props.children} </InnerAwait>); if (props.fallback === undefined) { return inner; } return <Solid.Loading fallback={props.fallback}>{inner}</Solid.Loading>; } //# sourceMappingURL=awaited.jsx.map