add useLightPush hook

This commit is contained in:
Sasha 2023-02-23 19:25:33 +01:00
parent 599ac5cbe4
commit 0d34db28b7
No known key found for this signature in database
2 changed files with 57 additions and 0 deletions

View File

@ -7,6 +7,7 @@ export {
useCreateRelayNode,
} from "./useCreateWaku";
export { useFilterMessages } from "./useFilterMessages";
export { useLightPush } from "./useLightPush";
export { useStoreMessages } from "./useStoreMessages";
export {
FullNodeProvider,

56
src/useLightPush.ts Normal file
View File

@ -0,0 +1,56 @@
import React from "react";
import type {
IEncoder,
ILightPush,
IMessage,
ProtocolOptions,
SendResult,
Waku,
} from "@waku/interfaces";
type AbstractLightPushNode = Waku & {
lightPush: ILightPush;
};
type UseLightPushParams = {
encoder: undefined | IEncoder;
node: undefined | AbstractLightPushNode;
};
type PushFn = (
message: IMessage,
opts?: ProtocolOptions,
) => Promise<SendResult>;
type UseLightPushResult = {
push: undefined | PushFn;
};
/**
* Returns light push methods bound to node and encoder
* @param {Object} params.node - node that implements ILightPush, hook does nothing if empty
* @param {Object} params.encoder - encoder for processing messages, hook does nothing if empty
* @returns {Object} methods of ILightPush such as push
*/
export const useLightPush = (
params: UseLightPushParams,
): UseLightPushResult => {
const { node, encoder } = params;
const push = React.useCallback<PushFn>(
(message, opts = undefined) => {
return node!.lightPush.push(encoder as IEncoder, message, opts);
},
[node, encoder],
);
if (!node && !encoder) {
return {
push: undefined,
};
}
return {
push,
};
};