TableRiwayatCatatan.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. import Datatable from "@/components/Tables/Datatable";
  2. import { Button, Dropdown, DropdownToggle, DropdownMenu, DropdownItem, Modal, ModalBody, ModalFooter, ModalHeader } from "reactstrap";
  3. import Link from "next/link";
  4. import moment from "moment";
  5. import { ENV } from '../../env.js';
  6. import CopyToClipboard from "react-copy-to-clipboard";
  7. import { useState } from "react";
  8. import { deleteCatatan } from "../../actions/catatan.js";
  9. import { toast } from "react-toastify";
  10. import { useSelector } from "react-redux";
  11. import Router from "next/router";
  12. function TableRiwayatCatatan({ listData, query, editFilePage, newFilePage, readOnly, role }) {
  13. const [dropdownState, setDropdownState] = useState(false);
  14. const [seledtedID, setSelectedID] = useState("")
  15. const [modalIsOpen, setModalIsOpen] = useState(false)
  16. const token = useSelector((state) => state.token)
  17. const toggleDD = (dd) => {
  18. setDropdownState(prevState => ({
  19. ...prevState,
  20. [dd]: !prevState[dd]
  21. }));
  22. };
  23. // const deletedcatatan = async(id)=>{
  24. // const toastid = toast.loading("Please wait...");
  25. // const added = await deleteCatatan(id);
  26. // if (!added) {
  27. // toast.update(toastid, { render: "Error", type: "error", isLoading: false, autoClose: true, closeButton: true });
  28. // } else {
  29. // toast.update(toastid, { render: "Success", type: "success", isLoading: false, autoClose: true, closeButton: true });
  30. // // Router.push(`/app/perpanjangan-sanksi/detail?id=${this.state.catatan.sanksi_id}`);
  31. // }
  32. // }
  33. const setmodal = (id) => {
  34. setModalIsOpen(!modalIsOpen)
  35. setSelectedID(id)
  36. }
  37. return (
  38. <div className="card b ">
  39. <Modal isOpen={modalIsOpen} >
  40. <ModalBody>Apakah Anda yakin akan menghapus catatan ini?</ModalBody>
  41. <ModalFooter>
  42. <Button color className="btn-login" onClick={async () => {
  43. if (role === 2024) {
  44. Swal.fire({
  45. icon: 'error',
  46. title: 'Oops...',
  47. html: 'Maaf anda tidak memiliki akses untuk menyelesaikan<p> proses ini.</p>',
  48. confirmButtonColor: "#3e3a8e",
  49. confirmButtonText: 'Oke'
  50. })
  51. } else {
  52. await toast.promise(deleteCatatan(token, seledtedID), {
  53. pending: "Loading",
  54. success: "Success",
  55. error: "Error",
  56. });
  57. Router.push(`/app/perpanjangan-sanksi/detail?id=${query.id}`);
  58. setModalIsOpen(false)
  59. }
  60. }}>
  61. <span className="font-color-white">Ya</span>
  62. </Button>
  63. <Button color className="btn-v2" onClick={setmodal}>
  64. Tidak
  65. </Button>
  66. </ModalFooter>
  67. </Modal>
  68. <div className=" card-header">
  69. <div className=" card-title">Riwayat Catatan</div>
  70. </div>
  71. <div className=" card-body">
  72. <div className="margin-right-auto float-right">
  73. <Link
  74. href={{
  75. pathname: newFilePage,
  76. query: { id: query?.id },
  77. }}
  78. >
  79. <Button className="btn-login" color>
  80. <img className="icon-laporan-baru" src="/static/img/icon-laporan-baru.png"></img>
  81. <span className="font-color-white m-2">
  82. Tambah Catatan
  83. </span>
  84. </Button>
  85. </Link>
  86. </div>
  87. <Datatable options={{
  88. responsive: false, ordering: true,
  89. // paging: false,
  90. searching: false,
  91. // ordering: false,
  92. // info: false,
  93. }}>
  94. <table className="table w-100" data-order='[[0, "desc"]]'>
  95. <thead>
  96. <tr>
  97. <th>Tanggal dibuat</th>
  98. <th>Nama File</th>
  99. <th>Terakhir diedit</th>
  100. <th>Aksi</th>
  101. </tr>
  102. </thead>
  103. <tbody>
  104. {listData?.length
  105. ? listData.map((data, i) => (
  106. <tr>
  107. <td>{moment(data.createdAt).format("D MMMM YYYY")}</td>
  108. <td>
  109. {data.judul}
  110. </td>
  111. <td>{moment(data.updatedAt).format("D MMMM YYYY")}</td>
  112. <td
  113. // style={{ width: "30%" }}
  114. >
  115. {/* <span className=" float-left d-flex mr-2">
  116. <Button className="btn-v3" color >
  117. <span className="font-color-black">
  118. Hapus
  119. </span>
  120. </Button>
  121. </span>
  122. <span className=" mr-2">
  123. <Button className="btn-v3" color>
  124. <span className="font-color-black">
  125. Lihat
  126. </span>
  127. </Button>
  128. </span>
  129. <span className="">
  130. <Button className="btn-v3" color>
  131. <span className="font-color-black">
  132. Edit
  133. </span>
  134. </Button>
  135. </span> */}
  136. <span className="">
  137. <Dropdown isOpen={dropdownState[`ddSplit${i}`]}
  138. toggle={() => toggleDD(`ddSplit${i}`)} >
  139. <DropdownToggle
  140. data-toggle="dropdown"
  141. tag="span"
  142. >
  143. <Button color className="btn-v3">
  144. Info
  145. </Button>
  146. {/* <em className="fas fa-ellipsis-v" /> */}
  147. </DropdownToggle>
  148. <DropdownMenu>
  149. {ENV === "local" &&
  150. <CopyToClipboard
  151. text={`http://localhost:3000/signature/letter/${data?._id}`}
  152. options={{ asHtml: true }}
  153. ><DropdownItem>
  154. Link Dokumen
  155. </DropdownItem>
  156. </CopyToClipboard>
  157. }
  158. <Link
  159. href={{
  160. pathname: readOnly,
  161. query: { id: data?._id },
  162. }}
  163. >
  164. <DropdownItem>
  165. <span className=" font-color-black">Lihat</span>
  166. </DropdownItem>
  167. </Link>
  168. <Link
  169. href={{
  170. pathname: editFilePage,
  171. query: { id: data?._id },
  172. }}
  173. ><DropdownItem>
  174. <span className=" font-color-black">Edit</span>
  175. </DropdownItem>
  176. </Link>
  177. <DropdownItem onClick={() => { setmodal(data._id) }}>
  178. <span >
  179. Hapus
  180. </span>
  181. </DropdownItem>
  182. </DropdownMenu>
  183. </Dropdown>
  184. </span>
  185. </td>
  186. </tr>
  187. )) : (
  188. ""
  189. )}
  190. </tbody>
  191. </table>
  192. </Datatable>
  193. </div>
  194. </div>
  195. )
  196. }
  197. export default TableRiwayatCatatan;