+
{getLabelForAddress(address, i18n)}
+ {this.renderAddressLineIfTruthy(address.street)}
+ {this.renderPOBox(address.pobox, i18n)}
+ {this.renderAddressLineIfTruthy(address.neighborhood)}
+ {this.renderAddressLineTwo(address)}
+ {this.renderAddressLineIfTruthy(address.country)}
+
+ );
+ });
+ }
+
+ public render() {
+ const { contact, i18n } = this.props;
+
+ return (
+
+ {this.renderAvatar()}
+ {this.renderName()}
+ {this.renderContactShorthand()}
+ {this.renderSendMessage()}
+ {this.renderAdditionalContact(contact.number, i18n)}
+ {this.renderAdditionalContact(contact.email, i18n)}
+ {this.renderAddresses(contact.address, i18n)}
+
+ );
+ }
+}
diff --git a/ts/components/conversation/EmbeddedContact.md b/ts/components/conversation/EmbeddedContact.md
new file mode 100644
index 000000000..0b790e3fa
--- /dev/null
+++ b/ts/components/conversation/EmbeddedContact.md
@@ -0,0 +1,244 @@
+### With a contact
+
+#### Including all data types
+
+```jsx
+const outgoing = new Whisper.Message({
+ type: 'outgoing',
+ sent_at: Date.now() - 18000000,
+ contact: [
+ {
+ name: {
+ displayName: 'Someone Somewhere',
+ },
+ number: [
+ {
+ value: util.CONTACTS[0].id,
+ type: 1,
+ },
+ ],
+ avatar: {
+ avatar: {
+ path: util.gifObjectUrl,
+ },
+ },
+ },
+ ],
+});
+const incoming = new Whisper.Message(
+ Object.assign({}, outgoing.attributes, {
+ source: '+12025550011',
+ type: 'incoming',
+ })
+);
+const View = Whisper.MessageView;
+