cluedin-widget
Version:
This project contains all the pages needed for browsing entities and searching them. The aim is to replace the CluedIn.Webapp project with this one when all the pages ( including the Admin page ) will be ported to REACT.
225 lines (205 loc) • 9.31 kB
JSX
import React, { Component } from 'react';
import EntityDefault from './entities/DefaultEntity.jsx';
import moment from 'moment';
export default class DefaultEntity extends Component {
render() {
const { entity, openInNewTab, q, highlight, lastVisitedDate } = this.props;
const entityType = entity.data.entityType;
let content;
switch (entityType) {
case '/Infrastructure/User':
content = (<EntityDefault q={q}
openInNewTab={openInNewTab}
highlight={highlight}
entity={entity}
lastVisitedDate={lastVisitedDate}
properties={['property-user.jobTitle', 'property-person.jobTitle']}
/>);
break;
case '/Document/Spreadsheet':
content = (<EntityDefault q={q}
openInNewTab={openInNewTab}
highlight={highlight}
entity={entity}
lastVisitedDate={lastVisitedDate}
dataProperty="documentFileName"
/>);
break;
case '/Document/Presentation':
content = (<EntityDefault q={q}
openInNewTab={openInNewTab}
highlight={highlight}
entity={entity}
lastVisitedDate={lastVisitedDate}
dataProperty="documentFileName"
/>);
break;
case '/Presentation':
content = (<EntityDefault q={q}
openInNewTab={openInNewTab}
highlight={highlight}
entity={entity}
lastVisitedDate={lastVisitedDate}
dataProperty="documentFileName"
/>);
break;
case '/Person':
content = (<EntityDefault q={q}
openInNewTab={openInNewTab}
highlight={highlight}
entity={entity}
lastVisitedDate={lastVisitedDate}
properties={['property-user.jobTitle', 'property-person.jobTitle']}
/>);
break;
case '/Organization':
content = (<EntityDefault q={q}
openInNewTab={openInNewTab}
highlight={highlight}
entity={entity}
lastVisitedDate={lastVisitedDate}
properties={['property-organization.website','property-organization.industry']}
/>);
break;
case '/Document':
content = (<EntityDefault q={q}
openInNewTab={openInNewTab}
highlight={highlight}
entity={entity}
lastVisitedDate={lastVisitedDate}
dataProperty="documentFileName"
/>);
break;
case '/Document/Document':
content = (<EntityDefault q={q}
openInNewTab={openInNewTab}
highlight={highlight}
entity={entity}
lastVisitedDate={lastVisitedDate}
dataProperty="documentFileName"
/>);
break;
case '/Calendar/Event':
let eventExtraInfo;
let extraStartInfo;
let extraEndInfo;
if (entity.data && entity.data.properties) {
const start = entity.data.properties['property-event.start'];
const ends = entity.data.properties['property-event.end'];
if (start) {
let startDate = moment(start).fromNow();
extraStartInfo = (
<span><span style={{color:'#999'}}>Start</span> {startDate}, </span>
);
}
if (ends) {
if (start !== ends) {
const duration = moment.duration(moment(start).diff(moment(ends))).humanize();
extraEndInfo = (
<span><span style={{color:'#999'}}>Duration</span> {duration}</span>
);
}
}
if (start) {
eventExtraInfo = (<span>{extraStartInfo}{extraEndInfo}</span>);
}
}
content = (<EntityDefault q={q}
openInNewTab={openInNewTab}
highlight={highlight}
entity={entity}
extraInfoContent={eventExtraInfo}
lastVisitedDate={lastVisitedDate}
htmlDescription={true}
/>);
break;
case '/Mail':
content = (<EntityDefault q={q}
openInNewTab={openInNewTab}
highlight={highlight}
entity={entity}
lastVisitedDate={lastVisitedDate}
htmlDescription={true}
/>);
break;
case '/Task':
content = (<EntityDefault q={q}
openInNewTab={openInNewTab}
highlight={highlight}
entity={entity}
lastVisitedDate={lastVisitedDate}
properties={['property-task.state']}
/>);
break;
case '/Issue':
content = (<EntityDefault q={q}
openInNewTab={openInNewTab}
highlight={highlight}
entity={entity}
lastVisitedDate={lastVisitedDate}
properties={['property-zendesk.ticket.status']}
/>);
break;
case '/Discussion':
let extraInfoContentForDiscussion;
let extraInfoContentForDiscsussionStartTime;
let extraInfoContentForDiscussionEndTime;
if (entity.data && entity.data.properties) {
const startTimeForDiscussion = entity.data.properties['property-slack.discussion.StartTime'];
const endTimeForDiscussion = entity.data.properties['property-slack.discussion.EndTime'];
if (startTimeForDiscussion) {
let startTimeInDateForDiscsussion = moment(startTimeForDiscussion).fromNow();
extraInfoContentForDiscsussionStartTime = (
<span><span style={{color:'#999'}}>Start</span> {startTimeInDateForDiscsussion}, </span>
);
}
if (endTimeForDiscussion) {
if (startTimeForDiscussion !== endTimeForDiscussion) {
const durationForDiscussion = moment.duration(moment(startTimeForDiscussion).diff(moment(endTimeForDiscussion))).humanize();
extraInfoContentForDiscussionEndTime = (
<span><span style={{color:'#999'}}>Duration</span> {durationForDiscussion}</span>
);
}
}
if (startTimeForDiscussion) {
extraInfoContentForDiscussion = (
<span>{extraInfoContentForDiscsussionStartTime}{extraInfoContentForDiscussionEndTime}</span>);
}
}
content = (<EntityDefault q={q}
openInNewTab={openInNewTab}
highlight={highlight}
entity={entity}
lastVisitedDate={lastVisitedDate}
extraInfoContent={extraInfoContentForDiscussion}
/>);
break;
case '/Announcement':
let extraInfoContentForAnnouncement;
if (entity.data && entity.data.properties) {
let channelName = entity.data.properties['property-slack.message.channelName'];
if (channelName) {
extraInfoContentForAnnouncement = (<span>in channel #{channelName}</span>);
}
let twitterLink = entity.data.properties['property-twitter.status.detail.url'];
if (twitterLink) {
extraInfoContentForAnnouncement = (
<a style={{opacity: '0.6'}} target="_blank" href={twitterLink}>{twitterLink}</a>);
}
}
content = (<EntityDefault q={q}
openInNewTab={openInNewTab}
highlight={highlight}
entity={entity}
lastVisitedDate={lastVisitedDate}
extraInfoContent={extraInfoContentForAnnouncement}
/>);
break;
default:
content = (
<EntityDefault q={q} openInNewTab={openInNewTab} highlight={highlight} lastVisitedDate={lastVisitedDate} entity={entity}/>);
break;
}
return content;
}
}