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} }