{"version":3,"sources":["components/posts/SubmitPostButton.js","components/posts/icons.js","components/Navbar.js","components/AccountButton.js","assets/twitter-logo.png","components/posts/Publish.js","components/posts/Posts.js","components/posts/PublishForm.js","App.js","reportWebVitals.js","index.js"],"names":["SubmitPostButton","props","className","onClick","e","preventDefault","setModalOpen","twitter","fill","viewBox","d","home","explore","notifications","messages","bookmarks","lists","profile","more","cx","cy","r","Navbar","AccountButton","walletAddress","truncateAddress","connectWallet","Publish","useState","JSON","parse","post","item_content","itemContent","address","timeSince","Date","time","timePosted","content","body","undefined","shouldDisplay","src","logo","alt","Posts","loadedPosts","setLoadedPosts","socketConnected","setSocketConnected","loadPosts","a","posts","get_posts","refs","response","useEffect","length","WebSocket","onmessage","data","type","hash","item_hash","some","element","previousPosts","map","PublishForm","postContent","setPostContent","txInProgress","setTxInProgress","modalOpen","submitPost","submit","alephAccount","account","channel","api_server","ref","catch","error","Modal","show","Header","href","Body","role","style","width","onChange","target","value","placeholder","Footer","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.1d2ca57c.chunk.js","sourcesContent":["const SubmitPostButton = (props) => {\n const openModal = (e) => {\n e.preventDefault();\n props.setModalOpen(true);\n };\n\n return (\n \n );\n};\n\nexport default SubmitPostButton;","export const twitter = \nexport const home = \nexport const explore = \nexport const notifications = \nexport const messages = \nexport const bookmarks = \nexport const lists = \nexport const profile = \nexport const more = \n","import React from \"react\";\nimport SubmitPostButton from \"./posts/SubmitPostButton\";\nimport {\n home,\n explore,\n twitter,\n notifications,\n messages,\n bookmarks,\n lists,\n profile,\n more,\n} from \"./posts/icons\";\nimport \"./Navbar.scss\";\n\nconst Navbar = (props) => {\n return (\n
\n
\n
{twitter}
\n
{home} Home
\n
{explore} Explore
\n
{twitter} Twitter
\n
{notifications} Notifications
\n
{messages} Messages
\n
{bookmarks} Bookmarks
\n
{lists} Lists
\n
{profile} Profile
\n
{more} More
\n \n
\n
\n );\n};\n\nexport default Navbar;\n","import React from \"react\";\n\nconst AccountButton = (props) => {\n return (\n \n );\n};\n\nexport default AccountButton;\n","export default __webpack_public_path__ + \"static/media/twitter-logo.6d274e0c.png\";","import { useState } from \"react\";\nimport logo from \"../../assets/twitter-logo.png\";\n\nconst Publish = (props) => {\n const [itemContent, _setItemContent] = useState(\n JSON.parse(props.post.item_content)\n );\n const [address, _setAddress] = useState(\n props.truncateAddress(itemContent.address)\n );\n const [timePosted, _setTimePosted] = useState(() => {\n return props.timeSince(new Date(itemContent.time * 1000));\n });\n const [content, _setContent] = useState(itemContent.content.body);\n\n // console.log(props.post)\n const shouldDisplay = (content) => {\n return content !== \"\" && content !== undefined;\n };\n\n return (\n
\n {shouldDisplay(content) ? (\n
\n
\n
\n
\n \"twitter\n
\n
\n

\n {address}\n · {timePosted}\n

\n

{content}

\n
\n
\n
\n
\n ) : (\n \"\"\n )}\n
\n );\n};\n\nexport default Publish;\n","import { posts } from \"aleph-js\";\nimport { useState, useEffect } from \"react\";\n\nimport Publish from \"./Publish\";\n\nconst Posts = (props) => {\n const [loadedPosts, setLoadedPosts] = useState([]);\n const [socketConnected, setSocketConnected] = useState(false);\n\n const loadPosts = async () => {\n const response = await posts.get_posts(\"chat\", { refs: [\"hall\"] });\n setLoadedPosts(response.posts);\n };\n\n useEffect(() => {\n loadPosts();\n }, []);\n\n useEffect(() => {\n if (loadedPosts.length > 0 && !socketConnected) {\n const url = \"wss://api2.aleph.im/api/ws0/messages?contentTypes=chat\";\n\n const connection = new WebSocket(url);\n\n connection.onmessage = (e) => {\n let post = JSON.parse(e.data);\n if (post.item_content && post.content.type === \"chat\") {\n if (post.content.address === props.walletAddress) {\n props.setModalOpen(false);\n }\n const hash = post.item_hash;\n\n const alreadyLoaded = loadedPosts.some((element) => {\n return element.item_hash === hash;\n });\n\n if (!alreadyLoaded) {\n setLoadedPosts((previousPosts) => [post, ...previousPosts]);\n }\n }\n };\n\n setSocketConnected(true);\n }\n }, [loadedPosts]);\n\n return (\n
\n {loadedPosts.map((post) => (\n \n ))}\n
\n );\n};\n\nexport default Posts;\n","import { posts } from \"aleph-js\";\nimport { useState, useEffect } from \"react\";\nimport Modal from \"react-bootstrap/Modal\";\n\nconst PublishForm = (props) => {\n const [postContent, setPostContent] = useState(\"\");\n const [txInProgress, setTxInProgress] = useState(false);\n\n useEffect(() => {\n if (props.modalOpen) {\n setTxInProgress(false);\n }\n }, [props.modalOpen]);\n\n const handleTyping = (e) => {\n setPostContent(e.target.value);\n };\n\n const disconnect = (e) => {\n e.preventDefault();\n props.setModalOpen(false);\n };\n const submitPost = async (e) => {\n e.preventDefault();\n\n setTxInProgress(true);\n\n posts\n .submit(\n props.alephAccount.address,\n \"chat\",\n { body: postContent },\n {\n account: props.alephAccount,\n channel: \"TEST\",\n api_server: \"https://api2.aleph.im\",\n ref: \"hall\",\n }\n )\n .catch((error) => {\n setTxInProgress(false);\n });\n };\n\n return (\n \n \n \n ×\n \n \n\n {txInProgress ? (\n \n
\n
\n \n
\n ) : (\n
\n \n \n \n \n \n Post\n \n \n
\n )}\n
\n );\n};\nexport default PublishForm;\n","import { useState, useEffect } from \"react\";\nimport \"./App.scss\";\nimport Navbar from \"./components/Navbar\";\nimport AccountButton from \"./components/AccountButton\";\nimport Posts from \"./components/posts/Posts\";\nimport PublishForm from \"./components/posts/PublishForm\";\nimport { BrowserRouter } from \"react-router-dom\";\nimport \"./App.scss\";\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 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 const timeSince = (date) => {\n var seconds = Math.floor((new Date() - date) / 1000);\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\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// import { EthereumContextProvider } from './hooks/ethereum';\n\nconst connectWeb3 = async (e) => {\n if (e)\n e.preventDefault()\n\n var web3, alephAccount;\n\n if (window.ethereum) {\n web3 = new Web3(window.ethereum);\n try {\n // Request account access if needed\n await window.ethereum.enable();\n // Accounts now exposed\n console.log(\"Welcome to Twitter web3...\")\n } catch (error) {\n console.error(error)\n }\n }\n // Legacy dapp browsers...\n else if (window.web3) {\n // Use Mist/MetaMask's provider.\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 {/* */}\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":""}