Spaces:
Running
Running
| export class ChartManager { | |
| constructor() { | |
| this.charts = {}; | |
| } | |
| formatDate(dateStr) { | |
| return new Date(dateStr).toLocaleDateString('en-US', { | |
| year: 'numeric', month: 'short', day: 'numeric' | |
| }); | |
| } | |
| createProgressChart(repoData) { | |
| const maxCount = Math.max(...repoData.map(row => row.xet_repos)); | |
| const dataPoints = repoData.map(row => ({ | |
| date: row.date, | |
| value: row.xet_repos | |
| })); | |
| const lineChartCtx = document.getElementById('progressChart').getContext('2d'); | |
| this.charts.lineChart = new Chart(lineChartCtx, { | |
| type: 'line', | |
| data: { | |
| labels: dataPoints.map(point => this.formatDate(point.date)), | |
| datasets: [{ | |
| label: 'Repos Migrated', | |
| data: dataPoints.map(point => point.value), | |
| borderColor: '#7875FF', | |
| backgroundColor: 'rgba(255, 127, 65, 1)', | |
| tension: 0.4 | |
| }] | |
| }, | |
| options: { | |
| responsive: true, | |
| maintainAspectRatio: false, | |
| animation: { duration: 2000 }, | |
| scales: { | |
| y: { | |
| min: 0, | |
| ticks: { stepSize: 100000 } | |
| }, | |
| x: { | |
| ticks: { | |
| maxTicksLimit: 20 | |
| } | |
| }, | |
| }, | |
| plugins: { | |
| tooltip: { | |
| callbacks: { | |
| label: function(context) { | |
| return `Repos Migrated: ${context.parsed.y.toLocaleString()}`; | |
| } | |
| } | |
| } | |
| } | |
| } | |
| }); | |
| } | |
| createDonutChart(fileData) { | |
| const lfs_file_count = fileData[fileData.length - 1].lfs_files; | |
| const xet_file_count = fileData[fileData.length - 1].xet_files; | |
| const donutChartCtx = document.getElementById('largeFilesChart').getContext('2d'); | |
| this.charts.donutChart = new Chart(donutChartCtx, { | |
| type: 'doughnut', | |
| data: { | |
| labels: [ | |
| 'LFS Files', | |
| 'Xet Files', | |
| ], | |
| datasets: [{ | |
| label: 'My First Dataset', | |
| data: [lfs_file_count, xet_file_count], | |
| backgroundColor: [ | |
| 'oklch(0.577 0.245 27.325 / 75.56%)', | |
| 'oklch(0.6361 0.1994 280.07 / 71.37%)', | |
| ], | |
| hoverOffset: 4 | |
| }] | |
| }, | |
| options: { | |
| responsive: true, | |
| maintainAspectRatio: false, | |
| animation: { duration: 2000 }, | |
| plugins: { | |
| legend: { | |
| position: 'top', | |
| }, | |
| } | |
| } | |
| }); | |
| } | |
| init(repoData, fileData) { | |
| this.createProgressChart(repoData); | |
| this.createDonutChart(fileData); | |
| } | |
| } | |