diff --git a/src/pages/ModernDashboard.tsx b/src/pages/ModernDashboard.tsx index f5fc69a..55a273e 100644 --- a/src/pages/ModernDashboard.tsx +++ b/src/pages/ModernDashboard.tsx @@ -681,7 +681,7 @@ const CompletionRateCard: React.FC<{ : '0.00'; return ( -
+
{completionRate}%
Completion Rate
@@ -692,7 +692,7 @@ const CompletionRateCard: React.FC<{
{/* Mini Stats */} -
+
{totalWorkOrders}
Total
@@ -995,14 +995,17 @@ const BarChart: React.FC<{ data: any }> = ({ data }) => { const allValues = datasets.flatMap((ds: any) => ds.values || []); const max = Math.max(...allValues, 1); const chartHeight = 250; - const width = 800; + // Increase width based on number of labels to prevent overlap + const minBarSpacing = 60; // Minimum spacing between bars + const calculatedWidth = Math.max(800, labels.length * minBarSpacing + 100); + const width = calculatedWidth; // Generate smooth line data (Average line overlay) const lineData = datasets[0]?.values || []; return ( -
- +
+ @@ -1095,16 +1098,20 @@ const BarChart: React.FC<{ data: any }> = ({ data }) => { {/* X-axis labels */} {labels.map((label: string, i: number) => { - const x = 80 + (i * ((width - 100) / labels.length)) + 20; + const barSpacing = (width - 100) / labels.length; + const x = 80 + (i * barSpacing) + (barSpacing / 2); + const truncatedLabel = label && label.length > 15 ? label.substring(0, 13) + '...' : label || 'null'; + return ( - {label} + {truncatedLabel} ); })} diff --git a/vite.config.ts b/vite.config.ts index ff3b5e2..56c5ed6 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -6,6 +6,9 @@ export default defineConfig({ plugins: [react()], server: { port: 3000, + allowedHosts: [ + 'monotriglyphic-uniformless-rema.ngrok-free.dev' + ], proxy: { // Proxy API requests to Frappe backend '/api': {