From 6e277642bebbd40cc3620f893b9bda2e9b684198 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elisabeth=20R=C3=B8ysland?= Date: Fri, 29 Aug 2025 09:21:44 +0200 Subject: [PATCH] =?UTF-8?q?Elisabeth=20R=C3=B8ysland?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.jsx | 52 +++++++++++++++------------------ src/components/Email.jsx | 32 ++++++++++++++++++++ src/components/EmailDetails.jsx | 18 ++++++++++++ src/components/Emails.jsx | 15 ++++++++++ src/styles/App.css | 4 +++ 5 files changed, 93 insertions(+), 28 deletions(-) create mode 100644 src/components/Email.jsx create mode 100644 src/components/EmailDetails.jsx create mode 100644 src/components/Emails.jsx diff --git a/src/App.jsx b/src/App.jsx index c902699..4428228 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -3,6 +3,8 @@ import { useState } from 'react' import initialEmails from './data/emails' import './styles/App.css' +import Emails from './components/Emails' +import EmailDetails from './components/EmailDetails' const getReadEmails = emails => emails.filter(email => !email.read) @@ -12,6 +14,8 @@ function App() { const [emails, setEmails] = useState(initialEmails) const [hideRead, setHideRead] = useState(false) const [currentTab, setCurrentTab] = useState('inbox') + const [selectedEmail, setSelectedEmail] = useState(null); + const [searchTerm, setSearchTerm] = useState("") const unreadEmails = emails.filter(email => !email.read) const starredEmails = emails.filter(email => email.starred) @@ -41,6 +45,12 @@ function App() { if (currentTab === 'starred') filteredEmails = getStarredEmails(filteredEmails) + if (searchTerm != "") { + filteredEmails = filteredEmails.filter(e => + e.title.toLowerCase().startsWith(searchTerm.toLowerCase()) + ); + } + return (
@@ -56,7 +66,15 @@ function App() {
- + { + setSearchTerm(e.target.value); + }} + />
- + {selectedEmail ? ( + setSelectedEmail(null)}/> + ) : ( + + )}
) diff --git a/src/components/Email.jsx b/src/components/Email.jsx new file mode 100644 index 0000000..5f3410a --- /dev/null +++ b/src/components/Email.jsx @@ -0,0 +1,32 @@ + + +function Email({email, toggleRead, toggleStar, onSelectEmail}) { + + return ( +
  • onSelectEmail(email)} + > +
    e.stopPropagation()}> + toggleRead(email)} + /> +
    +
    e.stopPropagation()}> + toggleStar(email)} + /> +
    +
    {email.sender}
    +
    {email.title}
    +
  • + ); +} + +export default Email; \ No newline at end of file diff --git a/src/components/EmailDetails.jsx b/src/components/EmailDetails.jsx new file mode 100644 index 0000000..038815a --- /dev/null +++ b/src/components/EmailDetails.jsx @@ -0,0 +1,18 @@ + +function EmailDetails({ email, onBack }) { + return ( +
    + +
    +
    +

    {email.title}

    +

    From: {email.sender}

    +
    +
    +
    +

    Contents of the email

    +
    + ); +} + +export default EmailDetails; diff --git a/src/components/Emails.jsx b/src/components/Emails.jsx new file mode 100644 index 0000000..6ebe8e6 --- /dev/null +++ b/src/components/Emails.jsx @@ -0,0 +1,15 @@ + +import Email from './Email' + +function Emails({filteredEmails, toggleRead, toggleStar, onSelectEmail}) { + + return ( + + ); +} + +export default Emails; \ No newline at end of file diff --git a/src/styles/App.css b/src/styles/App.css index da375b1..329bb88 100644 --- a/src/styles/App.css +++ b/src/styles/App.css @@ -144,3 +144,7 @@ .email .star-checkbox:checked::before { background-image: url(https://www.gstatic.com/images/icons/material/system/2x/star_googyellow500_20dp.png); } + +.email-details { + padding: 10px; +}