Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | 11x 65x 65x 11x | import React from 'react';
import TAO, { Kernel } from '@tao.js/core';
import { DataLayerContext } from './DataLayerContext';
/**
* Value provided by {@link TaoProvider}: the Kernel for this tree.
* @typedef {Object} ProviderContextValue
* @property {Kernel} TAO - the Kernel descendants signal and subscribe on
*/
/**
* Props for {@link TaoProvider}.
* @typedef {Object} TaoProviderProps
* @property {Kernel} TAO - the Kernel instance this React tree uses
* @property {import('react').ReactNode} [children]
*/
/**
* Root TAO context. Named data lives on the tree-scoped
* {@link DataLayerContext} stack maintained by `DataHandler` and read with
* `useTaoData(name)`.
* @type {import('react').Context<ProviderContextValue>}
*/
const Context = React.createContext({
TAO,
});
export { Context };
/**
* Makes a Kernel available to all @tao.js/react components and hooks in the
* tree (and resets the tree-scoped DataHandler layer stack).
* @param {TaoProviderProps} props
* @returns {import('react').ReactElement}
*/
function TaoProvider({ TAO: kernel, children }) {
// Root layer stack must be empty so useTaoData() is undefined until a DataHandler pushes.
const emptyLayers = [];
return (
<Context.Provider value={{ TAO: kernel }}>
<DataLayerContext.Provider value={emptyLayers}>
{children}
</DataLayerContext.Provider>
</Context.Provider>
);
}
// Stryker disable next-line StringLiteral: displayName is DX-only
TaoProvider.displayName = 'TaoProvider';
export { TaoProvider };
export default TaoProvider;
|