feat: implement project management and portal client detail views with dashboard shell and layout components

This commit is contained in:
Poyraz Avsever
2026-06-08 14:56:29 +03:00
parent 2c47b861d0
commit 6ef5597744
6 changed files with 151 additions and 124 deletions
@@ -96,7 +96,7 @@ export function ClientDetailClient({ client, activities }: { client: ClientDetai
}
return (
<div className="mx-auto flex max-w-5xl flex-col gap-6 animate-in fade-in slide-in-from-bottom-4 duration-500">
<div className="mx-auto flex max-w-7xl flex-col gap-6 animate-in fade-in slide-in-from-bottom-4 duration-500">
{/* Header Info */}
<div className="flex flex-col gap-4 md:flex-row md:items-start justify-between">
<div className="flex items-center gap-4">
+2 -2
View File
@@ -250,8 +250,8 @@ export function ClientsClient({
<TabsContent value="list" className="mt-0">
{filteredClients.length > 0 ? (
<div className="overflow-hidden rounded-sm border border-border">
<div className="hidden grid-cols-[1.5fr_1fr_1fr_1fr_0.8fr_0.8fr] gap-4 border-b border-border bg-muted/40 px-4 py-3 text-xs font-medium uppercase text-muted-foreground lg:grid">
<div className="overflow-hidden">
<div className="hidden grid-cols-[1.5fr_1fr_1fr_1fr_0.8fr_0.8fr] gap-4 border-b border-border px-4 py-3 text-xs font-medium uppercase text-muted-foreground lg:grid">
<span>Müşteri</span>
<span>İletişim</span>
<span>Aşama</span>
@@ -297,14 +297,14 @@ export function ProjectDetailClient({
<TabButton active={activeTab === "finance"} onClick={() => setActiveTab("finance")}>
Finans
</TabButton>
{revisions.length > 0 && (
<TabButton active={activeTab === "revisions"} onClick={() => setActiveTab("revisions")}>
Revizyonlar
<TabButton active={activeTab === "revisions"} onClick={() => setActiveTab("revisions")}>
Revizyonlar
{revisions.filter(r => r.status === 'pending').length > 0 && (
<Badge variant="secondary" className="ml-2 px-1 py-0 h-4 text-[10px]">
{revisions.filter(r => r.status === 'pending').length}
</Badge>
</TabButton>
)}
)}
</TabButton>
</div>
{activeTab === "planning" ? (
+18 -8
View File
@@ -659,14 +659,24 @@ function ProjectFormFields({
</div>
<div className="grid gap-2">
<Label htmlFor={`progress-${project?.id || "new"}`}>İlerleme (%)</Label>
<Input
id={`progress-${project?.id || "new"}`}
name="progress"
type="number"
min="0"
max="100"
defaultValue={project?.progress ?? 0}
/>
<div className="flex items-center gap-3">
<Input
id={`progress-${project?.id || "new"}`}
name="progress"
type="range"
min="0"
max="100"
defaultValue={project?.progress ?? 0}
className="flex-1 cursor-pointer accent-primary"
onChange={(e) => {
const el = document.getElementById(`progress-val-${project?.id || "new"}`);
if (el) el.textContent = `%${e.target.value}`;
}}
/>
<span id={`progress-val-${project?.id || "new"}`} className="w-10 text-sm font-medium text-right">
%{project?.progress ?? 0}
</span>
</div>
</div>
</div>
</div>