detail.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  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 } from "reactstrap";
  10. import { connect } from "react-redux";
  11. class DetailJawabanPencabutanSanksi extends Component {
  12. constructor(props) {
  13. super(props);
  14. this.state = {
  15. sanksi: {},
  16. };
  17. }
  18. static async getInitialProps({ query }) {
  19. return { query };
  20. }
  21. componentDidMount = async () => {
  22. const { user } = this.props;
  23. const { noSanksi } = this.props.query;
  24. const sanksi = await getSanksi({ noSanksi, ptId: user.peran[0].organisasi.id });
  25. console.log(sanksi);
  26. this.setState({ sanksi });
  27. };
  28. render() {
  29. const { sanksi } = this.state;
  30. const { jawaban } = (sanksi.data && sanksi.data[0].sanksi.cabut_sanksi) || {};
  31. return (
  32. <ContentWrapper unwrap>
  33. <Header />
  34. <div className="p-3">
  35. <div className="content-heading">
  36. <div>Jawaban Permohonan Pencabutan Sanksi</div>
  37. <div className="ml-auto">
  38. <Link href="/app/pt/jawaban-pencabutan-sanksi">
  39. <button className="btn btn-sm btn-secondary text-sm">&lt; back</button>
  40. </Link>
  41. </div>
  42. </div>
  43. <Row>
  44. <Col xl="9">
  45. <Card className="card-default">
  46. <CardBody>
  47. <Row>
  48. <Col lg={12}>
  49. {sanksi?.data && <DetailSanksi data={sanksi.data[0]} />}
  50. <p className="lead bb">Jawaban Permohonan Pencabutan Sanksi</p>
  51. <form className="form-horizontal">
  52. <FormGroup>
  53. <label md="4">Jawaban:</label>
  54. <div md="8">
  55. <h3>{jawaban && jawaban.status}</h3>
  56. </div>
  57. </FormGroup>
  58. <FormGroup>
  59. <label md="4">Keterangan:</label>
  60. <div md="8">
  61. <p>{jawaban && jawaban.description}</p>
  62. </div>
  63. </FormGroup>
  64. <FormGroup>
  65. <label md="4">Dokumen Jawaban:</label>
  66. <div md="8">
  67. <Scrollable height="120px" className="list-group">
  68. <table className="table table-bordered bg-transparent">
  69. <tbody>
  70. {jawaban &&
  71. jawaban.files.map((e) => (
  72. <tr>
  73. <td>
  74. <em className="fa-lg far fa-file-code"></em>
  75. </td>
  76. <td>
  77. <a className="text-muted" href={`data:${e.type};base64, ${Buffer.from(e.data).toString("base64")}`} download={e.name}>
  78. {e.name}
  79. </a>
  80. </td>
  81. </tr>
  82. ))}
  83. </tbody>
  84. </table>
  85. </Scrollable>
  86. </div>
  87. </FormGroup>
  88. </form>
  89. </Col>
  90. </Row>
  91. </CardBody>
  92. </Card>
  93. </Col>
  94. <Col xl="3">{this.props.pt && <DetailPT data={this.props.pt[0]} />}</Col>
  95. </Row>
  96. </div>
  97. </ContentWrapper>
  98. );
  99. }
  100. }
  101. const mapStateToProps = (state) => ({ user: state.user, pt: state.pt });
  102. export default connect(mapStateToProps)(DetailJawabanPencabutanSanksi);