mirror of
https://github.com/Foundry376/Mailspring.git
synced 2025-01-10 10:11:25 +08:00
c629967c3d
commit423cf4f407
Author: Ben Gotow <ben@foundry376.com> Date: Fri Oct 11 22:33:53 2019 -0500 Replace belcard with homegrown VCard parser because our needs are minimal and the linux binary has relocation issues commit4ae19c0ed5
Author: Ben Gotow <ben@foundry376.com> Date: Fri Oct 11 10:38:26 2019 -0500 Skip building a few more belr components, still looking for relocation error cause commita7ec02a449
Author: Ben Gotow <ben@foundry376.com> Date: Thu Oct 10 22:16:15 2019 -0500 Fix windows SRV record lookups for contact directory autodiscovery commit318a31d279
Author: Ben Gotow <ben@foundry376.com> Date: Thu Oct 10 20:50:06 2019 -0500 Leave vcard_grammar unpacked so mailsync can find it at runtime commitbf7e43e37d
Author: Ben Gotow <ben@foundry376.com> Date: Thu Oct 10 20:43:01 2019 -0500 Fix bug in icon case sensitivity commitc283513653
Author: Ben Gotow <ben@foundry376.com> Date: Thu Oct 10 17:29:24 2019 -0500 Renew Windows Authenticode code signing cert (there goes $500…) commitd13235f65b
Author: Ben Gotow <ben@foundry376.com> Date: Wed Oct 9 23:25:34 2019 -0500 Bump mailsync to move belr dlls commit00ca6431df
Author: Ben Gotow <ben@foundry376.com> Date: Wed Oct 9 23:22:53 2019 -0500 Bump to xcode9 to fix odd C++11 error commit47903c99c4
Author: Ben Gotow <ben@foundry376.com> Date: Wed Oct 9 23:01:32 2019 -0500 Bump mailsync to build belr as a dll instead of a static lib commit21d645d4e7
Author: Ben Gotow <ben@foundry376.com> Date: Wed Oct 9 22:38:24 2019 -0500 Bump mailsync commit3f943031cb
Author: Ben Gotow <ben@foundry376.com> Date: Wed Oct 9 21:57:39 2019 -0500 Bump mailsync to fix windows libetpan failure commit8fb55ca0fc
Author: Ben Gotow <ben@foundry376.com> Date: Wed Oct 9 21:36:57 2019 -0500 Bump mailsync, add grammar commitb959c54e50
Author: Ben Gotow <ben@foundry376.com> Date: Wed Oct 9 21:20:13 2019 -0500 Bump mailsync for linux / win32 commitddb5229d67
Author: Ben Gotow <ben@foundry376.com> Date: Tue Oct 8 22:44:12 2019 -0500 Bump mailsync commitf80e1bc422
Author: Ben Gotow <ben@foundry376.com> Date: Tue Oct 8 11:11:39 2019 -0500 Fix LESS linter failures commit66dc60a731
Author: Ben Gotow <ben@foundry376.com> Date: Tue Oct 8 11:00:37 2019 -0500 Extend participant search to return / expand groups commit3bded91307
Author: Ben Gotow <ben@foundry376.com> Date: Tue Oct 8 03:18:11 2019 -0500 Add comments, etc commit4ede5446de
Author: Ben Gotow <ben@foundry376.com> Date: Tue Oct 8 02:38:50 2019 -0500 Google People API contacts CRUD alongside CardDav commit96c6a64e46
Author: Ben Gotow <ben@foundry376.com> Date: Mon Oct 7 14:00:34 2019 -0500 Build ContactBook concept to track which accounts have sync running commit1f6aab1083
Author: Ben Gotow <ben@foundry376.com> Date: Mon Oct 7 11:38:03 2019 -0500 Contact and contact group CRUD, address book menus commitb877c58d48
Author: Ben Gotow <ben@foundry376.com> Date: Sun Oct 6 16:32:33 2019 -0500 Editing contact names working commit761079304c
Author: Ben Gotow <ben@foundry376.com> Date: Mon Sep 30 15:42:59 2019 -0500 Improved styling of YYYYMMDD field commit71a567276b
Author: Ben Gotow <ben@foundry376.com> Date: Mon Sep 30 15:06:28 2019 -0500 UI for edit + move + delete contacts commitf1967dd603
Author: Ben Gotow <ben@foundry376.com> Date: Thu Sep 26 13:50:44 2019 -0500 Allow you to turn on / off the “Found in Mail” autocompletions commit0c2b0eb03b
Author: Ben Gotow <ben@foundry376.com> Date: Thu Sep 26 13:50:14 2019 -0500 Improve contacts window launch perf by lazy loading composer support, scanning less of fs for themes commit07abd6cb71
Author: Ben Gotow <ben@foundry376.com> Date: Thu Sep 26 04:36:10 2019 -0500 Support for CardDav contact display, better groups presentation commit0a9e166d79
Author: Ben Gotow <ben@foundry376.com> Date: Tue Sep 24 12:42:37 2019 -0500 Add hidden attribute to the model in prep for deletion of auto-created contacts commite6ce3b2af9
Author: Ben Gotow <ben@foundry376.com> Date: Tue Sep 24 12:12:52 2019 -0500 Initial pass at address book commit740d7e8655
Author: Ben Gotow <ben@foundry376.com> Date: Tue Sep 24 08:27:06 2019 -0500 Make headers of Preferences > Accounts consistent with General
194 lines
5.5 KiB
TypeScript
194 lines
5.5 KiB
TypeScript
import React from 'react';
|
|
import { Account, Contact, AccountStore, ContactGroup } from 'mailspring-exports';
|
|
import { ContactProfilePhoto, RetinaImg } from 'mailspring-component-kit';
|
|
import * as Icons from './SVGIcons';
|
|
import { Store } from './Store';
|
|
import { ContactBase, ContactInteractorMetadata } from './ContactInfoMapping';
|
|
|
|
export const ContactDetailRead = ({
|
|
data,
|
|
groups,
|
|
contact,
|
|
metadata,
|
|
}: {
|
|
data: ContactBase;
|
|
groups: ContactGroup[];
|
|
contact: Contact;
|
|
metadata: ContactInteractorMetadata;
|
|
}) => {
|
|
return (
|
|
<div className="contact-detail-content-wrap">
|
|
<div className="contact-hero">
|
|
<ContactProfilePhoto contact={contact} loading={false} avatar={data.photoURL} />
|
|
<h3>{data.name.displayName}</h3>
|
|
</div>
|
|
<div className="contact-group-memberships">
|
|
{contact.contactGroups.map(gid => {
|
|
const group = groups.find(g => g.id === gid);
|
|
const label = group ? group.name : gid;
|
|
return (
|
|
<div
|
|
key={gid}
|
|
className="group-membership"
|
|
onClick={() => {
|
|
Store.setPerspective({
|
|
label,
|
|
accountId: contact.accountId,
|
|
groupId: gid,
|
|
type: 'group',
|
|
});
|
|
}}
|
|
>
|
|
<RetinaImg
|
|
name="label.png"
|
|
style={{ marginRight: 5 }}
|
|
mode={RetinaImg.Mode.ContentDark}
|
|
/>
|
|
{label}
|
|
</div>
|
|
);
|
|
})}
|
|
</div>
|
|
{
|
|
<ContactAttributes
|
|
data={data}
|
|
origin={metadata.origin}
|
|
account={AccountStore.accountForId(contact.accountId)}
|
|
/>
|
|
}
|
|
</div>
|
|
);
|
|
};
|
|
|
|
const ContactAttributes = ({
|
|
data,
|
|
origin,
|
|
account,
|
|
}: {
|
|
data: ContactBase;
|
|
origin: string;
|
|
account: Account;
|
|
}) => (
|
|
<div className="contact-attributes">
|
|
{data.nicknames && (
|
|
<div className="contact-attributes-section">
|
|
{data.nicknames.map((item, idx) => (
|
|
<div className="contact-attribute" key={idx}>
|
|
<label></label>
|
|
<div>{`“${item.value}”`}</div>
|
|
</div>
|
|
))}
|
|
</div>
|
|
)}
|
|
{(data.title || data.company) && (
|
|
<div className="contact-attributes-section">
|
|
<div className="contact-attribute">
|
|
<label>
|
|
<Icons.Briefcase />
|
|
</label>
|
|
<div>{`${data.title ? `${data.title}, ` : ''}${data.company}`}</div>
|
|
</div>
|
|
</div>
|
|
)}
|
|
{data.emailAddresses && (
|
|
<div className="contact-attributes-section">
|
|
{data.emailAddresses.map((item, idx) => (
|
|
<div className="contact-attribute" key={idx}>
|
|
<label>
|
|
<Icons.Envelope />
|
|
</label>
|
|
<div>
|
|
<a href={`mailto:${item.value}`} title="Send email...">
|
|
{item.value}
|
|
</a>
|
|
{item.type && <div className="type">{item.type}</div>}
|
|
</div>
|
|
</div>
|
|
))}
|
|
</div>
|
|
)}
|
|
{data.phoneNumbers && (
|
|
<div className="contact-attributes-section">
|
|
{data.phoneNumbers.map((item, idx) => (
|
|
<div className="contact-attribute" key={idx}>
|
|
<label>
|
|
<Icons.Phone />
|
|
</label>
|
|
<div>
|
|
<a href={`tel:${item.value}`} title="Call...">
|
|
{item.value}
|
|
</a>
|
|
{item.type && <div className="type">{item.type}</div>}
|
|
</div>
|
|
</div>
|
|
))}
|
|
</div>
|
|
)}
|
|
{data.addresses && (
|
|
<div className="contact-attributes-section">
|
|
{data.addresses.map((item, idx) => (
|
|
<div className="contact-attribute" key={idx}>
|
|
<label>
|
|
<Icons.Map />
|
|
</label>
|
|
<div>
|
|
<a href={`https://maps.google.com/?q=${encodeURIComponent(item.formattedValue)}`}>
|
|
{item.formattedValue}
|
|
</a>
|
|
{item.type && <div className="type">{item.type}</div>}
|
|
</div>
|
|
</div>
|
|
))}
|
|
</div>
|
|
)}
|
|
{data.birthdays && (
|
|
<div className="contact-attributes-section">
|
|
{data.birthdays.map((item, idx) => (
|
|
<div className="contact-attribute" key={idx}>
|
|
<label>
|
|
<Icons.Crown />
|
|
</label>
|
|
<div>
|
|
{new Date(item.date.year, item.date.month - 1, item.date.day).toLocaleDateString()}
|
|
</div>
|
|
</div>
|
|
))}
|
|
</div>
|
|
)}
|
|
{data.relations && (
|
|
<div className="contact-attributes-section">
|
|
{data.relations.map((item, idx) => (
|
|
<div className="contact-attribute" key={idx}>
|
|
<label>
|
|
<Icons.People />
|
|
</label>
|
|
<div>
|
|
{item.person}
|
|
{item.type && <div className="type">{item.type}</div>}
|
|
</div>
|
|
</div>
|
|
))}
|
|
</div>
|
|
)}
|
|
{data.urls && (
|
|
<div className="contact-attributes-section">
|
|
{data.urls.map((item, idx) => (
|
|
<div className="contact-attribute" key={idx}>
|
|
<label>
|
|
<Icons.Link />
|
|
</label>
|
|
<div>
|
|
<a href={`${item.value}`} title="Visit website...">
|
|
{item.value}
|
|
</a>
|
|
{item.type && <div className="type">{item.type}</div>}
|
|
</div>
|
|
</div>
|
|
))}
|
|
</div>
|
|
)}
|
|
<div className="contact-origin">
|
|
<div>{`${origin} (${account ? account.label : 'Unknown Account'})`}</div>
|
|
</div>
|
|
</div>
|
|
);
|