fix: resolve black screen caused by React hooks violation in WaterfallModal

Move useMemo before early return in WaterfallModal to comply with Rules of Hooks.
Wrap App with ErrorBoundary so future render crashes show an error panel instead of a silent black screen.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Christian Vidal Wolf
2026-03-16 13:04:42 +01:00
co-authored by Claude Sonnet 4.6
parent 753b312412
commit 845a8e0ae6
2 changed files with 9 additions and 5 deletions
+5 -4
View File
@@ -11,13 +11,12 @@ interface WaterfallModalProps {
} }
export const WaterfallModal: React.FC<WaterfallModalProps> = ({ product, includeCOGS, onClose }) => { export const WaterfallModal: React.FC<WaterfallModalProps> = ({ product, includeCOGS, onClose }) => {
if (!product) return null;
const data = useMemo(() => { const data = useMemo(() => {
if (!product) return [];
const metrics = calculateProductMetrics(product, includeCOGS); const metrics = calculateProductMetrics(product, includeCOGS);
let currentTotal = product.grossSales; let currentTotal = product.grossSales;
const steps = [ const steps = [
{ name: 'Gross Sales', value: product.grossSales, isTotal: true, color: '#6366f1' }, // Indigo { name: 'Gross Sales', value: product.grossSales, isTotal: true, color: '#6366f1' }, // Indigo
{ name: 'PPC', value: -product.ppcSpend, isTotal: false, color: '#ef4444' }, // Rose { name: 'PPC', value: -product.ppcSpend, isTotal: false, color: '#ef4444' }, // Rose
@@ -67,6 +66,8 @@ export const WaterfallModal: React.FC<WaterfallModalProps> = ({ product, include
})); }));
}, [product, includeCOGS]); }, [product, includeCOGS]);
if (!product) return null;
const metrics = calculateProductMetrics(product, includeCOGS); const metrics = calculateProductMetrics(product, includeCOGS);
return ( return (
+4 -1
View File
@@ -1,6 +1,7 @@
import React from 'react'; import React from 'react';
import ReactDOM from 'react-dom/client'; import ReactDOM from 'react-dom/client';
import App from './App'; import App from './App';
import ErrorBoundary from './components/ErrorBoundary';
const rootElement = document.getElementById('root'); const rootElement = document.getElementById('root');
if (!rootElement) { if (!rootElement) {
@@ -10,6 +11,8 @@ if (!rootElement) {
const root = ReactDOM.createRoot(rootElement); const root = ReactDOM.createRoot(rootElement);
root.render( root.render(
<React.StrictMode> <React.StrictMode>
<App /> <ErrorBoundary>
<App />
</ErrorBoundary>
</React.StrictMode> </React.StrictMode>
); );