"use client"; import { createDailyLogRecord, deleteDailyLogRecord, updateDailyLogRecord, } from "@/app/(dashboard)/journal/actions"; import { Badge, Button, Card, CardContent, Input, Label, Textarea } from "poyraz-ui/atoms"; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, toast, } from "poyraz-ui/molecules"; import { Activity, Battery, CalendarDays, LineChart as LineChartIcon, Pencil, Plus, Smile, Trash2, } from "lucide-react"; import { CartesianGrid, Line, LineChart, ResponsiveContainer, Tooltip, XAxis, YAxis, } from "recharts"; import type { ReactNode } from "react"; import { useMemo, useState } from "react"; export type DailyLogItem = { id: string; log_date: string; mood_score: number; energy_score: number; work_satisfaction_score: number | null; note: string | null; }; type JournalClientProps = { logs: DailyLogItem[]; }; const scoreLabels: Record = { 1: "Çok düşük", 2: "Düşük", 3: "Orta", 4: "İyi", 5: "Çok iyi", }; export function JournalClient({ logs }: JournalClientProps) { const summary = useMemo(() => calculateSummary(logs), [logs]); const chartData = useMemo( () => [...logs] .sort((a, b) => a.log_date.localeCompare(b.log_date)) .map((log) => ({ date: formatShortDate(log.log_date), mood: log.mood_score, energy: log.energy_score, satisfaction: log.work_satisfaction_score, })), [logs], ); return (

Mood ve enerji

Günlük ruh hali, enerji ve çalışma memnuniyetini takip ederek kişisel kapasite trendini gör.

} tone="primary" /> } tone="green" /> } tone="blue" /> } tone="amber" />

Genel trend

Mood, enerji ve çalışma memnuniyetinin günlük değişimi.

{chartData.length > 0 ? (
) : ( )}

Kapasite sinyali

Kayıtlardan kısa okuma.

{summary.insights.map((insight) => (
{insight}
))}

Günlük kayıtlar

{logs.length} kayıt görüntüleniyor.

{logs.length > 0 ? (
Tarih Mood Enerji Not İşlem
{logs.map((log) => ( ))}
) : ( )}
); } function DailyLogRow({ log }: { log: DailyLogItem }) { return (
{formatDate(log.log_date)}
{formatWeekday(log.log_date)}

{log.note || "Not eklenmedi."}

{log.work_satisfaction_score ? (

Çalışma memnuniyeti: {log.work_satisfaction_score}/5

) : null}
); } function DailyLogDialog({ mode, log }: { mode: "create" | "edit"; log?: DailyLogItem }) { const [open, setOpen] = useState(false); const [isSubmitting, setIsSubmitting] = useState(false); const action = mode === "create" ? createDailyLogRecord : updateDailyLogRecord; async function handleSubmit(formData: FormData) { setIsSubmitting(true); try { await action(formData); setOpen(false); toast.success(mode === "create" ? "Günlük eklendi." : "Günlük güncellendi."); } catch (error) { toast.error( error instanceof Error ? error.message : "Günlük kaydedilirken beklenmeyen bir hata oluştu.", ); } finally { setIsSubmitting(false); } } return (
{log ? : null} {mode === "create" ? "Yeni günlük kayıt" : "Günlük kaydı düzenle"} Günün mood, enerji ve çalışma memnuniyeti skorlarını kaydet.
); } function DailyLogFormFields({ log }: { log?: DailyLogItem }) { const [moodScore, setMoodScore] = useState(log?.mood_score || 3); const [energyScore, setEnergyScore] = useState(log?.energy_score || 3); const [satisfactionScore, setSatisfactionScore] = useState(log?.work_satisfaction_score || 3); return (