mirror of
https://github.com/logos-messaging/examples.waku.org.git
synced 2026-01-09 00:03:11 +00:00
create useFilterMessages hook
This commit is contained in:
parent
dc567a1a4f
commit
1c71f18b54
@ -122,6 +122,54 @@ const usePersistentNick = (): [
|
|||||||
return [nick, setNick];
|
return [nick, setNick];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const useFilterMessages = (waku: undefined | WakuLight): Message[] => {
|
||||||
|
const [messages, setMessages] = useState<Message[]>([]);
|
||||||
|
|
||||||
|
const appendMessages = (newMessages: Message[]) => {
|
||||||
|
if (!newMessages || !newMessages.length) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
setMessages((prev) => [...prev, ...newMessages]);
|
||||||
|
};
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (!waku) return;
|
||||||
|
|
||||||
|
const handleIncomingMessage = (wakuMsg: DecodedMessage) => {
|
||||||
|
console.log("Message received: ", wakuMsg);
|
||||||
|
const msg = Message.fromWakuMessage(wakuMsg);
|
||||||
|
if (msg) {
|
||||||
|
appendMessages([msg]);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
let unsubscribe: undefined | (() => Promise<void>);
|
||||||
|
waku.filter.subscribe([ChatDecoder], handleIncomingMessage).then(
|
||||||
|
(_unsubscribe) => {
|
||||||
|
console.log("subscribed to ", ChatContentTopic);
|
||||||
|
unsubscribe = _unsubscribe;
|
||||||
|
},
|
||||||
|
(e) => {
|
||||||
|
console.error("Failed to subscribe", e);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
return function cleanUp() {
|
||||||
|
if (!waku) return;
|
||||||
|
if (typeof unsubscribe === "undefined") return;
|
||||||
|
unsubscribe().then(
|
||||||
|
() => {
|
||||||
|
console.log("unsubscribed to ", ChatContentTopic);
|
||||||
|
},
|
||||||
|
(e) => console.error("Failed to unsubscribe", e)
|
||||||
|
);
|
||||||
|
};
|
||||||
|
}, [waku]);
|
||||||
|
|
||||||
|
return messages;
|
||||||
|
};
|
||||||
|
|
||||||
export default function App() {
|
export default function App() {
|
||||||
const [messages, dispatchMessages] = useReducer(reduceMessages, []);
|
const [messages, dispatchMessages] = useReducer(reduceMessages, []);
|
||||||
|
|
||||||
@ -147,41 +195,8 @@ export default function App() {
|
|||||||
const [historicalMessagesRetrieved, setHistoricalMessagesRetrieved] =
|
const [historicalMessagesRetrieved, setHistoricalMessagesRetrieved] =
|
||||||
useState(false);
|
useState(false);
|
||||||
|
|
||||||
useEffect(() => {
|
const msgs = useFilterMessages(waku);
|
||||||
if (!waku) return;
|
console.log(msgs);
|
||||||
// Let's retrieve previous messages before listening to new messages
|
|
||||||
if (!historicalMessagesRetrieved) return;
|
|
||||||
|
|
||||||
const handleIncomingMessage = (wakuMsg: DecodedMessage) => {
|
|
||||||
console.log("Message received: ", wakuMsg);
|
|
||||||
const msg = Message.fromWakuMessage(wakuMsg);
|
|
||||||
if (msg) {
|
|
||||||
dispatchMessages([msg]);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
let unsubscribe: undefined | (() => Promise<void>);
|
|
||||||
waku.filter.subscribe([ChatDecoder], handleIncomingMessage).then(
|
|
||||||
(_unsubscribe) => {
|
|
||||||
console.log("subscribed to ", ChatContentTopic);
|
|
||||||
unsubscribe = _unsubscribe;
|
|
||||||
},
|
|
||||||
(e) => {
|
|
||||||
console.error("Failed to subscribe", e);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
return function cleanUp() {
|
|
||||||
if (!waku) return;
|
|
||||||
if (typeof unsubscribe === "undefined") return;
|
|
||||||
unsubscribe().then(
|
|
||||||
() => {
|
|
||||||
console.log("unsubscribed to ", ChatContentTopic);
|
|
||||||
},
|
|
||||||
(e) => console.error("Failed to unsubscribe", e)
|
|
||||||
);
|
|
||||||
};
|
|
||||||
}, [waku, historicalMessagesRetrieved]);
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!waku) return;
|
if (!waku) return;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user