Timeline.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. import moment from "moment";
  2. function Timeline({ data, noFile = false, noJadwal = false }) {
  3. const date = data && [...new Set(data.map((e) => moment(e.createdAt).format("DD MMMM YYYY")))];
  4. return (
  5. <ul className="timeline-alt">
  6. {date.map((value) => (
  7. <>
  8. <li className="timeline-separator" data-datetime={value}></li>
  9. {data
  10. .filter((e) => moment(e.createdAt).format("DD MMMM YYYY") === value)
  11. .map((data, i) => (
  12. <>
  13. <li className={data.user.role?.id === 2022 ? "timeline-inverted" : ""}>
  14. <div className={`timeline-badge ${data.user.role?.id === 2022 ? " danger" : "info"}`}>
  15. <em className={`fas fa-${data.user.role?.id === 2022 ? "graduation-cap" : "file"}`}></em>
  16. </div>
  17. <div className="timeline-card">
  18. <div className="popover right">
  19. <div className="arrow"></div>
  20. <div className="popover-body">
  21. <div className="d-flex align-items-center mb-3">
  22. <img
  23. className="mr-3 rounded-circle thumb48"
  24. src={`/static/img${data.user.role?.id === 2022 ? "/univ-avatar.png" : data.user.isPublic ? "/user/user.png" : "/logo-single.png"}`}
  25. alt="Avatar"
  26. />
  27. <p className="m-0">
  28. <strong>
  29. {!data.user.isPrivate && data.user.nama ? data.user.nama : "Rahasia"} - {data.user.isPublic ? "Umum" : data.user.role.nama}
  30. </strong>
  31. <br />
  32. {data.keterangan}
  33. <br />
  34. {data.alasan && (
  35. <>
  36. {data.alasan}
  37. <br />
  38. </>
  39. )}
  40. {data.sanksi?.no_sanksi ? `No. Sanksi ${data.sanksi.no_sanksi}` : `No. Laporan ${data.laporan.no_laporan}`}
  41. <p className="text-muted m-0">{moment(data.createdAt).format("hh:mm")}</p>
  42. </p>
  43. </div>
  44. {!noJadwal && data.jadwal && (
  45. <>
  46. <p className="text-muted my-2">Jadwal Pemeriksaan</p>
  47. <p>
  48. Tanggal {moment(data.jadwal.dari_tanggal).format("DD MMMM YYYY")} - {moment(data.jadwal.sampai_tanggal).format("DD MMMM YYYY")}
  49. </p>
  50. </>
  51. )}
  52. {!noFile && data.dokumen.length ? (
  53. <>
  54. <p className="text-muted my-2">Dokumen</p>
  55. {data.dokumen.map((e) => (
  56. <div className="media bb p-2">
  57. <div className="media-body">
  58. <p className="m-0">
  59. <a href={e.path} target="_blank" download={e.judul}>
  60. <strong>{e.judul}</strong>
  61. </a>
  62. </p>
  63. </div>
  64. </div>
  65. ))}
  66. </>
  67. ) : (
  68. ""
  69. )}
  70. </div>
  71. </div>
  72. </div>
  73. </li>
  74. </>
  75. ))}
  76. </>
  77. ))}
  78. <li className="timeline-end">
  79. <a className="timeline-badge">
  80. <em className="fa fa-plus"></em>
  81. </a>
  82. </li>
  83. </ul>
  84. );
  85. }
  86. export default Timeline;