60 lines
1.5 KiB
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'));
|
|
}
|
|
}
|