fix: graf cena per zdroj nahrazen koláčem

feat: stránka doplnit údaje předělána na samostatnou stránku jídel + přidáno přejmenování
This commit is contained in:
Ondřej Anděl committed 2026-10-12 09:49:41 +02:00
1 parent b880b36edd
commit efed5e6e86
30 files changed
+514 -153

No files matched your search

+26
View File
@@ -63,3 +63,29 @@ export const periodOf = (date: string, mode: StatsRange): string => {
if (mode === StatsRange.ROK) return date.substring(0, 7);
return date.substring(0, 4);
};
/** Kolik zdrojů má v koláči vlastní výseč; zbytek se slije do "Ostatní". */
const SOURCE_SLICE_COUNT = 7;
/** Výseč koláče zdrojů. */
export type SourceSlice = { name: string, value: number, color: string };
/**
* Sestaví výseče koláče dle zdroje — příjmu i útraty. Barva jde podle pořadí ve
* výběru, zdrojů bývá hodně a pevná barva pro každý by paletu nestačila.
*
* @param bySource součty dle zdroje, sestupně dle zobrazované hodnoty
* @param getValue zobrazovaná hodnota součtu (kcal, Kč)
*/
export const buildSourceSlices = <T extends { key: string }>(
bySource: T[],
getValue: (total: T) => number,
): SourceSlice[] => {
const slices = bySource
.filter(total => getValue(total) > 0)
.slice(0, SOURCE_SLICE_COUNT)
.map((total, index) => ({ name: total.key, value: getValue(total), color: `var(--ft-series-${index + 1})` }));
const rest = bySource.slice(SOURCE_SLICE_COUNT).reduce((sum, total) => sum + getValue(total), 0);
if (rest > 0) slices.push({ name: 'Ostatní', value: rest, color: 'var(--ft-series-other)' });
return slices;
};