Refactoring
Some checks failed
Lint / lint (push) Failing after 15m36s

This commit is contained in:
Julien Valverdé
2025-03-26 20:24:53 +01:00
parent b50255ded2
commit 66de517ab5
2 changed files with 23 additions and 20 deletions

View File

@@ -27,7 +27,7 @@ export type ReactProvider<R> = React.FC<{
readonly children?: React.ReactNode
}>
function makeProvider<R>(Context: React.Context<Context.Context<R>>): ReactProvider<R> {
const makeProvider = <R>(Context: React.Context<Context.Context<R>>): ReactProvider<R> => {
return function ReffuseContextReactProvider(props) {
const runtime = ReffuseRuntime.useRuntime()
@@ -46,13 +46,15 @@ export type AsyncReactProvider<R> = React.FC<{
readonly children?: React.ReactNode
}>
function makeAsyncProvider<R>(Context: React.Context<Context.Context<R>>): AsyncReactProvider<R> {
function Inner({ promise, children }: {
const makeAsyncProvider = <R>(Context: React.Context<Context.Context<R>>): AsyncReactProvider<R> => {
function ReffuseContextAsyncReactProviderInner({ promise, children }: {
readonly promise: Promise<Context.Context<R>>
readonly children?: React.ReactNode
}) {
const value = React.use(promise)
return React.createElement(Context, { value, children })
return React.createElement(Context, {
value: React.use(promise),
children,
})
}
return function ReffuseContextAsyncReactProvider(props) {
@@ -63,26 +65,26 @@ function makeAsyncProvider<R>(Context: React.Context<Context.Context<R>>): Async
Runtime.runPromise(runtime),
), [props.layer, runtime])
const inner = React.createElement(Inner, { ...props, promise })
return React.createElement(React.Suspense, { children: inner, fallback: props.fallback })
return React.createElement(React.Suspense, {
children: React.createElement(ReffuseContextAsyncReactProviderInner, { ...props, promise }),
fallback: props.fallback,
})
}
}
export function make<R = never>() {
return new ReffuseContext<R>()
}
export const make = <R = never>() => new ReffuseContext<R>()
export function useMergeAll<T extends Array<unknown>>(
export const useMergeAll = <T extends Array<unknown>>(
...contexts: [...{ [K in keyof T]: ReffuseContext<T[K]> }]
): Context.Context<T[number]> {
): Context.Context<T[number]> => {
const values = contexts.map(v => React.use(v.Context))
return React.useMemo(() => Context.mergeAll(...values), values)
}
export function useMergeAllLayers<T extends Array<unknown>>(
export const useMergeAllLayers = <T extends Array<unknown>>(
...contexts: [...{ [K in keyof T]: ReffuseContext<T[K]> }]
): Layer.Layer<T[number]> {
): Layer.Layer<T[number]> => {
const values = contexts.map(v => React.use(v.Context))
return React.useMemo(() => Array.isNonEmptyArray(values)

View File

@@ -4,12 +4,13 @@ import * as React from "react"
export const Context = React.createContext<Runtime.Runtime<never>>(null!)
export const Provider = (props: {
export const Provider = function ReffuseRuntimeReactProvider(props: {
readonly children?: React.ReactNode
}) => React.createElement(Context, {
}) {
return React.createElement(Context, {
...props,
value: Runtime.defaultRuntime,
})
Provider.displayName = "ReffuseRuntimeReactProvider" as const
})
}
export const useRuntime = () => React.useContext(Context)