Skip to content

Instantly share code, notes, and snippets.

@guillermodlpa
Created August 7, 2023 08:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save guillermodlpa/c2fa748cc1a176176b0c3c5fd83d29e1 to your computer and use it in GitHub Desktop.
Save guillermodlpa/c2fa748cc1a176176b0c3c5fd83d29e1 to your computer and use it in GitHub Desktop.
Component to compose context providers and pass separate props to each of them
type Components =
| React.ElementType
| [React.ElementType, { [key: string]: unknown }];
const Compose = ({
components,
children,
}: {
components: Components[];
children: JSX.Element;
}) => (
<>
{components.reverse().reduce((acc, curr) => {
const [Provider, props] = Array.isArray(curr)
? [curr[0], curr[1]]
: [curr, {}];
return <Provider {...props}>{acc}</Provider>;
}, children)}
</>
);
// example
export default function MemorialContextProviders({
children,
scraped,
}: {
children: JSX.Element;
scraped: boolean;
}) {
return (
<Compose
components={[
AddMemoryModalContextProvider,
[ClaimModalContextProvider, { scraped }],
VisitorContextProvider,
]}
>
{children}
</Compose>
);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment