simedkom/app/Filament/Resources/Publication/Announcements/Pages/ManageAnnouncements.php

66 lines
2.6 KiB
PHP

<?php
namespace App\Filament\Resources\Publication\Announcements\Pages;
use App\Enums\AnnouncementType;
use App\Filament\Actions\Cheerful\CreateAction;
use App\Filament\Resources\Publication\Announcements\AnnouncementResource;
use App\Filament\Support\CheerfulNotification;
use App\Models\Company;
use App\Models\PartnerMedia;
use App\Models\User;
use App\Notifications\BroadcastNotification;
use Filament\Resources\Pages\ManageRecords;
use Filament\Support\Enums\Width;
class ManageAnnouncements extends ManageRecords
{
protected static string $resource = AnnouncementResource::class;
public function getTitle(): string
{
return CheerfulNotification::getMessage('Pengumuman 📢✨', 'Pengumuman');
}
public function getSubheading(): ?string
{
return CheerfulNotification::getMessage('Siarkan kabar terbaru ke seluruh sistem biar semua orang tetap update! 🚀😊', 'dan publikasikan pengumuman sistem pada halaman ini.');
}
protected function getHeaderActions(): array
{
return [
CreateAction::make()
->label('Tambah')
->modalHeading(fn () => CheerfulNotification::getMessage('Buat Pengumuman Baru 📢✨', 'Tambah Pengumuman'))
->modalDescription(fn () => CheerfulNotification::getMessage('Siarkan kabar terbaru ke seluruh sistem biar semua orang tetap update! 🚀😊', 'Silakan isi formulir di bawah ini untuk membuat pengumuman baru.'))
->modalSubmitActionLabel('Simpan')
->modalCancelActionLabel('Batal')
->extraModalFooterActions(fn (CreateAction $action): array => [
$action->makeModalSubmitAction('createAnother', arguments: ['another' => true])
->label('Simpan dan Tambah Lagi'),
])
->modalWidth(Width::FiveExtraLarge)
->after(function (array $data) {
if ($data['type'] === AnnouncementType::PUBLIC) {
return;
}
$payload = [
'title' => $data['title'],
'body' => $data['content'],
];
$userIds = Company::whereIn(
'id',
PartnerMedia::whereIn('id', $data['partnerMedia'])->pluck('company_id')
)->pluck('user_id');
User::whereIn('id', $userIds)->each(function ($user) use ($payload) {
$user->notify(new BroadcastNotification($payload));
});
}),
];
}
}