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 4.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. <?php
  2. namespace App\Listeners;
  3. use App\Enums\DateFormat;
  4. use App\Enums\Font;
  5. use App\Enums\MaxContentWidth;
  6. use App\Enums\ModalWidth;
  7. use App\Enums\PrimaryColor;
  8. use App\Enums\RecordsPerPage;
  9. use App\Enums\TableSortDirection;
  10. use App\Enums\WeekStart;
  11. use App\Events\CompanyConfigured;
  12. use App\Utilities\Currency\ConfigureCurrencies;
  13. use Filament\Actions\MountableAction;
  14. use Filament\Facades\Filament;
  15. use Filament\Forms\Components\DatePicker;
  16. use Filament\Forms\Components\Section;
  17. use Filament\Forms\Components\Tabs\Tab;
  18. use Filament\Navigation\NavigationGroup;
  19. use Filament\Resources\Components\Tab as ResourcesTab;
  20. use Filament\Support\Facades\FilamentColor;
  21. use Filament\Tables\Table;
  22. class ConfigureCompanyDefault
  23. {
  24. /**
  25. * Handle the event.
  26. */
  27. public function handle(CompanyConfigured $event): void
  28. {
  29. $company = $event->company;
  30. $paginationPageOptions = RecordsPerPage::caseValues();
  31. $defaultPaginationPageOption = $company->appearance->records_per_page->value ?? RecordsPerPage::DEFAULT;
  32. $defaultSort = $company->appearance->table_sort_direction->value ?? TableSortDirection::DEFAULT;
  33. $stripedTables = $company->appearance->is_table_striped ?? false;
  34. $defaultPrimaryColor = $company->appearance->primary_color ?? PrimaryColor::from(PrimaryColor::DEFAULT);
  35. $modalWidth = $company->appearance->modal_width->value ?? ModalWidth::DEFAULT;
  36. $maxContentWidth = $company->appearance->max_content_width->value ?? MaxContentWidth::DEFAULT;
  37. $defaultFont = $company->appearance->font->value ?? Font::DEFAULT;
  38. $hasTopNavigation = $company->appearance->has_top_navigation ?? false;
  39. $default_language = $company->locale->language ?? config('transmatic.source_locale');
  40. $defaultTimezone = $company->locale->timezone ?? config('app.timezone');
  41. $dateFormat = $company->locale->date_format->value ?? DateFormat::DEFAULT;
  42. $weekStart = $company->locale->week_start->value ?? WeekStart::DEFAULT;
  43. app()->setLocale($default_language);
  44. locale_set_default($default_language);
  45. config(['app.timezone' => $defaultTimezone]);
  46. date_default_timezone_set($defaultTimezone);
  47. Table::configureUsing(static function (Table $table) use ($paginationPageOptions, $defaultSort, $stripedTables, $defaultPaginationPageOption): void {
  48. $table
  49. ->paginationPageOptions($paginationPageOptions)
  50. ->defaultSort(column: 'id', direction: $defaultSort)
  51. ->striped($stripedTables)
  52. ->defaultPaginationPageOption($defaultPaginationPageOption);
  53. }, isImportant: true);
  54. MountableAction::configureUsing(static function (MountableAction $action) use ($modalWidth): void {
  55. $actionOperation = $action->getName();
  56. if (in_array($actionOperation, ['delete', 'restore', 'forceDelete', 'detach'])) {
  57. $action->modalWidth($modalWidth);
  58. }
  59. }, isImportant: true);
  60. FilamentColor::register([
  61. 'primary' => $defaultPrimaryColor->getColor(),
  62. ]);
  63. Filament::getPanel('company')
  64. ->font($defaultFont)
  65. ->brandName($company->name)
  66. ->topNavigation($hasTopNavigation)
  67. ->sidebarCollapsibleOnDesktop(! $hasTopNavigation)
  68. ->maxContentWidth($maxContentWidth);
  69. DatePicker::configureUsing(static function (DatePicker $component) use ($dateFormat, $weekStart) {
  70. $component
  71. ->displayFormat($dateFormat)
  72. ->firstDayOfWeek($weekStart);
  73. });
  74. Tab::configureUsing(static function (Tab $tab) {
  75. $label = $tab->getLabel();
  76. $tab->label(ucwords(translate($label)));
  77. }, isImportant: true);
  78. Section::configureUsing(static function (Section $section): void {
  79. $heading = $section->getHeading();
  80. $section->heading(ucfirst(translate($heading)));
  81. }, isImportant: true);
  82. ResourcesTab::configureUsing(static function (ResourcesTab $tab): void {
  83. $tab->localizeLabel();
  84. }, isImportant: true);
  85. NavigationGroup::configureUsing(static function (NavigationGroup $group): void {
  86. $group->localizeLabel();
  87. }, isImportant: true);
  88. ConfigureCurrencies::syncCurrencies();
  89. }
  90. }