{"version":3,"sources":["displayPosts.js","App.js","reportWebVitals.js","index.js"],"names":["DisplayPosts","useState","posts","setPosts","newComments","setNewComments","newUsers","setNewUsers","getPosts","axios","get","then","response","data","catch","error","console","log","useEffect","handleAddComment","e","preventDefault","postTimestamp","target","parentElement","getAttribute","username","comment","cleaned_username","cleanInput","cleaned_comment","undefined","alert","requestAddComment","handleChangeUsername","timestamp","category","handleChangeComment","ToggleAddComment","children","eventKey","toggleAccordion","useAccordionButton","type","style","backgroundColor","border","borderRadius","onClick","toSend","commentTimestamp","Date","toLocaleString","post","headers","title","content","state","setState","handleInputChange","name","value","prevState","str","split","join","ToggleAddPost","id","Accordion","defaultActiveKey","flush","Card","Header","Collapse","Body","onSubmit","cleaned_title","cleaned_content","comments","requestAddPost","className","onChange","map","line","App","path","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","render","StrictMode","document","getElementById"],"mappings":"2UAsYeA,EA9XM,WAAM,MAECC,mBAAS,IAFV,mBAElBC,EAFkB,KAEXC,EAFW,OAKaF,mBAAS,IALtB,mBAKlBG,EALkB,KAKLC,EALK,OAOOJ,mBAAS,IAPhB,mBAOlBK,EAPkB,KAORC,EAPQ,KAUnBC,EAAW,WACfC,IACGC,IAAI,qDACJC,MAAK,SAACC,GACLT,EAASS,EAASC,SAEnBC,OAAM,SAAUC,GACfC,QAAQC,IAAIF,OAKlBG,qBAAU,WACRV,MACC,IAGH,IAAMW,EAAmB,SAACC,GACxBA,EAAEC,iBAEF,IAAMC,EAAgBF,EAAEG,OAAOC,cAAcC,aAAa,SAEpDC,EAAWpB,EAASgB,GACpBK,EAAUvB,EAAYkB,GAEtBM,EAAmBC,EAAWH,GAC9BI,EAAkBD,EAAWF,GAEV,KAArBC,QAAgDG,IAArBH,EAC7BI,MAAM,mCACuB,KAApBF,QAA8CC,IAApBD,EACnCE,MAAM,kCAENC,EAAkBX,EAAeI,EAAUC,IAKzCO,EAAuB,SAACR,EAAUS,GACtC5B,GAAY,SAAC6B,GAAD,mBAAC,eACRA,GADO,kBAETD,EAAYT,QAKXW,EAAsB,SAACV,EAASQ,GACpC9B,GAAe,SAAC+B,GAAD,mBAAC,eACXA,GADU,kBAEZD,EAAYR,QAKjB,SAASW,EAAT,GAAmD,IAAvBC,EAAsB,EAAtBA,SAAUC,EAAY,EAAZA,SAC9BC,EAAkBC,YAAmBF,GAE3C,OACE,wBACEG,KAAK,SACLC,MAAO,CACLC,gBAAiB,6BACjBC,OAAQ,kBACRC,aAAc,OAEhBC,QAASP,EAPX,SASGF,IAMP,IAAMN,EAAoB,SAACX,EAAeI,EAAUC,GAClD,IAAMsB,EAAS,CACb3B,cAAeA,EACfK,QAASA,EACTD,SAAUA,EACVwB,iBAAkBC,OAAOC,kBAU3B3C,IACG4C,KACC,sDACAJ,EAVS,CACXK,QAAS,CACP,eAAgB,mBAChB,8BAA+B,OAUhC3C,MAAK,WACJuB,EAAqB,GAAIZ,GACzBe,EAAoB,GAAIf,GACxBd,OAEDM,OAAM,SAAUC,GACfC,QAAQC,IAAIF,OA9GO,EAmHCd,mBAAS,CAAEsD,MAAO,GAAI7B,SAAU,GAAI8B,QAAS,KAnH9C,mBAmHlBC,EAnHkB,KAmHXC,EAnHW,KAsHnBC,EAAoB,SAACC,EAAMC,GAC/BH,GAAS,SAACI,GAAD,mBAAC,eACLA,GADI,kBAENF,EAAOC,QAmCNhC,EAAa,SAACkC,GAClB,MAAsB,kBAARA,EAAmBA,EAAIC,MAAM,OAAOC,KAAK,IAAMF,GAuB/D,SAASG,EAAT,GAAgD,IAAvB3B,EAAsB,EAAtBA,SAAUC,EAAY,EAAZA,SAC3BC,EAAkBC,YAAmBF,GAE3C,OACE,wBACEG,KAAK,SACLC,MAAO,CACLC,gBAAiB,6BACjBC,OAAQ,kBACRC,aAAc,OAEhBC,QAASP,EAPX,SASGF,IAKP,OACE,gCACE,qBAAK4B,GAAG,SAAR,SACE,yCAGF,cAACC,EAAA,EAAD,CAAWC,iBAAiB,IAAIC,OAAK,EAArC,SACE,eAACC,EAAA,EAAD,CAAMJ,GAAG,mBAAT,UACE,cAACI,EAAA,EAAKC,OAAN,CAAaL,GAAG,mBAAhB,SACE,cAACD,EAAD,CAAe1B,SAAS,IAAxB,wBAEF,cAAC4B,EAAA,EAAUK,SAAX,CAAoBjC,SAAS,IAA7B,SACE,cAAC+B,EAAA,EAAKG,KAAN,UACE,uBAAMC,SAlDI,SAACvD,GACrBA,EAAEC,iBAEF,IAAMuD,EAAgB/C,EAAW4B,EAAMF,OACjC3B,EAAmBC,EAAW4B,EAAM/B,UACpCmD,EAAkBhD,EAAW4B,EAAMD,SAEnB,KAAlBoB,EACF5C,MAAM,gCACwB,KAArBJ,EACTI,MAAM,mCACuB,KAApB6C,EACT7C,MAAM,kCA/Ca,SAACuB,EAAO7B,EAAU8B,GACvC,IAAMP,EAAS,CACbd,UAAWgB,OAAOC,iBAClBG,MAAOA,EACP7B,SAAUA,EACV8B,QAASA,EACTsB,SAAU,IAUZrE,IACG4C,KAAK,oDAAqDJ,EARhD,CACXK,QAAS,CACP,eAAgB,mBAChB,8BAA+B,OAMhC3C,MAAK,WACJgD,EAAkB,QAAS,IAC3BA,EAAkB,WAAY,IAC9BA,EAAkB,UAAW,IAC7BnD,OAEDM,OAAM,SAAUC,GACfC,QAAQC,IAAIF,MAwBdgE,CAAetB,EAAMF,MAAOE,EAAM/B,SAAU+B,EAAMD,UAoCXW,GAAI,cAAnC,UACE,2CAEE,uBACA,uBACEa,UAAU,QACVb,GAAG,aACHP,KAAK,QACLjB,KAAK,OACLkB,MAAOJ,EAAMF,MACb0B,SAAU,SAAC7D,GAAD,OACRuC,EAAkBvC,EAAEG,OAAOqC,KAAMxC,EAAEG,OAAOsC,aAKhD,uBACA,uBAEA,8CAEE,uBACA,uBACEmB,UAAU,QACVb,GAAG,gBACHP,KAAK,WACLjB,KAAK,OACLkB,MAAOJ,EAAM/B,SACbuD,SAAU,SAAC7D,GAAD,OACRuC,EAAkBvC,EAAEG,OAAOqC,KAAMxC,EAAEG,OAAOsC,aAKhD,uBACA,uBAEA,6CAEE,uBACA,0BACEM,GAAG,cACHP,KAAK,UACLC,MAAOJ,EAAMD,QACbyB,SAAU,SAAC7D,GAAD,OACRuC,EAAkBvC,EAAEG,OAAOqC,KAAMxC,EAAEG,OAAOsC,aAKhD,uBAEA,uBAAOlB,KAAK,SAASkB,MAAM,uBAOrC,qBAAKM,GAAG,iBAAR,SACGjE,EAAMgF,KAAI,SAAC7B,GAAD,OACT,sBAA0Bc,GAAG,aAA7B,UACE,qBAAKA,GAAG,iBAAR,SAA0Bd,EAAKE,QAE/B,sBAAKY,GAAG,6BAAR,UACE,qBAAKA,GAAG,oBAAR,SAA6Bd,EAAK3B,WAClC,qBAAKyC,GAAG,qBAAR,SAA8Bd,EAAKlB,eAGrC,qBAAKgC,GAAG,mBAAmBa,UAAU,gBAArC,SACG3B,EAAKG,QAAQQ,MAAM,MAAMkB,KAAI,SAACC,GAAD,OAC5B,4BAAIA,SAIR,uBAEA,cAACf,EAAA,EAAD,CAAWC,iBAAiB,IAAIC,OAAK,EAArC,SACE,eAACC,EAAA,EAAD,CAAMJ,GAAG,sBAAT,UACE,cAACI,EAAA,EAAKC,OAAN,UACE,cAAClC,EAAD,CAAkBE,SAAS,IAA3B,2BAEF,cAAC4B,EAAA,EAAUK,SAAX,CAAoBjC,SAAS,IAA7B,SACE,cAAC+B,EAAA,EAAKG,KAAN,UACE,qBAAKP,GAAG,cAAca,UAAW3B,EAAKlB,UAAtC,SACE,uBAAMwC,SAAUxD,EAAhB,UACE,8CAEE,uBACA,uBACEyC,KAAK,WACLoB,UAAU,QACVrC,KAAK,OACLkB,WAC+B9B,IAA7BzB,EAAS+C,EAAKlB,WACV,GACA7B,EAAS+C,EAAKlB,WAEpB8C,SAAU,SAAC7D,GAAD,OACRc,EACEd,EAAEG,OAAOsC,MACTR,EAAKlB,iBAMb,uBACA,uBAEA,6CAEE,uBACA,0BACEyB,KAAK,UACLO,GAAG,iBACHa,UAAU,QACVnB,MAAOzD,EAAYiD,EAAKlB,WACxB8C,SAAU,SAAC7D,GAAD,OACRiB,EACEjB,EAAEG,OAAOsC,MACTR,EAAKlB,iBAMb,uBAEA,uBAAOQ,KAAK,SAASkB,MAAM,yBAQvC,qBAAKM,GAAG,gBAAR,sBAEA,qBAAKA,GAAI,oBAAT,SACGd,EAAKyB,SAASI,KAAI,SAACvD,GAAD,OACjB,sBAEEwC,GAAG,gBACHa,UAAWrD,EAAQQ,UAHrB,UAKE,sBAAKgC,GAAG,6BAAR,UACE,qBAAKA,GAAG,oBAAoBa,UAAW,WAAvC,SACGrD,EAAQD,WAGX,qBAAKyC,GAAG,qBAAqBa,UAAW,WAAxC,SACGrD,EAAQQ,eAIb,qBAAKgC,GAAG,mBAAmBa,UAAU,mBAArC,SACGrD,EAAQ6B,QAAQQ,MAAM,MAAMkB,KAAI,SAACC,GAAD,OAC/B,4BAAIA,WAhBHxD,EAAQQ,kBAjFXkB,EAAKlB,oB,MC1QViD,MARf,WACE,OACE,cAAC,IAAD,UACE,cAAC,EAAD,CAAcC,KAAK,SCGVC,EAZS,SAAAC,GAClBA,GAAeA,aAAuBC,UACxC,6BAAqB7E,MAAK,YAAkD,IAA/C8E,EAA8C,EAA9CA,OAAQC,EAAsC,EAAtCA,OAAQC,EAA8B,EAA9BA,OAAQC,EAAsB,EAAtBA,OAAQC,EAAc,EAAdA,QAC3DJ,EAAOF,GACPG,EAAOH,GACPI,EAAOJ,GACPK,EAAOL,GACPM,EAAQN,OCDdO,IAASC,OACP,cAAC,IAAMC,WAAP,UACE,cAAC,EAAD,MAEFC,SAASC,eAAe,SAM1BZ,M","file":"static/js/main.f5a5881c.chunk.js","sourcesContent":["import React, { useState, useEffect } from 'react';\nimport axios from 'axios';\n\nimport { Accordion, Card } from 'react-bootstrap';\nimport { useAccordionButton } from 'react-bootstrap/AccordionButton';\n\nimport './displayPosts.css';\n\nconst DisplayPosts = () => {\n // stores the posts to be displayed\n const [posts, setPosts] = useState([]);\n\n // stores the contents of any new comments being composed\n const [newComments, setNewComments] = useState({});\n // stores the users of any new comments being composed\n const [newUsers, setNewUsers] = useState({});\n\n // update the posts being displayed\n const getPosts = () => {\n axios\n .get('https://serverless-api.sidwan02.workers.dev/posts')\n .then((response) => {\n setPosts(response.data);\n })\n .catch(function (error) {\n console.log(error);\n });\n };\n\n // on startup, get the posts for the initial display\n useEffect(() => {\n getPosts();\n }, []);\n\n // error check fields before posting new comment\n const handleAddComment = (e) => {\n e.preventDefault();\n\n const postTimestamp = e.target.parentElement.getAttribute('class');\n\n const username = newUsers[postTimestamp];\n const comment = newComments[postTimestamp];\n\n const cleaned_username = cleanInput(username);\n const cleaned_comment = cleanInput(comment);\n\n if (cleaned_username === '' || cleaned_username === undefined) {\n alert('Error: Username cannot be empty');\n } else if (cleaned_comment === '' || cleaned_comment === undefined) {\n alert('Error: Comment cannot be empty');\n } else {\n requestAddComment(postTimestamp, username, comment);\n }\n };\n\n // update a new comment's username to reflect changed input\n const handleChangeUsername = (username, timestamp) => {\n setNewUsers((category) => ({\n ...category,\n [timestamp]: username,\n }));\n };\n\n // update a new comment's content to reflect changed input\n const handleChangeComment = (comment, timestamp) => {\n setNewComments((category) => ({\n ...category,\n [timestamp]: comment,\n }));\n };\n\n // toggles the accordion containing the form to add a new comment\n function ToggleAddComment({ children, eventKey }) {\n const toggleAccordion = useAccordionButton(eventKey);\n\n return (\n \n );\n }\n\n // update the new comment in KV\n const requestAddComment = (postTimestamp, username, comment) => {\n const toSend = {\n postTimestamp: postTimestamp,\n comment: comment,\n username: username,\n commentTimestamp: Date().toLocaleString(),\n };\n\n let config = {\n headers: {\n 'Content-Type': 'application/json',\n 'Access-Control-Allow-Origin': '*',\n },\n };\n\n axios\n .post(\n 'https://serverless-api.sidwan02.workers.dev/comment',\n toSend,\n config\n )\n .then(() => {\n handleChangeUsername('', postTimestamp);\n handleChangeComment('', postTimestamp);\n getPosts();\n })\n .catch(function (error) {\n console.log(error);\n });\n };\n\n // stores the fields of a new post\n const [state, setState] = useState({ title: '', username: '', content: '' });\n\n // update a new post's content to reflect changed input\n const handleInputChange = (name, value) => {\n setState((prevState) => ({\n ...prevState,\n [name]: value,\n }));\n };\n\n // update the new post in KV\n const requestAddPost = (title, username, content) => {\n const toSend = {\n timestamp: Date().toLocaleString(),\n title: title,\n username: username,\n content: content,\n comments: [],\n };\n\n let config = {\n headers: {\n 'Content-Type': 'application/json',\n 'Access-Control-Allow-Origin': '*',\n },\n };\n\n axios\n .post('https://serverless-api.sidwan02.workers.dev/posts', toSend, config)\n .then(() => {\n handleInputChange('title', '');\n handleInputChange('username', '');\n handleInputChange('content', '');\n getPosts();\n })\n .catch(function (error) {\n console.log(error);\n });\n };\n\n // removes all whitespace from any string input\n const cleanInput = (str) => {\n return typeof str === 'string' ? str.split(/\\s+/).join('') : str;\n };\n\n // error check fields before posting new post\n const handleAddPost = (e) => {\n e.preventDefault();\n\n const cleaned_title = cleanInput(state.title);\n const cleaned_username = cleanInput(state.username);\n const cleaned_content = cleanInput(state.content);\n\n if (cleaned_title === '') {\n alert('Error: Title cannot be empty');\n } else if (cleaned_username === '') {\n alert('Error: Username cannot be empty');\n } else if (cleaned_content === '') {\n alert('Error: Content cannot be empty');\n } else {\n requestAddPost(state.title, state.username, state.content);\n }\n };\n\n // toggles the accordion containing the form to add a new post\n function ToggleAddPost({ children, eventKey }) {\n const toggleAccordion = useAccordionButton(eventKey);\n\n return (\n \n );\n }\n\n return (\n
{line}
\n ))}\n{line}
\n ))}\n