"use client"; import type { CreateNodeOptions, IWaku, LightNode } from "@waku/interfaces"; import * as React from "react"; import type { CreateNodeResult, ReactChildrenProps } from "./types.js"; import { useCreateLightNode } from "./useCreateWaku.js"; type WakuContextType = CreateNodeResult; const WakuContext = React.createContext>({ node: undefined, isLoading: false, error: undefined }); /** * Hook to retrieve Waku node from Context. By default generic Waku type will be used. * @example * const { node, isLoading, error } = useWaku(); * @example * const { node, isLoading, error } = useWaku(); * @example * const { node, isLoading, error } = useWaku(); * @example * const { node, isLoading, error } = useWaku(); * @returns WakuContext */ export const useWaku = (): WakuContextType => React.useContext(WakuContext) as WakuContextType; type ProviderProps = ReactChildrenProps & { options: T }; /** * Provider for creating Waku node based on options passed. * @example * const App = (props) => ( * * * * ); * const Component = (props) => { * const { node, isLoading, error } = useWaku(); * ... * }; * @param {Object} props - options to create a node and other React props * @param {CreateNodeOptions} props.options - optional options for creating Light Node * @returns React Light Node provider component */ export const WakuProvider = ( props: ProviderProps ): React.ReactElement => { const result = useCreateLightNode(props.options); return ( {props.children} ); };