| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 | import React, { Component } from "react";import { Col, Card, CardBody, FormGroup, Label, Input } from "reactstrap";import FlotChart from "@/components/Charts/Flot.js";import { getMonthDiskSpace } from "../../actions/disk";import moment from "moment";import "moment/locale/id";class ChartLineDisk extends Component {	constructor(props) {		super(props);		this.state = {			dataChart: this.ChartLine,			selectedMonth: moment().month(), // Current month (0 = January, 11 = December)			selectedYear: moment().year(),   // Current year		};	}	// Fetch data when component mounts or when date is changed	componentDidMount = async () => {		moment.locale('id'); 		this.fetchDiskSpaceData();	};	componentDidUpdate(prevProps, prevState) {		// Fetch data if selected month or year has changed		if (prevState.selectedMonth !== this.state.selectedMonth || prevState.selectedYear !== this.state.selectedYear) {			this.fetchDiskSpaceData();		}	}	// Function to fetch the disk space data	fetchDiskSpaceData = async () => {		const { token } = this.props;		const { selectedMonth, selectedYear } = this.state;		const selectedDate = `${selectedYear}-${(selectedMonth + 1).toString().padStart(2, "0")}`; // Format as YYYY-MM		const dataDisk = await getMonthDiskSpace(token, selectedDate);		const sortedDataDisk = dataDisk.data.sort((a, b) => new Date(a.date) - new Date(b.date));		const chartData = sortedDataDisk.map(item => {			const day = new Date(item.date).getDate();			const used = (item.used / (1024 ** 2)).toFixed(2);			return [day.toString(), used];		});		const updatedChartLine = {			...this.ChartLine,			data: [				{					label: "Use Disk Space",					color: "#3e3a8e",					data: chartData,				},			],		};		this.setState({ dataChart: updatedChartLine });	};	handleMonthChange = (e) => {		this.setState({ selectedMonth: parseInt(e.target.value) });	};	handleYearChange = (e) => {		this.setState({ selectedYear: parseInt(e.target.value) });	};	// Chart configuration	ChartLine = {		data: [			{				label: "Use Disk Space",				color: "#3e3a8e",				data: [],			},		],		options: {			series: {				lines: {					show: true,					fill: 0.01,				},				points: {					show: true,					radius: 4,				},			},			grid: {				borderColor: "#eee",				borderWidth: 1,				hoverable: true,				backgroundColor: "#fcfcfc",			},			tooltip: true,			tooltipOpts: {				content: (label, x, y) => `${x} : ${y} GB`,			},			xaxis: {				tickColor: "#eee",				mode: "categories",			},			yaxis: {				tickColor: "#eee",			},			shadowSize: 0,		},	};	render() {		const { selectedMonth, selectedYear, dataChart } = this.state;		const months = moment.months(); 		const years = Array.from({ length: 11 }, (_, i) => moment().year() - i);		return (			<Col lg={12}>				<Card className="card-default">					<CardBody>						<FormGroup row>							<Label for="month" sm={2}>Bulan:</Label>							<Col sm={4}>								<Input									type="select"									name="month"									id="month"									value={selectedMonth}									onChange={this.handleMonthChange}								>									{months.map((month, index) => (										<option key={index} value={index}>											{month}										</option>									))}								</Input>							</Col>							<Col sm={4}>								<Input									type="select"									name="year"									id="year"									value={selectedYear}									onChange={this.handleYearChange}								>									{years.map((year) => (										<option key={year} value={year}>											{year}										</option>									))}								</Input>							</Col>						</FormGroup>						<FlotChart							options={dataChart.options}							data={dataChart.data}							className="flot-chart"							height="300px"						/>					</CardBody>					<div align="center" className="mb-3">						<span>							Data Statistik Penggunaan Hardisk Bulan {months[selectedMonth]} {selectedYear}						</span>					</div>				</Card>			</Col>		);	}}export default ChartLineDisk;
 |