|
|
|
|
@@ -1,5 +1,5 @@
|
|
|
|
|
import React, { useState, useEffect, useCallback } from 'react';
|
|
|
|
|
import { Upload, Building2, ChevronLeft, Loader, AlertCircle, TrendingUp, Target, ShieldAlert, BarChart3 } from 'lucide-react';
|
|
|
|
|
import { Upload, Building2, ChevronLeft, Loader, AlertCircle, BarChart3 } from 'lucide-react';
|
|
|
|
|
import { useAuth } from '../../contexts/AuthContext';
|
|
|
|
|
import { PieChart, Pie, Cell, ComposedChart, Bar, Line, XAxis, YAxis, CartesianGrid, Tooltip, Legend, ReferenceLine, ResponsiveContainer } from 'recharts';
|
|
|
|
|
import MultiVerticalUploadModal from './MultiVerticalUploadModal';
|
|
|
|
|
@@ -210,7 +210,7 @@ function VerticalDetailView({ vertical, onBack, onSelectMetric }) {
|
|
|
|
|
const [categories, setCategories] = useState(null);
|
|
|
|
|
const [burndown, setBurndown] = useState(null);
|
|
|
|
|
const [loading, setLoading] = useState(true);
|
|
|
|
|
// ⚠️ CONVENTION: No error state — catch silently swallows errors without displaying them to the user
|
|
|
|
|
// ⚠️ CONVENTION: Missing error state — .catch() silently swallows errors without displaying them to the user. Add an error state and render an error message (see main CCPMetricsPage pattern).
|
|
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
|
|
|
setLoading(true);
|
|
|
|
|
@@ -356,7 +356,7 @@ function VerticalDetailView({ vertical, onBack, onSelectMetric }) {
|
|
|
|
|
function MetricDeviceList({ vertical, metricId, onBack }) {
|
|
|
|
|
const [devices, setDevices] = useState(null);
|
|
|
|
|
const [loading, setLoading] = useState(true);
|
|
|
|
|
// ⚠️ CONVENTION: No error state — catch silently swallows errors without displaying them to the user
|
|
|
|
|
// ⚠️ CONVENTION: Missing error state — .catch() silently swallows errors without displaying them to the user. Add an error state and render an error message (see main CCPMetricsPage pattern).
|
|
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
|
|
|
setLoading(true);
|
|
|
|
|
|