waku-react/src/useCreatContentPair.ts
Sasha e4d0106499
feat!: add new hooks and improvements (#3)
* 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
2023-02-28 00:57:59 +01:00

34 lines
962 B
TypeScript

import React from "react";
import { createDecoder, createEncoder } from "@waku/core";
import type { Decoder, Encoder } from "@waku/core/dist/lib/message/version_0";
import type { ContentPair } from "./types";
/**
* Creates Encoder / Decoder pair for a given contentTopic.
* @param {string} contentTopic - topic to orient to
* @param {boolean} ephemeral - makes messages ephemeral, default to false
* @returns {Object} Encoder / Decoder pair
*/
export const useCreateContentPair = (
contentTopic: string,
ephemeral = false,
): ContentPair => {
const [encoder, setEncoder] = React.useState<Encoder>(
createEncoder(contentTopic, ephemeral),
);
const [decoder, setDecoder] = React.useState<Decoder>(
createDecoder(contentTopic),
);
React.useEffect(() => {
setEncoder(createEncoder(contentTopic, ephemeral));
setDecoder(createDecoder(contentTopic));
}, [contentTopic, ephemeral]);
return {
encoder,
decoder,
};
};