{{-- Fil de commentaires — un seul niveau de réponses (voir le docblock de Comment::replies()). Réutilisable tel quel pour un Projet ou un Élément (et plus tard Note/Document/CR de réunion) puisque le composant hôte ne connaît que `commentableType`/`commentableId`, jamais un modèle concret. Suit les mêmes conventions visuelles que les sous-tâches de la page dédiée : avatar rond (initiales + avatar_color), libellé de section en petites majuscules grises, actions révélées au survol (`group-hover`), `wire:confirm` sur la suppression. --}} @php $comments = $this->topLevelComments(); $total = $comments->reduce(fn ($carry, $comment) => $carry + 1 + $comment->replies->count(), 0); $commentable = $this->commentable(); @endphp
Commentaires @if ($total > 0) ({{ $total }}) @endif @if ($comments->isNotEmpty()) @endif
{{-- Nouveau commentaire --}} {{-- L'autocomplétion des mentions. Elle n'est pas un confort : sans elle, il faudrait taper le nom exact d'une personne pour que `MentionParser` le reconnaisse, et une faute de frappe donnerait un commentaire qui *paraît* interpeller quelqu'un sans le notifier — le pire des deux mondes. La liste vient de `mentionablePeople()`, exactement celle contre laquelle l'analyse résoudra à l'enregistrement. --}}
@forelse ($comments as $comment)
@include('livewire.comments.partials.comment-row', ['comment' => $comment, 'commentable' => $commentable]) @if ($comment->replies->isNotEmpty())
@foreach ($comment->replies as $reply)
@include('livewire.comments.partials.comment-row', ['comment' => $reply, 'commentable' => $commentable])
@endforeach
@endif {{-- Pas de réponse-à-réponse (voir Comment::replies()) — un seul "Répondre" par fil, toujours après le dernier élément visible (la racine s'il n'y a pas encore de réponse, sinon la dernière réponse), câblé sur `addReply($comment->id, ...)` où `$comment` est la racine du fil, jamais une réponse. --}} @can('create', [\App\Models\Comment::class, $commentable])
@endcan
@empty

Aucun commentaire pour l'instant.

@endforelse