inspannings-monitor/lib/feedback/status-messages.ts
Madhura68 0bf6b96687 Add server-side avatar processing and responsive bottom nav
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-19 22:06:41 +02:00

223 lines
5.8 KiB
TypeScript

import { getAuthNotice } from "@/lib/auth/messages";
export type StatusToastVariant = "success" | "info" | "warning" | "error";
export type StatusToast = {
variant: StatusToastVariant;
title?: string;
message: string;
};
const dashboardStatusToasts: Record<string, StatusToast> = {
"onboarding-completed": {
variant: "success",
title: "Onboarding opgeslagen",
message: "Je basisinstellingen staan nu klaar.",
},
"onboarding-skipped": {
variant: "info",
title: "Onboarding overgeslagen",
message: "Je kunt de onboarding later alsnog afronden vanuit het dashboard.",
},
"test-wizard-completed": {
variant: "success",
title: "Test wizard afgerond",
message: "De generieke wizard-flow werkt nu vanaf het dashboard.",
},
"check-in-saved": {
variant: "success",
title: "Ochtendcheck-in opgeslagen",
message: "Je energiestart van vandaag staat nu klaar op je dashboard.",
},
};
const settingsStatusToasts: Record<string, StatusToast> = {
saved: {
variant: "success",
title: "Instellingen opgeslagen",
message: "Je voorkeuren zijn bijgewerkt.",
},
"avatar-saved": {
variant: "success",
title: "Profielfoto opgeslagen",
message: "Je profiel gebruikt nu direct de nieuwe, verkleinde afbeelding.",
},
};
const settingsErrorToasts: Record<string, StatusToast> = {
"invalid-settings-input": {
variant: "error",
title: "Instellingen niet opgeslagen",
message: "Controleer je tijd, timezone en voorkeurvelden en probeer het opnieuw.",
},
"invalid-avatar-file": {
variant: "error",
title: "Profielfoto niet opgeslagen",
message:
"Gebruik een JPG, PNG of WebP-bestand. Grote foto's worden automatisch verkleind voordat ze worden opgeslagen.",
},
};
const onboardingErrorToasts: Record<string, StatusToast> = {
"invalid-onboarding-input": {
variant: "error",
title: "Onboarding niet opgeslagen",
message: "Controleer je ingevoerde voorkeuren en probeer het opnieuw.",
},
};
const checkInErrorToasts: Record<string, StatusToast> = {
"invalid-check-in-input": {
variant: "error",
title: "Check-in niet opgeslagen",
message: "Kies een energiescore tussen 1 en 10 en een geldige slaapkwaliteit.",
},
};
const planningStatusToasts: Record<string, StatusToast> = {
"activity-saved": {
variant: "success",
title: "Activiteit gepland",
message: "Je activiteit staat nu in je dagplanning van vandaag.",
},
"ad-hoc-activity-saved": {
variant: "success",
title: "Ongeplande activiteit toegevoegd",
message: "Deze activiteit staat nu ook in je daglijst van vandaag.",
},
"activity-status-saved": {
variant: "success",
title: "Activiteit bijgewerkt",
message: "De status van je activiteit is opgeslagen.",
},
"activity-evaluation-saved": {
variant: "success",
title: "Evaluatie opgeslagen",
message: "De extra context bij deze activiteit is bijgewerkt.",
},
};
const planningErrorToasts: Record<string, StatusToast> = {
"invalid-activity-input": {
variant: "error",
title: "Activiteit niet opgeslagen",
message:
"Controleer naam, categorie, duur, impact en prioriteit en probeer het opnieuw.",
},
"invalid-ad-hoc-activity-input": {
variant: "error",
title: "Ongeplande activiteit niet opgeslagen",
message:
"Controleer naam, categorie, duur en impact en probeer het opnieuw.",
},
"invalid-activity-status": {
variant: "error",
title: "Status niet opgeslagen",
message: "De gekozen activiteit of status is ongeldig voor vandaag.",
},
"activity-status-failed": {
variant: "error",
title: "Status niet opgeslagen",
message: "De activiteitstatus kon niet worden bijgewerkt. Probeer het opnieuw.",
},
"invalid-activity-evaluation": {
variant: "error",
title: "Evaluatie niet opgeslagen",
message:
"Controleer de skip-reden of toelichting en probeer het opnieuw.",
},
"activity-evaluation-failed": {
variant: "error",
title: "Evaluatie niet opgeslagen",
message: "De extra context bij deze activiteit kon niet worden opgeslagen.",
},
"ad-hoc-activity-failed": {
variant: "error",
title: "Ongeplande activiteit niet opgeslagen",
message: "De ongeplande activiteit kon niet worden toegevoegd. Probeer het opnieuw.",
},
};
export function getDashboardStatusToast(status: string | null): StatusToast | null {
if (!status) {
return null;
}
return dashboardStatusToasts[status] ?? null;
}
export function getSettingsStatusToast(
error: string | null,
status: string | null,
): StatusToast | null {
if (error && settingsErrorToasts[error]) {
return settingsErrorToasts[error];
}
if (!status) {
return null;
}
return settingsStatusToasts[status] ?? null;
}
export function getOnboardingStatusToast(
error: string | null,
status: string | null,
): StatusToast | null {
if (error && onboardingErrorToasts[error]) {
return onboardingErrorToasts[error];
}
if (!status) {
return null;
}
return null;
}
export function getCheckInStatusToast(
error: string | null,
status: string | null,
): StatusToast | null {
if (error && checkInErrorToasts[error]) {
return checkInErrorToasts[error];
}
if (!status) {
return null;
}
return null;
}
export function getPlanningStatusToast(
error: string | null,
status: string | null,
): StatusToast | null {
if (error && planningErrorToasts[error]) {
return planningErrorToasts[error];
}
if (!status) {
return null;
}
return planningStatusToasts[status] ?? null;
}
export function getAuthStatusToast(
error: string | null,
status: string | null,
): StatusToast | null {
const notice = getAuthNotice(error, status);
if (!notice) {
return null;
}
return {
variant: notice.tone,
message: notice.text,
};
}