-
-
Proje görevleri
-
- Bu proje ile bağlantılı görevler aynı task modülünden beslenir.
-
+
+
+
Proje görevleri
+
+ Bu proje ile bağlantılı görevler aynı task modülünden beslenir.
+
+
+
{tasks.length > 0 ? (
@@ -569,6 +582,134 @@ function TaskPanel({ projectId, tasks }: { projectId: string; tasks: ProjectDeta
);
}
+function ProjectTaskDialog({
+ projectId,
+ clientId,
+}: {
+ projectId: string;
+ clientId: string | null;
+}) {
+ const [open, setOpen] = useState(false);
+ const [isSubmitting, setIsSubmitting] = useState(false);
+
+ async function handleSubmit(formData: FormData) {
+ setIsSubmitting(true);
+
+ try {
+ await createTaskRecord(formData);
+ setOpen(false);
+ } finally {
+ setIsSubmitting(false);
+ }
+ }
+
+ return (
+
+ );
+}
+
function FinancePanel({ transactions }: { transactions: ProjectFinanceItem[] }) {
return (
diff --git a/app/(dashboard)/projects/projects-client.tsx b/app/(dashboard)/projects/projects-client.tsx
index a1eef5d..f86ff6d 100644
--- a/app/(dashboard)/projects/projects-client.tsx
+++ b/app/(dashboard)/projects/projects-client.tsx
@@ -498,6 +498,15 @@ function CoverImageInput({ project }: { project?: ProjectListItem }) {
)}
+
+
+
+
+ < ImageIcon className="h-6 w-6" />
+
+
+
+
{previewUrl ? (
Görseli değiştirmek için tıkla.
diff --git a/app/(dashboard)/tasks/actions.ts b/app/(dashboard)/tasks/actions.ts
index 3c08027..b355d7d 100644
--- a/app/(dashboard)/tasks/actions.ts
+++ b/app/(dashboard)/tasks/actions.ts
@@ -82,6 +82,10 @@ export async function createTaskRecord(formData: FormData) {
}
revalidatePath("/tasks");
+
+ if (payload.project_id) {
+ revalidatePath(`/projects/${payload.project_id}`);
+ }
}
export async function updateTaskRecord(formData: FormData) {
@@ -104,6 +108,10 @@ export async function updateTaskRecord(formData: FormData) {
}
revalidatePath("/tasks");
+
+ if (payload.project_id) {
+ revalidatePath(`/projects/${payload.project_id}`);
+ }
}
export async function completeTaskRecord(formData: FormData) {
@@ -156,6 +164,7 @@ export async function updateTaskStatusRecord(taskId: string, status: string) {
export async function deleteTaskRecord(formData: FormData) {
const { supabase, userId } = await getCurrentUserId();
const id = cleanText(formData.get("id"));
+ const projectId = cleanRelationId(formData.get("project_id"));
if (!id) {
throw new Error("Silinecek görev bulunamadı.");
@@ -172,4 +181,8 @@ export async function deleteTaskRecord(formData: FormData) {
}
revalidatePath("/tasks");
+
+ if (projectId) {
+ revalidatePath(`/projects/${projectId}`);
+ }
}