mirror of
https://github.com/christianvidalwolf-prog/CrazeAnalytix.git
synced 2026-08-03 11:45:23 +02:00
fix: exhaustive zero-spread safety audit and render logging
This commit is contained in:
@@ -45,6 +45,7 @@ const PERMANENT_DROPBOX_URL = "https://www.dropbox.com/scl/fi/b9zxn4z5i7sxwfakk5
|
|||||||
const PERMANENT_ADS_URL = "https://www.dropbox.com/scl/fi/wng8tep7awhvzd65amwad/Ads-Weekly.xlsx?rlkey=kcmoq8dxgibsb2eb8zz47xvyo&st=z02m4w3g&dl=0";
|
const PERMANENT_ADS_URL = "https://www.dropbox.com/scl/fi/wng8tep7awhvzd65amwad/Ads-Weekly.xlsx?rlkey=kcmoq8dxgibsb2eb8zz47xvyo&st=z02m4w3g&dl=0";
|
||||||
|
|
||||||
const App: React.FC = () => {
|
const App: React.FC = () => {
|
||||||
|
console.log('[App] Rendering Function Start');
|
||||||
const [rawData, setRawData] = useState<SalesRecord[]>([]);
|
const [rawData, setRawData] = useState<SalesRecord[]>([]);
|
||||||
const [adsData, setAdsData] = useState<AdsRecord[]>([]);
|
const [adsData, setAdsData] = useState<AdsRecord[]>([]);
|
||||||
const [trafficData, setTrafficData] = useState<TrafficRecord[]>([]);
|
const [trafficData, setTrafficData] = useState<TrafficRecord[]>([]);
|
||||||
|
|||||||
@@ -963,7 +963,7 @@ const DataGrid: React.FC<DataGridProps> = ({ data, filters, hasCustomerFilter, a
|
|||||||
if (selectedDimensions.includes(dim.value)) {
|
if (selectedDimensions.includes(dim.value)) {
|
||||||
setSelectedDimensions(selectedDimensions.filter(d => d !== dim.value));
|
setSelectedDimensions(selectedDimensions.filter(d => d !== dim.value));
|
||||||
} else {
|
} else {
|
||||||
setSelectedDimensions([...selectedDimensions, dim.value]);
|
setSelectedDimensions(selectedDimensions.concat([dim.value]));
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
className="w-4.5 h-4.5 rounded-md border-slate-600 bg-slate-800 text-indigo-500 focus:ring-indigo-500/50 focus:ring-offset-0 transition-all border-2 cursor-pointer"
|
className="w-4.5 h-4.5 rounded-md border-slate-600 bg-slate-800 text-indigo-500 focus:ring-indigo-500/50 focus:ring-offset-0 transition-all border-2 cursor-pointer"
|
||||||
|
|||||||
@@ -60,8 +60,8 @@ const MultiSelectDropdown: React.FC<MultiSelectDropdownProps> = ({ label, select
|
|||||||
|
|
||||||
const toggleOption = (option: string) => {
|
const toggleOption = (option: string) => {
|
||||||
const next = localSelected.includes(option)
|
const next = localSelected.includes(option)
|
||||||
? localSelected.filter((item) => item !== option)
|
? localSelected.filter(item => item !== option)
|
||||||
: [...localSelected, option];
|
: localSelected.concat([option]);
|
||||||
setLocalSelected(next);
|
setLocalSelected(next);
|
||||||
onChange(next);
|
onChange(next);
|
||||||
};
|
};
|
||||||
@@ -72,9 +72,9 @@ const MultiSelectDropdown: React.FC<MultiSelectDropdownProps> = ({ label, select
|
|||||||
const allFilteredSelected = filteredOptions.every(opt => localSelected.includes(opt));
|
const allFilteredSelected = filteredOptions.every(opt => localSelected.includes(opt));
|
||||||
next = allFilteredSelected
|
next = allFilteredSelected
|
||||||
? localSelected.filter(item => !filteredOptions.includes(item))
|
? localSelected.filter(item => !filteredOptions.includes(item))
|
||||||
: Array.from(new Set([...localSelected, ...filteredOptions]));
|
: Array.from(new Set(localSelected.slice().concat(filteredOptions)));
|
||||||
} else {
|
} else {
|
||||||
next = localSelected.length === options.length ? [] : [...options];
|
next = localSelected.length === options.length ? [] : options.slice();
|
||||||
}
|
}
|
||||||
setLocalSelected(next);
|
setLocalSelected(next);
|
||||||
onChange(next);
|
onChange(next);
|
||||||
@@ -190,7 +190,7 @@ const MultiSelectDropdown: React.FC<MultiSelectDropdownProps> = ({ label, select
|
|||||||
termsLower.some(t => opt.toLowerCase() === t || opt.toLowerCase().includes(t))
|
termsLower.some(t => opt.toLowerCase() === t || opt.toLowerCase().includes(t))
|
||||||
);
|
);
|
||||||
if (matched.length > 0) {
|
if (matched.length > 0) {
|
||||||
const next = Array.from(new Set([...localSelected, ...matched]));
|
const next = Array.from(new Set(localSelected.slice().concat(matched)));
|
||||||
setLocalSelected(next);
|
setLocalSelected(next);
|
||||||
onChange(next);
|
onChange(next);
|
||||||
}
|
}
|
||||||
@@ -202,7 +202,7 @@ const MultiSelectDropdown: React.FC<MultiSelectDropdownProps> = ({ label, select
|
|||||||
if (allSelected) {
|
if (allSelected) {
|
||||||
next = localSelected.filter(item => !filteredOptions.includes(item));
|
next = localSelected.filter(item => !filteredOptions.includes(item));
|
||||||
} else {
|
} else {
|
||||||
next = Array.from(new Set([...localSelected, ...filteredOptions]));
|
next = Array.from(new Set(localSelected.slice().concat(filteredOptions)));
|
||||||
}
|
}
|
||||||
setLocalSelected(next);
|
setLocalSelected(next);
|
||||||
onChange(next);
|
onChange(next);
|
||||||
|
|||||||
@@ -506,7 +506,7 @@ const WeeklyGrid: React.FC<WeeklyGridProps & { top50Mode: 'eu' | 'uk' }> = ({
|
|||||||
const filtered = prev.filter(f => !(f.week === week && f.metric === metric));
|
const filtered = prev.filter(f => !(f.week === week && f.metric === metric));
|
||||||
// Add new filter if provided
|
// Add new filter if provided
|
||||||
if (filter) {
|
if (filter) {
|
||||||
return [...filtered, filter];
|
return filtered.concat([filter]);
|
||||||
}
|
}
|
||||||
return filtered;
|
return filtered;
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user