Как бы вы справились с всплывающим окном Livewire?

Я ищу способ сделать всплывающее окно / всплывающую подсказку в Livewire, желательно без использования Vue.

На данный момент я создал компонент UserPopover Livewire с:

namespace App\Http\Livewire;

use App\User;
use Livewire\Component;

class UserPopover extends Component
{
    public $isOpen = false;
    public $user = null;

    protected $listeners = [
        'closeUserPopover',
        'showUserPopover' => 'open',
    ];

    public function open($username)
    {
        $this->user = User::whereName($username)->first();
        $this->isOpen = true;
    }

    public function closeUserPopover()
    {
        $this->isOpen = false;
    }

    public function render()
    {
        return view('livewire.user-popover');
    }
}

И визуализированный компонент:

<div>
    @if($isOpen)
        <div class="user-popover fixed top-0 shadow bg-white p-6 text-sm">
            <h3>{{ $user->name }}</h3>
            <div>{{ $user->profile->bio }}</div>
        </div>
    @endif
</div>

В моем app.blade.php файл, который я включил в @livewire('user-popover') и я вызываю компонент с помощью:

<a href="{{ route('users.show', $user) }}"
   wire:mouseover="$emit('showUserPopover', {{ $user->name }})"
   wire:mouseout="$emit('closeUserPopover')"
>
    {{ $user->name }}
</a>

Я не знаю, что делать дальше. Есть идеи по позиционированию, повторному использованию и общей архитектуре?

1 ответ

Например: вы можете использовать эту подсказку:

Теперь вы можете условно отображать имя класса (класс css содержит стили всплывающих подсказок), когда isOpen имеет значение true.

<a class="{{ $isOpen ? 'tooltip' : ''  }}" href="{{ route('users.show', $user) }}"
   wire:mouseover="$emit('showUserPopover', {{ $user->name }})"
   wire:mouseout="$emit('closeUserPopover')"
>
    <span class="{{ $isOpen ? 'tooltiptext' : ''  }}"> {{ $user->name }} </span>
</a>
Другие вопросы по тегам