您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

ConfigureCompanyNavigation.php 3.1KB

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