From e26fede44f06f755e287b6f4babefe6eadf06e5e Mon Sep 17 00:00:00 2001 From: Raziul Islam <51883557+iRaziul@users.noreply.github.com> Date: Thu, 26 Dec 2024 11:11:01 +0600 Subject: [PATCH 1/2] configure navigation label, group, icon, sort and count --- src/FilamentMenuBuilderPlugin.php | 90 +++++++++++++++++++++++++++---- src/Resources/MenuResource.php | 32 +++++++++-- 2 files changed, 108 insertions(+), 14 deletions(-) diff --git a/src/FilamentMenuBuilderPlugin.php b/src/FilamentMenuBuilderPlugin.php index b9d1914..b58021b 100644 --- a/src/FilamentMenuBuilderPlugin.php +++ b/src/FilamentMenuBuilderPlugin.php @@ -12,9 +12,12 @@ use Datlechin\FilamentMenuBuilder\Resources\MenuResource; use Filament\Contracts\Plugin; use Filament\Panel; +use Filament\Support\Concerns\EvaluatesClosures; class FilamentMenuBuilderPlugin implements Plugin { + use EvaluatesClosures; + protected string $resource = MenuResource::class; protected string $menuModel = Menu::class; @@ -25,9 +28,19 @@ class FilamentMenuBuilderPlugin implements Plugin protected array $locations = []; - protected array | Closure $menuFields = []; + protected array|Closure $menuFields = []; + + protected array|Closure $menuItemFields = []; + + protected string|Closure|null $navigationLabel = null; + + protected string|Closure|null $navigationGroup = null; + + protected string|Closure|null $navigationIcon = 'heroicon-o-bars-3'; + + protected int|Closure|null $navigationSort = null; - protected array | Closure $menuItemFields = []; + protected bool $navigationCountBadge = false; /** * @var MenuPanel[] @@ -60,10 +73,7 @@ public static function make(): static public static function get(): static { - /** @var static $plugin */ - $plugin = filament(app(static::class)->getId()); - - return $plugin; + return filament(app(static::class)->getId()); } public function usingResource(string $resource): static @@ -143,20 +153,55 @@ public function showCustomTextPanel(bool $show = true): static return $this; } - public function addMenuFields(array | Closure $schema): static + public function addMenuFields(array|Closure $schema): static { $this->menuFields = $schema; return $this; } - public function addMenuItemFields(array | Closure $schema): static + public function addMenuItemFields(array|Closure $schema): static { $this->menuItemFields = $schema; return $this; } + public function navigationLabel(string|Closure $label = null): static + { + $this->navigationLabel = $label; + + return $this; + } + + public function navigationGroup(string|Closure $group = null): static + { + $this->navigationGroup = $group; + + return $this; + } + + public function navigationIcon(string|Closure $icon): static + { + $this->navigationIcon = $icon; + + return $this; + } + + public function navigationSort(int|Closure $order): static + { + $this->navigationSort = $order; + + return $this; + } + + public function navigationCountBadge(bool $show): static + { + $this->navigationCountBadge = $show; + + return $this; + } + public function getResource(): string { return $this->resource; @@ -202,13 +247,38 @@ public function getLocations(): array return $this->locations; } - public function getMenuFields(): array | Closure + public function getMenuFields(): array|Closure { return $this->menuFields; } - public function getMenuItemFields(): array | Closure + public function getMenuItemFields(): array|Closure { return $this->menuItemFields; } + + public function getNavigationGroup(): ?string + { + return $this->evaluate($this->navigationGroup); + } + + public function getNavigationLabel(): ?string + { + return $this->evaluate($this->navigationLabel); + } + + public function getNavigationIcon(): ?string + { + return $this->evaluate($this->navigationIcon); + } + + public function getNavigationSort(): ?int + { + return $this->evaluate($this->navigationSort); + } + + public function getNavigationCountBadge(): bool + { + return $this->navigationCountBadge; + } } diff --git a/src/Resources/MenuResource.php b/src/Resources/MenuResource.php index f8bf81a..f4b036a 100644 --- a/src/Resources/MenuResource.php +++ b/src/Resources/MenuResource.php @@ -11,16 +11,40 @@ use Filament\Resources\Resource; use Filament\Tables; use Filament\Tables\Table; +use Illuminate\Support\Str; class MenuResource extends Resource { - protected static ?string $navigationIcon = 'heroicon-o-bars-3'; - public static function getModel(): string { return FilamentMenuBuilderPlugin::get()->getMenuModel(); } + public static function getNavigationLabel(): string + { + return FilamentMenuBuilderPlugin::get()->getNavigationLabel() ?? Str::title(static::getPluralModelLabel()) ?? Str::title(static::getModelLabel()); + } + + public static function getNavigationIcon(): string + { + return FilamentMenuBuilderPlugin::get()->getNavigationIcon(); + } + + public static function getNavigationSort(): ?int + { + return FilamentMenuBuilderPlugin::get()->getNavigationSort(); + } + + public static function getNavigationGroup(): ?string + { + return FilamentMenuBuilderPlugin::get()->getNavigationGroup(); + } + + public static function getNavigationBadge(): ?string + { + return FilamentMenuBuilderPlugin::get()->getNavigationCountBadge() ? number_format(static::getModel()::count()) : null; + } + public static function form(Form $form): Form { return $form @@ -97,8 +121,8 @@ public static function table(Table $table): Table public static function getPages(): array { return [ - 'index' => \Datlechin\FilamentMenuBuilder\Resources\MenuResource\Pages\ListMenus::route('/'), - 'edit' => \Datlechin\FilamentMenuBuilder\Resources\MenuResource\Pages\EditMenu::route('/{record}/edit'), + 'index' => MenuResource\Pages\ListMenus::route('/'), + 'edit' => MenuResource\Pages\EditMenu::route('/{record}/edit'), ]; } } From 1b3ba09b6940e55abf9d13f00ba63b6e7ec7b8b8 Mon Sep 17 00:00:00 2001 From: Raziul Islam <51883557+iRaziul@users.noreply.github.com> Date: Thu, 26 Dec 2024 11:38:34 +0600 Subject: [PATCH 2/2] Update src/FilamentMenuBuilderPlugin.php MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Ngô Quốc Đạt --- src/FilamentMenuBuilderPlugin.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/FilamentMenuBuilderPlugin.php b/src/FilamentMenuBuilderPlugin.php index b58021b..9d78ae4 100644 --- a/src/FilamentMenuBuilderPlugin.php +++ b/src/FilamentMenuBuilderPlugin.php @@ -195,7 +195,7 @@ public function navigationSort(int|Closure $order): static return $this; } - public function navigationCountBadge(bool $show): static + public function navigationCountBadge(bool $show = true): static { $this->navigationCountBadge = $show;