conversationId = $conversationId; } #[Computed] public function conversation(): Conversation { $conversation = Conversation::query() ->forUser(Auth::user()) ->with([ 'participants' => fn ($query) => $query ->select(['id', 'conversation_id', 'user_id', 'role', 'joined_at']) ->with('user:id,name,email'), ]) ->withCount('messages') ->findOrFail($this->conversationId); Gate::authorize('view', $conversation); return $conversation; } public function title(): string { if ($this->conversation->isGroup()) { return $this->conversation->name ?? __('Untitled group'); } return $this->conversation->participants ->first(fn (ConversationParticipant $participant) => $participant->user_id !== Auth::id()) ?->user?->name ?? __('Direct conversation'); } public function initials(): string { return collect(explode(' ', $this->title())) ->filter() ->take(2) ->map(fn (string $word) => mb_substr($word, 0, 1)) ->implode(''); } public function render(): View { return view('livewire.chat.conversation-details-panel'); } }