mailwolt/app/Livewire/Ui/System/SandboxMailbox.php

60 lines
1.5 KiB
PHP

<?php
namespace App\Livewire\Ui\System;
use App\Models\SandboxMail;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Title;
use Livewire\Attributes\Url;
use Livewire\Component;
#[Layout('layouts.dvx')]
#[Title('Mail-Sandbox · Mailwolt')]
class SandboxMailbox extends Component
{
#[Url]
public string $search = '';
public ?int $selectedId = null;
public function select(int $id): void
{
$this->selectedId = $id;
SandboxMail::find($id)?->update(['is_read' => true]);
}
public function deleteOne(int $id): void
{
SandboxMail::findOrFail($id)->delete();
if ($this->selectedId === $id) {
$this->selectedId = null;
}
}
public function clearAll(): void
{
SandboxMail::truncate();
$this->selectedId = null;
}
public function render()
{
$query = SandboxMail::orderByDesc('received_at');
if ($this->search !== '') {
$s = '%' . $this->search . '%';
$query->where(fn($q) => $q
->where('from_address', 'like', $s)
->orWhere('subject', 'like', $s)
->orWhereJsonContains('to_addresses', $this->search)
);
}
$mails = $query->get();
$selected = $this->selectedId ? SandboxMail::find($this->selectedId) : null;
$unread = SandboxMail::where('is_read', false)->count();
return view('livewire.ui.system.sandbox-mailbox', compact('mails', 'selected', 'unread'));
}
}