refactor: streamline Excel export actions for Issue Management and Media Monitoring, and enhance table configurations for better clarity.

This commit is contained in:
Yoga Pangestu 2026-03-13 11:33:09 +07:00
parent e4e9d1d920
commit 734b5fad87
6 changed files with 37 additions and 43 deletions

View File

@ -84,18 +84,13 @@ public function registerEvents(): array
$sheet = $event->sheet->getDelegate(); $sheet = $event->sheet->getDelegate();
$lastColumn = 'K'; // Based on column count (A-K) $lastColumn = 'K'; // Based on column count (A-K)
// Merge Title Row
// Merge Title Row
$sheet->mergeCells("A1:{$lastColumn}1"); $sheet->mergeCells("A1:{$lastColumn}1");
// Alignment and Wrap Text
$sheet->getStyle("A2:{$lastColumn}".$sheet->getHighestRow()) $sheet->getStyle("A2:{$lastColumn}".$sheet->getHighestRow())
->getAlignment() ->getAlignment()
->setVertical(Alignment::VERTICAL_TOP) ->setVertical(Alignment::VERTICAL_TOP)
->setWrapText(true); ->setWrapText(true);
// Ensure data rows auto-expand to fit wrapped text ("jadi 2 row")
// We start from row 3 (after Title and Header)
for ($i = 3; $i <= $sheet->getHighestRow(); $i++) { for ($i = 3; $i <= $sheet->getHighestRow(); $i++) {
$sheet->getRowDimension($i)->setRowHeight(-1); $sheet->getRowDimension($i)->setRowHeight(-1);
} }

View File

@ -2,9 +2,11 @@
namespace App\Filament\Resources\Monitoring\IssueManagements\Pages; namespace App\Filament\Resources\Monitoring\IssueManagements\Pages;
use App\Filament\Exports\IssueManagementExcelExport;
use App\Filament\Resources\Monitoring\IssueManagements\IssueManagementResource; use App\Filament\Resources\Monitoring\IssueManagements\IssueManagementResource;
use Filament\Actions\CreateAction; use Filament\Actions\CreateAction;
use Filament\Resources\Pages\ListRecords; use Filament\Resources\Pages\ListRecords;
use pxlrbt\FilamentExcel\Actions\ExportAction;
class ListIssueManagements extends ListRecords class ListIssueManagements extends ListRecords
{ {
@ -17,6 +19,14 @@ protected function getHeaderActions(): array
return [ return [
CreateAction::make() CreateAction::make()
->label('Tambah'), ->label('Tambah'),
ExportAction::make()
->exports([
IssueManagementExcelExport::make()
->fromTable(),
])
->color('success')
->icon(null),
]; ];
} }
} }

View File

