columns([ TextColumn::make('title') ->label('Proje Adı') ->searchable() ->sortable() ->limit(40), TextColumn::make('client_name') ->label('Müşteri') ->searchable() ->sortable() ->limit(30), TextColumn::make('progress_percent') ->label('İlerleme') ->formatStateUsing(fn ($state) => "%{$state}") ->badge() ->color(fn ($state) => match (true) { $state >= 100 => 'success', $state >= 50 => 'info', $state >= 25 => 'warning', default => 'danger', }) ->sortable(), TextColumn::make('status') ->label('Durum') ->badge() ->color(fn (string $state): string => match ($state) { 'planning' => 'gray', 'in_progress' => 'info', 'on_hold' => 'warning', 'completed' => 'success', 'cancelled' => 'danger', default => 'gray', }) ->formatStateUsing(fn (string $state): string => match ($state) { 'planning' => 'Planlama', 'in_progress' => 'Devam Ediyor', 'on_hold' => 'Beklemede', 'completed' => 'Tamamlandı', 'cancelled' => 'İptal', default => $state, }), TextColumn::make('client_access_code') ->label('Müşteri PIN') ->copyable() ->badge() ->color('gray'), TextColumn::make('target_date') ->label('Hedef Bitiş') ->date('d.m.Y') ->sortable(), TextColumn::make('created_at') ->label('Oluşturulma') ->dateTime('d.m.Y H:i') ->sortable() ->toggleable(isToggledHiddenByDefault: true), ]) ->filters([ SelectFilter::make('status') ->label('Durum') ->options([ 'planning' => 'Planlama', 'in_progress' => 'Devam Ediyor', 'on_hold' => 'Beklemede', 'completed' => 'Tamamlandı', 'cancelled' => 'İptal', ]), ]) ->recordActions([ EditAction::make() ->label('Düzenle'), ]) ->actions([ Action::make('view_client_portal') ->label('Müşteri Ekranı') ->icon('heroicon-o-arrow-top-right-on-square') ->url(fn ($record) => route('projects.show', $record->slug)) ->openUrlInNewTab(), ]) ->bulkActions([ BulkActionGroup::make([ DeleteBulkAction::make() ->label('Sil'), ]), ]) ->defaultSort('created_at', 'desc'); } }