f81237b23c
- Header: búsqueda móvil con panel deslizable (fixed bajo la topbar), comparte la lógica AJAX con desktop via initSearchWidget() - ChatController: index muestra solo amigos; show pasa isFriend y friendship a la vista; send valida amistad con abort_unless - chat/index: muestra amigos con @forelse y mensaje vacío si no tiene - chat/show: si no son amigos muestra banner de bloqueo con botón contextual (enviar solicitud / cancelar / aceptar según estado) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
48 lines
2.1 KiB
PHP
48 lines
2.1 KiB
PHP
@extends('layouts.app')
|
|
|
|
@section('content')
|
|
<div class="container-fluid">
|
|
<div class="row">
|
|
<div class="col-12">
|
|
<div class="card shadow" style="height:calc(100vh - 120px); display:flex; flex-direction:column;">
|
|
<div class="card-header bg-primary text-white">
|
|
<h5 class="mb-0"><i class="fas fa-comments"></i> Chats</h5>
|
|
</div>
|
|
<div class="card-body p-0" style="overflow-y: auto;">
|
|
@forelse($friends as $friend)
|
|
<a href="{{ route('chat.show', $friend) }}" class="text-decoration-none">
|
|
<div class="d-flex align-items-center p-3 border-bottom chat-user-item">
|
|
<img src="{{ $friend->profile_photo_url }}"
|
|
class="rounded-circle mr-3"
|
|
width="45" height="45"
|
|
style="object-fit:cover">
|
|
<div>
|
|
<div class="font-weight-bold text-dark">{{ $friend->name }}</div>
|
|
<small class="text-muted">{{ $friend->getRoleNames()->first() }}</small>
|
|
</div>
|
|
</div>
|
|
</a>
|
|
@empty
|
|
<div class="text-center text-muted py-5">
|
|
<i class="fas fa-user-friends fa-3x mb-3 d-block"></i>
|
|
<p class="mb-2">Aún no tienes amigos para chatear.</p>
|
|
<a href="{{ route('feed') }}" class="btn btn-primary btn-sm">
|
|
<i class="fas fa-search mr-1"></i> Buscar personas
|
|
</a>
|
|
</div>
|
|
@endforelse
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
@endsection
|
|
|
|
@section('scripts')
|
|
<style>
|
|
#content { overflow: hidden !important; }
|
|
.container-fluid { height: calc(100vh - 120px); }
|
|
.sticky-footer { display: none !important; }
|
|
</style>
|
|
@endsection
|