{"version":3,"sources":["Components/DateRange.js","Components/PersonIcon.js","Components/MessageGroup.js","Components/Conversation.js","Components/Landing.js","Components/Contribute.js","Components/RequestsTable.js","Components/Request.js","Components/Thread.js","Components/Search/Filters/TextSearch.js","Components/Search/Filters/ParticipantSearch.js","Components/SearchThreadResults.js","Components/Search/ThreadSearchResults.js","Components/Search.js","Components/Navigation.js","App.js","index.js"],"names":["useStyles","makeStyles","theme","container","display","flexWrap","textField","marginLeft","spacing","marginRight","width","DateAndTimePickers","props","classes","React","useState","loading","setLoading","count","setCount","fromDate","setFromDate","toDate","setToDate","inFlight","setInFlight","getCount","from_date","to_date","console","log","abort","api_request","XMLHttpRequest","addEventListener","request_return_value","status","JSON","parse","this","responseText","open","send","className","noValidate","TextField","id","label","type","defaultValue","InputLabelProps","shrink","onChange","e","newValue","target","value","CircularProgress","Button","variant","PersonIcon","ref","useRef","alertOpen","setAlertOpen","anchorEl","setAnchorEl","alertMsg","setAlertMsg","showToolTip","setShowToolTip","handleAlert","success","handleClose","viewThread","ClickAwayListener","onClickAway","Tooltip","title","info","aria-label","disableHoverListener","onMouseEnter","onMouseLeave","Avatar","owner","onClick","event","currentTarget","onClose","initials","number","Menu","keepMounted","Boolean","MenuItem","disabled","Divider","thread_link","component","Link","to","message_context_link","message_id","name","navigator","clipboard","writeText","then","Snackbar","anchorOrigin","vertical","horizontal","autoHideDuration","reason","message","MessageBubbles","formattedMessages","messageTexts","map","class","body","MessageGroup","obj","messageClass","iconClass","rowJustify","messageList","messages","attachment_name","url","endsWith","href","test","src","personIcon","sender","undefined","slice","thread_id","Grid","direction","date","alignItems","wrap","justifyContent","item","queryString","require","Conversation","getSender","messageGroup","content","getDate","Date","toLocaleDateString","month","day","year","hour","minute","timeZoneName","prepareName","include_number","prepareInitials","hash","window","location","split","pop","parsedHash","requested_view_as","focus","threadData","viewAs","setViewAs","assignments","setAssignments","messageGroups","setMessageGroups","participants","setParticipants","threadId","setThreadId","useEffect","assignmentData","document","getElementById","scrollIntoView","behavior","block","inline","Card","CardHeader","avatar","AvatarGroup","participant","includes","action","IconButton","size","join","p","filter","getParticipantHeader","subheader","weekday","getStartDate","CardContent","meta","view_as","shows_timestamp","root","minWidth","bullet","margin","transform","fontSize","pos","marginBottom","Landing","currentTime","firstTime","setHours","getHours","data","toISOString","Typography","CardActions","color","Contribute","useRowStyles","borderBottom","Row","row","setOpen","link_item","visible","request_id","view","navigation","currentEntry","scroll_id","sessionStorage","setItem","Fragment","TableRow","TableCell","scope","align","description","date_published","style","paddingBottom","paddingTop","colSpan","Collapse","in","timeout","unmountOnExit","Box","px","Table","TableBody","details","detailsRow","field","link","RequestsTable","withStyles","flexGrow","position","suggestionsContainerOpen","left","right","zIndex","suggestion","suggestionsList","padding","listStyleType","rows","setRows","getItem","query","archive_hash","message_count","tRows","element","push","created_at","toLocaleString","buildRows","TableContainer","Paper","TableHead","Request","threads","setThreads","requestId","match","params","results","getConversationMessages","Object","keys","thread","LinearProgress","Thread","TextSearchFilter","setResults","text","handleSearch","preventDefault","myHeaders","Headers","append","raw","stringify","fetch","method","headers","redirect","response","json","result","catch","error","sx","flexShrink","onSubmit","FormControl","fullWidth","r","thead_id","headline","v","i","a","length","ParticipantSearch","options","setOptions","itemChanged","values","forEach","vv","numbers","rule","threadsLoadingCallback","threadsCallback","initialFilters","Autocomplete","multiple","getOptionLabel","option","key","filterOptions","x","onInputChange","newInputValue","URL","searchParams","set","items","icon","isNaN","group","isOptionEqualToValue","renderInput","renderOption","mr","createData","ButtonGroup","numberItem","marginTop","search_numbers","search","ThreadSearchResults","m","Item","styled","backgroundColor","palette","mode","typography","body2","textAlign","secondary","Search","Stack","t","c","searchString","list","fullList","TemporaryDrawer","anchor","top","bottom","state","setState","toggleDrawer","AppBar","Toolbar","edge","menuButton","Drawer","clsx","role","onKeyDown","List","ListItem","button","ListItemIcon","RequestsList","Container","App","path","ReactDOM","render","StrictMode"],"mappings":"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","file":"static/js/main.36cf2e77.chunk.js","sourcesContent":["import React from 'react';\nimport { makeStyles } from '@mui/styles';\nimport TextField from '@mui/material/TextField';\n\nimport CircularProgress from '@mui/material/CircularProgress';\nimport Button from '@mui/material/Button';\n\n\nconst useStyles = makeStyles((theme) => ({\n container: {\n display: 'flex',\n flexWrap: 'wrap',\n },\n textField: {\n marginLeft: theme.spacing(1),\n marginRight: theme.spacing(1),\n width: 200,\n },\n}));\n\nexport default function DateAndTimePickers(props) {\n const classes = useStyles();\n\n\tconst [loading, setLoading] = React.useState(false);\n\tconst [count, setCount] = React.useState(0);\n\tconst [fromDate, setFromDate] = React.useState('2019-01-01T09:00');\n\tconst [toDate, setToDate] = React.useState('2022-12-31T18:00');\n\tconst [inFlight, setInFlight] = React.useState(null);\n\n\n\tconst getCount = (from_date, to_date) => {\n\n\t\t\tif (inFlight != null) {\n\t\t\t\tconsole.log(inFlight);\n\t\t\t\tinFlight.abort();\n\t\t\t\tsetInFlight(null);\n\t\t\t\t\n\t\t\t}\n\t\t\tsetLoading(true);\n\n\t\t\tvar api_request = new XMLHttpRequest();\n\t\t\tapi_request.addEventListener('load', function () {\n\t\t\t\tvar request_return_value = api_request.status === 200 ? JSON.parse(this.responseText) : { 'count' : 0 };\n\t\t\t\tconsole.log(request_return_value);\n\t\t\t\tsetCount(request_return_value['count']);\n\t\t\t\tsetLoading(false);\n\t\t\t\tsetInFlight(null);\n\t\t\t});\n\n\t\t\tapi_request.open('GET', 'https://api.txtifier.com/v1/messages/count/' + from_date + '/' + to_date);\n\t\t\tapi_request.send();\n\t\t\tsetInFlight(api_request);\n\t};\n\n\tconst datetime_changed_from = function (e) {\n\t\tvar newValue = e.target.value;\n\t\tsetFromDate(newValue);\n\t\tgetCount(newValue, toDate);\n\t}\n\n\tconst datetime_changed_to = function (e) {\n\t\tvar newValue = e.target.value;\n\t\tsetToDate(fromDate, newValue);\n\t\tgetCount();\n\t}\n\n return (\n
\n \n\n \n\t\t\t{loading && }\n\t\t\t{(!loading && count > 0 ) && }\n \n );\n}\n","import React from 'react';\n\n// Material UI\n\nimport Avatar from \"@mui/material/Avatar\";\nimport Tooltip from '@mui/material/Tooltip';\nimport Menu from '@mui/material/Menu';\nimport MenuItem from '@mui/material/MenuItem';\nimport { Link } from 'react-router-dom';\nimport ClickAwayListener from '@mui/material/ClickAwayListener';\nimport Divider from '@mui/material/Divider';\nimport Snackbar from '@mui/material/Snackbar';\n\n// Local\nimport '../css/Message.css';\n\nexport function PersonIcon(props) {\n const ref = React.useRef();\n\n\tconst [alertOpen, setAlertOpen] = React.useState(false);\n const [anchorEl, setAnchorEl] = React.useState(null);\n\tconst [alertMsg, setAlertMsg] = React.useState(\"Copied to Clipboard\")\n\n\n\tconst [showToolTip, setShowToolTip] = React.useState(false)\n\n const handleAlert = (success) => {\n\t\tif (success) {\n\t\t\tsetAlertMsg(\"Copied to Clipboard\");\n\t\t}\n\t\telse {\n\t\t\tsetAlertMsg(\"Failed to Copy to Clipboard\");\n\t\t}\n setAlertOpen(true);\n };\n\n const handleAlertClose = (event, reason) => {\n if (reason === 'clickaway') {\n return;\n }\n\n setAlertOpen(false);\n };\n\n const handleClick = (event) => {\n setAnchorEl(event.currentTarget);\n\t\tsetShowToolTip(false)\n };\n\n const handleClose = () => {\n setAnchorEl(null);\n };\n\n const viewThread = () => {\n setAnchorEl(null);\n }\n\n\tconst copyNumber = () => {\n\t\tnavigator.clipboard.writeText(props.number).then(() => {\n\t\t\t/* Resolved - text copied to clipboard */\n\t\t\thandleAlert(true);\n\t\t},() => {\n\t\t\thandleAlert(false);\n\t\t\t/* Rejected - clipboard failed */\n\t\t});\n\t}\n\n\tconst copyLink = () => {\n\t\tconst url = new URL(window.location.href);\n\t\turl.searchParams.set(\"focus\", props.message_id);\n\t\tnavigator.clipboard.writeText(url).then(() => {\n\t\t\t/* Resolved - text copied to clipboard */\n\t\t\thandleAlert(true);\n\t\t},() => {\n\t\t\t/* Rejected - clipboard failed */\n\t\t\thandleAlert(false);\n\t\t});\n\t}\n\n\tconst copyName = () => {\n\t\tnavigator.clipboard.writeText(props.name).then(() => {\n\t\t\t/* Resolved - text copied to clipboard */\n\t\t\thandleAlert(true);\n\t\t},() => {\n\t\t\t/* Rejected - clipboard failed */\n\t\t\thandleAlert(false);\n\t\t});\n\t}\n\n // console.log(\"PERSON PROPS\", props);\n return (\n\t
\n\t \n setShowToolTip(true)}\n onMouseLeave={() => setShowToolTip(false)}\n\t\t\t{...props}>\n \n {props.initials}\n\t\t\t\t{props.number && \n \n\n\t\t\t\t\t{props.info}\n\t\t\t\t\t\n\n\t\t\t\t\t{props.thread_link &&\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tSee thread as {props.info}\n\t\t\t\t\t\t\t\n\t\t\t\t\t}\n\n\t\t\t\t\t{props.message_context_link &&\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tSee message in full context\n\t\t\t\t\t\t\n\t\t\t\t\t}\n \n\t\t\t\t\t\tSee threads including this number\n \n\t\t\t\t\t\n\t\t\t\t\t{false && props.message_id && \n\t\t\t\t\t\t\n\t\t\t\t\t\t\tCopy link to this message\n\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\t{props.name && \n\t\t\t\t\t\t\n\t\t\t\t\t\t\tCopy name ({props.name})\n\t\t\t\t\t\t\n\t\t\t\t\t}\n \n\t\t\t\t\t\tCopy number ({props.number})\n \n \n\t\t\t\t}\n \n {/* */}\n \n\t \n\t \n\t
\n );\n}\n","\n// Material UI\nimport Grid from \"@mui/material/Grid\";\nimport ContactsIcon from '@mui/icons-material/Contacts';\nimport RecordVoiceOverIcon from '@mui/icons-material/RecordVoiceOver';\n\n// Local\nimport '../css/Message.css';\nimport { PersonIcon } from './PersonIcon';\n\nfunction MessageBubbles(props) {\n const formattedMessages = props.messageTexts.map((message) =>\n

