mirror of
https://github.com/logos-messaging/waku-react.git
synced 2026-01-07 08:33:07 +00:00
33 lines
923 B
TypeScript
33 lines
923 B
TypeScript
|
|
import { useEffect, useState } from "react";
|
||
|
|
import { createDecoder, createEncoder } from "@waku/core";
|
||
|
|
import type { Decoder, Encoder } from "@waku/core/dist/lib/message/version_0";
|
||
|
|
|
||
|
|
type ContentPair = {
|
||
|
|
encoder: null | Encoder;
|
||
|
|
decoder: null | Decoder;
|
||
|
|
};
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Creates Encoder / Decoder pair for a given contentTopic.
|
||
|
|
* @param {string} contentTopic - topic to orient to
|
||
|
|
* @param {boolean} ephemeral - optional, makes messages ephemeral
|
||
|
|
* @returns {Object} Encoder / Decoder pair
|
||
|
|
*/
|
||
|
|
export const useContentPair = (
|
||
|
|
contentTopic: string,
|
||
|
|
ephemeral?: boolean,
|
||
|
|
): ContentPair => {
|
||
|
|
const [encoder, setEncoder] = useState<null | Encoder>(null);
|
||
|
|
const [decoder, setDecoder] = useState<null | Decoder>(null);
|
||
|
|
|
||
|
|
useEffect(() => {
|
||
|
|
setEncoder(createEncoder(contentTopic, ephemeral));
|
||
|
|
setDecoder(createDecoder(contentTopic));
|
||
|
|
}, [contentTopic, ephemeral]);
|
||
|
|
|
||
|
|
return {
|
||
|
|
encoder,
|
||
|
|
decoder,
|
||
|
|
};
|
||
|
|
};
|