feat(05-03): add OffersTab component + Offerte tab in project workspace

- Create OffersTab.tsx client component with assign form and offer list
- Inline accepted_total editing via onBlur handler
- Add Offerte tab trigger and content to project workspace page
- Destructure projectOffers and availableMicros from getProjectFullDetail result
This commit is contained in:
2026-05-30 16:27:07 +02:00
parent b3f781b9b5
commit 0c09d44b68
2 changed files with 177 additions and 0 deletions
+12
View File
@@ -8,6 +8,7 @@ import { DocumentsTab } from "@/components/admin/tabs/DocumentsTab";
import { CommentsTab } from "@/components/admin/tabs/CommentsTab";
import { QuoteTab } from "@/components/admin/tabs/QuoteTab";
import { TimerTab } from "@/components/admin/tabs/TimerTab";
import { OffersTab } from "@/components/admin/tabs/OffersTab";
import { PhasesViewToggle } from "@/components/admin/kanban/PhasesViewToggle";
import Link from "next/link";
@@ -38,6 +39,8 @@ export default async function ProjectDetailPage({
activeTimerEntryId,
activeTimerStartedAt,
totalTrackedSeconds,
projectOffers,
availableMicros,
} = detail;
return (
@@ -71,6 +74,7 @@ export default async function ProjectDetailPage({
<TabsTrigger value="comments">Commenti</TabsTrigger>
<TabsTrigger value="quote">Preventivo</TabsTrigger>
<TabsTrigger value="timer">Timer</TabsTrigger>
<TabsTrigger value="offers">Offerte</TabsTrigger>
</TabsList>
<TabsContent value="phases">
@@ -133,6 +137,14 @@ export default async function ProjectDetailPage({
targetHourlyRate={targetHourlyRate}
/>
</TabsContent>
<TabsContent value="offers">
<OffersTab
projectId={id}
projectOffers={projectOffers}
availableMicros={availableMicros}
/>
</TabsContent>
</Tabs>
</div>
);