fix: verbleibende Lint-Befunde ausraeumen (Lint jetzt ohne Beanstandung)

Vier offene Befunde standen einem sauberen Produktionslauf im Weg:

- recently-viewed-section und site-chrome riefen setState direkt im
  Effektrumpf auf, um einen Leerzustand herzustellen ("keine angesehenen
  Produkte" bzw. "Eingabe kuerzer als zwei Zeichen"). Beides ergibt sich
  unmittelbar aus vorhandenen Werten und wird jetzt beim Rendern
  abgeleitet — das spart je einen zusaetzlichen Renderdurchlauf. Bei der
  Suche verschwindet die Vorschlagsliste dadurch sofort beim Leeren des
  Feldes statt erst nach dem naechsten Effektlauf.

- STAT_KEYS im Admin-Dashboard wurde ausschliesslich als Typ verwendet,
  landete als `as const`-Array aber trotzdem im Bundle. Ersetzt durch
  einen Typ-Alias.

- Ein DHL-Test importierte DhlApiError, ohne es zu benutzen, und pruefte
  nur den Meldungstext — er haette damit jeden beliebigen anderen Fehler
  mit passendem Text durchgehen lassen. Er prueft jetzt zusaetzlich den
  Fehlertyp, wie seine beiden Geschwistertests.

Stand danach: eslint ohne Beanstandung (vorher 2 Fehler, 2 Warnungen),
tsc ohne Fehler, 201 Tests gruen, Produktions-Build erfolgreich.
This commit is contained in:
Nick Szaunig committed 2026-09-14 20:37:01 +02:00
1 parent 107cbadf79
commit 02d493dede
4 files changed
+57 -35

No files matched your search

+17 -12
View File
@@ -52,17 +52,22 @@ function PeopleIcon() {
);
}
const STAT_KEYS = [
"revenueToday",
"revenueMonth",
"openOrders",
"inventory",
"soldGlasses",
"avgCart",
"repeatCustomers",
] as const;
/**
* Die Kennzahlen-Kacheln des Dashboards. Bewusst ein Typ und keine
* Wert-Konstante: die Liste wurde nie zur Laufzeit durchlaufen, sondern
* ausschliesslich benutzt, um die Record-/Array-Typen unten vollstaendig zu
* halten — als `as const`-Array landete sie trotzdem im Bundle.
*/
type StatKey =
| "revenueToday"
| "revenueMonth"
| "openOrders"
| "inventory"
| "soldGlasses"
| "avgCart"
| "repeatCustomers";
const statIcons: Record<(typeof STAT_KEYS)[number], () => ReturnType<typeof CoinIcon>> = {
const statIcons: Record<StatKey, () => ReturnType<typeof CoinIcon>> = {
revenueToday: CoinIcon,
revenueMonth: CoinIcon,
openOrders: OrdersIcon,
@@ -161,7 +166,7 @@ export default async function AdminDashboardPage() {
}
const repeatCustomerCount = [...ordersPerCustomer.values()].filter((count) => count > 1).length;
const statLabels: Record<(typeof STAT_KEYS)[number], string> = {
const statLabels: Record<StatKey, string> = {
revenueToday: t.adminDashboardPage.statRevenueToday,
revenueMonth: t.adminDashboardPage.statRevenueMonth,
openOrders: t.adminDashboardPage.statOpenOrders,
@@ -171,7 +176,7 @@ export default async function AdminDashboardPage() {
repeatCustomers: t.adminDashboardPage.statRepeatCustomers,
};
const stats: { key: (typeof STAT_KEYS)[number]; value: string }[] = [
const stats: { key: StatKey; value: string }[] = [
{ key: "revenueToday", value: formatPrice(revenueToday._sum.totalCents ?? 0) },
{ key: "revenueMonth", value: formatPrice(revenueMonth._sum.totalCents ?? 0) },
{ key: "openOrders", value: String(openOrders) },