{"version":3,"sources":["components/posts/PostButton.js","components/Navbar.js","components/posts/PostFormModal.js","components/posts/Post.js","components/posts/Posts.js","components/AccountButton.js","App.js","reportWebVitals.js","index.js"],"names":["PostButton","props","className","type","id","onClick","e","preventDefault","setModalOpen","Navbar","href","PostFormModal","useState","postContent","setPostContent","loading","setLoading","useEffect","modalOpen","handleSubmitPost","a","posts","submit","alephAccount","address","body","account","channel","api_server","ref","catch","error","Modal","show","Header","Body","onChange","userMessage","target","value","swearjar","profane","alert","placeholder","Footer","disabled","undefined","Post","JSON","parse","post","item_content","itemContent","truncateAddress","timeSince","Date","time","timePosted","content","numericStringCheck","shouldDisplay","src","alt","Posts","loadedPosts","setLoadedPosts","socketConnected","setSocketConnected","loadPosts","get_posts","refs","response","length","WebSocket","onmessage","data","walletAddress","hash","item_hash","some","element","previousPosts","map","AccountButton","connectWallet","App","setWeb3","setAlephAccount","setWalletAddress","connectWeb3","web3","eth","getAccounts","accounts","window","ethereum","isConnected","slice","date","seconds","Math","floor","interval","reportWebVitals","onPerfEntry","Function","then","getCLS","getFID","getFCP","getLCP","getTTFB","Web3","enable","console","log","from_provider","ReactDOM","render","StrictMode","document","getElementById"],"mappings":"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","file":"static/js/main.3b406cc3.chunk.js","sourcesContent":["import React, { useState } from \"react\";\r\n\r\nfunction PostButton(props) {\r\n const openModal = (e) => {\r\n e.preventDefault();\r\n props.setModalOpen(true);\r\n };\r\n\r\n return (\r\n
\r\n \r\n Submit Post\r\n \r\n
\r\n );\r\n}\r\n\r\nexport default PostButton;\r\n","import React from \"react\";\nimport PostButton from \"./posts/PostButton\";\n\nfunction Navbar(props) {\n return (\n \n );\n}\n\nexport default Navbar;\n","import { posts } from \"aleph-js\";\r\nimport React, { useState, useEffect } from \"react\";\r\nimport Modal from \"react-bootstrap/Modal\";\r\nimport swearjar from \"swearjar-extended2\";\r\n\r\nfunction PostFormModal(props) {\r\n const [postContent, setPostContent] = useState(\"\");\r\n const [loading, setLoading] = useState(false);\r\n\r\n useEffect(() => {\r\n if (props.modalOpen) {\r\n setLoading(false);\r\n }\r\n }, [props.modalOpen]);\r\n\r\n const handleUserPost = (e) => {\r\n let userMessage = e.target.value;\r\n if (swearjar.profane(userMessage)) {\r\n alert(\"Such Messages are not Allowed.\");\r\n props.setModalOpen(false);\r\n } else {\r\n setPostContent(userMessage);\r\n }\r\n };\r\n\r\n const close = (e) => {\r\n e.preventDefault();\r\n props.setModalOpen(false);\r\n };\r\n\r\n const handleSubmitPost = async (e) => {\r\n e.preventDefault();\r\n setLoading(true);\r\n // console.log(postContent);\r\n\r\n posts\r\n .submit(\r\n props.alephAccount.address,\r\n \"chat\",\r\n { body: postContent },\r\n {\r\n account: props.alephAccount,\r\n channel: \"TEST\",\r\n api_server: \"https://api2.aleph.im\",\r\n ref: \"hall\"\r\n }\r\n )\r\n .catch((error) => {\r\n setLoading(false);\r\n });\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n x\r\n \r\n \r\n {loading ? (\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n

\r\n

\r\n Please confirm in your wallet.\r\n

