Skip to content

Commit

Permalink
Added a deferred mount config provider (#79)
Browse files Browse the repository at this point in the history
  • Loading branch information
Victor Conner authored Jul 25, 2022
1 parent 1932d2e commit 690d9c9
Showing 1 changed file with 27 additions and 4 deletions.
31 changes: 27 additions & 4 deletions packages/@react-facet/deferred-mount/src/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,20 @@ import React, {
} from 'react'
import { createFacet, Facet, useFacetEffect, useFacetState } from '@react-facet/core'

type Config = {
forceImmediateMount: boolean
}

const DeferredMountConfig = createContext<Config>({ forceImmediateMount: false })

export function DeferredMountConfigProvider({ config, children }: { config: Config; children: React.ReactNode }) {
return <DeferredMountConfig.Provider value={config}>{children}</DeferredMountConfig.Provider>
}

function useConfig() {
return useContext(DeferredMountConfig)
}

/**
* Targeting around 60fps
*/
Expand All @@ -24,10 +38,7 @@ interface DeferredMountProviderProps {
frameTimeBudget?: number
}

/**
* Provider that must wrap a tree with nodes being deferred
*/
export function DeferredMountProvider({
export function InnerDeferredMountProvider({
children,
frameTimeBudget = DEFAULT_FRAME_TIME_BUDGET,
}: DeferredMountProviderProps) {
Expand Down Expand Up @@ -141,6 +152,18 @@ export function DeferredMountProvider({
)
}

/**
* Provider that must wrap a tree with nodes being deferred
*/
export function DeferredMountProvider(props: DeferredMountProviderProps) {
const config = useConfig()
if (config.forceImmediateMount) {
return <>{props.children}</>
}

return <InnerDeferredMountProvider {...props} />
}

interface DeferredMountProps {
children: ReactElement
}
Expand Down

0 comments on commit 690d9c9

Please sign in to comment.