0.0.7 • Published 12 months ago

@alistigo/react-required-contexts v0.0.7

Weekly downloads
-
License
MIT
Repository
github
Last release
12 months ago

react-required-contexts

A react component tree can require multiple react context, and its easy to be lost. This library offer a way to define for each component and hook what are the required contexts.

It offers also some tools to wrap a component into only its required contexts.

Setup

You have to create a config file for each context:

1 - Definition of context: position.context.ts

export const context = PositionContext;
export const provider = PositionProvider;
export const props = {
  startPosition: POSITIONS.TOP_LEFT,
};

The exported module (*.context.ts) should be of TS type ContextConfig

2 - Library setup: combine all contexts (required-contexts.ts)

Then create a file that combine all the context together: required-contexts.ts

import * as position from './contexts/position.context';

export default {
  position,
};

Finally init the library by calling setupDefaultContexts

import { setupDefaultContexts } from '@alistigo/react-required-contexts';
import requiredContexts from 'config/required-contexts';

setupDefaultContexts(requiredContexts);

3 - For each component / hook / part of your application -> define their required contexts

Component

import { PositionContext } from './contexts/position';

export default function MyComponent() {
  const { position } = useContext(PositionContext);

  return <span>{position}</span>;
}

// Required context definition
MyComponent.requiredContexts = [PositionContext];

Hook

import { PositionContext } from './contexts/position';

export default function useMyHook() {
  const { position } = useContext(PositionContext);

  return position;
}

// Required context definition
useMyHook.requiredContexts = [PositionContext];

If a component have sub-component that also require some contexts

import { mergeContexts } from '@alistigo/react-required-contexts';
import Component1 from './components/Component1';
import Component2 from './components/Component2';
import Component3 from './components/Component3';
import useMyHook from './hooks/useMyHook';

export default function MyApp() {
  useMyHook();

  return (
    <Component1>
      <Component2 />
      <Component3 />
    </Component1>
  );
}

// Required context definition
MyApp.requiredContexts = mergeContexts(
  Component1,
  Component1,
  Component3,
  useMyHook
);

Usage

Automatically wrap component into all the required contexts

<RequiredContextsWrapper
  contexts={MyComponent.requiredContexts}
  parameters={{ position: { startPosition: 'new-position' } }}
>
  <MyComponent />
</RequiredContextsWrapper>
0.0.7

12 months ago

0.0.6

1 year ago

0.0.3

1 year ago

0.0.2

1 year ago