Skip to content

Commit

Permalink
Merge pull request #26 from savannabits/develop
Browse files Browse the repository at this point in the history
Enhancements and Bug Fixes on the Resource Generation functionality:
  • Loading branch information
coolsam726 committed Jul 17, 2023
2 parents 83eec88 + 953e262 commit a3522ea
Show file tree
Hide file tree
Showing 9 changed files with 44 additions and 25 deletions.
1 change: 1 addition & 0 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
],
"require": {
"php": "^8.0",
"doctrine/dbal": "^3.6.4",
"filament/filament": "^2.0",
"illuminate/contracts": "^9.0|^10.0",
"livewire/livewire": "^2.12",
Expand Down
1 change: 0 additions & 1 deletion src/Commands/FilamentModuleCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,6 @@ public function handle(): int
\Log::info($exception->getMessage().' Creating It ...');
Artisan::call('module:make', ['name' => [$this->argument('module')]]);
$this->module = app('modules')->findOrFail($this->getModuleName());
} finally {
}

$context = Str::of($this->argument('context') ?? 'Filament')->studly();
Expand Down
50 changes: 34 additions & 16 deletions src/Commands/FilamentModuleMakeResourceCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
namespace Savannabits\FilamentModules\Commands;

use Filament\Commands\MakeResourceCommand;
use Illuminate\Filesystem\Filesystem;
use Illuminate\Support\Str;
use Nwidart\Modules\Module;
use Nwidart\Modules\Traits\ModuleCommandTrait;
Expand All @@ -25,14 +26,14 @@ public function handle(): int
$path = module_path($module, 'Filament/Resources/');
$namespace = $this->getModuleNamespace().'\\Filament\\Resources';

$model = (string) Str::of($this->argument('name') ?? $this->askRequired('Model (e.g. `BlogPost`)', 'name'))
$model = Str::of($this->argument('name') ?? $this->askRequired('Model (e.g. `BlogPost`)', 'name'))
->studly()
->beforeLast('Resource')
->trim('/')
->trim('\\')
->trim(' ')
->studly()
->replace('/', '\\');
->replace('/', '\\')->toString();