{message.body}

\n );\n return (\n
\n {formattedMessages}\n
\n );\n}\n\nfunction prepareInitials(obj, number) {\n\tif (obj === undefined) {\n\t\tif (number == null) {\n\t\t\treturn \"?\";\n\t\t}\n\t\treturn number.slice(-2);\n\t}\n\telse {\n\t\treturn obj;\n\t}\n}\n\nexport default function MessageGroup(props) {\n // const ref = React.useRef();\n\n const messageClass = props.owner ? \"send\" : \"receive\";\n const iconClass = messageClass + \"-icon\";\n const rowJustify = props.owner ? \"flex-end\" : \"flex-start\";\n\n const messageList = props.messages ? props.messages.map((message) => {\n\t\tif (message.attachment_name != null) {\n\t\t\tvar url = \"https://api.txtifier.com/attachments/\" + message.id + \"/\" + message.attachment_name\n\t\t\tif (message.attachment_name.endsWith(\".vcf\")) {\n\t\t\t\treturn {\"body\":
, \"message_id\":message.message_id};\n\t\t\t}\n\t\t\telse if (/(?:mp3)|(?:amr)$/.test(message.attachment_name)) {\n\t\t\t\treturn {\"body\":
, \"message_id\":message.message_id};\n\t\t\t}\n\t\t\telse{\n\t\t\t\treturn {\"body\":
{message.body}
, \"message_id\":message.message_id};\n\t\t\t}\n\t\t}\n return {\"body\":message.body, \"message_id\":message.message_id};\n }) : [];\n\n const personIcon = (\n \n );\n\n return (\n \n
{props.date}
\n \n {props.owner ? null : (\n \n {personIcon}\n \n )}\n \n \n \n {props.owner ? (\n \n {personIcon}\n \n ) : null}\n \n \n );\n}\n","import React, { useState, useEffect } from \"react\";\n\n// Material UI\nimport AvatarGroup from '@mui/material/AvatarGroup';\nimport Card from \"@mui/material/Card\";\nimport CardContent from \"@mui/material/CardContent\";\nimport CardHeader from \"@mui/material/CardHeader\";\nimport IconButton from \"@mui/material/IconButton\";\nimport MoreVertIcon from \"@mui/icons-material/MoreVert\";\nimport Menu from '@mui/material/Menu';\nimport MenuItem from '@mui/material/MenuItem';\n\nimport { Link } from 'react-router-dom';\n\n\n\n\n// Local\nimport MessageGroup from \"./MessageGroup\";\nimport { PersonIcon } from \"./PersonIcon\";\n\nconst queryString = require('query-string');\n\nexport default function Conversation(props) {\n // const messageGroups = [];\n\n function getSender(messageGroup) {\n // Message Groups are organized by sender, so\n // sender value is the same for all messages\n // in a Message Group.\n\n return messageGroup ? messageGroup.content[0].sender : \"\";\n }\n\n function getStartDate(messageGroup) {\n if (!messageGroup) return;\n return new Date(messageGroup.content[0].date).toLocaleDateString(\"en-US\", {\n weekday: \"long\",\n year: \"numeric\",\n month: \"long\",\n day: \"numeric\",\n });\n }\n\n function getDate(messageGroup) {\n return new Date(messageGroup.content[0].date).toLocaleDateString(\"en-US\", {\n month: \"numeric\",\n day: \"2-digit\",\n year: \"2-digit\",\n hour: \"numeric\",\n minute: \"numeric\",\n timeZoneName: \"short\",\n });\n }\n\n\n\n\tfunction prepareName(obj, number, include_number=true) {\n\t\tif (obj === null) {\n\t\t\treturn number;\n\t\t}\n\t\telse {\n\t\t\tvar name = obj;\n\t\t\tif (include_number) {\n\t\t\t\tname += \" (\" + number + \")\";\n\t\t\t}\n\t\t\treturn name;\n\t\t}\n }\n\n function getParticipantHeader(participants) {\n if (!participants) return;\n var p = participants.map((p) => {return p[0] ? p[0] : p[2]})\n .filter((p) => {\n return p !== null;\n });\n\n\t\t\treturn p.join(', ');\n }\n\n\tfunction prepareInitials(obj, number) {\n\t\tif (obj === null) {\n\t\t\tif (number === null) {\n\t\t\t\treturn '?';\n\t\t\t}\n\t\t\treturn number.slice(-2);\n\t\t}\n\t\telse {\n\t\t\treturn obj;\n\t\t}\n }\n\n let hash = window.location.hash.split('?').pop();\n const parsedHash = queryString.parse(hash);\n let requested_view_as = parsedHash['view_as'];\n let focus = parsedHash['focus'];\n\n if (requested_view_as === undefined) { \n requested_view_as = props.threadData.messages[0]['meta']['view_as']\n if (requested_view_as === undefined || requested_view_as === null) {\n requested_view_as = [getSender(props.threadData.messages[0])];\n }\n }\n else {\n requested_view_as = requested_view_as.split(',');\n }\n\n const [viewAs, setViewAs] = useState(requested_view_as);\n const [assignments, setAssignments] = useState([]);\n const [messageGroups, setMessageGroups] = useState([]);\n const [participants, setParticipants] = useState([]);\n const [threadId, setThreadId] = useState([]);\n\n useEffect(() => {\n setMessageGroups(props.threadData.messages);\n setViewAs(requested_view_as);\n setParticipants(props.threadData.participants);\n\t\tsetAssignments(props.assignmentData);\n setThreadId(props.id)\n\n }, [props]);\n\n\tuseEffect(() => {\n if (focus) {\n var item = document.getElementById(\"message_id_\" + focus)\n if (item) {\n item.scrollIntoView({behavior: \"auto\", block: \"center\", inline: \"nearest\"});\n }\n }\n\t});\n\n\n const [anchorEl, setAnchorEl] = React.useState(null);\n\n const handleClick = (event) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleClose = () => {\n setAnchorEl(null);\n };\n\n const viewThread = () => {\n setAnchorEl(null);\n }\n\n return (\n // \n // \n \n \n {participants\n ? participants.map((participant) => {\n if (participant && participant[2]) {\n return (\n \n );\n }\n })\n : null}\n \n }\n action={\n
\n \n \n \n \n\n \n \n View Thread Across All Requests\n \n \n \n
\n }\n title={getParticipantHeader(participants)}\n subheader={getStartDate(messageGroups[0])}\n />\n \n {messageGroups.map((messageGroup) => {\n const sender = getSender(messageGroup);\n return (\n \n );\n })}\n \n \n
\n );\n}\n","import React from 'react';\nimport { makeStyles } from '@mui/styles';\nimport Card from '@mui/material/Card';\nimport CardActions from '@mui/material/CardActions';\nimport CardContent from '@mui/material/CardContent';\nimport Button from '@mui/material/Button';\nimport Typography from '@mui/material/Typography';\nimport { Link } from 'react-router-dom';\nimport Conversation from './Conversation';\nimport Grid from \"@mui/material/Grid\";\n\nconst useStyles = makeStyles({\n root: {\n minWidth: 275,\n },\n bullet: {\n display: 'inline-block',\n margin: '0 2px',\n transform: 'scale(0.8)',\n },\n title: {\n fontSize: 14,\n },\n pos: {\n marginBottom: 12,\n },\n});\n\nexport default function Landing() {\n const classes = useStyles();\n\n\tconst currentTime = new Date();\n\tvar firstTime = new Date();\n\tfirstTime.setHours(firstTime.getHours() - 2);\n\n\tconst data = {\n\t\t'first' : firstTime.toISOString(),\n\t\t'last' : currentTime.toISOString(),\n\t\t'participants' : [\n\t\t\t['Txtifier.com', 'Txt', '555-5555'],\n\t\t\t['Me', 'Me', '867-5309']\n\t\t],\n\t\t'messages' : [\n\t\t\t{\n\t\t\t\t'content' : [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"attachment_name\": null,\n\t\t\t\t\t\t\"id\": \"1\",\n\t\t\t\t\t\t\"message_id\": \"1\",\n\t\t\t\t\t\t\"thread_id\": \"-1\",\n\t\t\t\t\t\t\"date\": firstTime.toISOString(),\n\t\t\t\t\t\t\"sender\": \"555-5555\",\n\t\t\t\t\t\t\"recipients\": [\n\t\t\t\t\t\t\t\"867-5309\"\n\t\t\t\t\t\t],\n\t\t\t\t\t\t\"attachments\": 0,\n\t\t\t\t\t\t\"priority\": null,\n\t\t\t\t\t\t\"body\": \"Welcome to Txtifier.com\",\n\t\t\t\t\t\t\"initials\": 'Txt',\n\t\t\t\t\t\t\"name\": 'Txtifier.com',\n\t\t\t\t\t\t\"is_sender\": false\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t'meta' : {\n\t\t\t\t\t'initials' : 'Txt',\n\t\t\t\t\t'name' : 'Txtifier.com',\n\t\t\t\t\t'shows_timestamp' : true,\n\t\t\t\t\t'view_as' : [\n\t\t\t\t\t\t'867-5309'\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t'content' : [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"attachment_name\": null,\n\t\t\t\t\t\t\"id\": \"2\",\n\t\t\t\t\t\t\"message_id\": \"2\",\n\t\t\t\t\t\t\"thread_id\": \"-1\",\n\t\t\t\t\t\t\"date\": firstTime.toISOString(),\n\t\t\t\t\t\t\"sender\": \"867-5309\",\n\t\t\t\t\t\t\"recipients\": [\n\t\t\t\t\t\t\t\"555-5555\"\n\t\t\t\t\t\t],\n\t\t\t\t\t\t\"attachments\": 0,\n\t\t\t\t\t\t\"priority\": null,\n\t\t\t\t\t\t\"body\": \"What is this site?\",\n\t\t\t\t\t\t\"initials\": 'Me',\n\t\t\t\t\t\t\"name\": 'Me',\n\t\t\t\t\t\t\"is_sender\": true\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t'meta' : {\n\t\t\t\t\t'initials' : 'Me',\n\t\t\t\t\t'name' : 'Me',\n\t\t\t\t\t'shows_timestamp' : false,\n\t\t\t\t\t'view_as' : [\n\t\t\t\t\t\t'867-5309'\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n { \n 'content' : [\n { \n \"attachment_name\": null,\n \"id\": \"1\",\n \"message_id\": \"1\",\n \"thread_id\": \"-1\",\n \"date\": firstTime.toISOString(),\n \"sender\": \"555-5555\",\n \"recipients\": [\n \"867-5309\"\n ],\n \"attachments\": 0,\n \"priority\": null,\n \"body\": \"This site hosts text messages that are obtained from public records requests\",\n \"initials\": 'Txt',\n \"name\": 'Txtifier.com',\n \"is_sender\": false\n },\n { \n \"attachment_name\": null,\n \"id\": \"1\",\n \"message_id\": \"1\",\n \"thread_id\": \"-1\",\n \"date\": firstTime.toISOString(),\n \"sender\": \"555-5555\",\n \"recipients\": [\n \"867-5309\"\n ],\n \"attachments\": 0,\n \"priority\": null,\n \"body\": \"Public records are sometimes difficult to obtain, and hard to read, so this site makes it easy to see records that have already been obtained in an easy to read format\",\n \"initials\": 'Txt',\n \"name\": 'Txtifier.com',\n \"is_sender\": false\n }\n ],\n 'meta' : {\n 'initials' : 'Txt',\n 'name' : 'Txtifier.com',\n 'shows_timestamp' : false,\n 'view_as' : [\n '867-5309'\n ]\n }\n },\n { \n 'content' : [\n { \n \"attachment_name\": null,\n \"id\": \"2\",\n \"message_id\": \"2\",\n \"thread_id\": \"-1\",\n \"date\": firstTime.toISOString(),\n \"sender\": \"867-5309\",\n \"recipients\": [\n \"555-5555\"\n ],\n \"attachments\": 0,\n \"priority\": null,\n \"body\": \"How could text messages be hard to read?\",\n \"initials\": 'Me',\n \"name\": 'Me',\n \"is_sender\": true\n }\n ],\n 'meta' : {\n 'initials' : 'Me',\n 'name' : 'Me',\n 'shows_timestamp' : false,\n 'view_as' : [\n '867-5309'\n ]\n }\n },\n {\n 'content' : [\n {\n \"attachment_name\": null,\n \"id\": \"1\",\n \"message_id\": \"1\",\n \"thread_id\": \"-1\",\n \"date\": firstTime.toISOString(),\n \"sender\": \"555-5555\",\n \"recipients\": [\n \"867-5309\"\n ],\n \"attachments\": 0,\n \"priority\": null,\n \"body\": \"Records usually come as spreadsheets\",\n \"initials\": 'Txt',\n \"name\": 'Txtifier.com',\n \"is_sender\": false\n },\n\t\t\t\t\t{\n \"attachment_name\": null,\n \"id\": \"1\",\n \"message_id\": \"1\",\n \"thread_id\": \"-1\",\n \"date\": firstTime.toISOString(),\n \"sender\": \"555-5555\",\n \"recipients\": [\n \"867-5309\"\n ],\n \"attachments\": 0,\n \"priority\": null,\n \"body\": \"With text messages, you might have multiple conversations at one time\",\n \"initials\": 'Txt',\n \"name\": 'Txtifier.com',\n \"is_sender\": false\n },\n {\n \"attachment_name\": null,\n \"id\": \"1\",\n \"message_id\": \"1\",\n \"thread_id\": \"-1\",\n \"date\": firstTime.toISOString(),\n \"sender\": \"555-5555\",\n \"recipients\": [\n \"867-5309\"\n ],\n \"attachments\": 0,\n \"priority\": null,\n \"body\": \"They end up all jumbled\",\n \"initials\": 'Txt',\n \"name\": 'Txtifier.com',\n \"is_sender\": false\n }\n ],\n 'meta' : {\n 'initials' : 'Txt',\n 'name' : 'Txtifier.com',\n 'shows_timestamp' : false,\n 'view_as' : [\n '867-5309'\n ]\n }\n },\n { \n 'content' : [\n { \n \"attachment_name\": null,\n \"id\": \"2\",\n \"message_id\": \"2\",\n \"thread_id\": \"-1\",\n \"date\": currentTime.toISOString(),\n \"sender\": \"867-5309\",\n \"recipients\": [\n \"555-5555\"\n ],\n \"attachments\": 0,\n \"priority\": null,\n \"body\": \"Great, how do I get started?\",\n \"initials\": 'Me',\n \"name\": 'Me',\n \"is_sender\": true\n }\n ],\n 'meta' : {\n 'initials' : 'Me',\n 'name' : 'Me',\n 'shows_timestamp' : true,\n 'view_as' : [\n '867-5309'\n ]\n }\n },\n {\n 'content' : [\n {\n \"attachment_name\": null,\n \"id\": \"1\",\n \"message_id\": \"1\",\n \"thread_id\": \"-1\",\n \"date\": currentTime.toISOString(),\n \"sender\": \"555-5555\",\n \"recipients\": [\n \"867-5309\"\n ],\n \"attachments\": 0,\n \"priority\": null,\n \"body\": \"Check out `All Requests` in the menu (the three horizontal lines) to see existing requests\",\n \"initials\": 'Txt',\n \"name\": 'Txtifier.com',\n \"is_sender\": false\n },\n\t\t\t\t\t{\n \"attachment_name\": null,\n \"id\": \"1\",\n \"message_id\": \"1\",\n \"thread_id\": \"-1\",\n \"date\": currentTime.toISOString(),\n \"sender\": \"555-5555\",\n \"recipients\": [\n \"867-5309\"\n ],\n \"attachments\": 0,\n \"priority\": null,\n \"body\": \"That's probably a great place to start.\",\n \"initials\": 'Txt',\n \"name\": 'Txtifier.com',\n \"is_sender\": false\n },\n ],\n 'meta' : {\n 'initials' : 'Txt',\n 'name' : 'Txtifier.com',\n 'shows_timestamp' : false,\n 'view_as' : [\n '867-5309'\n ]\n }\n },\n\t\t]\n\t}\n\n return (\n \n \n \n \n Publishing Public Records for All\n \n \n Txtifier focuses on providing, formatting, and cross-referencing public records text messages in order to help improve government transparancy.\n \n \n \n \n\t\t\t\t\t\n\t\t\t\t\n \n\t\t\t\t\t\n\t\t\t\t\n \n\t\t\t\t\t\n\t\t\t\t\n \n\t\t\t\t\t\n\t\t\t\t\n \n \n\t\t\n\t\t\n );\n}\n\n","import React from 'react';\nimport { makeStyles } from '@mui/styles';\nimport Card from '@mui/material/Card';\nimport CardContent from '@mui/material/CardContent';\nimport Typography from '@mui/material/Typography';\n\nconst useStyles = makeStyles({\n root: {\n minWidth: 275,\n },\n bullet: {\n display: 'inline-block',\n margin: '0 2px',\n transform: 'scale(0.8)',\n },\n title: {\n fontSize: 14,\n },\n pos: {\n marginBottom: 12,\n },\n});\n\nexport default function Contribute() {\n const classes = useStyles();\n\n return (\n \n \n \n About\n \n \n Txtifier is looking for your help. If you have something you wish to offer, please contact me at twitter: @mikepkes\n \n

