detail.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  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. class DetailJawabanPencabutanSanksi extends Component {
  13. constructor(props) {
  14. super(props);
  15. this.state = {
  16. sanksi: {},
  17. };
  18. }
  19. static async getInitialProps({ query }) {
  20. return { query };
  21. }
  22. componentDidMount = async () => {
  23. const { user } = this.props;
  24. const { noSanksi } = this.props.query;
  25. const sanksi = await getSanksi({ noSanksi, ptId: user.peran[0].organisasi.id });
  26. console.log(sanksi);
  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; back</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={`data:${e.type};base64, ${Buffer.from(e.data).toString("base64")}`} 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="primary">Perbaiki Dokumen</Button>
  99. </Link>
  100. )}
  101. </Col>
  102. </Row>
  103. </CardBody>
  104. </Card>
  105. </Col>
  106. ) : (
  107. <Loader />
  108. )}
  109. <Col xl="3">{this.props.pt && <DetailPT data={this.props.pt[0]} />}</Col>
  110. </Row>
  111. </div>
  112. </ContentWrapper>
  113. );
  114. }
  115. }
  116. const mapStateToProps = (state) => ({ user: state.user, pt: state.pt });
  117. export default connect(mapStateToProps)(DetailJawabanPencabutanSanksi);