Add a contact page.
parent
2a6220e6d4
commit
fddf39244d
@ -0,0 +1,86 @@
|
||||
import * as React from 'react';
|
||||
import { List, ListItem } from 'material-ui/List';
|
||||
import Divider from 'material-ui/Divider';
|
||||
import CommunicationCall from 'material-ui/svg-icons/communication/call';
|
||||
import CommunicationChatBubble from 'material-ui/svg-icons/communication/chat-bubble';
|
||||
import CommunicationEmail from 'material-ui/svg-icons/communication/email';
|
||||
import { indigo500 } from 'material-ui/styles/colors';
|
||||
|
||||
import * as ICAL from 'ical.js';
|
||||
|
||||
export class JournalViewContact extends React.Component {
|
||||
props: {
|
||||
contact?: ICAL.Component,
|
||||
};
|
||||
|
||||
render() {
|
||||
if (this.props.contact === undefined) {
|
||||
return (<div>Loading</div>);
|
||||
}
|
||||
|
||||
const contact = this.props.contact;
|
||||
const uid = contact.getFirstPropertyValue('uid');
|
||||
const name = contact.getFirstPropertyValue('fn');
|
||||
|
||||
const phoneNumbers = contact.getAllProperties('tel').map((prop, idx) => {
|
||||
const json = prop.toJSON();
|
||||
const values = prop.getValues().map((val) => (
|
||||
<ListItem
|
||||
key={idx}
|
||||
leftIcon={<CommunicationCall />}
|
||||
rightIcon={<CommunicationChatBubble />}
|
||||
primaryText={val}
|
||||
secondaryText={json[1].type}
|
||||
/>
|
||||
));
|
||||
return values;
|
||||
});
|
||||
|
||||
const emails = contact.getAllProperties('email').map((prop, idx) => {
|
||||
const json = prop.toJSON();
|
||||
const values = prop.getValues().map((val) => (
|
||||
<ListItem
|
||||
key={idx}
|
||||
leftIcon={<CommunicationEmail color={indigo500} />}
|
||||
primaryText={val}
|
||||
secondaryText={json[1].type}
|
||||
/>
|
||||
));
|
||||
return values;
|
||||
});
|
||||
|
||||
const skips = ['tel', 'email', 'prodid', 'uid', 'fn', 'n', 'version', 'photo'];
|
||||
const theRest = contact.getAllProperties().filter((prop) => (
|
||||
skips.indexOf(prop.name) === -1
|
||||
)).map((prop, idx) => {
|
||||
const values = prop.getValues().map((_val) => {
|
||||
const val = (_val instanceof String) ? _val : _val.toString();
|
||||
return (
|
||||
<ListItem
|
||||
key={idx}
|
||||
insetChildren={true}
|
||||
primaryText={(window as any).me = val}
|
||||
secondaryText={prop.name}
|
||||
/>
|
||||
);
|
||||
});
|
||||
return values;
|
||||
});
|
||||
return (
|
||||
<div>
|
||||
<h3>{name} <small>{uid}</small></h3>
|
||||
<List>
|
||||
{phoneNumbers}
|
||||
</List>
|
||||
<Divider inset={true} />
|
||||
<List>
|
||||
{emails}
|
||||
</List>
|
||||
<Divider inset={true} />
|
||||
<List>
|
||||
{theRest}
|
||||
</List>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue