refactor: remove monthly filtering from journal and rename user_settings table to app_settings
This commit is contained in:
@@ -59,12 +59,10 @@ const scoreLabels: Record<number, string> = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export function JournalClient({ logs }: JournalClientProps) {
|
export function JournalClient({ logs }: JournalClientProps) {
|
||||||
const [monthFilter, setMonthFilter] = useState(() => new Date().toISOString().slice(0, 7));
|
const summary = useMemo(() => calculateSummary(logs), [logs]);
|
||||||
const filteredLogs = logs.filter((log) => log.log_date.startsWith(monthFilter));
|
|
||||||
const summary = useMemo(() => calculateSummary(filteredLogs), [filteredLogs]);
|
|
||||||
const chartData = useMemo(
|
const chartData = useMemo(
|
||||||
() =>
|
() =>
|
||||||
[...filteredLogs]
|
[...logs]
|
||||||
.sort((a, b) => a.log_date.localeCompare(b.log_date))
|
.sort((a, b) => a.log_date.localeCompare(b.log_date))
|
||||||
.map((log) => ({
|
.map((log) => ({
|
||||||
date: formatShortDate(log.log_date),
|
date: formatShortDate(log.log_date),
|
||||||
@@ -72,7 +70,7 @@ export function JournalClient({ logs }: JournalClientProps) {
|
|||||||
energy: log.energy_score,
|
energy: log.energy_score,
|
||||||
satisfaction: log.work_satisfaction_score,
|
satisfaction: log.work_satisfaction_score,
|
||||||
})),
|
})),
|
||||||
[filteredLogs],
|
[logs],
|
||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@@ -94,12 +92,6 @@ export function JournalClient({ logs }: JournalClientProps) {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="flex flex-col gap-2 sm:flex-row">
|
<div className="flex flex-col gap-2 sm:flex-row">
|
||||||
<Input
|
|
||||||
type="month"
|
|
||||||
value={monthFilter}
|
|
||||||
onChange={(event) => setMonthFilter(event.target.value)}
|
|
||||||
className="sm:w-44"
|
|
||||||
/>
|
|
||||||
<DailyLogDialog mode="create" />
|
<DailyLogDialog mode="create" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -125,7 +117,7 @@ export function JournalClient({ logs }: JournalClientProps) {
|
|||||||
/>
|
/>
|
||||||
<StatCard
|
<StatCard
|
||||||
label="Kayıtlı gün"
|
label="Kayıtlı gün"
|
||||||
value={String(filteredLogs.length)}
|
value={String(logs.length)}
|
||||||
icon={<CalendarDays className="h-5 w-5" />}
|
icon={<CalendarDays className="h-5 w-5" />}
|
||||||
tone="amber"
|
tone="amber"
|
||||||
/>
|
/>
|
||||||
@@ -135,7 +127,7 @@ export function JournalClient({ logs }: JournalClientProps) {
|
|||||||
<Card>
|
<Card>
|
||||||
<CardContent className="space-y-4 p-4">
|
<CardContent className="space-y-4 p-4">
|
||||||
<div>
|
<div>
|
||||||
<h2 className="text-base font-semibold text-foreground">Aylık trend</h2>
|
<h2 className="text-base font-semibold text-foreground">Genel trend</h2>
|
||||||
<p className="text-sm text-muted-foreground">
|
<p className="text-sm text-muted-foreground">
|
||||||
Mood, enerji ve çalışma memnuniyetinin günlük değişimi.
|
Mood, enerji ve çalışma memnuniyetinin günlük değişimi.
|
||||||
</p>
|
</p>
|
||||||
@@ -179,7 +171,7 @@ export function JournalClient({ logs }: JournalClientProps) {
|
|||||||
<CardContent className="space-y-4 p-4">
|
<CardContent className="space-y-4 p-4">
|
||||||
<div>
|
<div>
|
||||||
<h2 className="text-base font-semibold text-foreground">Kapasite sinyali</h2>
|
<h2 className="text-base font-semibold text-foreground">Kapasite sinyali</h2>
|
||||||
<p className="text-sm text-muted-foreground">Bu ayki günlük kayıtlardan kısa okuma.</p>
|
<p className="text-sm text-muted-foreground">Kayıtlardan kısa okuma.</p>
|
||||||
</div>
|
</div>
|
||||||
<div className="space-y-3 text-sm text-muted-foreground">
|
<div className="space-y-3 text-sm text-muted-foreground">
|
||||||
{summary.insights.map((insight) => (
|
{summary.insights.map((insight) => (
|
||||||
@@ -197,11 +189,11 @@ export function JournalClient({ logs }: JournalClientProps) {
|
|||||||
<div className="flex items-center justify-between gap-3">
|
<div className="flex items-center justify-between gap-3">
|
||||||
<div>
|
<div>
|
||||||
<h2 className="text-base font-semibold text-foreground">Günlük kayıtlar</h2>
|
<h2 className="text-base font-semibold text-foreground">Günlük kayıtlar</h2>
|
||||||
<p className="text-sm text-muted-foreground">{filteredLogs.length} kayıt görüntüleniyor.</p>
|
<p className="text-sm text-muted-foreground">{logs.length} kayıt görüntüleniyor.</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{filteredLogs.length > 0 ? (
|
{logs.length > 0 ? (
|
||||||
<div className="overflow-hidden rounded-sm border border-border">
|
<div className="overflow-hidden rounded-sm border border-border">
|
||||||
<div className="hidden grid-cols-[0.7fr_0.7fr_0.7fr_1.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="hidden grid-cols-[0.7fr_0.7fr_0.7fr_1.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">
|
||||||
<span>Tarih</span>
|
<span>Tarih</span>
|
||||||
@@ -211,7 +203,7 @@ export function JournalClient({ logs }: JournalClientProps) {
|
|||||||
<span className="text-right">İşlem</span>
|
<span className="text-right">İşlem</span>
|
||||||
</div>
|
</div>
|
||||||
<div className="divide-y divide-border">
|
<div className="divide-y divide-border">
|
||||||
{filteredLogs.map((log) => (
|
{logs.map((log) => (
|
||||||
<DailyLogRow key={log.id} log={log} />
|
<DailyLogRow key={log.id} log={log} />
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
@@ -440,7 +432,7 @@ function EmptyState() {
|
|||||||
return (
|
return (
|
||||||
<div className="flex min-h-72 flex-col items-center justify-center rounded-sm border border-dashed border-border bg-muted/20 p-8 text-center">
|
<div className="flex min-h-72 flex-col items-center justify-center rounded-sm border border-dashed border-border bg-muted/20 p-8 text-center">
|
||||||
<Activity className="h-10 w-10 text-muted-foreground" />
|
<Activity className="h-10 w-10 text-muted-foreground" />
|
||||||
<h3 className="mt-4 text-lg font-semibold text-foreground">Bu ay günlük kayıt yok</h3>
|
<h3 className="mt-4 text-lg font-semibold text-foreground">Henüz günlük kayıt yok</h3>
|
||||||
<p className="mt-2 max-w-md text-sm text-muted-foreground">
|
<p className="mt-2 max-w-md text-sm text-muted-foreground">
|
||||||
Mood ve enerji trendini görmek için ilk günlük kaydını ekle.
|
Mood ve enerji trendini görmek için ilk günlük kaydını ekle.
|
||||||
</p>
|
</p>
|
||||||
@@ -460,9 +452,9 @@ function calculateSummary(logs: DailyLogItem[]) {
|
|||||||
const insights = [];
|
const insights = [];
|
||||||
|
|
||||||
if (logs.length === 0) {
|
if (logs.length === 0) {
|
||||||
insights.push("Bu ay için henüz okunabilir bir trend yok.");
|
insights.push("Henüz okunabilir bir trend yok.");
|
||||||
} else {
|
} else {
|
||||||
insights.push(`Bu ay ${logs.length} günlük kayıt var.`);
|
insights.push(`Toplam ${logs.length} günlük kayıt var.`);
|
||||||
insights.push(
|
insights.push(
|
||||||
energyAverage && energyAverage < 3
|
energyAverage && energyAverage < 3
|
||||||
? "Enerji ortalaması düşük. Dashboard raporlarında geciken işler ile birlikte okunmalı."
|
? "Enerji ortalaması düşük. Dashboard raporlarında geciken işler ile birlikte okunmalı."
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ export default function SettingsPage() {
|
|||||||
|
|
||||||
// 2. Fetch User Settings from Supabase
|
// 2. Fetch User Settings from Supabase
|
||||||
const { data: settings } = await supabase
|
const { data: settings } = await supabase
|
||||||
.from("user_settings")
|
.from("app_settings")
|
||||||
.select("*")
|
.select("*")
|
||||||
.eq("user_id", user.id)
|
.eq("user_id", user.id)
|
||||||
.single();
|
.single();
|
||||||
@@ -104,9 +104,9 @@ export default function SettingsPage() {
|
|||||||
const { data: { user } } = await supabase.auth.getUser();
|
const { data: { user } } = await supabase.auth.getUser();
|
||||||
if (!user) throw new Error("Giriş yapılmamış");
|
if (!user) throw new Error("Giriş yapılmamış");
|
||||||
|
|
||||||
// Save to Supabase user_settings table
|
// Save to Supabase app_settings table
|
||||||
const { error } = await supabase
|
const { error } = await supabase
|
||||||
.from("user_settings")
|
.from("app_settings")
|
||||||
.upsert({
|
.upsert({
|
||||||
user_id: user.id,
|
user_id: user.id,
|
||||||
ai_model: aiProvider,
|
ai_model: aiProvider,
|
||||||
|
|||||||
Reference in New Issue
Block a user