mirror of
https://github.com/christianvidalwolf-prog/CrazeAnalytix.git
synced 2026-08-03 12:35:24 +02:00
Optimize Weekly Sales performance and fix UI hang
This commit is contained in:
+27
-17
@@ -1483,20 +1483,31 @@ export const pivotWeeklySalesData = (data: CombinedKPIs[]): {
|
||||
rows: WeeklyPivotRow[],
|
||||
weeks: string[]
|
||||
} => {
|
||||
// 1. Identify all unique weeks and sort descending (YYYY-WW)
|
||||
const weekKeys = new Set<string>();
|
||||
data.forEach(d => {
|
||||
if (d.week) {
|
||||
const weekKey = `${d.year}-${String(d.week).padStart(2, '0')}`;
|
||||
weekKeys.add(weekKey);
|
||||
}
|
||||
});
|
||||
const sortedWeeks = Array.from(weekKeys).sort((a, b) => b.localeCompare(a));
|
||||
|
||||
const weekKeysSet = new Set<string>();
|
||||
const map = new Map<string, WeeklyPivotRow>();
|
||||
|
||||
for (let i = 0; i < data.length; i++) {
|
||||
// Cache week keys to avoid repeated string formatting
|
||||
// Key: year|week, Value: YYYY-WW
|
||||
const weekCache = new Map<string, string>();
|
||||
|
||||
const getWeekKey = (year: number, week: number) => {
|
||||
const cacheKey = `${year}|${week}`;
|
||||
let k = weekCache.get(cacheKey);
|
||||
if (!k) {
|
||||
k = `${year}-${String(week).padStart(2, '0')}`;
|
||||
weekCache.set(cacheKey, k);
|
||||
}
|
||||
return k;
|
||||
};
|
||||
|
||||
const len = data.length;
|
||||
for (let i = 0; i < len; i++) {
|
||||
const record = data[i];
|
||||
if (!record.week) continue;
|
||||
|
||||
const weekKey = getWeekKey(record.year, record.week);
|
||||
weekKeysSet.add(weekKey);
|
||||
|
||||
const key = record.asin || record.sku || `${record.title}-${record.line}`;
|
||||
if (!key) continue;
|
||||
|
||||
@@ -1516,14 +1527,13 @@ export const pivotWeeklySalesData = (data: CombinedKPIs[]): {
|
||||
map.set(key, row);
|
||||
}
|
||||
|
||||
if (record.week) {
|
||||
const weekKey = `${record.year}-${String(record.week).padStart(2, '0')}`;
|
||||
row.unitsByWeek[weekKey] = (row.unitsByWeek[weekKey] || 0) + (record.unitsTotal || 0);
|
||||
row.spendByWeek[weekKey] = (row.spendByWeek[weekKey] || 0) + (record.cost || 0);
|
||||
row.gvByWeek[weekKey] = (row.gvByWeek[weekKey] || 0) + (record.glanceViews || 0);
|
||||
}
|
||||
row.unitsByWeek[weekKey] = (row.unitsByWeek[weekKey] || 0) + (record.unitsTotal || 0);
|
||||
row.spendByWeek[weekKey] = (row.spendByWeek[weekKey] || 0) + (record.cost || 0);
|
||||
row.gvByWeek[weekKey] = (row.gvByWeek[weekKey] || 0) + (record.glanceViews || 0);
|
||||
}
|
||||
|
||||
const sortedWeeks = Array.from(weekKeysSet).sort((a, b) => b.localeCompare(a));
|
||||
|
||||
return {
|
||||
rows: Array.from(map.values()),
|
||||
weeks: sortedWeeks
|
||||
|
||||
Reference in New Issue
Block a user