fix: round 3 UI gaps - habit edit dialog, domain edit, empty states, domain name resolution

This commit is contained in:
2026-07-28 15:02:01 +00:00
parent a06d34264d
commit 9ddab4e5a5
6 changed files with 341 additions and 63 deletions
+28 -11
View File
@@ -48,9 +48,11 @@ export default function ProjectDetailPage() {
const [tasks, setTasks] = useState<Task[]>([]);
const [milestones, setMilestones] = useState<Milestone[]>([]);
const [loading, setLoading] = useState(true);
const [domainMap, setDomainMap] = useState<Map<string, string>>(new Map());
useEffect(() => {
if (projectId) {
fetchDomains();
fetchProject();
fetchTasks();
fetchMilestones();
@@ -58,6 +60,18 @@ export default function ProjectDetailPage() {
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [projectId]);
async function fetchDomains() {
try {
const res = await fetch('/api/domains?sort=sort_order');
if (res.ok) {
const data = await res.json();
const map = new Map<string, string>();
for (const d of data.items || []) map.set(d.id, d.name);
setDomainMap(map);
}
} catch {}
}
async function fetchProject() {
try {
const response = await fetch(`/api/projects/${projectId}`);
@@ -138,17 +152,20 @@ export default function ProjectDetailPage() {
<p className="mt-1 text-muted-foreground">{project.description}</p>
)}
</div>
<Badge
variant={
project.status === 'active'
? 'default'
: project.status === 'paused'
? 'secondary'
: 'outline'
}
>
{project.status}
</Badge>
<div className="flex items-center gap-2">
<Badge
variant={
project.status === 'active'
? 'default'
: project.status === 'paused'
? 'secondary'
: 'outline'
}
>
{project.status}
</Badge>
<Badge variant="outline">{domainMap.get(project.domain) || project.domain}</Badge>
</div>
</div>
{/* Project stats */}