選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

Companies.php 2.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. <?php
  2. namespace App\Filament\Pages\Widgets;
  3. use App\Models\Company;
  4. use Closure;
  5. use Exception;
  6. use Filament\Tables;
  7. use Filament\Widgets\TableWidget as PageWidget;
  8. use Illuminate\Contracts\Support\Htmlable;
  9. use Illuminate\Database\Eloquent\Builder;
  10. use Illuminate\Database\Eloquent\Relations\Relation;
  11. class Companies extends PageWidget
  12. {
  13. protected int|string|array $columnSpan = [
  14. 'md' => 2,
  15. 'xl' => 3,
  16. ];
  17. protected function getTableQuery(): Builder|Relation
  18. {
  19. return Company::query();
  20. }
  21. protected function getTableHeading(): string|Htmlable|Closure|null
  22. {
  23. return null;
  24. }
  25. /**
  26. * @throws Exception
  27. */
  28. protected function getTableFilters(): array
  29. {
  30. return [
  31. Tables\Filters\SelectFilter::make('name')
  32. ->label('Owner')
  33. ->relationship('owner', 'name'),
  34. Tables\Filters\TernaryFilter::make('personal_company')
  35. ->label('Personal Company')
  36. ];
  37. }
  38. protected function getTableColumns(): array
  39. {
  40. return [
  41. Tables\Columns\ViewColumn::make('owner.name')
  42. ->view('filament.components.companies.avatar-column')
  43. ->label('Owner')
  44. ->sortable()
  45. ->grow(false),
  46. Tables\Columns\TextColumn::make('name')
  47. ->weight('semibold')
  48. ->label('Company')
  49. ->sortable(),
  50. Tables\Columns\TextColumn::make('users_count')
  51. ->label('Employees')
  52. ->weight('semibold')
  53. ->counts('users')
  54. ->sortable(),
  55. Tables\Columns\IconColumn::make('personal_company')
  56. ->label('Personal Company')
  57. ->boolean()
  58. ->sortable()
  59. ->trueIcon('heroicon-o-badge-check')
  60. ->falseIcon('heroicon-o-x-circle')
  61. ->trueColor('primary')
  62. ->falseColor('secondary')
  63. ];
  64. }
  65. }