2023-10-30 23:57:10 +01:00
|
|
|
import React from "react";
|
2023-11-01 01:52:51 +01:00
|
|
|
import { CONTENT_TOPIC } from "@/constants";
|
|
|
|
|
import { Message, waku } from "@/services/waku";
|
|
|
|
|
|
|
|
|
|
export type MessageContent = {
|
|
|
|
|
nick: string;
|
|
|
|
|
text: string;
|
|
|
|
|
time: string;
|
|
|
|
|
};
|
2023-10-30 23:57:10 +01:00
|
|
|
|
|
|
|
|
export const useWaku = () => {
|
|
|
|
|
const [messages, setMessages] = React.useState<MessageContent[]>([]);
|
|
|
|
|
|
|
|
|
|
React.useEffect(() => {
|
2023-11-01 01:52:51 +01:00
|
|
|
const messageListener = (event: CustomEvent) => {
|
|
|
|
|
const messages: Message[] = event.detail;
|
|
|
|
|
const parsedMessaged = messages.map((message) => {
|
|
|
|
|
const time = new Date(message.timestamp);
|
|
|
|
|
const payload = JSON.parse(atob(message.payload));
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
nick: payload?.nick || "unknown",
|
|
|
|
|
text: payload?.text || "empty",
|
|
|
|
|
time: time.toDateString(),
|
|
|
|
|
};
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
setMessages((prev) => [...prev, ...parsedMessaged]);
|
2023-10-30 23:57:10 +01:00
|
|
|
};
|
|
|
|
|
|
2023-11-07 00:50:47 +01:00
|
|
|
waku.relay.addEventListener(CONTENT_TOPIC, messageListener);
|
2023-10-30 23:57:10 +01:00
|
|
|
|
|
|
|
|
return () => {
|
2023-11-07 00:50:47 +01:00
|
|
|
waku.relay.removeEventListener(CONTENT_TOPIC, messageListener);
|
2023-10-30 23:57:10 +01:00
|
|
|
};
|
2023-11-01 01:52:51 +01:00
|
|
|
}, [setMessages]);
|
2023-10-30 23:57:10 +01:00
|
|
|
|
|
|
|
|
const onSend = React.useCallback(
|
|
|
|
|
async (nick: string, text: string) => {
|
2023-11-07 00:50:47 +01:00
|
|
|
await waku.relay.send({
|
2023-11-01 01:52:51 +01:00
|
|
|
version: 0,
|
|
|
|
|
timestamp: Date.now(),
|
|
|
|
|
contentTopic: CONTENT_TOPIC,
|
|
|
|
|
payload: btoa(JSON.stringify({
|
|
|
|
|
nick,
|
|
|
|
|
text
|
|
|
|
|
})),
|
|
|
|
|
});
|
2023-10-30 23:57:10 +01:00
|
|
|
},
|
2023-11-01 01:52:51 +01:00
|
|
|
[]
|
2023-10-30 23:57:10 +01:00
|
|
|
);
|
|
|
|
|
|
|
|
|
|
return { onSend, messages };
|
|
|
|
|
};
|
2023-11-01 01:52:51 +01:00
|
|
|
|