{"ast":null,"code":"var _jsxFileName = \"/home/gnx/Desktop/GNX-mailEnterprise/frontend/src/pages/Inbox.js\",\n _s = $RefreshSig$();\nimport React, { useState } from 'react';\nimport { useQuery } from 'react-query';\nimport { Link } from 'react-router-dom';\nimport { Mail, Star, Archive, Trash2, MoreVertical, Search, Filter, RefreshCw } from 'lucide-react';\nimport { api, endpoints } from '../services/api';\nimport LoadingSpinner from '../components/LoadingSpinner';\nimport { jsxDEV as _jsxDEV } from \"react/jsx-dev-runtime\";\nconst Inbox = () => {\n _s();\n var _emails$results3, _emails$results4, _emails$results5;\n const [selectedEmails, setSelectedEmails] = useState([]);\n const [searchQuery, setSearchQuery] = useState('');\n const [filter, setFilter] = useState('all');\n const {\n data: emails,\n isLoading,\n refetch\n } = useQuery(['emails', searchQuery, filter], () => {\n const params = new URLSearchParams();\n if (searchQuery) params.append('search', searchQuery);\n if (filter !== 'all') params.append('is_read', filter === 'unread' ? 'false' : 'true');\n return api.get(`${endpoints.emails}?${params}`).then(res => res.data);\n });\n const handleSelectEmail = emailId => {\n setSelectedEmails(prev => prev.includes(emailId) ? prev.filter(id => id !== emailId) : [...prev, emailId]);\n };\n const handleSelectAll = () => {\n var _emails$results;\n if (selectedEmails.length === (emails === null || emails === void 0 ? void 0 : (_emails$results = emails.results) === null || _emails$results === void 0 ? void 0 : _emails$results.length)) {\n setSelectedEmails([]);\n } else {\n var _emails$results2;\n setSelectedEmails((emails === null || emails === void 0 ? void 0 : (_emails$results2 = emails.results) === null || _emails$results2 === void 0 ? void 0 : _emails$results2.map(email => email.id)) || []);\n }\n };\n const formatDate = dateString => {\n const date = new Date(dateString);\n const now = new Date();\n const diffTime = Math.abs(now - date);\n const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));\n if (diffDays === 1) {\n return 'Today';\n } else if (diffDays === 2) {\n return 'Yesterday';\n } else if (diffDays <= 7) {\n return `${diffDays - 1} days ago`;\n } else {\n return date.toLocaleDateString();\n }\n };\n if (isLoading) {\n return /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex items-center justify-center h-64\",\n children: /*#__PURE__*/_jsxDEV(LoadingSpinner, {\n size: \"lg\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 68,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 67,\n columnNumber: 7\n }, this);\n }\n return /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"space-y-6\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"md:flex md:items-center md:justify-between\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex-1 min-w-0\",\n children: [/*#__PURE__*/_jsxDEV(\"h2\", {\n className: \"text-2xl font-bold leading-7 text-gray-900 sm:text-3xl sm:truncate\",\n children: \"Inbox\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 78,\n columnNumber: 11\n }, this), /*#__PURE__*/_jsxDEV(\"p\", {\n className: \"mt-1 text-sm text-gray-500\",\n children: [(emails === null || emails === void 0 ? void 0 : emails.count) || 0, \" emails\"]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 81,\n columnNumber: 11\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 77,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"mt-4 flex md:mt-0 md:ml-4\",\n children: [/*#__PURE__*/_jsxDEV(\"button\", {\n onClick: () => refetch(),\n className: \"btn-secondary mr-3\",\n children: [/*#__PURE__*/_jsxDEV(RefreshCw, {\n className: \"h-4 w-4 mr-2\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 90,\n columnNumber: 13\n }, this), \"Refresh\"]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 86,\n columnNumber: 11\n }, this), /*#__PURE__*/_jsxDEV(Link, {\n to: \"/compose\",\n className: \"btn-primary\",\n children: [/*#__PURE__*/_jsxDEV(Mail, {\n className: \"h-4 w-4 mr-2\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 94,\n columnNumber: 13\n }, this), \"Compose\"]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 93,\n columnNumber: 11\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 85,\n columnNumber: 9\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 76,\n columnNumber: 7\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"card\",\n children: /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"card-body\",\n children: /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex flex-col sm:flex-row gap-4\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex-1\",\n children: /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"relative\",\n children: [/*#__PURE__*/_jsxDEV(Search, {\n className: \"absolute left-3 top-1/2 transform -translate-y-1/2 h-4 w-4 text-gray-400\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 106,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"input\", {\n type: \"text\",\n placeholder: \"Search emails...\",\n value: searchQuery,\n onChange: e => setSearchQuery(e.target.value),\n className: \"input pl-10\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 107,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 105,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 104,\n columnNumber: 13\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex gap-2\",\n children: /*#__PURE__*/_jsxDEV(\"select\", {\n value: filter,\n onChange: e => setFilter(e.target.value),\n className: \"input\",\n children: [/*#__PURE__*/_jsxDEV(\"option\", {\n value: \"all\",\n children: \"All emails\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 122,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"option\", {\n value: \"unread\",\n children: \"Unread\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 123,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"option\", {\n value: \"read\",\n children: \"Read\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 124,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 117,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 116,\n columnNumber: 13\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 103,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 102,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 101,\n columnNumber: 7\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"card\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"card-header\",\n children: /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex items-center justify-between\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex items-center\",\n children: [/*#__PURE__*/_jsxDEV(\"input\", {\n type: \"checkbox\",\n checked: selectedEmails.length === (emails === null || emails === void 0 ? void 0 : (_emails$results3 = emails.results) === null || _emails$results3 === void 0 ? void 0 : _emails$results3.length) && (emails === null || emails === void 0 ? void 0 : (_emails$results4 = emails.results) === null || _emails$results4 === void 0 ? void 0 : _emails$results4.length) > 0,\n onChange: handleSelectAll,\n className: \"h-4 w-4 text-primary-600 focus:ring-primary-500 border-gray-300 rounded\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 136,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"span\", {\n className: \"ml-2 text-sm text-gray-500\",\n children: [selectedEmails.length, \" selected\"]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 142,\n columnNumber: 15\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 135,\n columnNumber: 13\n }, this), selectedEmails.length > 0 && /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex gap-2\",\n children: [/*#__PURE__*/_jsxDEV(\"button\", {\n className: \"btn-sm btn-secondary\",\n children: [/*#__PURE__*/_jsxDEV(Archive, {\n className: \"h-4 w-4 mr-1\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 149,\n columnNumber: 19\n }, this), \"Archive\"]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 148,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"button\", {\n className: \"btn-sm btn-secondary\",\n children: [/*#__PURE__*/_jsxDEV(Star, {\n className: \"h-4 w-4 mr-1\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 153,\n columnNumber: 19\n }, this), \"Star\"]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 152,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"button\", {\n className: \"btn-sm btn-danger\",\n children: [/*#__PURE__*/_jsxDEV(Trash2, {\n className: \"h-4 w-4 mr-1\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 157,\n columnNumber: 19\n }, this), \"Delete\"]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 156,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 147,\n columnNumber: 15\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 134,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 133,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"divide-y divide-gray-200\",\n children: (emails === null || emails === void 0 ? void 0 : (_emails$results5 = emails.results) === null || _emails$results5 === void 0 ? void 0 : _emails$results5.length) > 0 ? emails.results.map(email => /*#__PURE__*/_jsxDEV(\"div\", {\n className: `email-item ${!email.is_read ? 'unread' : ''} ${selectedEmails.includes(email.id) ? 'selected' : ''}`,\n onClick: () => handleSelectEmail(email.id),\n children: /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex items-center space-x-4\",\n children: [/*#__PURE__*/_jsxDEV(\"input\", {\n type: \"checkbox\",\n checked: selectedEmails.includes(email.id),\n onChange: () => handleSelectEmail(email.id),\n className: \"h-4 w-4 text-primary-600 focus:ring-primary-500 border-gray-300 rounded\",\n onClick: e => e.stopPropagation()\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 175,\n columnNumber: 19\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex-shrink-0\",\n children: /*#__PURE__*/_jsxDEV(\"button\", {\n className: \"text-gray-400 hover:text-yellow-500\",\n children: /*#__PURE__*/_jsxDEV(Star, {\n className: `h-4 w-4 ${email.is_starred ? 'text-yellow-500 fill-current' : ''}`\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 185,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 184,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 183,\n columnNumber: 19\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex-1 min-w-0\",\n children: /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex items-center justify-between\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex items-center space-x-3\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex-shrink-0\",\n children: /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"h-8 w-8 rounded-full bg-gray-300 flex items-center justify-center\",\n children: /*#__PURE__*/_jsxDEV(\"span\", {\n className: \"text-sm font-medium text-gray-700\",\n children: email.from_email.charAt(0).toUpperCase()\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 194,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 193,\n columnNumber: 27\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 192,\n columnNumber: 25\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"min-w-0 flex-1\",\n children: [/*#__PURE__*/_jsxDEV(\"p\", {\n className: `text-sm font-medium truncate ${!email.is_read ? 'text-gray-900' : 'text-gray-600'}`,\n children: email.from_email\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 200,\n columnNumber: 27\n }, this), /*#__PURE__*/_jsxDEV(\"p\", {\n className: `text-sm truncate ${!email.is_read ? 'text-gray-900 font-medium' : 'text-gray-500'}`,\n children: email.subject\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 205,\n columnNumber: 27\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 199,\n columnNumber: 25\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 191,\n columnNumber: 23\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex items-center space-x-2\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"text-xs text-gray-500\",\n children: formatDate(email.created_at)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 213,\n columnNumber: 25\n }, this), /*#__PURE__*/_jsxDEV(\"button\", {\n className: \"text-gray-400 hover:text-gray-600\",\n children: /*#__PURE__*/_jsxDEV(MoreVertical, {\n className: \"h-4 w-4\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 217,\n columnNumber: 27\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 216,\n columnNumber: 25\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 212,\n columnNumber: 23\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 190,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 189,\n columnNumber: 19\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 174,\n columnNumber: 17\n }, this)\n }, email.id, false, {\n fileName: _jsxFileName,\n lineNumber: 167,\n columnNumber: 15\n }, this)) : /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"text-center py-12\",\n children: [/*#__PURE__*/_jsxDEV(Mail, {\n className: \"mx-auto h-12 w-12 text-gray-400\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 227,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"h3\", {\n className: \"mt-2 text-sm font-medium text-gray-900\",\n children: \"No emails\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 228,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"p\", {\n className: \"mt-1 text-sm text-gray-500\",\n children: searchQuery ? 'No emails match your search.' : 'You don\\'t have any emails yet.'\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 229,\n columnNumber: 15\n }, this), !searchQuery && /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"mt-6\",\n children: /*#__PURE__*/_jsxDEV(Link, {\n to: \"/compose\",\n className: \"btn-primary\",\n children: [/*#__PURE__*/_jsxDEV(Mail, {\n className: \"h-4 w-4 mr-2\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 235,\n columnNumber: 21\n }, this), \"Compose your first email\"]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 234,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 233,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 226,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 164,\n columnNumber: 9\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 132,\n columnNumber: 7\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 74,\n columnNumber: 5\n }, this);\n};\n_s(Inbox, \"Es+P3Lt0L+YIegrjM2NoioVRKKk=\", false, function () {\n return [useQuery];\n});\n_c = Inbox;\nexport default Inbox;\nvar _c;\n$RefreshReg$(_c, \"Inbox\");","map":{"version":3,"names":["React","useState","useQuery","Link","Mail","Star","Archive","Trash2","MoreVertical","Search","Filter","RefreshCw","api","endpoints","LoadingSpinner","jsxDEV","_jsxDEV","Inbox","_s","_emails$results3","_emails$results4","_emails$results5","selectedEmails","setSelectedEmails","searchQuery","setSearchQuery","filter","setFilter","data","emails","isLoading","refetch","params","URLSearchParams","append","get","then","res","handleSelectEmail","emailId","prev","includes","id","handleSelectAll","_emails$results","length","results","_emails$results2","map","email","formatDate","dateString","date","Date","now","diffTime","Math","abs","diffDays","ceil","toLocaleDateString","className","children","size","fileName","_jsxFileName","lineNumber","columnNumber","count","onClick","to","type","placeholder","value","onChange","e","target","checked","is_read","stopPropagation","is_starred","from_email","charAt","toUpperCase","subject","created_at","_c","$RefreshReg$"],"sources":["/home/gnx/Desktop/GNX-mailEnterprise/frontend/src/pages/Inbox.js"],"sourcesContent":["import React, { useState } from 'react';\nimport { useQuery } from 'react-query';\nimport { Link } from 'react-router-dom';\nimport { \n Mail, \n Star, \n Archive, \n Trash2, \n MoreVertical,\n Search,\n Filter,\n RefreshCw\n} from 'lucide-react';\nimport { api, endpoints } from '../services/api';\nimport LoadingSpinner from '../components/LoadingSpinner';\n\nconst Inbox = () => {\n const [selectedEmails, setSelectedEmails] = useState([]);\n const [searchQuery, setSearchQuery] = useState('');\n const [filter, setFilter] = useState('all');\n\n const { data: emails, isLoading, refetch } = useQuery(\n ['emails', searchQuery, filter],\n () => {\n const params = new URLSearchParams();\n if (searchQuery) params.append('search', searchQuery);\n if (filter !== 'all') params.append('is_read', filter === 'unread' ? 'false' : 'true');\n return api.get(`${endpoints.emails}?${params}`).then(res => res.data);\n }\n );\n\n const handleSelectEmail = (emailId) => {\n setSelectedEmails(prev => \n prev.includes(emailId) \n ? prev.filter(id => id !== emailId)\n : [...prev, emailId]\n );\n };\n\n const handleSelectAll = () => {\n if (selectedEmails.length === emails?.results?.length) {\n setSelectedEmails([]);\n } else {\n setSelectedEmails(emails?.results?.map(email => email.id) || []);\n }\n };\n\n const formatDate = (dateString) => {\n const date = new Date(dateString);\n const now = new Date();\n const diffTime = Math.abs(now - date);\n const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));\n \n if (diffDays === 1) {\n return 'Today';\n } else if (diffDays === 2) {\n return 'Yesterday';\n } else if (diffDays <= 7) {\n return `${diffDays - 1} days ago`;\n } else {\n return date.toLocaleDateString();\n }\n };\n\n if (isLoading) {\n return (\n
\n {emails?.count || 0} emails\n
\n\n {email.from_email}\n
\n\n {email.subject}\n
\n\n {searchQuery ? 'No emails match your search.' : 'You don\\'t have any emails yet.'}\n
\n {!searchQuery && (\n