+ {{ $announcement->title }} +
++ {!! $announcement->content !!} +
+diff --git a/app/Filament/Resources/Publication/Announcements/AnnouncementResource.php b/app/Filament/Resources/Publication/Announcements/AnnouncementResource.php index 2b41264..f746233 100644 --- a/app/Filament/Resources/Publication/Announcements/AnnouncementResource.php +++ b/app/Filament/Resources/Publication/Announcements/AnnouncementResource.php @@ -15,8 +15,9 @@ use Filament\Actions\ForceDeleteAction; use Filament\Actions\RestoreAction; use Filament\Forms\Components\CheckboxList; +use Filament\Forms\Components\RichEditor; use Filament\Forms\Components\Select; -use Filament\Forms\Components\Textarea; +use Filament\Forms\Components\TextInput; use Filament\Resources\Resource; use Filament\Schemas\Schema; use Filament\Support\Enums\Width; @@ -40,7 +41,7 @@ class AnnouncementResource extends Resource protected static ?string $slug = 'publication/announcements'; - protected static ?string $recordTitleAttribute = 'content'; + protected static ?string $recordTitleAttribute = 'title'; protected static ?int $navigationSort = 2; @@ -48,13 +49,17 @@ public static function form(Schema $schema): Schema { return $schema ->components([ - Textarea::make('content') + TextInput::make('title') + ->label('Judul') + ->placeholder('Masukkan judul pengumuman') + ->required() + ->maxLength(200) + ->columnSpanFull(), + + RichEditor::make('content') ->label('Konten') ->placeholder('Diberitahukan kepada seluruh media untuk update dokumen...') - ->autocomplete(false) - ->autofocus() ->required() - ->rows(4) ->columnSpanFull(), Select::make('type') @@ -86,12 +91,20 @@ public static function table(Table $table): Table return $table ->recordTitleAttribute('content') ->columns([ + TextColumn::make('title') + ->label('Judul') + ->searchable() + ->sortable() + ->wrap(), + TextColumn::make('content') ->label('Konten') ->searchable() ->sortable() ->wrap() - ->limit(100), + ->limit(100) + ->html() + ->toggleable(isToggledHiddenByDefault: true), TextColumn::make('type') ->label('Tipe') @@ -112,7 +125,7 @@ public static function table(Table $table): Table ]) ->recordActions([ EditAction::make() - ->modalWidth(Width::Large), + ->modalWidth(Width::TwoExtraLarge), DeleteAction::make(), diff --git a/app/Filament/Resources/Publication/Announcements/Pages/ManageAnnouncements.php b/app/Filament/Resources/Publication/Announcements/Pages/ManageAnnouncements.php index 5522755..53b9143 100644 --- a/app/Filament/Resources/Publication/Announcements/Pages/ManageAnnouncements.php +++ b/app/Filament/Resources/Publication/Announcements/Pages/ManageAnnouncements.php @@ -25,7 +25,7 @@ protected function getHeaderActions(): array $action->makeModalSubmitAction('createAnother', arguments: ['another' => true]) ->label('Simpan dan Tambah Lagi'), ]) - ->modalWidth(Width::Large), + ->modalWidth(Width::TwoExtraLarge), ]; } } diff --git a/app/Livewire/Home/Announcement.php b/app/Livewire/Home/Announcement.php new file mode 100644 index 0000000..f9dece4 --- /dev/null +++ b/app/Livewire/Home/Announcement.php @@ -0,0 +1,33 @@ +public() + ->latest() + ->paginate(6) + ->through(function ($item) { + $item->formatted_date = $item->created_at?->translatedFormat('d F Y') ?: '-'; + + return $item; + }); + + return view('livewire.home.announcements', [ + 'pageTitle' => 'Pengumuman', + 'pageDescription' => 'Dapatkan informasi dan pengumuman terbaru.', + 'announcements' => $announcements, + ]); + } +} diff --git a/app/Models/Announcement.php b/app/Models/Announcement.php index 4607ed9..81fbd52 100644 --- a/app/Models/Announcement.php +++ b/app/Models/Announcement.php @@ -3,6 +3,8 @@ namespace App\Models; use App\Enums\AnnouncementType; +use Illuminate\Database\Eloquent\Attributes\Scope; +use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsToMany; @@ -21,6 +23,18 @@ protected function casts(): array ]; } + #[Scope] + protected function public(Builder $query): void + { + $query->where('type', AnnouncementType::PUBLIC); + } + + #[Scope] + protected function company(Builder $query): void + { + $query->where('type', AnnouncementType::COMPANY); + } + public function partnerMedia(): BelongsToMany { return $this->belongsToMany(PartnerMedia::class, 'announcement_media'); diff --git a/database/migrations/2025_12_12_090552_create_announcements_table.php b/database/migrations/2025_12_12_090552_create_announcements_table.php index a8b3d32..492f863 100644 --- a/database/migrations/2025_12_12_090552_create_announcements_table.php +++ b/database/migrations/2025_12_12_090552_create_announcements_table.php @@ -14,6 +14,7 @@ public function up(): void { Schema::create('announcements', function (Blueprint $table) { $table->id(); + $table->string('title', 200); $table->text('content'); $table->enum('type', AnnouncementType::values())->default(AnnouncementType::PUBLIC)->comment(AnnouncementType::comment()); $table->timestamp('created_at')->useCurrent(); diff --git a/resources/views/components/partials/header.blade.php b/resources/views/components/partials/header.blade.php index b9e685e..5c05dbf 100644 --- a/resources/views/components/partials/header.blade.php +++ b/resources/views/components/partials/header.blade.php @@ -46,7 +46,9 @@ class="nav-link {{ Route::is('about-us') ? 'active' : '' }}">Tentang Kami Berita -
+ {!! $announcement->content !!} +
+