fix: resolve 3 UX bugs from gitlooper ticket sweep (#45 #47 #48)

- #47: Remove misleading asterisk from Budget (EUR) label in project
  wizard — budget is optional per canGoNext() logic
- #48: Parse Zod validation JSON in wizard submit error handler so users
  see "Responsible person is required" instead of raw JSON array
- #45: Expose isEntriesError from timeline query context; TimelineView
  now renders an explicit error message instead of a silent empty canvas
  when the getEntriesView query fails

Co-Authored-By: claude-flow <ruv@ruv.net>
This commit is contained in:
2026-04-03 11:25:42 +02:00
parent 339ae47540
commit 5a8dc6c166
3 changed files with 30 additions and 4 deletions
@@ -332,6 +332,7 @@ function TimelineViewContent({
today,
isLoading,
isInitialLoading,
isEntriesError,
totalAllocCount,
} = ctx;
@@ -708,7 +709,11 @@ function TimelineViewContent({
onScroll={handleContainerScroll}
className="app-surface relative z-0 flex-1 overflow-auto"
>
{isInitialLoading ? (
{isEntriesError ? (
<div className="flex flex-col items-center justify-center gap-3 py-24 text-sm text-red-600 dark:text-red-400">
<span>Failed to load timeline data. Please try refreshing the page.</span>
</div>
) : isInitialLoading ? (
<div className="flex items-center justify-center py-24 text-sm text-gray-500 dark:text-gray-400">
Loading timeline...
</div>