選択できるのは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\LiveCurrency;
  5. use App\Filament\Company\Pages\Setting\Appearance;
  6. use App\Filament\Company\Pages\Setting\CompanyDefault;
  7. use App\Filament\Company\Pages\Setting\CompanyProfile;
  8. use App\Filament\Company\Pages\Setting\Invoice;
  9. use App\Filament\Company\Pages\Setting\Localization;
  10. use App\Filament\Company\Resources\Banking\AccountResource;
  11. use App\Filament\Company\Resources\Core\DepartmentResource;
  12. use App\Filament\Company\Resources\Setting\CategoryResource;
  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(translate('Settings'))
  61. ->items([
  62. ...CategoryResource::getNavigationItems(),
  63. ...CurrencyResource::getNavigationItems(),
  64. ...DiscountResource::getNavigationItems(),
  65. ...TaxResource::getNavigationItems(),
  66. ...Appearance::getNavigationItems(),
  67. ...CompanyDefault::getNavigationItems(),
  68. ...Invoice::getNavigationItems(),
  69. ...CompanyProfile::getNavigationItems(),
  70. ...Localization::getNavigationItems(),
  71. ]);
  72. }
  73. /**
  74. * Build the resources group.
  75. */
  76. protected function buildResourcesGroup(): NavigationGroup
  77. {
  78. return NavigationGroup::make(translate('Resources'))
  79. ->items([
  80. ...LiveCurrency::getNavigationItems(),
  81. ...AccountResource::getNavigationItems(),
  82. ...DepartmentResource::getNavigationItems(),
  83. ]);
  84. }
  85. }