@ -10,7 +10,6 @@
use App\Filament\Actions\Cheerful\RestoreAction; use App\Filament\Actions\Cheerful\RestoreAction;
use App\Filament\Actions\DefaultBulkActions; use App\Filament\Actions\DefaultBulkActions;
use App\Filament\Columns\TimestampColumns; use App\Filament\Columns\TimestampColumns;
use App\Filament\Exports\IssueManagementExcelExport;
use Filament\Actions\BulkActionGroup; use Filament\Actions\BulkActionGroup;
use Filament\Forms\Components\DatePicker; use Filament\Forms\Components\DatePicker;
use Filament\Forms\Components\Select; use Filament\Forms\Components\Select;
@ -23,7 +22,6 @@
use Filament\Tables\Filters\TrashedFilter; use Filament\Tables\Filters\TrashedFilter;
use Filament\Tables\Table; use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
use pxlrbt\FilamentExcel\Actions\Tables\ExportAction;
class IssueManagementTable class IssueManagementTable
{ {
@ -179,23 +177,22 @@ public static function configure(Table $table): Table
->query(function (Builder $query, array $data): Builder { ->query(function (Builder $query, array $data): Builder {
$type = $data['date_type'] ?? null; $type = $data['date_type'] ?? null;
// Filtering based on mediaMonitoring.release_date relationship return $query->when($type, function (Builder $query) use ($type, $data) {
$query->whereHas('mediaMonitoring', function (Builder $query) use ($type, $data) { return $query->whereHas('mediaMonitoring', function (Builder $query) use ($type, $data) {
$column = 'release_date'; $column = 'release_date';
if ($type === 'date' && ! empty($data['specific_date'])) { if ($type === 'date' && ! empty($data['specific_date'])) {
$query->whereDate($column, $data['specific_date']); $query->whereDate($column, $data['specific_date']);
} elseif ($type === 'month' && ! empty($data['month']) && ! empty($data['year'])) { } elseif ($type === 'month' && ! empty($data['month']) && ! empty($data['year'])) {
$query->whereMonth($column, $data['month']) $query->whereMonth($column, $data['month'])
->whereYear($column, $data['year']); ->whereYear($column, $data['year']);
} elseif ($type === 'year' && ! empty($data['year'])) { } elseif ($type === 'year' && ! empty($data['year'])) {
$query->whereYear($column, $data['year']); $query->whereYear($column, $data['year']);
} elseif ($type === 'range' && ! empty($data['start_date']) && ! empty($data['end_date'])) { } elseif ($type === 'range' && ! empty($data['start_date']) && ! empty($data['end_date'])) {
$query->whereBetween($column, [$data['start_date'], $data['end_date']]); $query->whereBetween($column, [$data['start_date'], $data['end_date']]);
} }
});
}); });
return $query;
}), }),
], FiltersLayout::AboveContentCollapsible) ], FiltersLayout::AboveContentCollapsible)
->filtersFormColumns(3) ->filtersFormColumns(3)
@ -208,13 +205,6 @@ public static function configure(Table $table): Table
ForceDeleteAction::make(), ForceDeleteAction::make(),
]) ])
->headerActions([
ExportAction::make()
->exports([
IssueManagementExcelExport::make(),
])
->color('success'),
])
->toolbarActions([ ->toolbarActions([
BulkActionGroup::make([ BulkActionGroup::make([
...DefaultBulkActions::make('Manajemen Isu'), ...DefaultBulkActions::make('Manajemen Isu'),

View File

@ -9,7 +9,6 @@
use Filament\Forms\Components\Select; use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput; use Filament\Forms\Components\TextInput;
use Filament\Support\Enums\Width; use Filament\Support\Enums\Width;
use Filament\Support\Icons\Heroicon;
class CrawlNewsAction extends Action class CrawlNewsAction extends Action
{ {
@ -18,7 +17,6 @@ protected function setUp(): void
parent::setUp(); parent::setUp();
$this->label('Crawl Berita') $this->label('Crawl Berita')
->icon(Heroicon::MagnifyingGlass)
->color('slate') ->color('slate')
->schema([ ->schema([
TextInput::make('keyword') TextInput::make('keyword')

View File

@ -2,9 +2,12 @@
namespace App\Filament\Resources\Monitoring\MediaMonitorings\Pages; namespace App\Filament\Resources\Monitoring\MediaMonitorings\Pages;
use App\Filament\Exports\MediaMonitoringExcelExport;
use App\Filament\Resources\Monitoring\MediaMonitorings\Actions\CrawlNewsAction;
use App\Filament\Resources\Monitoring\MediaMonitorings\MediaMonitoringResource; use App\Filament\Resources\Monitoring\MediaMonitorings\MediaMonitoringResource;
use Filament\Actions\CreateAction; use Filament\Actions\CreateAction;
use Filament\Resources\Pages\ListRecords; use Filament\Resources\Pages\ListRecords;
use pxlrbt\FilamentExcel\Actions\ExportAction;
class ListMediaMonitorings extends ListRecords class ListMediaMonitorings extends ListRecords
{ {
@ -17,6 +20,16 @@ protected function getHeaderActions(): array
return [ return [
CreateAction::make() CreateAction::make()
->label('Tambah'), ->label('Tambah'),
CrawlNewsAction::make('crawlNews'),
ExportAction::make()
->exports([
MediaMonitoringExcelExport::make()
->fromTable(),
])
->color('success')
->icon(null),
]; ];
} }
} }

View File

@ -10,8 +10,6 @@
use App\Filament\Actions\Cheerful\RestoreAction; use App\Filament\Actions\Cheerful\RestoreAction;
use App\Filament\Actions\DefaultBulkActions; use App\Filament\Actions\DefaultBulkActions;
use App\Filament\Columns\TimestampColumns; use App\Filament\Columns\TimestampColumns;
use App\Filament\Exports\MediaMonitoringExcelExport;
use App\Filament\Resources\Monitoring\MediaMonitorings\Actions\CrawlNewsAction;
use Filament\Actions\BulkActionGroup; use Filament\Actions\BulkActionGroup;
use Filament\Forms\Components\DatePicker; use Filament\Forms\Components\DatePicker;
use Filament\Forms\Components\Select; use Filament\Forms\Components\Select;
@ -25,7 +23,6 @@
use Filament\Tables\Filters\TrashedFilter; use Filament\Tables\Filters\TrashedFilter;
use Filament\Tables\Table; use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
use pxlrbt\FilamentExcel\Actions\Tables\ExportAction;
class MediaMonitoringsTable class MediaMonitoringsTable
{ {
@ -219,15 +216,6 @@ public static function configure(Table $table): Table
RestoreAction::make(), RestoreAction::make(),
]) ])
->headerActions([
CrawlNewsAction::make('crawlNews'),
ExportAction::make()
->exports([
MediaMonitoringExcelExport::make(),
])
->color('success'),
])
->toolbarActions([ ->toolbarActions([
BulkActionGroup::make([ BulkActionGroup::make([
...DefaultBulkActions::make('Monitoring Media'), ...DefaultBulkActions::make('Monitoring Media'),