import './App.css'; import { Waku } from 'js-waku'; import * as React from 'react'; import protons from 'protons'; const ContentTopic = '/toy-chat/2/huilong/proto'; const proto = protons(` message ChatMessage { uint64 timestamp = 1; string nick = 2; bytes text = 3; } `); function App() { const [waku, setWaku] = React.useState(undefined); const [wakuStatus, setWakuStatus] = React.useState('None'); const [messages, setMessages] = React.useState([]); React.useEffect(() => { if (wakuStatus !== 'None') return; setWakuStatus('Starting'); Waku.create({ bootstrap: true }).then((waku) => { setWaku(waku); setWakuStatus('Connecting'); }); }, [waku, wakuStatus]); React.useEffect(() => { if (!waku) return; // We do not handle disconnection/re-connection in this example if (wakuStatus === 'Connected') return; waku.waitForConnectedPeer().then(() => { // We are now connected to a store node setWakuStatus('Connected'); }); }, [waku, wakuStatus]); React.useEffect(() => { if (wakuStatus !== 'Connected') return; const processMessages = (retrievedMessages) => { const messages = retrievedMessages.map(decodeMessage).filter(Boolean); setMessages((currentMessages) => { return currentMessages.concat(messages.reverse()); }); }; waku.store .queryHistory([ContentTopic], { callback: processMessages }) .catch((e) => { console.log('Failed to retrieve messages', e); }); }, [waku, wakuStatus]); return (