diff --git a/src/App.jsx b/src/App.jsx index c902699..1b8124b 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -1,45 +1,54 @@ -import { useState } from 'react' +import { useState } from "react"; -import initialEmails from './data/emails' +import initialEmails from "./data/emails"; +import Emails from "./components/Emails"; -import './styles/App.css' +import "./styles/App.css"; -const getReadEmails = emails => emails.filter(email => !email.read) +const getReadEmails = (emails) => emails.filter((email) => !email.read); -const getStarredEmails = emails => emails.filter(email => email.starred) +const getStarredEmails = (emails) => emails.filter((email) => email.starred); function App() { - const [emails, setEmails] = useState(initialEmails) - const [hideRead, setHideRead] = useState(false) - const [currentTab, setCurrentTab] = useState('inbox') + const [emails, setEmails] = useState(initialEmails); + const [hideRead, setHideRead] = useState(false); + const [currentTab, setCurrentTab] = useState("inbox"); + const [search, setSearch] = useState(""); - const unreadEmails = emails.filter(email => !email.read) - const starredEmails = emails.filter(email => email.starred) + const unreadEmails = emails.filter((email) => !email.read); + const starredEmails = emails.filter((email) => email.starred); - const toggleStar = targetEmail => { - const updatedEmails = emails => - emails.map(email => + const toggleStar = (targetEmail) => { + const updatedEmails = (emails) => + emails.map((email) => email.id === targetEmail.id ? { ...email, starred: !email.starred } : email - ) - setEmails(updatedEmails) - } + ); + setEmails(updatedEmails); + }; - const toggleRead = targetEmail => { - const updatedEmails = emails => - emails.map(email => + const toggleRead = (targetEmail) => { + const updatedEmails = (emails) => + emails.map((email) => email.id === targetEmail.id ? { ...email, read: !email.read } : email - ) - setEmails(updatedEmails) - } + ); + setEmails(updatedEmails); + }; + + let filteredEmails = emails; - let filteredEmails = emails + if (hideRead) filteredEmails = getReadEmails(filteredEmails); - if (hideRead) filteredEmails = getReadEmails(filteredEmails) + if (currentTab === "starred") + filteredEmails = getStarredEmails(filteredEmails); - if (currentTab === 'starred') - filteredEmails = getStarredEmails(filteredEmails) + const trimmed = search.trim().toLowerCase(); + if (trimmed) { + filteredEmails = filteredEmails.filter((email) => + email.title.toLowerCase().includes(trimmed) + ); + } return (
@@ -56,21 +65,26 @@ function App() {
- + setSearch(e.target.value)} + />
-
- -
+ - ) + ); } -export default App +export default App; diff --git a/src/components/Email.jsx b/src/components/Email.jsx new file mode 100644 index 0000000..8345e8f --- /dev/null +++ b/src/components/Email.jsx @@ -0,0 +1,26 @@ +function Email({ email, onToggleRead, onToggleStar }) { + return ( +
  • +
    + onToggleRead(email)} + /> +
    +
    + onToggleStar(email)} + /> +
    +
    {email.sender}
    +
    {email.title}
    +
  • + ); +} + +export default Email; diff --git a/src/components/Emails.jsx b/src/components/Emails.jsx new file mode 100644 index 0000000..97b1ab6 --- /dev/null +++ b/src/components/Emails.jsx @@ -0,0 +1,20 @@ +import Email from "./Email"; + +function Emails({ emails, onToggleRead, onToggleStar }) { + return ( +
    + +
    + ); +} + +export default Emails;