Timeline.js 2.3 KB

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