feat(m4): project & member management with tests and e2e
- 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
This commit is contained in:
24
components/project/DashboardWidget.tsx
Normal file
24
components/project/DashboardWidget.tsx
Normal file
@ -0,0 +1,24 @@
|
||||
/**
|
||||
* ダッシュボードの各項目を表示するウィジェットコンテナ。
|
||||
* 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>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user