mirror of
https://github.com/logos-messaging/waku-react.git
synced 2026-01-13 19:43:08 +00:00
* use React global var * use undefined instead on null * use react as peer dependency * make ephemeral default to false * set default ephemeral to false, use node instead of waku naming * implement useStoreMessages * fix types * export useStoreMessages * make content pair set initially * remove deps for useEffect for createWaku to prevent re rendering * prevent setting of empty messages * accept undefined node, handle empty message case * accept undefined node, handle empty message case * add TODOs * rename to useCreateContentPair * remove export of WakuContext, create ContetnPair provider * remove export of WakuContext, create ContetnPair provider * fix lint * fix typo * remove export * fix prettier * make decoded optional * add jsdocs * add useLightPush hook * update types, add usePeers, add prettierignore * remove full node hook, provider * remove export * remove FullNode stuff
97 lines
2.8 KiB
TypeScript
97 lines
2.8 KiB
TypeScript
import React from "react";
|
|
import type { Waku } from "@waku/interfaces";
|
|
|
|
import type {
|
|
BootstrapNodeOptions,
|
|
CrateNodeResult,
|
|
LightNodeOptions,
|
|
ReactChildrenProps,
|
|
RelayNodeOptions,
|
|
} from "./types";
|
|
import { useCreateLightNode, useCreateRelayNode } from "./useCreateWaku";
|
|
|
|
type WakuContextType<T extends Waku> = CrateNodeResult<T>;
|
|
|
|
const WakuContext = React.createContext<WakuContextType<Waku>>({
|
|
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<LightNode>();
|
|
* @example
|
|
* const { node, isLoading, error } = useWaku<RelayNode>();
|
|
* @example
|
|
* const { node, isLoading, error } = useWaku<FullNode>();
|
|
* @example
|
|
* const { node, isLoading, error } = useWaku();
|
|
* @returns WakuContext
|
|
*/
|
|
export const useWaku = <T extends Waku>(): WakuContextType<T> =>
|
|
React.useContext(WakuContext) as WakuContextType<T>;
|
|
|
|
type ProviderProps<T> = ReactChildrenProps & BootstrapNodeOptions<T>;
|
|
|
|
/**
|
|
* Provider for creating Light Node based on options passed.
|
|
* @example
|
|
* const App = (props) => (
|
|
* <LightNodeProvider options={{...}}>
|
|
* <Component />
|
|
* </LightNodeProvider>
|
|
* );
|
|
* const Component = (props) => {
|
|
* const { node, isLoading, error } = useWaku<LightNode>();
|
|
* ...
|
|
* };
|
|
* @param {Object} props - options to create a node and other React props
|
|
* @param {LightNodeOptions} props.options - optional options for creating Light Node
|
|
* @param {Protocols} props.protocols - optional protocols list to initiate node with
|
|
* @returns React Light Node provider component
|
|
*/
|
|
export const LightNodeProvider: React.FunctionComponent<
|
|
ProviderProps<LightNodeOptions>
|
|
> = (props) => {
|
|
const result = useCreateLightNode({
|
|
options: props.options,
|
|
protocols: props.protocols,
|
|
});
|
|
|
|
return (
|
|
<WakuContext.Provider value={result}>{props.children}</WakuContext.Provider>
|
|
);
|
|
};
|
|
|
|
/**
|
|
* Provider for creating Relay Node based on options passed.
|
|
* @example
|
|
* const App = (props) => (
|
|
* <RelayNodeProvider options={{...}}>
|
|
* <Component />
|
|
* </RelayNodeProvider>
|
|
* );
|
|
* const Component = (props) => {
|
|
* const { node, isLoading, error } = useWaku<RelayNode>();
|
|
* ...
|
|
* };
|
|
* @param {Object} props - options to create a node and other React props
|
|
* @param {RelayNodeOptions} props.options - optional options for creating Relay Node
|
|
* @param {Protocols} props.protocols - optional protocols list to initiate node with
|
|
* @returns React Relay Node provider component
|
|
*/
|
|
export const RelayNodeProvider: React.FunctionComponent<
|
|
ProviderProps<RelayNodeOptions>
|
|
> = (props) => {
|
|
const result = useCreateRelayNode({
|
|
options: props.options,
|
|
protocols: props.protocols,
|
|
});
|
|
|
|
return (
|
|
<WakuContext.Provider value={result}>{props.children}</WakuContext.Provider>
|
|
);
|
|
};
|