\r\n
\r\n
\r\n ) : (\r\n
\r\n \r\n
\r\n {/* */}\r\n \r\n
\r\n
\r\n \r\n \r\n Post\r\n \r\n \r\n
\r\n )}\r\n
\r\n );\r\n}\r\n\r\nexport default PostFormModal;\r\n","import React, { useState } from \"react\";\r\n\r\nfunction Post(props) {\r\n const [itemContent, setItemContent] = useState(\r\n JSON.parse(props.post.item_content)\r\n );\r\n const [address, setAddress] = useState(\r\n props.truncateAddress(itemContent.address)\r\n );\r\n const [timePosted, setTimePosted] = useState(() => {\r\n return props.timeSince(new Date(itemContent.time * 1000)); //fix this #TODO\r\n });\r\n\r\n const [content, setContent] = useState(itemContent.content.body);\r\n\r\n const numericStringCheck = (content) => {\r\n return content >= \"0\" && content <= \"9\";\r\n };\r\n\r\n const shouldDisplay = (content) => {\r\n return (\r\n content !== \"\" &&\r\n content !== undefined &&\r\n numericStringCheck(content) === false\r\n );\r\n };\r\n\r\n return (\r\n
\r\n {shouldDisplay(content) ? (\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n

\r\n {address} .{\" \"}\r\n {timePosted} \r\n

\r\n

{content}

\r\n
\r\n
\r\n
\r\n
\r\n ) : (\r\n \"\"\r\n )}\r\n
\r\n );\r\n}\r\n\r\nexport default Post;\r\n","import React, { useState, useEffect } from \"react\";\r\nimport { posts } from \"aleph-js\"; //Gives me Dummy data to use\r\nimport Post from \"./Post\";\r\n\r\nfunction Posts(props) {\r\n const [loadedPosts, setLoadedPosts] = useState([]);\r\n const [socketConnected, setSocketConnected] = useState(false);\r\n\r\n const loadPosts = async () => {\r\n const response = await posts.get_posts(\"chat\", {\r\n refs: [\"hall\"]\r\n });\r\n setLoadedPosts(response.posts);\r\n };\r\n\r\n useEffect(() => {\r\n loadPosts();\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (loadedPosts.length > 0 && !socketConnected) {\r\n const url = \"wss://api2.aleph.im/api/ws0/messages?contentTypes=chat\";\r\n\r\n const connection = new WebSocket(url);\r\n\r\n connection.onmessage = (e) => {\r\n let post = JSON.parse(e.data);\r\n if (post.item_content && post.content.type === \"chat\") {\r\n if (post.content.address === props.walletAddress) {\r\n props.setModalOpen(false);\r\n }\r\n\r\n const hash = post.item_hash;\r\n const loadedData = loadedPosts.some((element) => {\r\n return element.item_hash === hash;\r\n });\r\n\r\n if (!loadedData) {\r\n setLoadedPosts((previousPosts) => [post, ...previousPosts]);\r\n }\r\n }\r\n };\r\n\r\n setSocketConnected(true);\r\n }\r\n\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [loadedPosts]);\r\n\r\n return (\r\n
\r\n

Welcome to Tweety!

\r\n {loadedPosts.map((post) => (\r\n \r\n ))}\r\n
\r\n );\r\n}\r\n\r\nexport default Posts;\r\n","import React from \"react\";\r\n\r\nfunction AccountButton(props) {\r\n return (\r\n \r\n );\r\n}\r\n\r\nexport default AccountButton;\r\n","import { useState, useEffect } from \"react\";\nimport \"./App.css\";\nimport Navbar from \"./components/Navbar\";\nimport PostFormModal from \"./components/posts/PostFormModal\";\nimport Posts from \"./components/posts/Posts\";\nimport AccountButton from \"./components/AccountButton\";\n\nfunction App(props) {\n const [web3, setWeb3] = useState();\n const [alephAccount, setAlephAccount] = useState();\n const [walletAddress, setWalletAddress] = useState();\n\n const [modalOpen, setModalOpen] = useState(false);\n\n const connectWallet = async (e) => {\n const { alephAccount, web3 } = await props.connectWeb3(e);\n const accounts = await web3.eth.getAccounts();\n\n setWeb3(web3);\n setAlephAccount(alephAccount);\n setWalletAddress(accounts[0]);\n };\n\n //The UseEffect ensures that the account data stays saved even after refresh.\n useEffect(() => {\n if (window.ethereum.isConnected()) {\n connectWallet();\n }\n }, []);\n\n const truncateAddress = (address) => {\n return `${address.slice(0, 5)}...${address.slice(\n address.length - 4,\n address.length\n )}`;\n };\n\n function timeSince(date) {\n var seconds = Math.floor((new Date() - date) / 1000);\n\n var interval = seconds / 31536000;\n\n if (interval > 1) {\n return Math.floor(interval) + \"y\";\n }\n interval = seconds / 2592000;\n if (interval > 1) {\n return Math.floor(interval) + \"m\";\n }\n interval = seconds / 86400;\n if (interval > 1) {\n return Math.floor(interval) + \"d\";\n }\n interval = seconds / 3600;\n if (interval > 1) {\n return Math.floor(interval) + \"h\";\n }\n interval = seconds / 60;\n if (interval > 1) {\n return Math.floor(interval) + \"m\";\n }\n return Math.floor(seconds) + \"s\";\n }\n\n return (\n
\n
\n \n \n
\n
\n
\n \n
\n
\n
\n\n
\n \n
\n );\n}\n\nexport default App;\n","const reportWebVitals = onPerfEntry => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import Web3 from \"web3\";\nimport { ethereum } from \"aleph-js\";\nimport React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport \"bootstrap/dist/css/bootstrap.min.css\";\nimport \"bootstrap/dist/js/bootstrap.js\";\nimport \"./index.css\";\nimport App from \"./App\";\nimport reportWebVitals from \"./reportWebVitals\";\n\nconst connectWeb3 = async (e) => {\n if (e) e.preventDefault();\n\n var web3, alephAccount;\n\n if (window.ethereum) {\n web3 = new Web3(window.ethereum);\n try {\n await window.ethereum.enable();\n console.log(\"Web 3 Connected...\");\n } catch (error) {\n console.error(error);\n }\n } else if (window.web3) {\n web3 = window.web3;\n console.log(\"Injected web3 detected.\");\n }\n\n if (window.ethereum.isConnected()) {\n try {\n alephAccount = await ethereum.from_provider(window[\"ethereum\"]);\n } catch (error) {\n console.error(error);\n }\n }\n\n return {\n alephAccount: alephAccount,\n web3: web3\n };\n};\n\nReactDOM.render(\n \n \n ,\n document.getElementById(\"root\")\n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n"],"sourceRoot":""}