Timeline.js 3.1 KB

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