TablePenetapanSanksi.js 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. import React, { Component } from "react";
  2. import { Card, Table } from "reactstrap";
  3. import { getPelanggaran } from "@/actions/pelanggaran";
  4. import { connect } from "react-redux";
  5. import Button from "reactstrap/lib/Button";
  6. import { getOneLaporan, updateLaporan } from "@/actions/pelaporan";
  7. import Router from "next/router";
  8. import { ToastContainer, toast } from "react-toastify";
  9. import { getAutoSave } from "@/actions/autosave";
  10. import Datatable from "@/components/Tables/Datatable";
  11. export class TablePenetapanSanksi extends Component {
  12. checkedData = [];
  13. constructor(props) {
  14. super(props);
  15. this.state = {
  16. // pelanggaran: null,
  17. checkedData: [],
  18. labelSanksi: [],
  19. btnDelegasi: false,
  20. };
  21. this.onHandleChange = this.onHandleChange.bind(this)
  22. }
  23. componentDidMount = async () => {
  24. const { token, query } = this.props;
  25. const { id } = query;
  26. const pelanggaran = await getPelanggaran(token);
  27. const getDataSave = await getAutoSave({ id, laporan: true });
  28. const autoSaveDataPelanggaran = getDataSave.data?.PenetapanSanksi?.dataPelanggaran;
  29. this.setState({ pelanggaran, checkedData: autoSaveDataPelanggaran ? autoSaveDataPelanggaran.data.map(e => e._id) : [] });
  30. this.checkedData = this.state.checkedData
  31. this.setState({ labelSanksi: autoSaveDataPelanggaran ? autoSaveDataPelanggaran?.data?.map(e => ({ value: e._id, labelSanksi: e.label_sanksi })) : [] })
  32. };
  33. onHandleChange = (evt) => {
  34. const checked = evt.target.checked;
  35. const item = evt.target.value;
  36. if (checked) this.state.checkedData.push(evt.target.value);
  37. // else this.setState((prevState) => ({ ...prevState, checkedData: prevState.checkedData.filter((e) => e != item) }));
  38. // else this.setState({ checkedData: this.state.checkedData.filter((e) => e != item) });
  39. else this.state.checkedData = this.state.checkedData.filter((e) => e != item)
  40. this.props.setCheckedData(this.state.checkedData);
  41. };
  42. setLabelSanksi = (evt, label_sanksi) => {
  43. const checked = evt.target.checked;
  44. const item = evt.target.value;
  45. if (checked) this.state.labelSanksi.push({ value: item, labelSanksi: label_sanksi });
  46. else this.state.labelSanksi = this.state.labelSanksi.filter((e) => e.value != item);
  47. }
  48. ondelegasi = () => {
  49. this.props.handleDelegasi(this.state)
  50. }
  51. render() {
  52. const { pelanggaran, labelSanksi, checkedData } = this.state;
  53. return (
  54. <div className="card b ">
  55. <div className="card-body card-over">
  56. {pelanggaran && <Datatable options={{
  57. responsive: false, ordering: true,
  58. paging: false,
  59. // searching:false,
  60. ordering: false,
  61. // info: false,
  62. }}>
  63. <table className="table w-100" >
  64. <thead>
  65. <tr>
  66. <th>No</th>
  67. <th>Jenis Pelanggaran</th>
  68. <th>Sanksi</th>
  69. <th></th>
  70. </tr>
  71. </thead>
  72. <tbody>
  73. {pelanggaran?.data?.map((jp, index) =>
  74. <tr key={jp._id}>
  75. <td>
  76. <label>{index + 1}</label>
  77. </td>
  78. <td>
  79. <div className="media align-items-center">
  80. <div className="media-body d-flex">
  81. <div>
  82. <p>{jp.pelanggaran}</p>
  83. {/* <p>TMT : {jp.tmt_bulan} Bulan</p> */}
  84. <p>Jenis Sanksi Administratif : {jp.label_sanksi}</p>
  85. </div>
  86. </div>
  87. </div>
  88. </td>
  89. <td>
  90. <div className="media align-items-center">
  91. <div className="media-body d-flex">
  92. <div>
  93. <p>{jp.sanksi}</p>
  94. <p>Keterangan : {jp.keterangan_sanksi}</p>
  95. </div>
  96. </div>
  97. </div>
  98. </td>
  99. <td>
  100. <div className="checkbox c-checkbox">
  101. <label>
  102. <input type="checkbox" checked={checkedData.find(id => id === jp._id)} value={jp._id} onChange={(evt) => {
  103. this.onHandleChange(evt)
  104. this.setLabelSanksi(evt, jp.label_sanksi)
  105. this.props.handleAutoSave()
  106. }} />
  107. <span className="fa fa-check"></span>
  108. </label>
  109. </div>
  110. </td>
  111. </tr>
  112. )
  113. }
  114. </tbody>
  115. </table>
  116. </Datatable>
  117. }
  118. {/* {this.props.user?.role.id === 2020 ? (
  119. labelSanksi.length && labelSanksi.filter((e) => e.labelSanksi === "Ringan" || e.labelSanksi === "Sedang").length === labelSanksi.length ? (
  120. <Button className="btn-login float-right" color onClick={this.ondelegasi} >
  121. <span className="font-color-white">
  122. Delegasi ke LLDIKTI
  123. </span>
  124. </Button>
  125. ) : ("")
  126. ) : ("")
  127. } */}
  128. <div className="float-right m-2 ">
  129. {this.props.user?.role.id === 2020 ? (
  130. labelSanksi.length && labelSanksi.filter((e) => e.labelSanksi === "Ringan" || e.labelSanksi === "Sedang").length === labelSanksi.length ? (
  131. <Button className="btn-login float-right" color onClick={this.ondelegasi} >
  132. <span className="font-color-white">
  133. Delegasi ke LLDIKTI
  134. </span>
  135. </Button>
  136. ) : ("")
  137. ) : ("")
  138. }
  139. </div>
  140. </div>
  141. </div>
  142. );
  143. }
  144. }
  145. const mapStateToProps = (state) => ({ user: state.user, token: state.token });
  146. export default connect(mapStateToProps)(TablePenetapanSanksi);