@@ -16,28 +16,14 @@ export const make = <R, ER>(
|
|||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
export interface SyncProviderProps<R, ER> {
|
|
||||||
readonly runtime: ReactManagedRuntime<R, ER>
|
|
||||||
readonly children?: React.ReactNode
|
|
||||||
}
|
|
||||||
|
|
||||||
export const SyncProvider = <R, ER>(
|
|
||||||
props: SyncProviderProps<R, ER>
|
|
||||||
): React.ReactNode => React.createElement(props.runtime.context, {
|
|
||||||
value: React.useMemo(() => Effect.runSync(props.runtime.runtime.runtimeEffect), [props.runtime]),
|
|
||||||
children: props.children,
|
|
||||||
})
|
|
||||||
SyncProvider.displayName = "ReactManagedRuntimeSyncProvider"
|
|
||||||
|
|
||||||
|
|
||||||
export interface AsyncProviderProps<R, ER> extends React.SuspenseProps {
|
export interface AsyncProviderProps<R, ER> extends React.SuspenseProps {
|
||||||
readonly runtime: ReactManagedRuntime<R, ER>
|
readonly runtime: ReactManagedRuntime<R, ER>
|
||||||
readonly children?: React.ReactNode
|
readonly children?: React.ReactNode
|
||||||
}
|
}
|
||||||
|
|
||||||
export const AsyncProvider = <R, ER>(
|
export function AsyncProvider<R, ER>(
|
||||||
{ runtime, children, ...suspenseProps }: AsyncProviderProps<R, ER>
|
{ runtime, children, ...suspenseProps }: AsyncProviderProps<R, ER>
|
||||||
): React.ReactNode => {
|
): React.ReactNode {
|
||||||
const promise = React.useMemo(() => Effect.runPromise(runtime.runtime.runtimeEffect), [runtime])
|
const promise = React.useMemo(() => Effect.runPromise(runtime.runtime.runtimeEffect), [runtime])
|
||||||
|
|
||||||
return React.createElement(
|
return React.createElement(
|
||||||
@@ -46,7 +32,6 @@ export const AsyncProvider = <R, ER>(
|
|||||||
React.createElement(AsyncProviderInner<R, ER>, { runtime, promise, children }),
|
React.createElement(AsyncProviderInner<R, ER>, { runtime, promise, children }),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
AsyncProvider.displayName = "AsyncProvider"
|
|
||||||
|
|
||||||
interface AsyncProviderInnerProps<R, ER> {
|
interface AsyncProviderInnerProps<R, ER> {
|
||||||
readonly runtime: ReactManagedRuntime<R, ER>
|
readonly runtime: ReactManagedRuntime<R, ER>
|
||||||
@@ -54,15 +39,9 @@ interface AsyncProviderInnerProps<R, ER> {
|
|||||||
readonly children?: React.ReactNode
|
readonly children?: React.ReactNode
|
||||||
}
|
}
|
||||||
|
|
||||||
const AsyncProviderInner = <R, ER>(
|
function AsyncProviderInner<R, ER>(
|
||||||
{ runtime, promise, children }: AsyncProviderInnerProps<R, ER>
|
{ runtime, promise, children }: AsyncProviderInnerProps<R, ER>
|
||||||
): React.ReactNode => {
|
): React.ReactNode {
|
||||||
const value = React.use(promise)
|
const value = React.use(promise)
|
||||||
|
return React.createElement(runtime.context, { value }, children)
|
||||||
return React.createElement(
|
|
||||||
runtime.context,
|
|
||||||
{ value },
|
|
||||||
children,
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
AsyncProviderInner.displayName = "AsyncProviderInner"
|
|
||||||
|
|||||||
Reference in New Issue
Block a user