You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
etesync/src/JournalViewContact.tsx

87 lines
2.4 KiB
TypeScript

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