Fix: Data inconsistency pada transisi tahun/bulan dan setup API lokal untuk testing
- Fix deteksi transisi bulan untuk semua bulan (tidak hanya 1 Januari) - Perbaikan validasi data dengan threshold 20% untuk transisi bulan/tahun - Auto-reset chart jika data hourly tidak valid - Setup force local mode untuk testing API lokal - Perbaikan normalisasi dan validasi tanggal - Enhanced logging untuk debugging transisi
This commit is contained in:
@@ -107,11 +107,41 @@ export function updateDailyChart({ labels, counts, amounts }) {
|
||||
return;
|
||||
}
|
||||
|
||||
dailyLineChart.data.labels = labels || [];
|
||||
dailyLineChart.data.datasets[0].data = counts || [];
|
||||
dailyLineChart.data.datasets[1].data = amounts || [];
|
||||
dailyLineChart.update();
|
||||
console.log('[Charts] Daily chart updated:', { labelsCount: labels?.length, countsCount: counts?.length, amountsCount: amounts?.length });
|
||||
// Pastikan data arrays memiliki length yang sama
|
||||
const safeLabels = labels || [];
|
||||
const safeCounts = counts || [];
|
||||
const safeAmounts = amounts || [];
|
||||
|
||||
// Pastikan semua array memiliki length yang sama (24 jam)
|
||||
const maxLength = Math.max(safeLabels.length, safeCounts.length, safeAmounts.length, 24);
|
||||
const finalLabels = Array.from({ length: maxLength }, (_, i) => {
|
||||
if (i < safeLabels.length) return safeLabels[i];
|
||||
return `${String(i).padStart(2, '0')}:00`;
|
||||
});
|
||||
const finalCounts = Array.from({ length: maxLength }, (_, i) => {
|
||||
if (i < safeCounts.length) return Number(safeCounts[i]) || 0;
|
||||
return 0;
|
||||
});
|
||||
const finalAmounts = Array.from({ length: maxLength }, (_, i) => {
|
||||
if (i < safeAmounts.length) return Number(safeAmounts[i]) || 0;
|
||||
return 0;
|
||||
});
|
||||
|
||||
// Update chart data
|
||||
dailyLineChart.data.labels = finalLabels;
|
||||
dailyLineChart.data.datasets[0].data = finalCounts;
|
||||
dailyLineChart.data.datasets[1].data = finalAmounts;
|
||||
|
||||
// Update chart dengan mode 'none' untuk menghindari animasi yang tidak perlu
|
||||
dailyLineChart.update('none');
|
||||
|
||||
console.log('[Charts] Daily chart updated:', {
|
||||
labelsCount: finalLabels.length,
|
||||
countsCount: finalCounts.length,
|
||||
amountsCount: finalAmounts.length,
|
||||
totalCount: finalCounts.reduce((a, b) => a + b, 0),
|
||||
totalAmount: finalAmounts.reduce((a, b) => a + b, 0)
|
||||
});
|
||||
}
|
||||
|
||||
export function initCategoryChart(ctx) {
|
||||
@@ -169,18 +199,29 @@ export function updateCategoryChart({ labels, values }) {
|
||||
}
|
||||
|
||||
// Pastikan labels dan values tidak kosong
|
||||
const finalLabels = labels && labels.length > 0 ? labels : ['Orang', 'Motor', 'Mobil'];
|
||||
const finalValues = values && values.length > 0 ? values : [0, 0, 0];
|
||||
// Default categories: Orang, Motor, Mobil
|
||||
const defaultLabels = ['Orang', 'Motor', 'Mobil'];
|
||||
const defaultValues = [0, 0, 0];
|
||||
|
||||
// Pastikan length sama
|
||||
const minLength = Math.min(finalLabels.length, finalValues.length);
|
||||
const safeLabels = finalLabels.slice(0, minLength);
|
||||
const safeValues = finalValues.slice(0, minLength);
|
||||
const finalLabels = labels && labels.length > 0 ? labels : defaultLabels;
|
||||
const finalValues = values && values.length > 0 ? values : defaultValues;
|
||||
|
||||
// Pastikan length sama (minimal 3 untuk 3 kategori)
|
||||
const maxLength = Math.max(finalLabels.length, finalValues.length, 3);
|
||||
const safeLabels = Array.from({ length: maxLength }, (_, i) => {
|
||||
if (i < finalLabels.length) return finalLabels[i];
|
||||
return defaultLabels[i] || `Kategori ${i + 1}`;
|
||||
});
|
||||
const safeValues = Array.from({ length: maxLength }, (_, i) => {
|
||||
if (i < finalValues.length) return Number(finalValues[i]) || 0;
|
||||
return 0;
|
||||
});
|
||||
|
||||
// Update chart data
|
||||
categoryChart.data.labels = safeLabels;
|
||||
categoryChart.data.datasets[0].data = safeValues;
|
||||
|
||||
// Update chart dengan mode 'none' untuk animasi halus
|
||||
// Update chart dengan mode 'none' untuk menghindari animasi yang tidak perlu
|
||||
categoryChart.update('none');
|
||||
|
||||
console.log('[Charts] Category chart updated:', {
|
||||
|
||||
Reference in New Issue
Block a user