Timeline.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import moment from "moment";
  2. function Timeline({ data }) {
  3. return (
  4. <ul className="timeline">
  5. {data.data
  6. .filter((e) => e.for_pt)
  7. .map((data, i) => (
  8. <>
  9. <li className="timeline-separator" data-datetime={moment(data.createdAt).format("DD MMMM YYYY")}></li>
  10. <li className={data.role === "PT" ? "timeline-inverted" : ""}>
  11. <div className="timeline-badge info">
  12. <em className="far fa-file"></em>
  13. </div>
  14. <div className="timeline-card">
  15. <div className="popover right">
  16. <div className="arrow"></div>
  17. <div className="popover-body">
  18. <div className="d-flex align-items-center mb-3">
  19. <img className="mr-3 rounded-circle thumb48" src="/static/img/user/admin.png" alt="Avatar" />
  20. <p className="m-0">
  21. <strong>{data.role}</strong>
  22. <br />
  23. {data.description}
  24. </p>
  25. </div>
  26. {data.data.files ? (
  27. <>
  28. <p className="text-muted my-2">Dokumen</p>
  29. {data.data.files.map((e) => (
  30. <div className="media bb p-2">
  31. <div className="media-body">
  32. <p className="m-0">
  33. <a href={`data:${e.type};base64, ${Buffer.from(e.data).toString("base64")}`} download={e.name}>
  34. <strong>{e.name}</strong>
  35. </a>
  36. </p>
  37. </div>
  38. </div>
  39. ))}
  40. </>
  41. ) : (
  42. ""
  43. )}
  44. </div>
  45. </div>
  46. </div>
  47. </li>
  48. </>
  49. ))}
  50. <li className="timeline-end">
  51. <a className="timeline-badge">
  52. <em className="fa fa-plus"></em>
  53. </a>
  54. </li>
  55. </ul>
  56. );
  57. }
  58. export default Timeline;