refactor: improve team management, OKRs, and session components

This commit is contained in:
2026-02-25 17:29:40 +01:00
parent c828ab1a48
commit a10205994c
74 changed files with 3771 additions and 1889 deletions

View File

@@ -21,7 +21,12 @@ interface AddMemberModalProps {
onSuccess: () => void;
}
export function AddMemberModal({ teamId, existingMemberIds, onClose, onSuccess }: AddMemberModalProps) {
export function AddMemberModal({
teamId,
existingMemberIds,
onClose,
onSuccess,
}: AddMemberModalProps) {
const [users, setUsers] = useState<User[]>([]);
const [searchTerm, setSearchTerm] = useState('');
const [selectedUserId, setSelectedUserId] = useState<string | null>(null);
@@ -71,7 +76,7 @@ export function AddMemberModal({ teamId, existingMemberIds, onClose, onSuccess }
if (!response.ok) {
const error = await response.json();
alert(error.error || 'Erreur lors de l\'ajout du membre');
alert(error.error || "Erreur lors de l'ajout du membre");
return;
}
@@ -79,7 +84,7 @@ export function AddMemberModal({ teamId, existingMemberIds, onClose, onSuccess }
onClose();
} catch (error) {
console.error('Error adding member:', error);
alert('Erreur lors de l\'ajout du membre');
alert("Erreur lors de l'ajout du membre");
} finally {
setLoading(false);
}
@@ -157,4 +162,3 @@ export function AddMemberModal({ teamId, existingMemberIds, onClose, onSuccess }
</Modal>
);
}

View File

@@ -45,7 +45,7 @@ export function MembersList({ members, teamId, isAdmin, onMemberUpdate }: Member
};
const handleRemoveMember = async (userId: string) => {
if (!confirm('Êtes-vous sûr de vouloir retirer ce membre de l\'équipe ?')) {
if (!confirm("Êtes-vous sûr de vouloir retirer ce membre de l'équipe ?")) {
return;
}
@@ -172,4 +172,3 @@ export function MembersList({ members, teamId, isAdmin, onMemberUpdate }: Member
</div>
);
}

View File

@@ -24,7 +24,9 @@ export function TeamCard({ team }: TeamCardProps) {
<span className="text-2xl">👥</span>
<CardTitle>{team.name}</CardTitle>
</div>
{team.description && <CardDescription className="mt-2">{team.description}</CardDescription>}
{team.description && (
<CardDescription className="mt-2">{team.description}</CardDescription>
)}
</div>
{isAdmin && (
<Badge
@@ -49,11 +51,15 @@ export function TeamCard({ team }: TeamCardProps) {
d="M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0z"
/>
</svg>
<span>{memberCount} membre{memberCount !== 1 ? 's' : ''}</span>
<span>
{memberCount} membre{memberCount !== 1 ? 's' : ''}
</span>
</div>
<div className="flex items-center gap-1.5">
<span className="text-lg">🎯</span>
<span>{okrCount} OKR{okrCount !== 1 ? 's' : ''}</span>
<span>
{okrCount} OKR{okrCount !== 1 ? 's' : ''}
</span>
</div>
</div>
</CardContent>
@@ -61,4 +67,3 @@ export function TeamCard({ team }: TeamCardProps) {
</Link>
);
}

View File

@@ -17,6 +17,12 @@ export function TeamDetailClient({ members, teamId, isAdmin }: TeamDetailClientP
router.refresh();
};
return <MembersList members={members} teamId={teamId} isAdmin={isAdmin} onMemberUpdate={handleMemberUpdate} />;
return (
<MembersList
members={members}
teamId={teamId}
isAdmin={isAdmin}
onMemberUpdate={handleMemberUpdate}
/>
);
}