You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ConfigureCompanyDefault.php 2.5KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. <?php
  2. namespace App\Listeners;
  3. use App\Enums\Font;
  4. use App\Enums\MaxContentWidth;
  5. use App\Enums\ModalWidth;
  6. use App\Enums\PrimaryColor;
  7. use App\Enums\RecordsPerPage;
  8. use App\Enums\TableSortDirection;
  9. use App\Models\Company;
  10. use Filament\Actions\MountableAction;
  11. use Filament\Events\TenantSet;
  12. use Filament\Facades\Filament;
  13. use Filament\Support\Facades\FilamentColor;
  14. use Filament\Tables\Table;
  15. class ConfigureCompanyDefault
  16. {
  17. /**
  18. * Handle the event.
  19. */
  20. public function handle(TenantSet $event): void
  21. {
  22. /** @var Company $company */
  23. $company = $event->getTenant();
  24. $paginationPageOptions = RecordsPerPage::caseValues();
  25. $defaultPaginationPageOption = $company->appearance->records_per_page->value ?? RecordsPerPage::DEFAULT;
  26. $defaultSort = $company->appearance->table_sort_direction->value ?? TableSortDirection::DEFAULT;
  27. $stripedTables = $company->appearance->is_table_striped ?? false;
  28. $defaultPrimaryColor = $company->appearance->primary_color ?? PrimaryColor::from(PrimaryColor::DEFAULT);
  29. $modalWidth = $company->appearance->modal_width->value ?? ModalWidth::DEFAULT;
  30. $maxContentWidth = $company->appearance->max_content_width->value ?? MaxContentWidth::DEFAULT;
  31. $defaultFont = $company->appearance->font->value ?? Font::DEFAULT;
  32. $hasTopNavigation = $company->appearance->has_top_navigation ?? false;
  33. Table::configureUsing(static function (Table $table) use ($paginationPageOptions, $defaultSort, $stripedTables, $defaultPaginationPageOption): void {
  34. $table
  35. ->paginationPageOptions($paginationPageOptions)
  36. ->defaultSort(column: 'id', direction: $defaultSort)
  37. ->striped($stripedTables)
  38. ->defaultPaginationPageOption($defaultPaginationPageOption);
  39. }, isImportant: true);
  40. MountableAction::configureUsing(static function (MountableAction $action) use ($modalWidth): void {
  41. $action->modalWidth($modalWidth);
  42. }, isImportant: true);
  43. $defaultColor = FilamentColor::register([
  44. 'primary' => $defaultPrimaryColor->getColor(),
  45. ]);
  46. FilamentColor::swap($defaultColor);
  47. Filament::getPanel('company')
  48. ->font($defaultFont)
  49. ->brandName($company->name)
  50. ->topNavigation($hasTopNavigation)
  51. ->sidebarCollapsibleOnDesktop(!$hasTopNavigation)
  52. ->maxContentWidth($maxContentWidth);
  53. }
  54. }