mirror of
https://github.com/logos-messaging/waku-react.git
synced 2026-01-02 14:13:10 +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
54 lines
1.5 KiB
TypeScript
54 lines
1.5 KiB
TypeScript
import React from "react";
|
|
|
|
import type { ContentPair, ReactChildrenProps } from "./types";
|
|
import { useCreateContentPair } from "./useCreatContentPair";
|
|
|
|
type ContentPairContextType = Partial<ContentPair>;
|
|
|
|
const ContentPairContext = React.createContext<ContentPairContextType>({
|
|
decoder: undefined,
|
|
encoder: undefined,
|
|
});
|
|
|
|
/**
|
|
* Hook to retrieve Encoder/Decoder pair from Context.
|
|
* @example
|
|
* const { encoder, decoder } = useContentPair();
|
|
* @returns {Object} { encoder, decoder }
|
|
*/
|
|
export const useContentPair = (): ContentPairContextType =>
|
|
React.useContext(ContentPairContext);
|
|
|
|
type ContentPairProviderProps = ReactChildrenProps & {
|
|
contentTopic: string;
|
|
ephemeral?: boolean;
|
|
};
|
|
|
|
/**
|
|
* Provider for creating Encoder/Decoder pair based on contentTopic
|
|
* @example
|
|
* const App = (props) => (
|
|
* <ContentPairProvider contentTopic="/toy-chat/2/huilong/proto">
|
|
* <Component />
|
|
* </ContentPairProvider>
|
|
* );
|
|
* const Component = (props) => {
|
|
* const { encoder, decoder } = useContentPair();
|
|
* ...
|
|
* };
|
|
* @param {string} contentTopic - content topic for configuring the pair
|
|
* @param {boolean} ephemeral - flag to set messages ephemeral according to RFC https://rfc.vac.dev/spec/14/
|
|
* @returns React ContentPair Provider component
|
|
*/
|
|
export const ContentPairProvider: React.FunctionComponent<
|
|
ContentPairProviderProps
|
|
> = (props) => {
|
|
const result = useCreateContentPair(props.contentTopic, props.ephemeral);
|
|
|
|
return (
|
|
<ContentPairContext.Provider value={result}>
|
|
{props.children}
|
|
</ContentPairContext.Provider>
|
|
);
|
|
};
|