refactor: extract dashboard, workspace, tool-types, and tool-configs components (Task 4.3)

- Extract DashboardSummary, ActiveSessionsList, ProjectsSection, QuickCreateForm,
  RecentSessionsSection from dashboard.tsx (480 → 110 lines)
- Extract WorkspaceSidebar from repo-workspace.tsx
- Extract ToolTypeList + ToolTypeForm from tool-types.tsx (409 → 135 lines)
- Extract ToolConfigList + ToolConfigForm from tool-configs.tsx (391 → 178 lines)
- Add use-dashboard-actions hook for shared dashboard action handlers
- Update feature barrels with new exports

Quality gates: tsc (pass), eslint (pass)
Refs: repo-restructure Task 4.3
This commit is contained in:
Developer
2026-06-02 22:23:13 +00:00
parent 6bd7443e68
commit a6eb6ec788
32 changed files with 1583 additions and 1104 deletions
@@ -0,0 +1,45 @@
import type { Session } from "../../../types/session";
interface RecentSessionsSectionProps {
sessions: Session[];
onOpen: (session: Session) => void;
}
export const RecentSessionsSection = ({
sessions,
onOpen,
}: RecentSessionsSectionProps) => {
if (sessions.length === 0) return null;
return (
<section className="card stack home-section">
<div className="page-header">
<div>
<p className="eyebrow">Recent sessions</p>
<h2>{sessions.length}</h2>
</div>
</div>
<div className="recent-sessions-list">
{sessions.map((session) => (
<article className="recent-session-item" key={session.id}>
<div className="recent-session-info">
<span className="recent-session-name">
{session.display_name || session.tool_type_name || "Unnamed Session"}
</span>
<span className="muted">
{session.project_name} · {session.tool_type_name}
</span>
</div>
<button
className="ghost-button small"
type="button"
onClick={() => onOpen(session)}
>
Open
</button>
</article>
))}
</div>
</section>
);
};