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.

ConfigureCompanyNavigation.php 3.2KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. <?php
  2. namespace App\Listeners;
  3. use App\Events\CompanyConfigured;
  4. use App\Filament\Company\Pages\Service\ConnectedAccount;
  5. use App\Filament\Company\Pages\Service\LiveCurrency;
  6. use App\Filament\Company\Pages\Setting\Appearance;
  7. use App\Filament\Company\Pages\Setting\CompanyDefault;
  8. use App\Filament\Company\Pages\Setting\CompanyProfile;
  9. use App\Filament\Company\Pages\Setting\Invoice;
  10. use App\Filament\Company\Pages\Setting\Localization;
  11. use App\Filament\Company\Resources\Banking\AccountResource;
  12. use App\Filament\Company\Resources\Core\DepartmentResource;
  13. use App\Filament\Company\Resources\Setting\CategoryResource;
  14. use App\Filament\Company\Resources\Setting\CurrencyResource;
  15. use App\Filament\Company\Resources\Setting\DiscountResource;
  16. use App\Filament\Company\Resources\Setting\TaxResource;
  17. use Filament\Facades\Filament;
  18. use Filament\Navigation\NavigationBuilder;
  19. use Filament\Navigation\NavigationGroup;
  20. use Filament\Pages\Dashboard;
  21. class ConfigureCompanyNavigation
  22. {
  23. /**
  24. * Handle the event.
  25. */
  26. public function handle(CompanyConfigured $event): void
  27. {
  28. $company = $event->company;
  29. $hasTopNavigation = $company->appearance->has_top_navigation ?? false;
  30. Filament::getPanel('company')
  31. ->topNavigation($hasTopNavigation)
  32. ->sidebarCollapsibleOnDesktop(! $hasTopNavigation);
  33. if (Filament::getPanel('company')->hasTopNavigation()) {
  34. Filament::getPanel('company')->navigation(
  35. $this->buildCompanyNavigation()
  36. );
  37. }
  38. NavigationGroup::configureUsing(static function (NavigationGroup $group): void {
  39. $group->localizeLabel();
  40. }, isImportant: true);
  41. }
  42. /**
  43. * Build the company navigation.
  44. */
  45. protected function buildCompanyNavigation(): callable
  46. {
  47. return function (NavigationBuilder $builder): NavigationBuilder {
  48. return $builder
  49. ->items(Dashboard::getNavigationItems())
  50. ->groups([
  51. $this->buildSettingsGroup(),
  52. $this->buildResourcesGroup(),
  53. ]);
  54. };
  55. }
  56. /**
  57. * Build the settings group.
  58. */
  59. protected function buildSettingsGroup(): NavigationGroup
  60. {
  61. return NavigationGroup::make('Settings')
  62. ->items([
  63. ...CategoryResource::getNavigationItems(),
  64. ...CurrencyResource::getNavigationItems(),
  65. ...DiscountResource::getNavigationItems(),
  66. ...TaxResource::getNavigationItems(),
  67. ...Appearance::getNavigationItems(),
  68. ...CompanyDefault::getNavigationItems(),
  69. ...Invoice::getNavigationItems(),
  70. ...CompanyProfile::getNavigationItems(),
  71. ...Localization::getNavigationItems(),
  72. ]);
  73. }
  74. /**
  75. * Build the resources group.
  76. */
  77. protected function buildResourcesGroup(): NavigationGroup
  78. {
  79. return NavigationGroup::make('Resources')
  80. ->items([
  81. ...AccountResource::getNavigationItems(),
  82. ...ConnectedAccount::getNavigationItems(),
  83. ...LiveCurrency::getNavigationItems(),
  84. ...DepartmentResource::getNavigationItems(),
  85. ]);
  86. }
  87. }