TableRiwayatCatatan.js 11 KB

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