{"_id":"@alistigo/react-required-contexts","_rev":"3-5434e688f2fcf1a2bb37d6a17fe0671d","name":"@alistigo/react-required-contexts","dist-tags":{"latest":"0.0.7"},"versions":{"0.0.2":{"name":"@alistigo/react-required-contexts","version":"0.0.2","keywords":["react","contexts","plugin","javascript","typescript"],"license":"MIT","_id":"@alistigo/react-required-contexts@0.0.2","maintainers":[{"name":"mikael.labrut","email":"npm@alistigo.com"}],"homepage":"https://github.com/alistigo/libraries#readme","bugs":{"url":"https://github.com/alistigo/libraries/issues"},"dist":{"shasum":"30474c0c09276f23b5e513911836b8e75a490755","tarball":"https://registry.npmjs.org/@alistigo/react-required-contexts/-/react-required-contexts-0.0.2.tgz","fileCount":21,"integrity":"sha512-o9gIYNp8uO6hEpYv7Enxz6hJ9zmV4uIK1UrzOsdo9Qksl7p+k2KB0pzNLNJniBUc81n8DS40mULaqZnkMJ+UIQ==","signatures":[{"sig":"MEUCIQCDOV5/Z/Kkd/wWNpmiqodSqcGx/Ex9nVvUmvKJSGPJCQIgAdjyIa1WBV/iO+LKaf1jnzNx8gpz4sNcNYZWpXTE8eY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@alistigo%2freact-required-contexts@0.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":10184},"main":"./src/index.js","type":"commonjs","engines":{"node":">=20.0"},"gitHead":"3264478286fc05428cb5223ece664d0ac0e47996","typings":"./src/index.d.ts","_npmUser":{"name":"mikael.labrut","email":"npm@alistigo.com"},"repository":{"url":"git+https://github.com/alistigo/libraries.git","type":"git","directory":"packages/react-required-contexts"},"_npmVersion":"10.5.2","description":"A plugin to react to manage required contexts","directories":{},"_nodeVersion":"20.13.1","dependencies":{"tslib":"^2.3.0","lodash":"^4.17.15"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^18.3.1"},"_npmOperationalInternal":{"tmp":"tmp/react-required-contexts_0.0.2_1716839697494_0.568148099437799","host":"s3://npm-registry-packages"}},"0.0.3":{"name":"@alistigo/react-required-contexts","version":"0.0.3","keywords":["react","contexts","plugin","javascript","typescript"],"license":"MIT","_id":"@alistigo/react-required-contexts@0.0.3","maintainers":[{"name":"mikael.labrut","email":"npm@alistigo.com"}],"homepage":"https://github.com/alistigo/libraries#readme","bugs":{"url":"https://github.com/alistigo/libraries/issues"},"dist":{"shasum":"51a1f48403dd78203cd2bf8dd4939247ffb893f8","tarball":"https://registry.npmjs.org/@alistigo/react-required-contexts/-/react-required-contexts-0.0.3.tgz","fileCount":22,"integrity":"sha512-snNdUaCIQ610PXKxLvbGa/51lmdbDFqa/KdpDcBDrDqRfl/NbkFLhkHbxgN9WLlwJ3m+NoLsCAr2MGykWRPiog==","signatures":[{"sig":"MEQCIHg8233EE70HPUuDbZbrcoyTEfuch6qAi/8nN+pLu//5AiBEXJnZBdj9xgYQEyzfFUY/oGD7adiMM2FmgDatecSyHQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@alistigo%2freact-required-contexts@0.0.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":10310},"main":"./src/index.js","type":"commonjs","engines":{"node":">=20.0"},"gitHead":"2d2d19e3dc3b0ee2fd2ca8d2af58bb934bf1d90c","typings":"./src/index.d.ts","_npmUser":{"name":"mikael.labrut","email":"npm@alistigo.com"},"repository":{"url":"git+https://github.com/alistigo/libraries.git","type":"git","directory":"packages/react-required-contexts"},"_npmVersion":"10.5.2","description":"A plugin to react to manage required contexts","directories":{},"_nodeVersion":"20.13.1","dependencies":{"tslib":"^2.3.0","lodash":"^4.17.15"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^18.3.1"},"_npmOperationalInternal":{"tmp":"tmp/react-required-contexts_0.0.3_1717619515399_0.5740468432994146","host":"s3://npm-registry-packages"}},"0.0.6":{"name":"@alistigo/react-required-contexts","version":"0.0.6","keywords":["react","contexts","plugin","javascript","typescript"],"license":"MIT","_id":"@alistigo/react-required-contexts@0.0.6","maintainers":[{"name":"mikael.labrut","email":"npm@alistigo.com"}],"homepage":"https://github.com/alistigo/libraries/tree/main/packages/react-required-contexts","bugs":{"url":"https://github.com/alistigo/libraries/issues"},"dist":{"shasum":"3ee89d65a586a08789e87892e92e754a15723e97","tarball":"https://registry.npmjs.org/@alistigo/react-required-contexts/-/react-required-contexts-0.0.6.tgz","fileCount":39,"integrity":"sha512-M9E4LTAuxLwcxj1/knf5053oY1nMxzhrVWybsufd+xPLRF5DE8rUlBTHRrLUC6CLHzDDTyXCz/Yjob3ZHokEcQ==","signatures":[{"sig":"MEUCIBcLF5WMNot02Vtkf5ACX0nCtrP6WIejMhyVw+mQg4E9AiEAnOQM3XVmZh+Cbewy/O0GREw78HcnCjnMvSlkm6u36r0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@alistigo%2freact-required-contexts@0.0.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":19335},"main":"./src/index.js","type":"commonjs","engines":{"node":">=20.0"},"gitHead":"c489ccd2efc2ea7601a3886de23c7ab6ee33dc93","typings":"./src/index.d.ts","_npmUser":{"name":"mikael.labrut","email":"npm@alistigo.com"},"repository":{"url":"git+https://github.com/alistigo/libraries.git","type":"git","directory":"packages/react-required-contexts"},"_npmVersion":"10.7.0","description":"A plugin to react to manage required contexts","directories":{},"_nodeVersion":"20.14.0","dependencies":{"tslib":"^2.3.0","lodash":"^4.17.15"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^18.3.1"},"_npmOperationalInternal":{"tmp":"tmp/react-required-contexts_0.0.6_1718381776901_0.14763041151437384","host":"s3://npm-registry-packages"}},"0.0.7":{"name":"@alistigo/react-required-contexts","version":"0.0.7","description":"A plugin to react to manage required contexts","keywords":["react","contexts","plugin","javascript","typescript"],"license":"MIT","main":"./src/index.js","repository":{"type":"git","url":"git+https://github.com/alistigo/libraries.git","directory":"packages/react-required-contexts"},"engines":{"node":">=20.0"},"dependencies":{"lodash":"^4.17.15","tslib":"^2.3.0"},"peerDependencies":{"react":"^18.3.1"},"type":"commonjs","typings":"./src/index.d.ts","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"bugs":{"url":"https://github.com/alistigo/libraries/issues"},"homepage":"https://github.com/alistigo/libraries/tree/main/packages/react-required-contexts","_id":"@alistigo/react-required-contexts@0.0.7","gitHead":"fc402b8a47c3547b17c181d0bf396138c8a81b70","_nodeVersion":"20.15.1","_npmVersion":"10.7.0","dist":{"integrity":"sha512-pMU3Nkr4DJJL1h4NJw+wobIttY9uMw6oLc5mMQazhnndwiKb0Rs3yEUc8x7KwkkrMUV8fXKJskRMJQ7LfGwfcg==","shasum":"3d38fe7ccaa818b3f0f7e204217de269625c3eb5","tarball":"https://registry.npmjs.org/@alistigo/react-required-contexts/-/react-required-contexts-0.0.7.tgz","fileCount":39,"unpackedSize":19860,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@alistigo%2freact-required-contexts@0.0.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDnG7AIsxJFVbtEL3QLrjFZjcInOhrLIu04r41w2E8vPgIhAPyHJtNFFJ9X+McZEhfkSufOwz5mWipDhVh7SKF5iu+B"}]},"_npmUser":{"name":"mikael.labrut","email":"npm@alistigo.com"},"directories":{},"maintainers":[{"name":"mikael.labrut","email":"npm@alistigo.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-required-contexts_0.0.7_1722418568618_0.14135336825289202"},"_hasShrinkwrap":false}},"time":{"created":"2024-05-27T19:54:57.334Z","modified":"2024-07-31T09:36:09.224Z","0.0.2":"2024-05-27T19:54:57.664Z","0.0.3":"2024-06-05T20:31:55.559Z","0.0.6":"2024-06-14T16:16:17.037Z","0.0.7":"2024-07-31T09:36:08.794Z"},"bugs":{"url":"https://github.com/alistigo/libraries/issues"},"license":"MIT","homepage":"https://github.com/alistigo/libraries/tree/main/packages/react-required-contexts","keywords":["react","contexts","plugin","javascript","typescript"],"repository":{"type":"git","url":"git+https://github.com/alistigo/libraries.git","directory":"packages/react-required-contexts"},"description":"A plugin to react to manage required contexts","maintainers":[{"name":"mikael.labrut","email":"npm@alistigo.com"}],"readme":"# react-required-contexts\n\nA react component tree can require multiple react context, and its easy to be lost.\nThis library offer a way to define for each **component** and **hook** what are the required contexts.\n\nIt offers also some tools to **wrap** a component into **only its required contexts**.\n\n## Setup\n\nYou have to create a config file for each context:\n\n### 1 - Definition of context: `position.context.ts`\n\n```ts\nexport const context = PositionContext;\nexport const provider = PositionProvider;\nexport const props = {\n  startPosition: POSITIONS.TOP_LEFT,\n};\n```\n\nThe exported module (\\*.context.ts) should be of TS type `ContextConfig`\n\n### 2 - Library setup: combine all contexts (`required-contexts.ts`)\n\nThen create a file that combine all the context together: `required-contexts.ts`\n\n```ts\nimport * as position from './contexts/position.context';\n\nexport default {\n  position,\n};\n```\n\nFinally init the library by calling `setupDefaultContexts`\n\n```ts\nimport { setupDefaultContexts } from '@alistigo/react-required-contexts';\nimport requiredContexts from 'config/required-contexts';\n\nsetupDefaultContexts(requiredContexts);\n```\n\n### 3 - For each component / hook / part of your application -> define their required contexts\n\n#### Component\n\n```tsx\nimport { PositionContext } from './contexts/position';\n\nexport default function MyComponent() {\n  const { position } = useContext(PositionContext);\n\n  return <span>{position}</span>;\n}\n\n// Required context definition\nMyComponent.requiredContexts = [PositionContext];\n```\n\n#### Hook\n\n```tsx\nimport { PositionContext } from './contexts/position';\n\nexport default function useMyHook() {\n  const { position } = useContext(PositionContext);\n\n  return position;\n}\n\n// Required context definition\nuseMyHook.requiredContexts = [PositionContext];\n```\n\n#### If a component have sub-component that also require some contexts\n\n```tsx\nimport { mergeContexts } from '@alistigo/react-required-contexts';\nimport Component1 from './components/Component1';\nimport Component2 from './components/Component2';\nimport Component3 from './components/Component3';\nimport useMyHook from './hooks/useMyHook';\n\nexport default function MyApp() {\n  useMyHook();\n\n  return (\n    <Component1>\n      <Component2 />\n      <Component3 />\n    </Component1>\n  );\n}\n\n// Required context definition\nMyApp.requiredContexts = mergeContexts(\n  Component1,\n  Component1,\n  Component3,\n  useMyHook\n);\n```\n\n## Usage\n\n### Automatically wrap component into all the required contexts\n\n```tsx\n<RequiredContextsWrapper\n  contexts={MyComponent.requiredContexts}\n  parameters={{ position: { startPosition: 'new-position' } }}\n>\n  <MyComponent />\n</RequiredContextsWrapper>\n```\n","readmeFilename":"README.md"}