CaseProgress.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. import { Pagination, Progress, PaginationItem, PaginationLink, Button } from "reactstrap";
  2. import Sparkline from "@/components/Common/Sparklines";
  3. import { Container, Row, Col, Card, CardHeader, CardBody } from "reactstrap";
  4. import FlotChart from "@/components/Charts/Flot.js";
  5. import { ChartSpline, ChartArea, ChartBar, ChartBarStacked, ChartDonut, ChartLine, ChartPie } from "@/components/Config/flot.setup.js";
  6. import Datatable from "@/components/Tables/Datatable";
  7. import { useState, useEffect } from "react";
  8. function CaseProgress({ data, nextButton, prevButton, tahun, newLaporan }) {
  9. const laporan_pertahun = data.laporan_perTahun;
  10. const [chartData, setChartData] = useState([
  11. {
  12. // "label": "sales",
  13. color: "#287DAD",
  14. data: [],
  15. },
  16. ]);
  17. useEffect(() => {
  18. laporan_pertahun.forEach((e) => {
  19. chartData[0].data.push([convertMonth(e._id.bulan), e.jumlah_laporan]);
  20. });
  21. }, []);
  22. const convertMonth = (int) => {
  23. switch (int) {
  24. case 1:
  25. return "Januari";
  26. break;
  27. case 2:
  28. return "Februari";
  29. break;
  30. case 3:
  31. return "Maret";
  32. break;
  33. case 4:
  34. return "April";
  35. break;
  36. case 5:
  37. return "Mei";
  38. break;
  39. case 6:
  40. return "Juni";
  41. break;
  42. case 7:
  43. return "Juli";
  44. break;
  45. case 8:
  46. return "Agustus";
  47. break;
  48. case 9:
  49. return "September";
  50. break;
  51. case 10:
  52. return "Oktober";
  53. break;
  54. case 11:
  55. return "November";
  56. break;
  57. case 12:
  58. return "Desember";
  59. break;
  60. default:
  61. break;
  62. }
  63. };
  64. const ChartPie = {
  65. data: [
  66. {
  67. label: "Pelaporan masuk",
  68. color: "#287DAD",
  69. data: 40,
  70. },
  71. {
  72. label: "Pelaporan selesai",
  73. color: "#52D489",
  74. data: 70,
  75. },
  76. ],
  77. options: {
  78. series: {
  79. pie: {
  80. show: true,
  81. innerRadius: 0,
  82. label: {
  83. show: true,
  84. radius: 0.8,
  85. formatter: function (label, series) {
  86. return (
  87. '<div class="flot-pie-label">' +
  88. //label + ' : ' +
  89. Math.round(series.percent) +
  90. "%</div>"
  91. );
  92. },
  93. background: {
  94. opacity: 0.8,
  95. color: "#222",
  96. },
  97. },
  98. },
  99. },
  100. },
  101. };
  102. return (
  103. <div className="card b">
  104. <div className="card-body bb">
  105. <div className="margin-botton-20 text-tahun">
  106. <Button className="float-left button-hidden icon-next" onClick={prevButton}>
  107. <img src="/static/img/previous.png"></img>
  108. </Button>
  109. <Button className="float-left button-hidden icon-next" onClick={nextButton}>
  110. <img src="/static/img/next.png"></img>
  111. </Button>
  112. <b className="text-tahun">Tahun {tahun} </b>
  113. <Button className="float-right button-hidden icon-eksport">
  114. <img src="/static/img/eksport.png"></img>
  115. </Button>
  116. </div>
  117. <div className="header-1">
  118. <h2 className="card-title-1">Perkembangan</h2>
  119. </div>
  120. <div className="w-400">
  121. <FlotChart options={ChartBar.options} data={chartData} className="flot-chart" height="200px" />
  122. </div>
  123. </div>
  124. <div className="card-body">
  125. <div className="header-1">
  126. <h2 className="card-title-1">Rekapitulasi</h2>
  127. </div>
  128. <FlotChart options={ChartPie.options} data={ChartPie.data} className="flot-chart" height="250px" />
  129. </div>
  130. <div className="card-body">
  131. <div className="header-1">
  132. <h2 className="card-title-1">Laporan Terbaru</h2>
  133. </div>
  134. {newLaporan.map((value) => (
  135. <h5 className="card-title text-left py-2 bg-gray border-radius-login">
  136. <b className="f-size">{`${value.no_laporan} - ${value.pt.nama}`}</b>
  137. </h5>
  138. ))}
  139. </div>
  140. </div>
  141. );
  142. }
  143. export default CaseProgress;