leuverink / livewire-property-groups
Livewire Attribute for grouping properties
1.4.1
2024-08-29 00:20 UTC
Requires
- php: ^8.1
- livewire/livewire: ^3
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3
- larastan/larastan: ^2.9
- laravel/pint: ^1
- orchestra/testbench: ^9
- pestphp/pest: ^2.35
- squizlabs/php_codesniffer: ^3
- tightenco/duster: ^3
- tightenco/tlint: ^9
README
This package simplifies property management, validation, and manipulation in Livewire components by allowing you to organize related properties into named groups.
Installation
composer require leuverink/livewire-property-groups
Basic Usage
use Leuverink\PropertyAttribute\Group; use Leuverink\PropertyAttribute\WithGroups; class Form extends Component { use WithGroups; #[Group('a')] public $foo = 1; #[Group('a')] public $bar = 2; #[Group('b')] public $baz = 3; public function submit() { $this->group('a')->validate(); //... } }
Accessing Group Properties
Use the WithGroups
trait within your Component or Form object to get access to the group
method.
// Get all properties in a group $this->group('a'); // ['foo' => 1, 'bar' => 2] // Get property names $this->group('a')->keys(); // ['foo', 'bar'] // Get property values $this->group('a')->values(); // [1, 2] // Iterate over properties $this->group('a')->each(fn() => /* */); // Get all grouped properties, excluding non grouped $this->group(); // Access a group as an array or an object $this->group('a')['foo']; $this->group('a')->foo;
Proxying Livewire Methods
// Reset properties to initial state $this->group('a')->reset(); // Return all properties and reset to initial state $this->group('a')->pull(); // Validate all properties in a group $this->group('a')->validate(); // Works inside a form object $this->userForm->group('a')->validate();
Working with Multiple Groups
// Retrieve properties from multiple groups $this->group(['a', 'b']); // Validate multiple groups $this->group(['a', 'b'])->validate();
Debugging
// dump group properties $this->group('a')->dump(); // dd group properties $this->group('a')->dd(); // dump is chainable $validated = $this->group('a') ->dump() ->validate();
Volt
In class-based components, property groups work like any other Livewire component. When using Volt's functional API you may use property groups like demonstrated below.
use Leuverink\PropertyAttribute\Group; use Leuverink\PropertyAttribute\WithGroups; use function Livewire\Volt\{action, state, uses}; uses([WithGroups::class]); state([ 'foo' => 1, ])->attribute(Group::class, 'a'); state([ 'bar' => 2, 'baz' => 'Lorem', ])->attribute(Group::class, 'b'); $action = action(function() { $groupA = $this->group('a') ->validate() ->values(); $groupB = $this->group('b') ->validate() ->values(); // ... });
Conflicting group
method signature
I realize that group
is a very generic method name that you might well use inside your own components.
You may change the method signature by providing an alias.
use WithGroups { group as fooBar; }
Development
composer lint # run all linters composer fix # run all fixers composer analyze # run static analysis composer baseline # generate static analysis baseline
License
This package is open-source software licensed under the MIT license.