diff --git a/src/EmailSummary.tsx b/src/EmailSummary.tsx index 66d3517..334231d 100644 --- a/src/EmailSummary.tsx +++ b/src/EmailSummary.tsx @@ -4,9 +4,11 @@ import ButtonGroup from "react-bootstrap/ButtonGroup"; import ButtonToolbar from "react-bootstrap/ButtonToolbar"; import Placeholder from "react-bootstrap/Placeholder"; import React from "react"; +import Stack from "react-bootstrap/Stack"; import Client from "./client/Client"; import DateTime from "./components/DateTime"; +import EmailFrom from "./components/EmailFrom"; import { IAccount, IEmailStub, IMailbox } from "./client/types"; type EmailSummaryProps = { @@ -49,17 +51,18 @@ class EmailSummary extends React.Component< return ; } return ( -
+ + + +
{stub.from == null ? "?" : stub.from[0].name}
- - - {" - " + - (stub.from == null ? "?" : stub.from[0].name) + - " - " + - stub.subject} - +
{stub.subject}
- + -
+ ); } } diff --git a/src/client/Client.tsx b/src/client/Client.tsx index 25eb9ab..bd3e460 100644 --- a/src/client/Client.tsx +++ b/src/client/Client.tsx @@ -241,7 +241,7 @@ export default class Client { ); } this.state.session.emailStubs[e.id] = { - from: e.from, + from: e.from === null ? [] : e.from, id: e.id, mailboxIds: e.mailboxIds, receivedAt: e.receivedAt, diff --git a/src/client/types.tsx b/src/client/types.tsx index e8fa48c..a251cd0 100644 --- a/src/client/types.tsx +++ b/src/client/types.tsx @@ -2,7 +2,7 @@ import * as client from "./jmap-client-ts/src/types"; export type MailboxIdMap = { [mailboxId: string]: boolean }; export interface IEmailStub { - from: Array | null; + from: Array; id: string; mailboxIds: MailboxIdMap; receivedAt: string; diff --git a/src/components/DateTime.tsx b/src/components/DateTime.tsx index 38c2148..91222cd 100644 --- a/src/components/DateTime.tsx +++ b/src/components/DateTime.tsx @@ -4,16 +4,30 @@ type DateTimeProps = { d: string; }; -const DateTime: React.FC = ({ d }) => { - const datetime = Date.parse(d); +const DateTime: React.FC< + DateTimeProps & React.HTMLAttributes +> = (props) => { + const datetime = Date.parse(props.d); const now = Date.now(); const diff = (now - datetime) / 1000; - if (diff < 30) return moments ago; - if (diff < 60) return {diff}s; - if (diff < 60 * 60) return {Math.round(diff / 60)}m; - if (diff < 60 * 60 * 48) return {Math.round(diff / (60 * 60))}h; + if (diff < 30) return moments ago; + if (diff < 60) return {diff}s; + if (diff < 60 * 60) + return {Math.round(diff / 60)}m; + if (diff < 60 * 60 * 48) + return ( + {Math.round(diff / (60 * 60))}h + ); if (diff < 60 * 60 * 24 * 365) - return {Math.round(diff / (60 * 60 * 24))}d; - return {Math.round(diff / (60 * 60 * 24 * 365))}y; + return ( + + {Math.round(diff / (60 * 60 * 24))}d + + ); + return ( + + {Math.round(diff / (60 * 60 * 24 * 365))}y + + ); }; export default DateTime; diff --git a/src/components/EmailFrom.tsx b/src/components/EmailFrom.tsx new file mode 100644 index 0000000..aa174a2 --- /dev/null +++ b/src/components/EmailFrom.tsx @@ -0,0 +1,20 @@ +import React from "react"; +import * as client from "../client/jmap-client-ts/src/types"; + +type EmailFromProps = { + froms: Array; +}; + +const EmailFrom: React.FC = ({ froms }) => { + if (froms.length === 0) { + return None; + } + if (froms.length > 1) { + return MANY?; + } + if (froms[0].name) { + return {froms[0].name}; + } + return {froms[0].email}; +}; +export default EmailFrom; diff --git a/src/style.scss b/src/style.scss index 5de3350..e8cabd0 100644 --- a/src/style.scss +++ b/src/style.scss @@ -1 +1,13 @@ @import '~bootstrap/scss/bootstrap'; + +.email-summary { + .email-from { + overflow: hidden; + text-overflow: ellipsis; + width: 200px; + } + .received { + width: 50px; + } +} +