Timeline.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import moment from "moment";
  2. function Timeline({ data, dataPelaporan }) {
  3. const jadwal = dataPelaporan;
  4. const date = [...new Set(data.data.map((e) => moment(e.createdAt).format("DD MMMM YYYY")))];
  5. return (
  6. <ul className="timeline">
  7. {date.map((value) => (
  8. <>
  9. <li className="timeline-separator" data-datetime={value}></li>
  10. {data.data
  11. .filter((e) => e.for_pt && 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 info">
  16. <em className="far fa-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/user/admin.png" alt="Avatar" />
  24. <p className="m-0">
  25. <strong>{data.role}</strong>
  26. <br />
  27. {data.description}
  28. </p>
  29. </div>
  30. {data.data.files ? (
  31. <>
  32. <p className="text-muted my-2">Dokumen</p>
  33. {data.data.files.map((e) => (
  34. <div className="media bb p-2">
  35. <div className="media-body">
  36. <p className="m-0">
  37. <a href={`data:${e.type};base64, ${Buffer.from(e.data).toString("base64")}`} download={e.name}>
  38. <strong>{e.name}</strong>
  39. </a>
  40. </p>
  41. </div>
  42. </div>
  43. ))}
  44. </>
  45. ) : (
  46. ""
  47. )}
  48. </div>
  49. </div>
  50. </div>
  51. </li>
  52. </>
  53. ))}
  54. </>
  55. ))}
  56. <li className="timeline-end">
  57. <a className="timeline-badge">
  58. <em className="fa fa-plus"></em>
  59. </a>
  60. </li>
  61. </ul>
  62. );
  63. }
  64. export default Timeline;