fix: resolve 15+ UX issues across the full app

- CreateItemDialog: shared Zustand store for dialog state
- TopBar: use store instead of router.push navigation
- TaskDetailPanel: dynamic domain fetch from /api/domains
- TodayTasksWidget: domain name resolution from UUIDs
- ProjectProgressWidget: fetch real progress, default to 0
- Calendar page: domain filter fetches from API dynamically
- Habits page: edit/delete dropdown with AlertDialog
- Projects page: domain name display + delete button
- Notes page: domain picker on creation, names in list
- Settings domains: add color picker input
- Tasks list view: MoreHorizontal wired to edit/delete
- HabitCard: domain resolution + edit/delete dropdown
- PocketBase compat: add JSDoc migration comment
This commit is contained in:
2026-07-25 02:22:01 +00:00
parent 73335484f8
commit 953a947874
18 changed files with 474 additions and 586 deletions
@@ -1,6 +1,6 @@
'use client';
import { useState } from 'react';
import { useState, useEffect } from 'react';
import { toast } from 'sonner';
import {
Sheet,
@@ -60,6 +60,11 @@ export function TaskDetailPanel({
const [status, setStatus] = useState(task.status);
const [priority, setPriority] = useState(task.priority);
const [domain, setDomain] = useState(task.domain);
const [domains, setDomains] = useState<{id: string; name: string}[]>([]);
useEffect(() => {
fetch('/api/domains?sort=sort_order').then(r => r.json()).then(data => setDomains(data.items || [])).catch(() => {});
}, []);
const [dueDate, setDueDate] = useState(task.due_date || '');
const [saving, setSaving] = useState(false);
const [deleteOpen, setDeleteOpen] = useState(false);
@@ -185,9 +190,9 @@ export function TaskDetailPanel({
<SelectValue />
</SelectTrigger>
<SelectContent>
<SelectItem value="personal">Personal</SelectItem>
<SelectItem value="work">Work</SelectItem>
<SelectItem value="ots">OTS</SelectItem>
{domains.map((d) => (
<SelectItem key={d.id} value={d.id}>{d.name}</SelectItem>
))}
</SelectContent>
</Select>
</div>