From 08b0ca4b3a8190e2decfea71cabb149a87e7e837 Mon Sep 17 00:00:00 2001 From: Tein Schoemaker Date: Thu, 28 Aug 2025 22:38:53 +0200 Subject: [PATCH 1/2] Core --- src/App.jsx | 101 +++++++++++++++----------------------- src/components/Email.jsx | 26 ++++++++++ src/components/Emails.jsx | 20 ++++++++ 3 files changed, 85 insertions(+), 62 deletions(-) create mode 100644 src/components/Email.jsx create mode 100644 src/components/Emails.jsx diff --git a/src/App.jsx b/src/App.jsx index c902699..1b80e56 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -1,45 +1,46 @@ -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 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); return (
@@ -62,15 +63,15 @@ function App() { -
-
    - {filteredEmails.map((email, index) => ( -
  • -
    - toggleRead(email)} - /> -
    -
    - toggleStar(email)} - /> -
    -
    {email.sender}
    -
    {email.title}
    -
  • - ))} -
-
+
- ) + ); } -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; From f63dea3aeade2bbc17ed2640488f70058f65b9a5 Mon Sep 17 00:00:00 2001 From: Tein Schoemaker Date: Fri, 29 Aug 2025 10:42:01 +0200 Subject: [PATCH 2/2] Extension 2 --- src/App.jsx | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/App.jsx b/src/App.jsx index 1b80e56..1b8124b 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -13,6 +13,7 @@ function App() { 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); @@ -42,6 +43,13 @@ function App() { if (currentTab === "starred") filteredEmails = getStarredEmails(filteredEmails); + const trimmed = search.trim().toLowerCase(); + if (trimmed) { + filteredEmails = filteredEmails.filter((email) => + email.title.toLowerCase().includes(trimmed) + ); + } + return (
    @@ -57,7 +65,12 @@ function App() {
    - + setSearch(e.target.value)} + />