detail.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. import React, { Component } from "react";
  2. import Link from "next/link";
  3. import { getSanksi } from "@/actions/sanksi";
  4. import Header from "@/components/Main/Header";
  5. import DetailPT from "@/components/Main/DetailPT";
  6. import DetailSanksi from "@/components/Main/DetailSanksi";
  7. import ContentWrapper from "@/components/Layout/ContentWrapper";
  8. import Scrollable from "@/components/Common/Scrollable";
  9. import { Row, Col, Card, CardBody, FormGroup, Button } from "reactstrap";
  10. import { connect } from "react-redux";
  11. import Loader from "@/components/Common/Loader";
  12. import { API_URL } from "@/env";
  13. class DetailJawabanPencabutanSanksi extends Component {
  14. constructor(props) {
  15. super(props);
  16. this.state = {
  17. sanksi: {},
  18. };
  19. }
  20. static async getInitialProps({ query }) {
  21. return { query };
  22. }
  23. componentDidMount = async () => {
  24. const { user } = this.props;
  25. const { noSanksi } = this.props.query;
  26. const sanksi = await getSanksi({ noSanksi, ptId: user.peran[0].organisasi.id });
  27. this.setState({ sanksi });
  28. };
  29. render() {
  30. const { sanksi } = this.state;
  31. const { jawaban } = (sanksi.data && sanksi.data[0].sanksi.cabut_sanksi) || {};
  32. return (
  33. <ContentWrapper unwrap>
  34. <Header data={this.props.pt[0]} />
  35. <div className="p-3">
  36. <div className="content-heading">
  37. <div>Jawaban Permohonan Pencabutan Sanksi</div>
  38. <div className="ml-auto">
  39. <Link href="/app/pt/jawaban-pencabutan-sanksi">
  40. <button className="btn btn-sm btn-secondary text-sm">&lt; kembali</button>
  41. </Link>
  42. </div>
  43. </div>
  44. <Row>
  45. {sanksi?.data ? (
  46. <Col xl="9">
  47. <Card className="card-default">
  48. <CardBody>
  49. <Row>
  50. <Col lg={12}>
  51. <DetailSanksi data={sanksi.data[0]} />
  52. <p className="lead bb">Jawaban Permohonan Pencabutan Sanksi</p>
  53. <form className="form-horizontal">
  54. <FormGroup>
  55. <label md="4">Jawaban:</label>
  56. <div md="8">
  57. <h3>{jawaban && jawaban.status}</h3>
  58. </div>
  59. </FormGroup>
  60. <FormGroup>
  61. <label md="4">Keterangan:</label>
  62. <div md="8">
  63. <p>{jawaban && jawaban.description}</p>
  64. </div>
  65. </FormGroup>
  66. <FormGroup>
  67. <label md="4">Dokumen Jawaban:</label>
  68. <div md="8">
  69. <Scrollable height="120px" className="list-group">
  70. <table className="table table-bordered bg-transparent">
  71. <tbody>
  72. {jawaban &&
  73. jawaban.files.map((e) => (
  74. <tr>
  75. <td>
  76. <em className="fa-lg far fa-file-code"></em>
  77. </td>
  78. <td>
  79. <a className="text-muted" href={API_URL + e.path} target="_blank" download={e.name}>
  80. {e.name}
  81. </a>
  82. </td>
  83. </tr>
  84. ))}
  85. </tbody>
  86. </table>
  87. </Scrollable>
  88. </div>
  89. </FormGroup>
  90. </form>
  91. {jawaban && jawaban.status === "Rekomendasi Perbaikan" && (
  92. <Link
  93. href={{
  94. pathname: "/app/pt/dokumen-perbaikan/detail",
  95. query: { noSanksi: sanksi.data[0].sanksi.no_sanksi },
  96. }}
  97. >
  98. <Button color className="btn-login color-3e3a8e">
  99. <span className="font-color-white">
  100. Dokumen Perbaikan
  101. </span>
  102. </Button>
  103. </Link>
  104. )}
  105. </Col>
  106. </Row>
  107. </CardBody>
  108. </Card>
  109. </Col>
  110. ) : (
  111. <Loader />
  112. )}
  113. <Col xl="3">{this.props.pt && <DetailPT data={this.props.pt[0]} />}</Col>
  114. </Row>
  115. </div>
  116. </ContentWrapper>
  117. );
  118. }
  119. }
  120. const mapStateToProps = (state) => ({ user: state.user, pt: state.pt });
  121. export default connect(mapStateToProps)(DetailJawabanPencabutanSanksi);