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; +}