Timeline.js 1.6 KB

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