if (blank($model)) {
$model = 'Resource';
Expand All @@ -41,13 +42,12 @@ public function handle(): int
$modelClass = (string) Str::of($model)->afterLast('\\');
$modelNamespace = Str::of($model)->contains('\\') ?
(string) Str::of($model)->beforeLast('\\') :
'';
$this->getModuleNamespace().'\\Entities';
$pluralModelClass = (string) Str::of($modelClass)->pluralStudly();

$resource = "{$model}Resource";
$resource = "{$modelClass}Resource";
$resourceClass = "{$modelClass}Resource";
$resourceNamespace = $modelNamespace;
$namespace .= $resourceNamespace !== '' ? "\\{$resourceNamespace}" : '';
$resourceNamespace = $namespace.($resourceClass !== '' ? "\\{$resourceClass}" : '');
$listResourcePageClass = "List{$pluralModelClass}";
$manageResourcePageClass = "Manage{$pluralModelClass}";
$createResourcePageClass = "Create{$modelClass}";
Expand Down Expand Up @@ -145,19 +145,22 @@ public function handle(): int
$this->copyStubToApp('Resource', $resourcePath, [
'eloquentQuery' => $this->indentString($eloquentQuery, 1),
'formSchema' => $this->indentString($this->option('generate') ? $this->getResourceFormSchema(
'App\\Models'.($modelNamespace !== '' ? "\\{$modelNamespace}" : '').'\\'.$modelClass,
"$modelNamespace\\$model",
) : '//', 4),
'modelNamespace' => $modelNamespace,
'resourceSlug' => Str::slug($pluralModelClass),
'model' => $model === 'Resource' ? 'Resource as ResourceModel' : $model,
'modelClass' => $model === 'Resource' ? 'ResourceModel' : $modelClass,
'namespace' => $namespace,
'pages' => $this->indentString($pages, 3),
'relations' => $this->indentString($relations, 1),
'resource' => "{$namespace}\\{$resourceClass}",
'resourceClass' => $resourceClass,
'resourceNamespace' => $resourceNamespace,
'tableActions' => $this->indentString($tableActions, 4),
'tableBulkActions' => $this->indentString($tableBulkActions, 4),
'tableColumns' => $this->indentString($this->option('generate') ? $this->getResourceTableColumns(
'App\Models'.($modelNamespace !== '' ? "\\{$modelNamespace}" : '').'\\'.$modelClass,
"$modelNamespace\\$model",
) : '//', 4),
'tableFilters' => $this->indentString(
$this->option('soft-deletes') ? 'Tables\Filters\TrashedFilter::make(),' : '//',
Expand All @@ -174,17 +177,19 @@ public function handle(): int
]);
} else {
$this->copyStubToApp('ResourceListPage', $listResourcePagePath, [
'namespace' => "{$namespace}\\{$resourceClass}\\Pages",
'resource' => "{$namespace}\\{$resourceClass}",
'namespace' => "{$resourceNamespace}\\Pages",
'resource' => $resource,
'resourceNamespace' => $resourceNamespace,
'resourceClass' => $resourceClass,
'resourcePageClass' => $listResourcePageClass,
]);

$this->copyStubToApp('ResourcePage', $createResourcePagePath, [
'baseResourcePage' => 'Filament\\Resources\\Pages\\CreateRecord',
'baseResourcePageClass' => 'CreateRecord',
'namespace' => "{$namespace}\\{$resourceClass}\\Pages",
'resource' => "{$namespace}\\{$resourceClass}",
'namespace' => "{$resourceNamespace}\\Pages",
'resource' => $resource,
'resourceNamespace' => $resourceNamespace,
'resourceClass' => $resourceClass,
'resourcePageClass' => $createResourcePageClass,
]);
Expand All @@ -193,8 +198,9 @@ public function handle(): int

if ($this->option('view')) {
$this->copyStubToApp('ResourceViewPage', $viewResourcePagePath, [
'namespace' => "{$namespace}\\{$resourceClass}\\Pages",
'resource' => "{$namespace}\\{$resourceClass}",
'namespace' => "{$resourceNamespace}\\Pages",
'resource' => $resource,
'resourceNamespace' => $resourceNamespace,
'resourceClass' => $resourceClass,
'resourcePageClass' => $viewResourcePageClass,
]);
Expand All @@ -213,12 +219,15 @@ public function handle(): int

$this->copyStubToApp('ResourceEditPage', $editResourcePagePath, [
'actions' => $this->indentString($editPageActions, 3),
'namespace' => "{$namespace}\\{$resourceClass}\\Pages",
'resource' => "{$namespace}\\{$resourceClass}",
'namespace' => "{$resourceNamespace}\\Pages",
'resource' => $resource,
'resourceNamespace' => $resourceNamespace,
'resourceClass' => $resourceClass,
'resourcePageClass' => $editResourcePageClass,
]);
}
$resourceManagersDir = Str::of($resourceNamespace)->replace('\\', '/')->rtrim('/')->append('/RelationManagers');
$this->ensureSubdirectoryExists($resourceManagersDir);

$this->info("Successfully created {$resource}!");

Expand All @@ -229,4 +238,13 @@ public function getModuleNamespace()
{
return $this->laravel['modules']->config('namespace').'\\'.$this->getModuleName();
}

private function ensureSubdirectoryExists(string $path): void
{
$filesystem = app(Filesystem::class);
$filesystem->ensureDirectoryExists(
Str::of($path)->rtrim('/')->toString(),
);

}
}
7 changes: 4 additions & 3 deletions stubs/Resource.stub
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

namespace {{ namespace }};

use {{ resource }}\Pages;
use {{ resource }}\RelationManagers;
use App\Models\{{ model }};
use {{ resourceNamespace }}\Pages;
use {{ resourceNamespace }}\RelationManagers;
use {{ modelNamespace }}\{{ model }};
use Filament\Forms;
use Filament\Resources\Form;
use Filament\Resources\Resource;
Expand All @@ -19,6 +19,7 @@ class {{ resourceClass }} extends Resource
use ContextualResource;

protected static ?string $model = {{ modelClass }}::class;
protected static ?string $slug = '{{ resourceSlug }}';

protected static ?string $navigationIcon = 'heroicon-o-collection';

Expand Down
2 changes: 1 addition & 1 deletion stubs/ResourceEditPage.stub
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace {{ namespace }};

use {{ resource }};
use {{ resourceNamespace }};
use Filament\Pages\Actions;
use Filament\Resources\Pages\EditRecord;

Expand Down
2 changes: 1 addition & 1 deletion stubs/ResourceListPage.stub
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace {{ namespace }};

use {{ resource }};
use {{ resourceNamespace }};
use Filament\Pages\Actions;
use Filament\Resources\Pages\ListRecords;

Expand Down
2 changes: 1 addition & 1 deletion stubs/ResourceManagePage.stub
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace {{ namespace }};

use {{ resource }};
use {{ resourceNamespace }};
use Filament\Pages\Actions;
use Filament\Resources\Pages\ManageRecords;

Expand Down
2 changes: 1 addition & 1 deletion stubs/ResourcePage.stub
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace {{ namespace }};

use {{ resource }};
use {{ resourceNamespace }};
use Filament\Pages\Actions;
use {{ baseResourcePage }};

Expand Down
2 changes: 1 addition & 1 deletion stubs/ResourceViewPage.stub
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace {{ namespace }};

use {{ resource }};
use {{ resourceNamespace }};
use Filament\Pages\Actions;
use Filament\Resources\Pages\ViewRecord;

Expand Down

0 comments on commit a3522ea

Please sign in to comment.