clientjs/packages/dashboard-components/src/ui/DocumentAnnotation.jsx
changeset 0 5f4fcbc80b37
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/clientjs/packages/dashboard-components/src/ui/DocumentAnnotation.jsx	Fri Sep 14 17:57:34 2018 +0200
@@ -0,0 +1,67 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import { FormattedRelative } from 'react-intl';
+import ReactMarkdown from 'react-markdown';
+
+import AnnotationQuote from './AnnotationQuote';
+import Tag from './Tag';
+
+import './DocumentAnnotation.scss';
+
+const User = ({ annotation }) => {
+  const [userName, instanceName] = annotation.user.replace('acct:', '').split('@');
+  return (
+    <strong>
+      { userName }
+      <span className="text-muted">{`@${instanceName}`}</span>
+    </strong>
+  );
+};
+
+User.propTypes = {
+  annotation: PropTypes.object.isRequired,
+};
+
+const TagList = ({ annotation, metacategories, categories }) => annotation.tags.map(
+  tag => <Tag tag={tag} metacategories={metacategories} categories={categories} key={`${annotation.uri}_${tag}`} />,
+);
+
+TagList.propTypes = {
+  annotation: PropTypes.object.isRequired,
+  metacategories: PropTypes.arrayOf(PropTypes.object).isRequired,
+  categories: PropTypes.arrayOf(PropTypes.string).isRequired,
+};
+
+
+const DocumentAnnotation = ({ annotation, metacategories, categories }) => (
+  <li className="highlight list-group-item d-block">
+
+    <AnnotationQuote annotation={annotation} metacategories={metacategories} />
+
+    <div className="comment-info">
+      <User annotation={annotation} />
+      {' - '}
+      <FormattedRelative value={annotation.updated} />
+      {' '}
+      <a href={annotation.links.incontext} target="_blank" rel="noopener noreferrer">#</a>
+    </div>
+
+    { (annotation.text || annotation.text !== '') && (
+      <div className="comment-body text-muted font-italic">
+        <ReactMarkdown source={annotation.text} />
+      </div>
+    )}
+
+    <div className="tags">
+      <TagList annotation={annotation} metacategories={metacategories} categories={categories} />
+    </div>
+  </li>
+);
+
+DocumentAnnotation.propTypes = {
+  annotation: PropTypes.object.isRequired,
+  metacategories: PropTypes.arrayOf(PropTypes.object).isRequired,
+  categories: PropTypes.arrayOf(PropTypes.string).isRequired,
+};
+
+export default DocumentAnnotation;