Timeline.js 3.8 KB

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