\n \n Names are associated by separate FOIA requests and community contributions. Please report any inaccuracies.\n \n

\n \n Created and Maintained by Michael Kessler, Original Concept by Alan Kessler, Contributions from Nicole and Patrick\n \n
\n
\n );\n}\n\n","import React, { useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { Link } from 'react-router-dom';\n\n\n// MUI\nimport { makeStyles, withStyles } from '@mui/styles';\n\n// MUI Components\nimport Box from '@mui/material/Box';\nimport Collapse from '@mui/material/Collapse';\nimport IconButton from '@mui/material/IconButton';\nimport Paper from '@mui/material/Paper';\nimport Table from '@mui/material/Table';\nimport TableBody from '@mui/material/TableBody';\nimport TableCell from '@mui/material/TableCell';\nimport TableContainer from '@mui/material/TableContainer';\nimport TableHead from '@mui/material/TableHead';\nimport TableRow from '@mui/material/TableRow';\n\n// MUI Icons\nimport KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';\nimport KeyboardArrowRightIcon from '@mui/icons-material/KeyboardArrowRight';\n\n\n\nconst styles = theme => ({\n container: {\n flexGrow: 1,\n position: 'relative'\n },\n suggestionsContainerOpen: {\n position: 'absolute',\n //marginTop: theme.spacing(1),\n //marginBottom: theme.spacing(3),\n left: 0,\n right: 0,\n zIndex: 1\n },\n suggestion: {\n display: 'block'\n },\n suggestionsList: {\n margin: 0,\n padding: 0,\n listStyleType: 'none'\n },\n textField: {\n width: '100%',\n }\n});\n\nconst useRowStyles = makeStyles({\n root: {\n '& > *': {\n borderBottom: 'unset',\n },\n },\n});\n\nfunction createData(name, description, date_published, query, hash, archive_hash, archive_size, message_count, request_id, visible) {\n return {\n name,\n description,\n date_published,\n request_id,\n visible,\n details: [\n { field: 'Original Request', value: query },\n { field: \"Message Count\", value: message_count},\n { field: 'Messages Hash', value: hash },\n { field: 'Archive Download', value: archive_hash, link: archive_hash ? \"https://api.txtifier.com/archives/\" + archive_hash + \".zip\" : null },\n //{ field: \"Archive Size\", value: archive_size }\n ],\n };\n}\n\nfunction Row(props) {\n const { row } = props;\n const [open, setOpen] = React.useState(false);\n const classes = useRowStyles();\n\n const storeLocation = function (event) {\n\t\ttry {\n\t\t\tconst url = event.view.navigation.currentEntry.url;\n\t\t\tconst scroll_id = event.target.id;\n\t\t\twindow.sessionStorage.setItem('scroll_history_' + url, scroll_id)\n\t\t}\n\t\tcatch {\n\t\t}\n\t}\n\n\tvar link_item = row.name;\n\tif (row.visible === true) {\n\t\tlink_item = {row.name}\n\t}\n\n return (\n \n \n \n setOpen(!open)}>\n {open ? : }\n \n \n \n\t\t\t\t\t{link_item}\n\n \n {row.description}\n {row.date_published}\n \n \n \n \n \n \n \n {row.details.map((detailsRow) => (\n \n \n {detailsRow.field}\n \n {detailsRow.link && {detailsRow.value}}\n {(!detailsRow.link) && {detailsRow.value}} \n \n ))}\n \n
\n
\n
\n
\n
\n
\n );\n}\n\nRow.propTypes = {\n row: PropTypes.shape({\n description: PropTypes.string.isRequired,\n date_published: PropTypes.string.isRequired,\n details: PropTypes.arrayOf(\n PropTypes.shape({\n field: PropTypes.string.isRequired,\n value: PropTypes.string,\n }),\n ).isRequired,\n name: PropTypes.string.isRequired,\n }).isRequired,\n};\n\n\n\nexport default function CollapsibleTable(props) {\n const [rows, setRows] = React.useState([]);\n\n useEffect(() => {\n // Update the document title using the browser API\n\n const url = window.location.href;\n\t\tvar scroll_id = window.sessionStorage.getItem('scroll_history_' + url)\n\t\tif (scroll_id) {\n\t\t\tvar item = document.getElementById(scroll_id)\t\t\n\t\t\tif (item) {\n\t\t\t\titem.scrollIntoView({behavior: \"auto\", block: \"center\", inline: \"nearest\"});\n\t\t\t}\n\t\t}\n\n });\n\n var buildRows = () => {\n var api_request = new XMLHttpRequest();\n api_request.addEventListener('load', function () {\n var request_return_value = api_request.status === 200 ? JSON.parse(this.responseText) : { 'data': [] };\n\n var tRows = [];\n for (const element of request_return_value.data) {\n tRows.push(\n createData(\n element.name,\n element.description,\n (new Date(element.created_at)).toLocaleString('en-US'),\n element.query,\n element.hash,\n element.archive_hash,\n element.size,\n element.message_count,\n element.id,\n\t\t\t\t\t\t\t\telement.visible\n )\n );\n }\n\n setRows(tRows);\n });\n api_request.open('GET', 'https://api.txtifier.com/v1/requests');\n api_request.send();\n };\n\n useEffect(() => {\n buildRows();\n }, []);\n\n return (\n \n \n \n \n \n Request Name\n Description\n Date Published\n \n \n \n {rows.map((row) => (\n \n ))}\n \n
\n
\n );\n}\n\n\nexport const RequestsTable = withStyles(styles)(CollapsibleTable);\n","import React, { useState, useEffect } from 'react';\n\n// Material UI\nimport Card from \"@mui/material/Card\";\nimport Grid from \"@mui/material/Grid\";\n\n// Local\nimport Conversation from './Conversation';\n\nimport LinearProgress from '@mui/material/LinearProgress';\n\n\n\nexport default function Request(props) {\n\n const [threads, setThreads] = useState(null);\n\n const requestId = props.match.params.requestId;\n\n function getConversationMessages() {\n var api_request = new XMLHttpRequest();\n api_request.addEventListener('load', function () {\n const results = (api_request.status === 200 ? JSON.parse(this.responseText) : { 'data': {} });\n setThreads(results.threads);\n });\n api_request.open('GET', `https://api.txtifier.com/v1/requests/messages/${requestId}?group=1`);\n api_request.send(null);\n }\n\n useEffect(() => {\n getConversationMessages();\n }, []);\n\n return (\n \n {threads ? Object.keys(threads).map((thread) => {\n return (\n \n \n \n );\n }) : }\n \n );\n}\n\n","import React, { useState, useEffect } from 'react';\n\n// Material UI\nimport Card from \"@mui/material/Card\";\nimport Grid from \"@mui/material/Grid\";\nimport LinearProgress from '@mui/material/LinearProgress';\n\n// Local\nimport Conversation from './Conversation';\n\n\n\nexport default function Thread(props) {\n\n const [threads, setThreads] = useState([]);\n\n const threadId = props.match.params.threadId;\n\n function getConversationMessages() {\n var api_request = new XMLHttpRequest();\n api_request.addEventListener('load', function () {\n const results = (api_request.status === 200 ? JSON.parse(this.responseText) : { 'data': {} });\n setThreads(results.threads);\n });\n api_request.open('GET', `https://api.txtifier.com/v1/messages/thread/${threadId}?group=1`);\n api_request.send(null);\n }\n\n useEffect(() => {\n getConversationMessages();\n }, []);\n\n return (\n \n {threads ? Object.keys(threads).map((thread) => {\n return (\n \n \n \n );\n }) : }\n \n );\n}\n\n","import { Filter } from '@mui/icons-material';\nimport * as React from 'react';\n\n\nimport { Box, Typography } from '@mui/material';\nimport { TextField, Button, Table, TableRow, TableCell } from '@mui/material';\nimport FormControl from '@mui/material/FormControl';\nimport { PersonIcon } from '../../PersonIcon';\nimport { Link } from 'react-router-dom';\n\nconst interleave = (arr, thing) => [].concat(...arr.map(n => [n, thing])).slice(0, -1)\n\nconst TextSearchFilter = (props) => {\n //const [text, setText] = React.useState(props.text || '')\n const [results, setResults] = React.useState([])\n\n var text = \"\"\n const handleTextChange = ((event) => {\n //setText(event.target.value);\n text = event.target.value;\n });\n\n const handleSearch = ((event) => {\n event.preventDefault();\n //setText(event.target.value)\n var myHeaders = new Headers();\n myHeaders.append(\"Content-Type\", \"application/json\");\n\n var raw = JSON.stringify({\n \"query\": text\n });\n\n var requestOptions = {\n method: 'POST',\n headers: myHeaders,\n body: raw,\n redirect: 'follow'\n };\n\n fetch(\"https://api.txtifier.com/v1/messages/text_search/search\", requestOptions)\n .then(response => response.json())\n .then(result => {setResults(result.data)})\n .catch(error => console.log('error', error));\n\n });\n\n return (\n <>\n \n
\n \n \n \n \n
\n
\n \n {results.map((r) => {\n return \n {r.message_id}\n \n \n \n \n \n { \n r.headline.split(/[<][/]?b[>]/).map((v, i, a) => {\n if (a.length === 1) {\n return v;\n }\n if (i == a.length-1) {\n return v;\n }\n if (i % 2) {\n return {v};\n }\n return v;\n })\n }\n \n \n })}\n
\n \n )\n};\n\nexport default TextSearchFilter;","import * as React from 'react';\n\nimport { Box } from '@mui/material';\nimport { TextField } from '@mui/material';\nimport Chip from '@mui/material/Chip';\nimport Autocomplete from '@mui/material/Autocomplete';\n\nimport PermContactCalendarIcon from '@mui/icons-material/PermContactCalendar';\nimport PhoneIcon from '@mui/icons-material/Phone';\nimport QuestionMarkIcon from '@mui/icons-material/QuestionMark';\n\n\nexport default function ParticipantSearch(props) {\n const [inputValue, setInputValue] = React.useState('');\n const [options, setOptions] = React.useState([]);\n\n const optionEqual = (left, right) => {\n return (left.key == right.key);\n }\n\n\n const itemChanged = (event, values, reason) => {\n //console.log([event, value, reason]);\n\n if (values.length === 0) {\n props.threadsCallback({'threads':[]});\n return;\n }\n\n var v = [];\n values.forEach((vv) => {\n var r = {\n \"rule\": \"any\",\n \"values\": vv.numbers\n }\n v.push(r);\n })\n\n var rule = {\n \"rule\": \"all\",\n \"values\": v\n }\n\n var myHeaders = new Headers();\n myHeaders.append(\"Content-Type\", \"application/json\");\n var raw = JSON.stringify(rule);\n\n var requestOptions = {\n method: 'POST',\n headers: myHeaders,\n body: raw,\n redirect: 'follow'\n };\n\n fetch(\"https://api.txtifier.com/v1/messages/thread_rules/search\", requestOptions)\n .then(response => {props.threadsLoadingCallback(); return response.json(); })\n .then(result => props.threadsCallback(result))\n .catch(error => console.log('error', error));\n\n }\n\n React.useEffect(() => {\n if (props.initialFilters) {\n\n itemChanged(null, [{'numbers':[props.initialFilters]}], null);\n }\n }, []);\n\n const inputChanged = (event, newInputValue) => {\n var url = new URL('https://api.txtifier.com/v1/people/search_grouped');\n url.searchParams.set('query', newInputValue);\n fetch(url).then(\n (response) => { return response.json()}\n ).then(\n (data) => {\n const items = data.data.map((value) => {\n var icon = \n\n if ( !isNaN(value.numbers[0]) && value.numbers[0].length == 10 ) {\n icon = \n }\n\n if (value.name === null) {\n return {\n 'name' : value.numbers.join(','),\n 'icon' : icon,\n 'numbers' : value.numbers,\n 'key' : value.numbers[0]\n }\n }\n\n\n return {\n 'name': value.name + \" (\" + value.numbers.join( ',') + \")\",\n 'icon': icon,\n 'numbers': value.numbers,\n 'key': value.group\n };\n });\n setOptions(items); \n }\n );\n };\n\n return (\n option.key}\n filterOptions={(x) => x}\n onInputChange={inputChanged}\n onChange={itemChanged}\n isOptionEqualToValue={optionEqual}\n renderInput={(params) => (\n \n )}\n renderOption={(props, option) => (\n img': { mr: 2, flexShrink: 0 } }} {...props}>\n {option.icon}\n {option.name}\n \n\n )}\n />\n );\n }","import React, { useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { Link } from 'react-router-dom';\nimport { PersonIcon } from './PersonIcon';\n\n\n// MUI\nimport { makeStyles, withStyles } from '@mui/styles';\n\n// MUI Components\nimport Box from '@mui/material/Box';\nimport Collapse from '@mui/material/Collapse';\nimport IconButton from '@mui/material/IconButton';\nimport Paper from '@mui/material/Paper';\nimport Table from '@mui/material/Table';\nimport TableBody from '@mui/material/TableBody';\nimport TableCell from '@mui/material/TableCell';\nimport TableContainer from '@mui/material/TableContainer';\nimport TableHead from '@mui/material/TableHead';\nimport TableRow from '@mui/material/TableRow';\nimport Button from '@mui/material/Button';\nimport ButtonGroup from '@mui/material/ButtonGroup';\n\n\n// MUI Icons\nimport KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';\nimport KeyboardArrowRightIcon from '@mui/icons-material/KeyboardArrowRight';\n\nfunction prepareName(obj, number, include_number=true) {\n\tif (obj === undefined) {\n\t\treturn number;\n\t}\n\telse {\n\t\tvar name = obj['name'];\n\t\tif (include_number) {\n\t\t\tname += \" (\" + number + \")\";\n\t\t}\n\t\treturn name;\n\t}\n}\n\nfunction prepareInitials(obj, number) {\n\tif (obj === undefined) {\n\t\treturn number.slice(-2);\n\t}\n\telse {\n\t\treturn obj['initials'];\n\t}\n}\n\n\n\nconst styles = theme => ({\n container: {\n flexGrow: 1,\n position: 'relative'\n },\n suggestionsContainerOpen: {\n position: 'absolute',\n marginTop: theme.spacing(1),\n marginBottom: theme.spacing(3),\n left: 0,\n right: 0,\n zIndex: 1\n },\n suggestion: {\n display: 'block'\n },\n suggestionsList: {\n margin: 0,\n padding: 0,\n listStyleType: 'none'\n },\n textField: {\n width: '100%',\n }\n});\n\nconst useRowStyles = makeStyles({\n root: {\n '& > *': {\n borderBottom: 'unset',\n },\n },\n});\n\nfunction createData(thread_id, numbers) {\n return {\n thread_id,\n numbers,\n details: [\n { field: 'Thread ID', value: thread_id },\n { field: \"Numbers\", value: numbers},\n \n ],\n };\n}\n\nfunction Row(props) {\n const { row } = props;\n const [open, setOpen] = React.useState(false);\n const classes = useRowStyles();\n\n\tvar link_item = {row.thread_id}\n\n return (\n \n \n \n setOpen(!open)}>\n {open ? : }\n \n \n \n\t\t\t\t\t{link_item}\n\n \n \n\t\n\t\t\t\t \n\t\t\t\t\t{row.numbers.map((numberItem) => (\n\t\t\t\t\t\t\n\t\t\t\t\t))}\n \n\t\t\t\t\n \n \n \n \n \n \n \n {row.details.map((detailsRow) => (\n \n \n {detailsRow.field}\n \n {detailsRow.link && {detailsRow.value}}\n {(!detailsRow.link) && {detailsRow.value}} \n \n ))}\n \n
\n
\n
\n
\n
\n
\n );\n}\n\nRow.propTypes = {\n row: PropTypes.shape({\n thread_id: PropTypes.string.isRequired,\n numbers: PropTypes.array.isRequired,\n }).isRequired,\n};\n\n\n\nexport default function CollapsibleTable(props) {\n\tconst [rows, setRows] = React.useState([]);\n\n var buildRows = (search_numbers) => {\n var api_request = new XMLHttpRequest();\n api_request.addEventListener('load', function () {\n var request_return_value = api_request.status === 200 ? JSON.parse(this.responseText) : { 'threads': [] };\n\n var tRows = [];\n for (const element of request_return_value.threads) {\n tRows.push(\n createData(\n element.thread_id,\n element.numbers,\n )\n );\n }\n\n setRows(tRows);\n });\n\n\t\tconst numbers = search_numbers.join(',')\n api_request.open('GET', 'https://api.txtifier.com/v1/messages/thread_contains/' + numbers );\n api_request.send();\n };\n\n useEffect(() => {\n buildRows(props.search);\n }, [props]);\n\n return (\n \n \n \n \n \n Thread ID\n Participants\n \n \n \n {rows.map((row) => (\n \n ))}\n \n
\n
\n );\n}\n\n\nexport const SearchThreadResultsTable = withStyles(styles)(CollapsibleTable);\n","import * as React from 'react';\n\nimport { Box } from '@mui/material';\nimport Table from '@mui/material/Table';\nimport TableBody from '@mui/material/TableBody';\nimport TableCell from '@mui/material/TableCell';\nimport TableContainer from '@mui/material/TableContainer';\nimport TableHead from '@mui/material/TableHead';\nimport TableRow from '@mui/material/TableRow';\nimport { Link } from 'react-router-dom';\nimport LinearProgress from '@mui/material/LinearProgress';\n\nimport { PersonIcon } from '../PersonIcon';\n\nexport default function ThreadSearchResults(props) {\n\n return (\n <>{props.loading ? : \n \n {props.rows.length ? Thread IDParticipants\n : No Results\n }\n {\n props.rows.map(r => {\n return \n {r[0]}\n \n \n {r[1].map(p => {\n return \n \n \n })}\n \n \n \n \n })\n }\n
\n }\n \n )\n}","import React, { useState } from 'react';\n\nimport FilterAddMenu from './Search/FilterMenu';\nimport ParticipantSearch from './Search/Filters/ParticipantSearch';\n\nimport { SearchThreadResultsTable } from './SearchThreadResults';\nimport Stack from '@mui/material/Stack';\n\nimport Typography from '@mui/material/Typography';\nimport Paper from '@mui/material/Paper';\nimport { styled } from '@mui/material/styles';\n\nimport ThreadSearchResults from './Search/ThreadSearchResults';\n\nconst Item = styled(Paper)(({ theme }) => ({\n\tbackgroundColor: theme.palette.mode === 'dark' ? '#1A2027' : '#fff',\n\t...theme.typography.body2,\n\tpadding: theme.spacing(1),\n\ttextAlign: 'center',\n\tcolor: theme.palette.text.secondary,\n }));\n\nexport default function Search(props) {\n\tconst [filters, setFilters] = useState([]);\n\n\tconst [results, setResults] = useState([]);\n\tconst [loading, setLoading] = useState(0);\n\n\tconst threadsFound = ((threadData) => {\n\t\tconsole.log(threadData);\n\t\t\n\t\tvar rows = Object.keys(threadData.threads).map((t)=> {\n\t\t\t\tconst r = threadData.threads[t];\n\t\t\t\treturn [t, r.map((c) => {\n\t\t\t\t\treturn [c.number, c.name, c.initials];\n\t\t\t\t})];\n\t\t\t})\n\t\tsetResults(rows);\n\t\tsetLoading(0);\n\t});\n\t\n\tconst threadsLoading = () => {\n\t\tconsole.log(\"loading thread data...\");\n\t\tsetLoading(1);\n\t};\n\n\treturn (\n\t<>\n\t\t\n\t\t{/*\n\t\t\t\t\n\t\t\t\t\tSearch Records\n\t\t\t\t\t\n\t\t\t\t\n\t*/}\n\t\t\n\t\t\t\n\t\t\n\t\n\t\n\t\n\t)\n}\n\n","import React from 'react';\nimport clsx from 'clsx';\nimport { makeStyles } from '@mui/styles';\nimport Drawer from '@mui/material/Drawer';\nimport List from '@mui/material/List';\nimport Divider from '@mui/material/Divider';\nimport ListItem from '@mui/material/ListItem';\nimport ListItemIcon from '@mui/material/ListItemIcon';\nimport AppBar from '@mui/material/AppBar';\nimport Toolbar from '@mui/material/Toolbar';\nimport MenuIcon from '@mui/icons-material/Menu';\nimport IconButton from '@mui/material/IconButton';\nimport Typography from '@mui/material/Typography';\nimport { Link } from 'react-router-dom';\n\nconst useStyles = makeStyles({\n list: {\n width: 250,\n },\n fullList: {\n width: 'auto',\n },\n});\n\nexport default function TemporaryDrawer() {\n const classes = useStyles();\n const [state, setState] = React.useState({\n top: false,\n left: false,\n bottom: false,\n right: false,\n });\n\n const toggleDrawer = (anchor, open) => (event) => {\n if (event.type === 'keydown' && (event.key === 'Tab' || event.key === 'Shift')) {\n return;\n }\n\n setState({ ...state, [anchor]: open });\n };\n\n const list = (anchor) => (\n \n \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t \n\t\t\t\t\t\tHome\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t \n\t\t\t\t\t\tAll Requests\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t \n\t\t\t\t\t\tPerson Search\n\t\t\t\t\t\n\t\t\t\t\n \n\t\t\t\t\t\n\t\t\t\t\t\t \n\t\t\t\t\t\tText Search\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t{/*\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t \n\t\t\t\t\t\tDates\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t*/}\n\t\t\t\n \n \n\t\t\t\t{/*\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t \n\t\t\t\t\t\tAbout\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t*/}\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t \n\t\t\t\t\tAbout\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n \n );\n\n return (\n \n \n\t\t\t\t\t\n \n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{list('left')}\n\n\t\t\t\t\t\t\n \n Txtifier\n \n \n\t\t\t\t\n \n );\n}\n","import React from 'react';\n// import { HashRouter as Router, Switch, Route, Link } from \"react-router-dom\";\n\nimport { HashRouter as Router, Switch, Route, Link } from \"react-router-dom\";\n\n// Local\nimport './css/App.css';\nimport DateAndTimePickers from './Components/DateRange.js';\nimport Landing from './Components/Landing.js';\nimport Contribute from './Components/Contribute.js';\n\nimport { Container, Box } from '@mui/material';\nimport { RequestsTable } from './Components/RequestsTable';\nimport Request from './Components/Request';\nimport Thread from './Components/Thread';\nimport Search from './Components/Search';\nimport TemporaryDrawer from './Components/Navigation';\nimport TextSearchFilter from './Components/Search/Filters/TextSearch';\n\n\nfunction RequestsList() {\n return (\n\t\t\n\t\t\t\n\t\t\n );\n}\n\nexport default function App() {\n const ref = React.useRef();\n return (\n
\n \n\t\t\t\n \n\t\t\t\t\t\n \n \n\t\t\t\t\t\n\t\t\t\t\t\n \n \n\t\t\t\t\t\n\t\t\t\t\t\n \n \n \n
\n );\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\n\nReactDOM.render(\n \n \n ,\n document.getElementById('root')\n);\n"],"sourceRoot":""}