- ProjectRepository, ProjectMemberRepository, minimal NotificationRepository - ProjectService: create/update/archive/delete project, add/remove member, permission checks (isMember/admin), member-added notification, getDashboard skeleton, getMyProjects, getMemberRole - projectValidator, API services factory - API routes: projects CRUD, members list/add/remove - Screens: dashboard (project list + create form), project overview, members, settings; layout (Header/Sidebar/ProjectNav) and project components - Unit tests (Project/ProjectMember repositories, ProjectService), integration project-member-permission, e2e project-management
25 lines
668 B
TypeScript
25 lines
668 B
TypeScript
/**
|
|
* ダッシュボードの各項目を表示するウィジェットコンテナ。
|
|
* M4では骨組みのみ。全項目の集計は M13 で完成させる。
|
|
*/
|
|
export function DashboardWidget({
|
|
title,
|
|
children,
|
|
empty,
|
|
}: {
|
|
title: string;
|
|
children?: React.ReactNode;
|
|
empty?: string;
|
|
}) {
|
|
return (
|
|
<section className="rounded-lg border bg-white p-4 shadow-sm">
|
|
<h2 className="mb-3 text-sm font-semibold text-gray-700">{title}</h2>
|
|
{children ? (
|
|
<div className="space-y-2">{children}</div>
|
|
) : (
|
|
<p className="text-sm text-gray-400">{empty ?? 'データがありません'}</p>
|
|
)}
|
|
</section>
|
|
);
|
|
}
|