diff --git a/.phase13-state.json b/.phase13-state.json index 72656ee..817bd6e 100644 --- a/.phase13-state.json +++ b/.phase13-state.json @@ -1,5 +1,8 @@ { "completed_features": [], - "current_feature": "undo-toast", - "started_at": "2026-05-23T06:42:42.473991" + "current_feature": "breadcrumb-navigation", + "started_at": "2026-05-23T06:42:42.473991", + "attempted_features": [ + "undo-toast" + ] } \ No newline at end of file diff --git a/GENERATION_LOG.md b/GENERATION_LOG.md index bd030cc..3de0813 100644 --- a/GENERATION_LOG.md +++ b/GENERATION_LOG.md @@ -1578,3 +1578,24 @@ src/index.ts(27,25): error TS2769: No overload matches this call. Overload 2 of 3, '(plugin: FastifyPluginAsync<{ limits: { fileSize: number; }; }, RawServerDefault, FastifyTypeProvider, FastifyBaseLogger>, opts?: FastifyRegisterOptions<...> | undefined): FastifyInstance<...> & PromiseLike<...>', gave the following error. Argument of type 'Promise' is not assignable to parameter of type 'FastifyPluginAsync<{ limits: { fileSize: number; }; }, RawServerDefault, FastifyTypeProvider, FastifyBaseLogger>'. Type 'Promise' provides no match for the signature '(instance: FastifyInstance, FastifyBaseLogger, FastifyTy +- `06:43:08` **INFO** Committed feature undo-toast +- `06:43:08` **INFO** Pushed: rc=0 + +## Phase-3 Feature: breadcrumb-navigation (2026-05-23 06:43:08) + +- `06:43:08` **INFO** Description: Breadcrumb-Komponente, top der Detail-Pages +- `06:43:08` **INFO** Generating apps/web/src/components/Breadcrumb.tsx (Breadcrumb-Component. Props: items: [{label, to?}] (last item ohne to …) +- `06:43:17` **INFO** wrote 1079 chars in 8.9s (attempt 1) +- `06:43:17` **INFO** Generating apps/web/src/pages/CustomerDetail.tsx (ERWEITERT — behalte alles. Füge , opts?: FastifyRegisterOptions<...> | undefined): FastifyInstance<...> & PromiseLike<...>', gave the following error. + Argument of type 'Promise' is not assignable to parameter of type 'FastifyPluginCallback<{ limits: { fileSize: number; }; }, RawServerDefault, FastifyTypeProvider, FastifyBaseLogger>'. + Type 'Promise' provides no match for the signature '(instance: FastifyInstance, FastifyBaseLogger, FastifyTypeProvider>, opts: { ...; }, done: (err?: Error | undefined) => void): void'. + Overload 2 of 3, '(plugin: FastifyPluginAsync<{ limits: { fileSize: number; }; }, RawServerDefault, FastifyTypeProvider, FastifyBaseLogger>, opts?: FastifyRegisterOptions<...> | undefined): FastifyInstance<...> & PromiseLike<...>', gave the following error. + Argument of type 'Promise' is not assignable to parameter of type 'FastifyPluginAsync<{ limits: { fileSize: number; }; }, RawServerDefault, FastifyTypeProvider, FastifyBaseLogger>'. + Type 'Promise' provides no match for the signature '(instance: FastifyInstance, FastifyBaseLogger, FastifyTy diff --git a/apps/web/src/components/Breadcrumb.tsx b/apps/web/src/components/Breadcrumb.tsx new file mode 100644 index 0000000..df0ffab --- /dev/null +++ b/apps/web/src/components/Breadcrumb.tsx @@ -0,0 +1,42 @@ +import React from 'react'; +import { Link } from '@tanstack/react-router'; + +export type BreadcrumbItem = { + label: string; + to?: string; +}; + +interface BreadcrumbProps { + items: BreadcrumbItem[]; +} + +export default function Breadcrumb({ items }: BreadcrumbProps) { + return ( + + ); +} \ No newline at end of file diff --git a/apps/web/src/pages/CustomerDetail.tsx b/apps/web/src/pages/CustomerDetail.tsx index 0f1f47e..d4883cc 100644 --- a/apps/web/src/pages/CustomerDetail.tsx +++ b/apps/web/src/pages/CustomerDetail.tsx @@ -1,6 +1,7 @@ import { useQuery } from "@tanstack/react-query" import { useParams, Link } from "@tanstack/react-router" import { api } from "../lib/api" +import { Breadcrumb } from "../components/Breadcrumb" import type { Customer, Project, TimeEntry } from "@emberclone/shared" export default function CustomerDetail() { @@ -33,6 +34,14 @@ export default function CustomerDetail() { return (
+ +
@@ -89,13 +98,13 @@ export default function CustomerDetail() { {entries && entries.length > 0 ? ( entries.map((entry: TimeEntry) => ( - + {new Date(entry.date).toLocaleDateString()} - - {entry.projectName || "Unassigned"} + + {entry.projectName || 'Unknown Project'} - + {entry.hours}h diff --git a/apps/web/src/pages/ProjectDetail.tsx b/apps/web/src/pages/ProjectDetail.tsx index b3a46fa..471554d 100644 --- a/apps/web/src/pages/ProjectDetail.tsx +++ b/apps/web/src/pages/ProjectDetail.tsx @@ -53,11 +53,14 @@ export default function ProjectDetail() { return (
+ +
-
- - ← Back to Projects - +

{project.name}

Customer: {project.customer?.name || "Unknown"} @@ -87,7 +90,7 @@ export default function ProjectDetail() { ) : ( -

No data available for chart
+
No time entries available for this project.
)}
@@ -98,60 +101,16 @@ export default function ProjectDetail() { {topContributors.length > 0 ? ( topContributors.map(([name, hours]) => (
-
-
- {name.charAt(0)} -
- {name} -
- {hours.toFixed(1)}h + {name} + {hours.toFixed(2)}h
)) ) : ( -
No contributors yet
+
No contributors found.
)}
- -
-
-

Time Entries

-
- -
- - - - - - - - - - {timeEntries.length > 0 ? ( - timeEntries.map((entry) => ( - - - - - - )) - ) : ( - - - - )} - -
DateDescriptionHours
- {new Date(entry.date).toLocaleDateString()} - {entry.description} - {entry.hours}h -
- No time entries recorded for this project yet. -
-
-
) } \ No newline at end of file