integrasi chart dengan api
This commit is contained in:
parent
af5fb0ad01
commit
70214c3ba3
|
@ -13,14 +13,14 @@
|
||||||
<ion-title size="large">Grafik</ion-title>
|
<ion-title size="large">Grafik</ion-title>
|
||||||
</ion-toolbar>
|
</ion-toolbar>
|
||||||
</ion-header>
|
</ion-header>
|
||||||
<ion-content>
|
<ion-content>
|
||||||
<ion-card>
|
<ion-card *ngFor="let series of seriesData; let i = index">
|
||||||
<ion-card-title class="ion-padding-start">Line Chart</ion-card-title>
|
<ion-card-title class="ion-padding-start">{{ series.series_name }}</ion-card-title>
|
||||||
<ion-card-content class="ion-margin-top">
|
<ion-card-content class="ion-margin-top">
|
||||||
<div style="display: block; width: 100%; height: 150px;">
|
<div style="display: block; width: 100%; height: 150px;">
|
||||||
<canvas id="myChart"></canvas>
|
<canvas id="chart-{{ i }}"></canvas>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</ion-card-content>
|
</ion-card-content>
|
||||||
</ion-card>
|
</ion-card>
|
||||||
|
</ion-content>
|
||||||
</ion-content>
|
</ion-content>
|
|
@ -1,5 +1,6 @@
|
||||||
import { Component, OnInit, HostListener } from '@angular/core';
|
import { Component, OnInit, ChangeDetectorRef } from '@angular/core';
|
||||||
import { Platform } from '@ionic/angular';
|
import { Platform } from '@ionic/angular';
|
||||||
|
import { CommonModule } from '@angular/common';
|
||||||
import {
|
import {
|
||||||
IonHeader,
|
IonHeader,
|
||||||
IonToolbar,
|
IonToolbar,
|
||||||
|
@ -13,8 +14,10 @@ import {
|
||||||
} from '@ionic/angular/standalone';
|
} from '@ionic/angular/standalone';
|
||||||
import { NgClass } from '@angular/common';
|
import { NgClass } from '@angular/common';
|
||||||
import { Chart, registerables } from 'chart.js';
|
import { Chart, registerables } from 'chart.js';
|
||||||
import { ChartConfiguration, ChartOptions, ChartType } from "chart.js";
|
|
||||||
import { BaseChartDirective } from 'ng2-charts';
|
import { BaseChartDirective } from 'ng2-charts';
|
||||||
|
import { PengukuranService } from '../services/pengukuran.service';
|
||||||
|
import { Storage } from '@ionic/storage-angular';
|
||||||
|
|
||||||
|
|
||||||
Chart.register(...registerables);
|
Chart.register(...registerables);
|
||||||
@Component({
|
@Component({
|
||||||
|
@ -23,6 +26,7 @@ Chart.register(...registerables);
|
||||||
styleUrls: ['./indikator.page.scss'],
|
styleUrls: ['./indikator.page.scss'],
|
||||||
standalone: true,
|
standalone: true,
|
||||||
imports: [
|
imports: [
|
||||||
|
CommonModule,
|
||||||
IonButtons,
|
IonButtons,
|
||||||
IonMenuButton,
|
IonMenuButton,
|
||||||
IonHeader,
|
IonHeader,
|
||||||
|
@ -37,33 +41,50 @@ Chart.register(...registerables);
|
||||||
],
|
],
|
||||||
})
|
})
|
||||||
export class IndikatorPage implements OnInit {
|
export class IndikatorPage implements OnInit {
|
||||||
public below: boolean = false;
|
public seriesData: any[] = [];
|
||||||
|
|
||||||
constructor() {}
|
constructor(
|
||||||
|
private pengukuranService: PengukuranService,
|
||||||
|
private storage: Storage,
|
||||||
|
private cdr: ChangeDetectorRef
|
||||||
|
) {}
|
||||||
|
|
||||||
ngOnInit() {
|
async ngOnInit() {
|
||||||
this.createChart();
|
await this.storage.create();
|
||||||
|
this.getDataGraph();
|
||||||
}
|
}
|
||||||
|
|
||||||
createChart() {
|
async getDataGraph() {
|
||||||
const canvas = document.getElementById('myChart') as HTMLCanvasElement;
|
const id_identitas = await this.storage.get('id_identitas');
|
||||||
|
this.pengukuranService.getGraphByIdentitas(id_identitas).subscribe(
|
||||||
|
(response: any[]) => {
|
||||||
|
this.seriesData = response;
|
||||||
|
this.cdr.detectChanges();
|
||||||
|
this.seriesData.forEach((series, index) => this.createChart(series, index));
|
||||||
|
},
|
||||||
|
error => {
|
||||||
|
console.error('Error fetching data:', error);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
createChart(series: { series_name: any; series_data: any; }, index: number) {
|
||||||
|
const canvas = document.getElementById(`chart-${index}`) as HTMLCanvasElement;
|
||||||
const ctx = canvas.getContext('2d');
|
const ctx = canvas.getContext('2d');
|
||||||
|
const labels = series.series_data.map((_: any, i: number) => (i + 1).toString());
|
||||||
if (ctx) {
|
if (ctx) {
|
||||||
// Create a gradient for the chart background
|
|
||||||
const gradient = ctx.createLinearGradient(0, 0, 0, 400);
|
const gradient = ctx.createLinearGradient(0, 0, 0, 400);
|
||||||
gradient.addColorStop(0, 'rgba(0, 255, 0, 0.5)'); // Green area
|
gradient.addColorStop(0, 'rgba(0, 255, 0, 0.5)'); // Green
|
||||||
gradient.addColorStop(0.33, 'rgba(255, 255, 0, 0.5)'); // Yellow area
|
gradient.addColorStop(0.33, 'rgba(255, 255, 0, 0.5)'); // Yellow
|
||||||
gradient.addColorStop(0.66, 'rgba(255, 0, 0, 0.5)'); // Red area
|
gradient.addColorStop(0.66, 'rgba(255, 0, 0, 0.5)'); // Red
|
||||||
|
|
||||||
// Apply the gradient to the chart background
|
|
||||||
new Chart(ctx, {
|
new Chart(ctx, {
|
||||||
type: 'line',
|
type: 'line',
|
||||||
data: {
|
data: {
|
||||||
labels: ['January', 'February', 'March'],
|
labels: labels,
|
||||||
datasets: [{
|
datasets: [{
|
||||||
label: 'Series A',
|
label: series.series_name,
|
||||||
data: [0.5, 1.5, 2.5],
|
data: series.series_data,
|
||||||
borderColor: 'black',
|
borderColor: 'black',
|
||||||
fill: true,
|
fill: true,
|
||||||
}]
|
}]
|
||||||
|
@ -89,8 +110,6 @@ export class IndikatorPage implements OnInit {
|
||||||
const ctx = chart.ctx;
|
const ctx = chart.ctx;
|
||||||
const chartArea = chart.chartArea;
|
const chartArea = chart.chartArea;
|
||||||
const chartHeight = chartArea.bottom - chartArea.top;
|
const chartHeight = chartArea.bottom - chartArea.top;
|
||||||
|
|
||||||
// Calculate gradient stops
|
|
||||||
const greenStop = chartHeight * 0.33;
|
const greenStop = chartHeight * 0.33;
|
||||||
const yellowStop = chartHeight * 0.66;
|
const yellowStop = chartHeight * 0.66;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue