DetailLaporan.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. import React, { Component } from "react";
  2. import Select from "react-select";
  3. import Scrollable from "@/components/Common/Scrollable";
  4. import { addStatus } from "@/actions/pelaporan";
  5. import { Card, CardBody, CardHeader, CardTitle } from "reactstrap";
  6. const status = [
  7. { value: "Ditindaklanjuti Dikti Ristek", label: "Ditindaklanjuti Dikti Ristek", className: "State-ACT" },
  8. { value: "Delegasi ke LLDIKTI", label: "Delegasi ke LLDIKTI", className: "State-ACT" },
  9. { value: "Ditutup", label: "Ditutup", className: "State-ACT" },
  10. ];
  11. const selectInstanceId = 1;
  12. export class DetailLaporan extends Component {
  13. constructor(props) {
  14. super(props);
  15. this.state = {
  16. selectedOption: null,
  17. };
  18. }
  19. componentDidMount = () => {
  20. const { data } = this.props;
  21. if (data.status) {
  22. const selectedOption = status.filter((e) => e.value === data.status)[0];
  23. this.setState({ selectedOption });
  24. } else {
  25. this.setState({ selectedOption: { value: "Ditindaklanjuti", label: "Ditindaklanjuti Dikti Ristek", className: "State-ACT" } });
  26. // const tes = await addStatus({ number, ptId }, { status: data.status || "ditindaklanjuti" });
  27. }
  28. };
  29. handleChangeSelect = async (selectedOption) => {
  30. const { ptId, number } = this.props.query;
  31. this.props.handleChangeSelect(selectedOption);
  32. this.setState({ selectedOption });
  33. await addStatus({ number, ptId }, { status: selectedOption.value });
  34. };
  35. render() {
  36. const { data } = this.props;
  37. return (
  38. <Card className="card b">
  39. <CardHeader>
  40. <CardTitle tag="h4">Detail Laporan</CardTitle>
  41. </CardHeader>
  42. <CardBody>
  43. <table className="table">
  44. <tbody>
  45. <tr>
  46. <td>
  47. <strong>Status</strong>
  48. </td>
  49. <td>
  50. <Select instanceId={selectInstanceId + 1} value={this.state.selectedOption} onChange={this.handleChangeSelect} options={status} required />
  51. </td>
  52. </tr>
  53. <tr>
  54. <td>
  55. <strong>Nomor Laporan</strong>
  56. </td>
  57. <td>{data._number}</td>
  58. </tr>
  59. <tr>
  60. <td>
  61. <strong>Perguruan Tinggi</strong>
  62. </td>
  63. <td>Universitas Satyagama</td>
  64. </tr>
  65. <tr>
  66. <td>
  67. <strong>Jenis Pelanggaran</strong>
  68. </td>
  69. <td>
  70. <Scrollable height="75px" className="list-group">
  71. <ul>{data.pelanggaran ? data.pelanggaran.map((e) => <li>{e.pelanggaran}</li>) : ""}</ul>
  72. </Scrollable>
  73. </td>
  74. </tr>
  75. <tr>
  76. <td>
  77. <strong>Keterangan Laporan</strong>
  78. </td>
  79. <td>
  80. <Scrollable height="100px" className="list-group">
  81. <p>{data.description}</p>
  82. </Scrollable>
  83. </td>
  84. </tr>
  85. <tr>
  86. <td>
  87. <strong>File Pendukung</strong>
  88. </td>
  89. <td>
  90. <Scrollable height="120px" className="list-group">
  91. <table className="table table-bordered bg-transparent">
  92. <tbody>
  93. {data.files
  94. ? data.files.map((e) => (
  95. <tr>
  96. <td>
  97. <em className="fa-lg far fa-file-code"></em>
  98. </td>
  99. <td>
  100. <a className="text-muted" href={`data:${e.type};base64, ${Buffer.from(e.data).toString("base64")}`} download={e.name}>
  101. {e.name}
  102. </a>
  103. </td>
  104. </tr>
  105. ))
  106. : ""}
  107. </tbody>
  108. </table>
  109. </Scrollable>
  110. </td>
  111. </tr>
  112. </tbody>
  113. </table>
  114. </CardBody>
  115. </Card>
  116. );
  117. }
  118. }
  119. export default DetailLaporan;