@tanstack/solid-router
Version:
Modern and scalable routing for Solid applications
49 lines (48 loc) • 1.29 kB
JavaScript
import { TSR_DEFERRED_PROMISE, defer } from "@tanstack/router-core";
import { createComponent } from "@solidjs/web";
import * as Solid from "solid-js";
//#region src/awaited.tsx
function useAwaited({ promise: _promise }) {
const promise = defer(_promise);
return [Solid.createMemo(async () => await promise)(), promise];
}
function InnerAwait(props) {
return createComponent(Solid.Show, {
get when() {
return props.ready();
},
children: (_) => {
const state = props.deferred[TSR_DEFERRED_PROMISE];
if (state.status === "error") throw state.error;
if (state.status === "pending") {
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);
}
});
}
function Await(props) {
const deferred = defer(props.promise);
const inner = createComponent(InnerAwait, {
deferred,
ready: Solid.createMemo(async () => {
await deferred;
return true;
}),
get children() {
return props.children;
}
});
if (props.fallback === void 0) return inner;
return createComponent(Solid.Loading, {
get fallback() {
return props.fallback;
},
children: inner
});
}
//#endregion
export { Await, useAwaited };
//# sourceMappingURL=awaited.js.map