import { isEqual } from '@o/fast-compare'
import React, { useContext, useMemo, useRef } from 'react'
// memoized to avoid updates...
export type MergeContextProps = {
Context: React.Context
value: Partial
children: React.ReactNode
}
export function MergeContext({ Context, value, children }: MergeContextProps): any {
const context = useContext(Context)
const key = useRef(0)
const cur = useRef(value)
if (!isEqual(cur.current, value)) {
key.current = key.current + 1
cur.current = value
}
const memoValue = useMemo(() => {
if (context && typeof context === 'object' && context['constructor'].name === 'Object') {
return { ...context, ...value }
} else {
return value
}
}, [key.current])
return {children}
}