Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
a8b6daa
feat: mocks for components
rafijv Jan 10, 2024
bf968ed
feat: sidenav component
rafijv Jan 18, 2024
cdd9281
fix: remove comments and complete the TODO in Sidenav
rafijv Jan 18, 2024
a314c8c
feat: Tray component
rafijv Feb 3, 2024
c73e9bd
fix: extract props to an interface in Tray component
rafijv Feb 3, 2024
460fb4b
feat: Action bar for Preview component
rafijv Feb 6, 2024
6cb2f52
feat: Header for Preview component
rafijv Feb 6, 2024
a63230c
feat: Message Inbox for Preview component
rafijv Feb 6, 2024
eb6ee86
feat: Inbox preview component
rafijv Feb 17, 2024
83b989f
feat: UserCheap component
rafijv Mar 5, 2024
531b631
feat: Tray story component
rafijv Mar 10, 2024
f8cd511
feat: mail view component
rafijv Mar 18, 2024
15d0053
feat: Message skeleton
rafijv Apr 4, 2024
222da8d
feat: update MessageSkeleton style
rafijv Apr 13, 2024
f01e1a1
feat: use MessageSkeleton in Tray component
rafijv Apr 13, 2024
937bf13
feat: add timeout in MailView to mock the API call
rafijv Apr 23, 2024
2386d6e
feat: UserCheap story
rafijv May 12, 2024
80ebe7f
feat: updating UserCheap style
rafijv May 15, 2024
2b7ebef
feat:new messages state for Preview component
rafijv May 29, 2024
3bc832a
feat: managing new messages state
rafijv Jun 3, 2024
46b53a4
feat:managing empty state for Preview component
rafijv Jun 13, 2024
2de0350
feat:handle no new messages state
rafijv Jun 13, 2024
7712685
styles: NewMessages component
rafijv Jun 13, 2024
3a993f7
WIP (new mail dialog)
rafijv Jul 25, 2024
26e93d1
WIP (new mail dialog)
rafijv Aug 3, 2024
b073b88
fix: Dialog story
rafijv Aug 4, 2024
3cf5d70
feat: open New Message Dialog in MailView
rafijv Aug 16, 2024
c48d948
styles: Sidenav styles
rafijv Aug 28, 2024
fcf9cc8
styles: Action bar opacity fo Inbox
rafijv Sep 4, 2024
4cbd075
fix: small issue
rafijv Sep 4, 2024
2dfe90f
fix: small issue
rafijv Sep 13, 2024
26a78f5
fix: remove useless code
rafijv Oct 17, 2024
fa32c66
styles: tray messages
rafijv Oct 17, 2024
db20ff0
styles: messages and sidenav
rafijv Oct 17, 2024
fb0b542
fix: message skeleton
rafijv Nov 9, 2024
4cb67e1
fix: small issues
rafijv Nov 10, 2024
2d8f776
fix: importing the components correctly
rafijv Nov 10, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
201 changes: 201 additions & 0 deletions src/assets/icons/mail/new-message.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
52 changes: 52 additions & 0 deletions src/assets/icons/mail/no-messages.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
74 changes: 74 additions & 0 deletions src/components/mail/mailView/MailView.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
import { useEffect, useState } from 'react';
import { emailMocks, EmailProps, updateEmailReadStatus } from '../mocks';
import { Preview } from '../preview/Preview';
import { Sidenav } from '../sidenav/Sidenav';
import { Tray } from '../tray/Tray';
import { NewMailDialog } from '../newMailDialog/NewMailDialog';

export const MailView = () => {
const mockedMails = emailMocks.emailsWithMultipleRecipients;
const [openNewMessageDialog, setOpenNewMessageDialog] = useState<boolean>(false);
const [mails, setMails] = useState<EmailProps[]>([]);
const [isFetchingMails, setIsFetchingMails] = useState<boolean>(false);
const [mailSelected, setMailSelected] = useState<EmailProps>();
const [checked, setChecked] = useState<boolean>(false);
const [activeEmail, setActiveEmail] = useState<string | undefined>();
const [selectedEmails, setSelectedEmails] = useState<string[]>([]);
const [onNewMailChange, setOnNewMailChange] = useState<unknown>();

useEffect(() => {
setIsFetchingMails(true);
setTimeout(() => {
setMails(mockedMails);
setIsFetchingMails(false);
}, 1500);
}, []);

const handleOnMessageClicked = (id: string) => {
const selectedMail = mails.filter((mail) => id === mail.id)[0];
updateEmailReadStatus(emailMocks, id, false);
setMailSelected(selectedMail);
setActiveEmail(id);
setSelectedEmails([id]);
};

const handleSelectAll = () => {
if (checked) {
setSelectedEmails([]);
} else {
const allEmailIds = emailMocks.basicEmails.map((email) => email.id);
setSelectedEmails(allEmailIds);
}
setChecked(!checked);
};

return (
<div className="flex flex-row h-screen w-screen">
<Sidenav onNewMessageClicked={() => setOpenNewMessageDialog(true)} />
{openNewMessageDialog && (
<NewMailDialog
onPrimaryAction={() => {}}
title="New message"
isOpen={openNewMessageDialog}
onClose={() => setOpenNewMessageDialog(false)}
onMailChange={(e) => setOnNewMailChange(e.target.value)}
mailValue={onNewMailChange as string}
/>
)}
<Tray
mails={mails}
activeEmail={activeEmail as string}
loading={isFetchingMails}
checked={checked}
handleSelectAll={handleSelectAll}
selectedEmails={selectedEmails}
onMailSelected={handleOnMessageClicked}
/>
<Preview
mailSelected={mailSelected}
isFetchingMails={isFetchingMails}
newMessagesCount={mails.filter((mail) => mail.read).length}
/>
</div>
);
};
Loading