Timeline.js 3.5 KB

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