TableRiwayat.js 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. import React, { useState, Fragment } from "react";
  2. import moment from "moment";
  3. import "moment/locale/id";
  4. import Swal from "sweetalert2";
  5. import { Table } from "reactstrap";
  6. moment.locale("id");
  7. function TableRiwayat({ data = [], data_pelanggaran = {}, role }) {
  8. const [openIndex, setOpenIndex] = useState(null);
  9. const toggleRow = (index) => {
  10. setOpenIndex(openIndex === index ? null : index);
  11. };
  12. const handleOpenAlert = () => {
  13. Swal.fire({
  14. icon: "error",
  15. title: "Oops...",
  16. html: "Maaf anda tidak memiliki akses untuk menyelesaikan <p>proses ini.</p>",
  17. confirmButtonColor: "#3e3a8e",
  18. confirmButtonText: "Oke",
  19. });
  20. };
  21. return (
  22. <div className="card ">
  23. <h3 className="mb-3 fw-bold">Riwayat Surat Sanksi</h3>
  24. <Table hover responsive>
  25. <thead className="table-header">
  26. <tr>
  27. <th>Tanggal</th>
  28. <th>Keterangan</th>
  29. <th>Nomor Surat Sanksi</th>
  30. <th>Dokumen Surat Sanksi</th>
  31. <th width="50"></th>
  32. </tr>
  33. </thead>
  34. <tbody>
  35. {data.length === 0 && (
  36. <tr>
  37. <td colSpan="5" className="text-center">
  38. Data tidak tersedia
  39. </td>
  40. </tr>
  41. )}
  42. {data.map((item, index) => (
  43. <Fragment key={index}>
  44. {/* ROW UTAMA */}
  45. <tr className="main-row">
  46. <td>
  47. {item.createdAt
  48. ? moment(item.createdAt).format("DD/MM/YYYY")
  49. : "-"}
  50. </td>
  51. <td>{item.keterangan || "-"}</td>
  52. <td>{item.no_sanksi || "-"}</td>
  53. <td>
  54. {item.dokumen?.length > 0 ? (
  55. item.dokumen.map((doc, i) => (
  56. <div key={i}>
  57. <i className="far fa-file-pdf me-2"></i>
  58. {role === 2071 ? (
  59. <span
  60. className="text-muted"
  61. style={{ cursor: "pointer" }}
  62. onClick={handleOpenAlert}
  63. >
  64. {doc.judul}
  65. </span>
  66. ) : (
  67. <a
  68. href={doc.path}
  69. target="_blank"
  70. rel="noopener noreferrer"
  71. download={doc.judul}
  72. className="text-muted"
  73. >
  74. {doc.judul}
  75. </a>
  76. )}
  77. </div>
  78. ))
  79. ) : (
  80. "-"
  81. )}
  82. </td>
  83. <td className="">
  84. <span
  85. onClick={() => toggleRow(index)}
  86. >
  87. {openIndex === index ? <em className="fas fa-angle-up"/> : <em className="fas fa-angle-down"/>}
  88. </span>
  89. </td>
  90. </tr>
  91. {/* DETAIL EXPAND */}
  92. {openIndex === index && (
  93. <tr className="detail-row">
  94. <td colSpan="5">
  95. <div className="p-3 bg-light rounded">
  96. <Table responsive>
  97. <thead>
  98. <tr>
  99. <th width="50%">Jenis Pelanggaran</th>
  100. <th width="50%">Sanksi</th>
  101. </tr>
  102. </thead>
  103. <tbody>
  104. {data_pelanggaran?.pelanggaran?.length > 0 ? (
  105. data_pelanggaran.pelanggaran.map((jp) => (
  106. <tr key={jp._id}>
  107. <td>
  108. <p className="mb-1">
  109. {jp.pelanggaran}
  110. </p>
  111. <small>
  112. Durasi: {jp.tmt_bulan} Bulan
  113. </small>
  114. <br />
  115. <small>
  116. Jenis Sanksi Administratif:{" "}
  117. {jp.label_sanksi}
  118. </small>
  119. </td>
  120. <td>
  121. <p className="mb-1">{jp.sanksi}</p>
  122. <small>
  123. Keterangan:{" "}
  124. {jp.keterangan_sanksi || "-"}
  125. </small>
  126. </td>
  127. </tr>
  128. ))
  129. ) : (
  130. <tr>
  131. <td colSpan="2" className="text-center">
  132. Tidak ada data pelanggaran
  133. </td>
  134. </tr>
  135. )}
  136. </tbody>
  137. </Table>
  138. </div>
  139. </td>
  140. </tr>
  141. )}
  142. </Fragment>
  143. ))}
  144. </tbody>
  145. </Table>
  146. </div>
  147. );
  148. }
  149. export default TableRiwayat;