Skip to content

Commit

Permalink
add feature to hide plugins UI / discover only current panel resources
Browse files Browse the repository at this point in the history
  • Loading branch information
3x1io committed May 15, 2024
1 parent a0a8475 commit 25df41d
Show file tree
Hide file tree
Showing 6 changed files with 183 additions and 40 deletions.
20 changes: 16 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -108,10 +108,6 @@ you can list your package on the plugins list by adding this a json file in your
},
"color": "#007dff",
"icon": "heroicon-c-user-circle",
"pages": [
],
"resources": [],
"widgets": [],
"placeholder": "placeholder.webp",
"type": "lib",
"version": "v1.0",
Expand All @@ -138,6 +134,14 @@ you can use the selected module in your panel by using this code in your PanelPr

so you will see only the selected modules in your panel

## Get Only Current Panel Plugins

on any plugin you can create a Page/Resource/Widget for selected panel, so if you need to showup only the current panel Page/Resources/Widgets you can use this code in your PanelProvider

```php
->plugin(\TomatoPHP\FilamentPlugins\FilamentPluginsPlugin::make()->discoverCurrentPanelOnly())
```

## Stop Auto Discover Module Resources

you can stop auto-load module resources by using this code in your PanelProvider
Expand All @@ -146,6 +150,14 @@ you can stop auto-load module resources by using this code in your PanelProvider
->plugin(\TomatoPHP\FilamentPlugins\FilamentPluginsPlugin::make()->autoDiscoverModules(false))
```

## Stop Using Plugins UI

you can stop using the plugins UI by using this code in your PanelProvider

```php
->plugin(\TomatoPHP\FilamentPlugins\FilamentPluginsPlugin::make()->useUI(false))
```

## Publish Assets

you can publish config file by use this command
Expand Down
34 changes: 34 additions & 0 deletions src/Console/FilamentPageGenerate.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
use Filament\Facades\Filament;
use Filament\Panel;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Str;

use Nwidart\Modules\Facades\Module;
Expand Down Expand Up @@ -193,6 +194,19 @@ public function handle(): int
$pageDirectories = collect($panel->getPageDirectories())->filter(fn (string $directory): bool => str($directory)->contains($module->appPath()))->values()->all();
$pageNamespaces = collect($panel->getPageNamespaces())->filter(fn (string $namespace): bool => str($namespace)->contains($module->appNamespace()))->values()->all();

//Create Directory For Selected Panel in Module If Not Exists
if(count($pageDirectories) < 1 && count($pageNamespaces) < 1){
$modulePath = module_path($moduleName);
if(!File::exists($modulePath . '/app/Filament/'.Str::studly($panel->getId()))){
File::makeDirectory($modulePath . '/app/Filament/'.Str::studly($panel->getId()));
}
if(!File::exists($modulePath . '/app/Filament/'.Str::studly($panel->getId()).'/Pages')){
File::makeDirectory($modulePath . '/app/Filament/'.Str::studly($panel->getId()).'/Pages');
}
$pageDirectories[] = $modulePath . '/app/Filament/'.Str::studly($panel->getId()).'/Pages';
$pageNamespaces[] = $module->appNamespace().'\\Filament\\'.Str::studly($panel->getId()).'\\Pages';
}

$namespace = (count($pageNamespaces) > 1) ?
select(
label: 'Which namespace would you like to create this in?',
Expand All @@ -207,6 +221,26 @@ public function handle(): int
$resourceDirectories = collect($panel->getResourceDirectories())->filter(fn (string $directory): bool => str($directory)->contains($module->appPath()))->values()->all();
$resourceNamespaces = collect($panel->getResourceNamespaces())->filter(fn (string $namespace): bool => str($namespace)->contains($module->appNamespace()))->values()->all();

//Create Directory For Selected Panel in Module If Not Exists
if(count($resourceDirectories) < 1 && count($resourceNamespaces) < 1){
$modulePath = module_path($moduleName);
if(!File::exists($modulePath . '/app/Filament/'.Str::studly($panel->getId()))){
File::makeDirectory($modulePath . '/app/Filament/'.Str::studly($panel->getId()));
}
if(!File::exists($modulePath . '/app/Filament/'.Str::studly($panel->getId()).'/Resource')){
File::makeDirectory($modulePath . '/app/Filament/'.Str::studly($panel->getId()).'/Resource');
}
if(!File::exists($modulePath . '/app/Filament/'.Str::studly($panel->getId()).'/Resource/'.$resource)){
File::makeDirectory($modulePath . '/app/Filament/'.Str::studly($panel->getId()).'/Resource/'.$resource);
}
if(!File::exists($modulePath . '/app/Filament/'.Str::studly($panel->getId()).'/Resource/'.$resource.'/Pages')){
File::makeDirectory($modulePath . '/app/Filament/'.Str::studly($panel->getId()).'/Resource/'.$resource.'/Pages');
}

$resourceDirectories[] = $modulePath . '/app/Filament/'.Str::studly($panel->getId()).'/Resource/'.$resource.'/Pages';
$resourceNamespaces[] = $module->appNamespace().'\\Filament\\'.Str::studly($panel->getId()).'\\Resource\\'.$resource.'\\Pages';
}

$resourceNamespace = (count($resourceNamespaces) > 1) ?
select(
label: 'Which namespace would you like to create this in?',
Expand Down
16 changes: 16 additions & 0 deletions src/Console/FilamentResourceGenerate.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@
use Illuminate\Console\Command;
use Illuminate\Support\Arr;

use Illuminate\Support\Facades\File;
use Illuminate\Support\Str;
use Nwidart\Modules\Facades\Module;
use function Laravel\Prompts\select;
use function Laravel\Prompts\text;
Expand Down Expand Up @@ -86,6 +88,20 @@ public function handle(): int
$resourceDirectories = collect($panel->getResourceDirectories())->filter(fn ($directory) => str($directory)->contains($module->appPath()))->values()->toArray();
$resourceNamespaces = collect($panel->getResourceNamespaces())->filter(fn ($namespace) => str($namespace)->contains($module->appNamespace()))->values()->toArray();

//Create Directory For Selected Panel in Module If Not Exists
if(count($resourceDirectories) < 1 && count($resourceNamespaces) < 1){
$modulePath = module_path($moduleName);
if(!File::exists($modulePath . '/app/Filament/'.Str::studly($panel->getId()))){
File::makeDirectory($modulePath . '/app/Filament/'.Str::studly($panel->getId()));
}
if(!File::exists($modulePath . '/app/Filament/'.Str::studly($panel->getId()).'/Resources')){
File::makeDirectory($modulePath . '/app/Filament/'.Str::studly($panel->getId()).'/Resources');
}
$resourceDirectories[] = $modulePath . '/app/Filament/'.Str::studly($panel->getId()).'/Resources';
$resourceNamespaces[] = $module->appNamespace().'\\Filament\\'.Str::studly($panel->getId()).'\\Resources';
}


$namespace = (count($resourceNamespaces) > 1) ?
select(
label: 'Which namespace would you like to create this in?',
Expand Down
35 changes: 35 additions & 0 deletions src/Console/FilamentWidgetGenerate.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
use Filament\Resources\Resource;
use Filament\Widgets\Commands\MakeWidgetCommand;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Str;

use Nwidart\Modules\Facades\Module;
Expand Down Expand Up @@ -113,6 +114,20 @@ public function handle(): int
$widgetDirectories = collect($panel->getWidgetDirectories())->filter(fn ($dir) => str($dir)->contains($module->appPath()))->values()->all();
$widgetNamespaces = collect($panel->getWidgetNamespaces())->filter(fn ($dir) => str($dir)->contains($module->appNamespace()))->values()->all();


//Create Directory For Selected Panel in Module If Not Exists
if(count($widgetDirectories) < 1 && count($widgetNamespaces) < 1){
$modulePath = module_path($moduleName);
if(!File::exists($modulePath . '/app/Filament/'.Str::studly($panel->getId()))){
File::makeDirectory($modulePath . '/app/Filament/'.Str::studly($panel->getId()));
}
if(!File::exists($modulePath . '/app/Filament/'.Str::studly($panel->getId()).'/Widgets')){
File::makeDirectory($modulePath . '/app/Filament/'.Str::studly($panel->getId()).'/Widgets');
}
$widgetDirectories[] = $modulePath . '/app/Filament/'.Str::studly($panel->getId()).'/Widgets';
$widgetNamespaces[] = $module->appNamespace().'\\Filament\\'.Str::studly($panel->getId()).'\\Widgets';
}

$namespace = (count($widgetNamespaces) > 1) ?
select(
label: 'Which namespace would you like to create this in?',
Expand All @@ -126,6 +141,26 @@ public function handle(): int
$resourceDirectories = collect($panel->getResourceDirectories())->filter(fn ($dir) => str($dir)->contains($module->appPath()))->values()->all();
$resourceNamespaces = collect($panel->getResourceNamespaces())->filter(fn ($dir) => str($dir)->contains($module->appNamespace()))->values()->all();

//Create Directory For Selected Panel in Module If Not Exists
if(count($resourceDirectories) < 1 && count($resourceNamespaces) < 1){
$modulePath = module_path($moduleName);
if(!File::exists($modulePath . '/app/Filament/'.Str::studly($panel->getId()))){
File::makeDirectory($modulePath . '/app/Filament/'.Str::studly($panel->getId()));
}
if(!File::exists($modulePath . '/app/Filament/'.Str::studly($panel->getId()).'/Resource')){
File::makeDirectory($modulePath . '/app/Filament/'.Str::studly($panel->getId()).'/Resource');
}
if(!File::exists($modulePath . '/app/Filament/'.Str::studly($panel->getId()).'/Resource/'.$resource)){
File::makeDirectory($modulePath . '/app/Filament/'.Str::studly($panel->getId()).'/Resource/'.$resource);
}
if(!File::exists($modulePath . '/app/Filament/'.Str::studly($panel->getId()).'/Resource/'.$resource.'/Widgets')){
File::makeDirectory($modulePath . '/app/Filament/'.Str::studly($panel->getId()).'/Resource/'.$resource.'/Widgets');
}

$resourceDirectories[] = $modulePath . '/app/Filament/'.Str::studly($panel->getId()).'/Resource/'.$resource.'/Widgets';
$resourceNamespaces[] = $module->appNamespace().'\\Filament\\'.Str::studly($panel->getId()).'\\Resource\\'.$resource.'\\Widgets';
}

$resourceNamespace = (count($resourceNamespaces) > 1) ?
select(
label: 'Which namespace would you like to create this in?',
Expand Down
113 changes: 82 additions & 31 deletions src/FilamentPluginsPlugin.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@

use Filament\Contracts\Plugin;
use Filament\Panel;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Str;
use Illuminate\View\View;
use Nwidart\Modules\Facades\Module;
use TomatoPHP\FilamentPlugins\Pages\Plugins;
Expand All @@ -13,7 +15,9 @@ class FilamentPluginsPlugin implements Plugin
{

private array $modules = [];
private bool $useUI = true;
private bool $autoDiscoverModules = true;
private bool $discoverCurrentPanelOnly = false;

public function getId(): string
{
Expand All @@ -31,43 +35,78 @@ public function register(Panel $panel): void
if($plugin->type === 'plugin' && in_array($plugin->module_name, $this->modules)){
$module = Module::find($plugin->module_name);
if($module->isEnabled()){
$panel->discoverPages(
in: $module->appPath('Filament' . DIRECTORY_SEPARATOR . 'Pages'),
for: $module->appNamespace('\\Filament\\Pages')
);
$panel->discoverResources(
in: $module->appPath('Filament' . DIRECTORY_SEPARATOR . 'Resources'),
for: $module->appNamespace('\\Filament\\Resources')
);
$panel->discoverWidgets(
in: $module->appPath('Filament' . DIRECTORY_SEPARATOR . 'Widgets'),
for: $module->appNamespace('\\Filament\\Widgets')
);

$panel->discoverLivewireComponents(
in: $module->appPath('Livewire'),
for: $module->appNamespace('\\Livewire')
);

if ($useClusters) {
$path = $module->appPath('Filament' . DIRECTORY_SEPARATOR . 'Clusters');
$namespace = $module->appNamespace('\\Filament\\Clusters');
$panel->discoverClusters(
in: $path,
for: $namespace,
$checkIfThereIsDirectoryForThisPanel = File::exists($module->appPath('Filament' . DIRECTORY_SEPARATOR . Str::studly($panel->getId())));
if($checkIfThereIsDirectoryForThisPanel && $this->discoverCurrentPanelOnly){
$panel->discoverPages(
in: $module->appPath('Filament' . DIRECTORY_SEPARATOR . Str::studly($panel->getId()) . DIRECTORY_SEPARATOR . 'Pages'),
for: $module->appNamespace('\\Filament\\'.Str::studly($panel->getId()).'\\Pages')
);
$panel->discoverResources(
in: $module->appPath('Filament' . DIRECTORY_SEPARATOR . Str::studly($panel->getId()) . DIRECTORY_SEPARATOR . 'Resources'),
for: $module->appNamespace('\\Filament\\'.Str::studly($panel->getId()).'\\Resources')
);
$panel->discoverWidgets(
in: $module->appPath('Filament' . DIRECTORY_SEPARATOR . Str::studly($panel->getId()) . DIRECTORY_SEPARATOR . 'Widgets'),
for: $module->appNamespace('\\Filament\\'.Str::studly($panel->getId()).'\\Widgets')
);

$panel->discoverLivewireComponents(
in: $module->appPath('Livewire'),
for: $module->appNamespace('\\Livewire')
);

if ($useClusters) {
$path = $module->appPath('Filament' . DIRECTORY_SEPARATOR . Str::studly($panel->getId()) . DIRECTORY_SEPARATOR . 'Clusters');
$namespace = $module->appNamespace('\\Filament\\'.Str::studly($panel->getId()).'\\Clusters');
$panel->discoverClusters(
in: $path,
for: $namespace,
);
}
}
else {
$panel->discoverPages(
in: $module->appPath('Filament' . DIRECTORY_SEPARATOR . 'Pages'),
for: $module->appNamespace('\\Filament\\Pages')
);
$panel->discoverResources(
in: $module->appPath('Filament' . DIRECTORY_SEPARATOR . 'Resources'),
for: $module->appNamespace('\\Filament\\Resources')
);
$panel->discoverWidgets(
in: $module->appPath('Filament' . DIRECTORY_SEPARATOR . 'Widgets'),
for: $module->appNamespace('\\Filament\\Widgets')
);

$panel->discoverLivewireComponents(
in: $module->appPath('Livewire'),
for: $module->appNamespace('\\Livewire')
);

if ($useClusters) {
$path = $module->appPath('Filament' . DIRECTORY_SEPARATOR . 'Clusters');
$namespace = $module->appNamespace('\\Filament\\Clusters');
$panel->discoverClusters(
in: $path,
for: $namespace,
);
}
}

}
}
}

$panel
->resources([
TableResource::class
])
->pages([
Plugins::class
]);
if($this->useUI){
$panel
->resources([
TableResource::class
])
->pages([
Plugins::class
]);
}

}

public function autoDiscoverModules(bool $autoDiscoverModules = true)
Expand All @@ -91,4 +130,16 @@ public static function make(): static
{
return new static();
}

public function useUI(bool $useUI): static
{
$this->useUI = $useUI;
return $this;
}

public function discoverCurrentPanelOnly(bool $discoverCurrentPanelOnly=true): static
{
$this->discoverCurrentPanelOnly = $discoverCurrentPanelOnly;
return $this;
}
}
5 changes: 0 additions & 5 deletions src/Services/Traits/GenerateInfo.php
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,6 @@ private function generateInfo(): void
$module->description['sp'] = $this->description;
$module->color = $this->color;
$module->icon = $this->icon;
$module->pages = [
"Modules\\".$this->name."\\Pages\\".$this->name."Page"
];
$module->resources = [];
$module->widgets = [];
$module->placeholder = "placeholder.webp";
$module->type = "plugin";
$module->version = "v1.0";
Expand Down

0 comments on commit 25df41d

Please sign in to comment.