Skip to content

Commit

Permalink
Update configs
Browse files Browse the repository at this point in the history
  • Loading branch information
cklei-carly committed Aug 15, 2024
1 parent f548873 commit 693a2b9
Show file tree
Hide file tree
Showing 7 changed files with 123 additions and 43 deletions.
60 changes: 41 additions & 19 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,29 @@ Filament Field Group is a powerful Laravel package that enhances Filament's form

## Installation

You can install the package via composer:

```bash
composer require solution-forest/filament-field-group
```

1. You can install the package via composer:
```bash
composer require solution-forest/filament-field-group
```
2. Register the plugin in your Panel provider
```php
use SolutionForest\FilamentFieldGroup\FilamentFieldGroupPlugin;
class AdminPanelProvider extends PanelProvider
{
public function panel(Panel $panel): Panel
{
return $panel
->plugin(FilamentFieldGroupPlugin::make());
}
}
```
3. Then execute the following commands:
```bash
php artisan filament-field-group:install
```

## Publish Config, View, Translation and Migration
You can publish and run the migrations with:

```bash
Expand All @@ -41,15 +58,6 @@ This is the contents of the published config file:
```php
return [
'enabled' => false,
'field_types' => [
\SolutionForest\FilamentFieldGroup\FieldTypes\Configs\Text::class,
\SolutionForest\FilamentFieldGroup\FieldTypes\Configs\TextArea::class,
\SolutionForest\FilamentFieldGroup\FieldTypes\Configs\Email::class,
\SolutionForest\FilamentFieldGroup\FieldTypes\Configs\Password::class,
\SolutionForest\FilamentFieldGroup\FieldTypes\Configs\Number::class,
\SolutionForest\FilamentFieldGroup\FieldTypes\Configs\Url::class,
\SolutionForest\FilamentFieldGroup\FieldTypes\Configs\Select::class,
],
'models' => [
'field' => \SolutionForest\FilamentFieldGroup\Models\Field::class,
'field_group' => SolutionForest\FilamentFieldGroup\Models\FieldGroup::class,
Expand Down Expand Up @@ -125,15 +133,29 @@ More components can be added in the future. Feel free to submit a pull request i

## Advanced Usage
### Custom Resources
You can call `overrideResources` on `FilamentFieldGroupPlugin` to replace original resource:
You can call `resources` on `FilamentFieldGroupPlugin` to add/replace original resource:
```php
use SolutionForest\FilamentFieldGroup\FilamentFieldGroupPlugin;
$panel
->plugin(FilamentFieldGroupPlugin::make()
->resources([
// your resource
], override: true)
);
```

### Custom Field Types
You can call `fieldTypeConfigs` on `FilamentFieldGroupPlugin` to add/replace original field type config(s):
```php
use SolutionForest\FilamentFieldGroup\FilamentFieldGroupPlugin;
$panel
->plugin(FilamentFieldGroupPlugin::make()->overrideResources([
// your resource
]));
->plugin(FilamentFieldGroupPlugin::make()
->fieldTypeConfigs([
// your field type config
], override: true)
);
```

## Testing
Expand Down
9 changes: 0 additions & 9 deletions config/filament-field-group.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,6 @@
// config for SolutionForest/FilamentFieldGroup
return [
'enabled' => false,
'field_types' => [
\SolutionForest\FilamentFieldGroup\FieldTypes\Configs\Text::class,
\SolutionForest\FilamentFieldGroup\FieldTypes\Configs\TextArea::class,
\SolutionForest\FilamentFieldGroup\FieldTypes\Configs\Email::class,
\SolutionForest\FilamentFieldGroup\FieldTypes\Configs\Password::class,
\SolutionForest\FilamentFieldGroup\FieldTypes\Configs\Number::class,
\SolutionForest\FilamentFieldGroup\FieldTypes\Configs\Url::class,
\SolutionForest\FilamentFieldGroup\FieldTypes\Configs\Select::class,
],
'models' => [
'field' => \SolutionForest\FilamentFieldGroup\Models\Field::class,
'field_group' => SolutionForest\FilamentFieldGroup\Models\FieldGroup::class,
Expand Down
32 changes: 32 additions & 0 deletions src/Concerns/HasFieldTypes.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<?php

namespace SolutionForest\FilamentFieldGroup\Concerns;

trait HasFieldTypes
{
protected array $fieldTypeConfigs = [
\SolutionForest\FilamentFieldGroup\FieldTypes\Configs\Text::class,
\SolutionForest\FilamentFieldGroup\FieldTypes\Configs\TextArea::class,
\SolutionForest\FilamentFieldGroup\FieldTypes\Configs\Email::class,
\SolutionForest\FilamentFieldGroup\FieldTypes\Configs\Password::class,
\SolutionForest\FilamentFieldGroup\FieldTypes\Configs\Number::class,
\SolutionForest\FilamentFieldGroup\FieldTypes\Configs\Url::class,
\SolutionForest\FilamentFieldGroup\FieldTypes\Configs\Select::class,
];

public function fieldTypeConfigs(array $fieldTypeConfigs, bool $override = true): static
{
if ($override) {
$this->fieldTypeConfigs = $fieldTypeConfigs;
} else {
$this->fieldTypeConfigs = array_merge($this->fieldTypeConfigs, $fieldTypeConfigs);
}

return $this;
}

public function getFieldTypeConfigs(): array
{
return $this->fieldTypeConfigs;
}
}
33 changes: 33 additions & 0 deletions src/Concerns/HasFilamentResources.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<?php

namespace SolutionForest\FilamentFieldGroup\Concerns;

use SolutionForest\FilamentFieldGroup\Filament\Resources\FieldGroupResource;

trait HasFilamentResources
{
protected array $resources = [
FieldGroupResource::class,
];

public function resources(array $resources, bool $override = true): static
{
if ($override) {
$this->resources = $resources;
} else {
$this->resources = array_merge($this->resources, $resources);
}

return $this;
}

public function overrideResources(array $resources): static
{
return $this->resources($resources);
}

public function getFilamentResources(): array
{
return $this->resources;
}
}
2 changes: 1 addition & 1 deletion src/Filament/Resources/FieldGroupResource.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ class FieldGroupResource extends Resource
{
protected static ?string $model = FieldGroup::class;

protected static ?string $navigationIcon = 'heroicon-o-envelope';
protected static ?string $navigationIcon = 'heroicon-o-squares-2x2';

public static function form(Form $form): Form
{
Expand Down
5 changes: 3 additions & 2 deletions src/FilamentFieldGroup.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,14 @@
use SolutionForest\FilamentFieldGroup\FieldTypes\Configs\Attributes\ConfigName;
use SolutionForest\FilamentFieldGroup\FieldTypes\Configs\Attributes\FormComponent;
use SolutionForest\FilamentFieldGroup\FieldTypes\Configs\Contracts\FieldTypeConfig;
use SolutionForest\FilamentFieldGroup\FilamentFieldGroupPlugin;
use SolutionForest\FilamentFieldGroup\Models\FieldGroup;

class FilamentFieldGroup
{
public function getFieldTypeOptions(): array
{
$fieldTypes = config('filament-field-group.field_types');
$fieldTypes = FilamentFieldGroupPlugin::get()->getFieldTypeConfigs();

$result = [];

Expand Down Expand Up @@ -139,7 +140,7 @@ public function findFieldGroup($name): ?Forms\Components\Component
*/
public function getFieldTypeConfig($name, array | string $data = []): ?FieldTypeConfig
{
$fieldTypes = config('filament-field-group.field_types');
$fieldTypes = FilamentFieldGroupPlugin::get()->getFieldTypeConfigs();

foreach ($fieldTypes as $fieldFQCN) {

Expand Down
25 changes: 13 additions & 12 deletions src/FilamentFieldGroupPlugin.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,13 @@

use Filament\Contracts\Plugin;
use Filament\Panel;
use SolutionForest\FilamentFieldGroup\Filament\Resources\FieldGroupResource;
use SolutionForest\FilamentFieldGroup\Concerns\HasFieldTypes;
use SolutionForest\FilamentFieldGroup\Concerns\HasFilamentResources;

class FilamentFieldGroupPlugin implements Plugin
{
protected ?array $overrideResources = null;
use HasFieldTypes;
use HasFilamentResources;

protected bool $enablePlugin = false;

Expand All @@ -20,16 +22,13 @@ public function getId(): string
public function register(Panel $panel): void
{
// Register the FieldGroup resource
if (config('filament-field-group.enabled', false) || $this->enablePlugin) {
$resources = $this->overrideResources ?? [FieldGroupResource::class];
$panel->resources($resources);
if ($this->isEnabled()) {
$panel->resources($this->getFilamentResources());
}
}

public function boot(Panel $panel): void {}

protected function registerCustomFields(): void {}

public static function make(): static
{
return app(static::class);
Expand All @@ -43,17 +42,19 @@ public static function get(): static
return $plugin;
}

public function overrideResources(array $resources): static
public function enablePlugin(bool $enable = true): static
{
$this->overrideResources = $resources;
$this->enablePlugin = $enable;

return $this;
}

public function enablePlugin(bool $enable = true): static
public function isEnabled(): bool
{
$this->enablePlugin = $enable;
if ($this->enablePlugin) {
return true;
}

return $this;
return config('filament-field-group.enabled', false);
}
}

0 comments on commit 693a2b9

Please sign in to comment.