|
@@ -0,0 +1,58 @@
|
|
|
|
|
+<script>
|
|
|
|
|
+ import { onMount } from 'svelte';
|
|
|
|
|
+ import { Chart, ArcElement, Tooltip, Legend, Title, DoughnutController } from 'chart.js';
|
|
|
|
|
+
|
|
|
|
|
+ export let data = {};
|
|
|
|
|
+
|
|
|
|
|
+ let chartContainer;
|
|
|
|
|
+
|
|
|
|
|
+ onMount(() => {
|
|
|
|
|
+ Chart.register(ArcElement, Tooltip, Legend, Title, DoughnutController);
|
|
|
|
|
+
|
|
|
|
|
+ if (data && data.stocks) {
|
|
|
|
|
+ const stockNames = data.stocks.map(stock => stock.name);
|
|
|
|
|
+ const stockTotals = data.stocks.map(stock => stock.total);
|
|
|
|
|
+
|
|
|
|
|
+ const chartData = {
|
|
|
|
|
+ labels: stockNames,
|
|
|
|
|
+ datasets: [{
|
|
|
|
|
+ label: 'Stock Distribution',
|
|
|
|
|
+ data: stockTotals,
|
|
|
|
|
+ backgroundColor: [
|
|
|
|
|
+ '#FF6F61', '#6B8E23', '#FFD700', '#20B2AA', '#87CEFA',
|
|
|
|
|
+ '#D2691E', '#FF6347', '#98FB98', '#D8BFD8', '#20B2AA',
|
|
|
|
|
+ '#FF4500', '#8A2BE2', '#A52A2A', '#DEB887', '#5F9EA0'
|
|
|
|
|
+ ],
|
|
|
|
|
+ borderColor: '#fff',
|
|
|
|
|
+ borderWidth: 1,
|
|
|
|
|
+ }],
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ const chartOptions = {
|
|
|
|
|
+ responsive: true,
|
|
|
|
|
+ plugins: {
|
|
|
|
|
+ legend: {
|
|
|
|
|
+ position: 'top',
|
|
|
|
|
+ },
|
|
|
|
|
+ tooltip: {
|
|
|
|
|
+ callbacks: {
|
|
|
|
|
+ label: function(tooltipItem) {
|
|
|
|
|
+ return `${tooltipItem.label}: $${tooltipItem.raw.toFixed(2)}`;
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ new Chart(chartContainer, {
|
|
|
|
|
+ type: 'doughnut',
|
|
|
|
|
+ data: chartData,
|
|
|
|
|
+ options: chartOptions,
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+</script>
|
|
|
|
|
+
|
|
|
|
|
+<div>
|
|
|
|
|
+ <canvas bind:this={chartContainer}></canvas>
|
|
|
|
|
+</div>
|